@@ -1589,6 +1589,9 @@ static const struct attribute_spec rs6000_attribute_table[] =
#undef TARGET_SET_UP_BY_PROLOGUE
#define TARGET_SET_UP_BY_PROLOGUE rs6000_set_up_by_prologue
+#undef TARGET_SELECT_EARLY_REMAT_MODES
+#define TARGET_SELECT_EARLY_REMAT_MODES rs6000_select_early_remat_modes
+
#undef TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
#define TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS rs6000_get_separate_components
#undef TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB
@@ -26031,6 +26034,20 @@ rs6000_global_entry_point_needed_p (void)
return cfun->machine->r2_setup_needed;
}
+/* Implement TARGET_SELECT_EARLY_REMAT_MODES. */
+
+static void
+rs6000_select_early_remat_modes (sbitmap modes)
+{
+ /* We want to rematerialize all condition codes. */
+ for (int i = 0; i < NUM_MACHINE_MODES; ++i)
+ {
+ machine_mode mode = (machine_mode) i;
+ if (GET_MODE_CLASS (mode) == MODE_CC)
+ bitmap_set_bit (modes, i);
+ }
+}
+
/* Implement TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS. */
static sbitmap
rs6000_get_separate_components (void)
@@ -2588,7 +2588,7 @@ public:
/* opt_pass methods: */
virtual bool gate (function *)
{
- return optimize > 1 && NUM_POLY_INT_COEFFS > 1;
+ return optimize > 1;
}
virtual unsigned int execute (function *f)