rs6000: Fix for separate shrink-wrapping for fp (PR80860, PR80843)
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 24 May 2017 14:33:11 +0000 (16:33 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 24 May 2017 14:33:11 +0000 (16:33 +0200)
After my r248256, rs6000_components_for_bb allocates an sbitmap of size
only 32 while it can use up to 64.  This patch fixes it.  It moves the
n_components variable into the machine_function struct so that other
hooks can use it.

PR bootstrap/80860
PR bootstrap/80843
* config/rs6000/rs6000.c (struct machine_function): Add new field
n_components.
(rs6000_get_separate_components): Init that field, use it.
(rs6000_components_for_bb): Use the field.

From-SVN: r248421

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index c641aa0b3a0ad3aef145f281a88b1edd50efbb2e..ef4dbb78b16d8922cad609f7c6ba3311d5e2d445 100644 (file)
@@ -1,3 +1,12 @@
+2017-05-24  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR bootstrap/80860
+       PR bootstrap/80843
+       * config/rs6000/rs6000.c (struct machine_function): Add new field
+       n_components.
+       (rs6000_get_separate_components): Init that field, use it.
+       (rs6000_components_for_bb): Use the field.
+
 2017-05-24  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        * config/arm/arm.c (arm_expand_prologue): Fix typo in comment.
index d4906cc894e06dbad1348e87224bf7e61fa6e4cd..b0d1dd95e5dda958baa19f290d45d3874fb6df09 100644 (file)
@@ -156,6 +156,8 @@ typedef struct GTY(()) machine_function
   bool split_stack_argp_used;
   /* Flag if r2 setup is needed with ELFv2 ABI.  */
   bool r2_setup_needed;
+  /* The number of components we use for separate shrink-wrapping.  */
+  int n_components;
   /* The components already handled by separate shrink-wrapping, which should
      not be considered by the prologue and epilogue.  */
   bool gpr_is_wrapped_separately[32];
@@ -29229,9 +29231,9 @@ rs6000_get_separate_components (void)
      Components 13..31 are the save/restore of GPR13..GPR31.
      Components 46..63 are the save/restore of FPR14..FPR31.  */
 
-  int n_components = 64;
+  cfun->machine->n_components = 64;
 
-  sbitmap components = sbitmap_alloc (n_components);
+  sbitmap components = sbitmap_alloc (cfun->machine->n_components);
   bitmap_clear (components);
 
   int reg_size = TARGET_32BIT ? 4 : 8;
@@ -29313,7 +29315,7 @@ rs6000_components_for_bb (basic_block bb)
   bitmap gen = &DF_LIVE_BB_INFO (bb)->gen;
   bitmap kill = &DF_LIVE_BB_INFO (bb)->kill;
 
-  sbitmap components = sbitmap_alloc (32);
+  sbitmap components = sbitmap_alloc (cfun->machine->n_components);
   bitmap_clear (components);
 
   /* A register is used in a bb if it is in the IN, GEN, or KILL sets.  */