https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108552

--- Comment #35 from Vladimir Makarov <vmakarov at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #34)
> Seems right now DECL_NONALIASED is only used on these coverage vars and on
> Fortran caf tokens, so perhaps a quick workaround would be on the LRA side
> never reread stuff from MEMs with VAR_P && DECL_NONALIASED MEM_EXPRs.  CCing
> Vlad on that.

The following patch can do this:

diff --git a/gcc/lra-constraints.cc b/gcc/lra-constraints.cc                    
index 7bffbc07ee2..d80a6a9f41d 100644                                           
--- a/gcc/lra-constraints.cc                                                    
+++ b/gcc/lra-constraints.cc                                                    
@@ -515,6 +515,7 @@ get_equiv (rtx x)                                           
 {                                                                              
   int regno;                                                                   
   rtx res;                                                                     
+  tree expr;                                                                   

   if (! REG_P (x) || (regno = REGNO (x)) < FIRST_PSEUDO_REGISTER               
       || ! ira_reg_equiv[regno].defined_p                                      
@@ -525,6 +526,10 @@ get_equiv (rtx x)                                          
     {                                                                          
       if (targetm.cannot_substitute_mem_equiv_p (res))                         
        return x;                                                               
+      if ((expr = MEM_EXPR (res)) != NULL                                      
+         && (expr = get_base_address (expr)) != NULL                           
+         && VAR_P (expr) && DECL_NONALIASED (expr))                            
+       return x;                                                               
       return res;                                                              
     }                                                                          
   if ((res = ira_reg_equiv[regno].constant) != NULL_RTX)

Reply via email to