The ENABLE_CHECKING tests I added at the end of rs6000_stack_info
are now asserting on gcc.c-torture/execute/20041011-1.c and other
testcases.  The cause is the late running DSE pass removing a set of
LR, which means lr_save_p changes.  Why that happens ultimately goes
back to a register allocation decision to use LR after running out of
gprs, which isn't that bright in this case since there is just one set
and one use of LR and you need a gpr free to move values to and from
LR.  Anyway, the fact remains that the stack info can change
legitimately and harmlessly after we've emitted the function prologue
and epilogue.  So this patch simply removes the ENABLE_CHECKING code.
Bootstrapped and regtested powerpc64-linux.  OK for mainline?

        * config/rs6000/rs6000.c (rs6000_stack_info): Don't compare against
        previous stack info.

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 171817)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -18774,9 +18776,6 @@ rs6000_savres_strategy (rs6000_stack_t *
 static rs6000_stack_t *
 rs6000_stack_info (void)
 {
-#ifdef ENABLE_CHECKING
-  static rs6000_stack_t info_save;
-#endif
   rs6000_stack_t *info_ptr = &stack_info;
   int reg_size = TARGET_32BIT ? 4 : 8;
   int ehrd_size;
@@ -18785,14 +18784,10 @@ rs6000_stack_info (void)
   HOST_WIDE_INT non_fixed_size;
   bool using_static_chain_p;
 
-#ifdef ENABLE_CHECKING
-  memcpy (&info_save, &stack_info, sizeof stack_info);
-#else
   if (reload_completed && info_ptr->reload_completed)
     return info_ptr;
-#endif
 
-  memset (&stack_info, 0, sizeof (stack_info));
+  memset (info_ptr, 0, sizeof (*info_ptr));
   info_ptr->reload_completed = reload_completed;
 
   if (TARGET_SPE)
@@ -19096,10 +19091,6 @@ rs6000_stack_info (void)
   if (! info_ptr->cr_save_p)
     info_ptr->cr_save_offset = 0;
 
-#ifdef ENABLE_CHECKING
-  gcc_assert (!(reload_completed && info_save.reload_completed)
-             || memcmp (&info_save, &stack_info, sizeof stack_info) == 0);
-#endif
   return info_ptr;
 }
 

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to