summaryrefslogtreecommitdiff
path: root/gcc/config/spu
diff options
context:
space:
mode:
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-03 01:41:54 +0000
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-03 01:41:54 +0000
commit8a42230a6a8e0f04d7c58021f41aeb43e7c5c7b6 (patch)
tree130af17e97b82f01416842e2e1eb7a7c299619c4 /gcc/config/spu
parent7e5e6ad23e6bac4f0912a7f62093e7d63d8c7c94 (diff)
downloadgcc-8a42230a6a8e0f04d7c58021f41aeb43e7c5c7b6.tar.gz
PR debug/47590
* target.def (delay_sched2, delay_vartrack): New. * doc/tm.texi.in: Update. * doc/tm.texi: Rebuild. * sched-rgn.c (gate_handle_sched2): Fail if delay_sched2. * var-tracking.c (gate_handle_var_tracking): Likewise. * config/bfin/bfin.c (bfin_flag_schedule_insns2): Drop. (bfin_flag_var_tracking): Drop. (output_file_start): Don't save and override flag_var_tracking. (bfin_option_override): Ditto flag_schedule_insns_after_reload. (bfin_reorg): Test original variables. (TARGET_DELAY_SCHED2, TARGET_DELAY_VARTRACK): Define. * config/ia64/ia64.c (ia64_flag_schedule_insns2): Drop. (ia64_flag_var_tracking): Drop. (TARGET_DELAY_SCHED2, TARGET_DELAY_VARTRACK): Define. (ia64_file_start): Don't save and override flag_var_tracking. (ia64_override_options_after_change): Ditto flag_schedule_insns_after_reload. (ia64_reorg): Test original variables. * config/picochip/picochip.c (picochip_flag_schedule_insns2): Drop. (picochip_flag_var_tracking): Drop. (TARGET_DELAY_SCHED2, TARGET_DELAY_VARTRACK): Define. (picochip_option_override): Don't save and override flag_schedule_insns_after_reload. (picochip_asm_file_start): Ditto flag_var_tracking. (picochip_reorg): Test original variables. * config/spu/spu.c (spu_flag_var_tracking): Drop. (TARGET_DELAY_VARTRACK): Define. (spu_var_tracking): New. (spu_machine_dependent_reorg): Call it. (asm_file_start): Don't save and override flag_var_tracking. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174595 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/spu')
-rw-r--r--gcc/config/spu/spu.c45
1 files changed, 20 insertions, 25 deletions
diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c
index 51a771563c6..9e62f16414c 100644
--- a/gcc/config/spu/spu.c
+++ b/gcc/config/spu/spu.c
@@ -248,10 +248,6 @@ int spu_tune;
inserted in pairs, so we round down. */
int spu_hint_dist = (8*4) - (2*4);
-/* Determines whether we run variable tracking in machine dependent
- reorganization. */
-static int spu_flag_var_tracking;
-
enum spu_immediate {
SPU_NONE,
SPU_IL,
@@ -509,6 +505,11 @@ static const struct attribute_spec spu_attribute_table[] =
#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
#define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_const_tree_hwi_hwi_const_tree_true
+/* Variable tracking should be run after all optimizations which
+ change order of insns. It also needs a valid CFG. */
+#undef TARGET_DELAY_VARTRACK
+#define TARGET_DELAY_VARTRACK true
+
struct gcc_target targetm = TARGET_INITIALIZER;
static void
@@ -2696,6 +2697,19 @@ insert_hbrp (void)
static int in_spu_reorg;
+static void
+spu_var_tracking (void)
+{
+ if (flag_var_tracking)
+ {
+ df_analyze ();
+ timevar_push (TV_VAR_TRACKING);
+ variable_tracking_main ();
+ timevar_pop (TV_VAR_TRACKING);
+ df_finish_pass (false);
+ }
+}
+
/* Insert branch hints. There are no branch optimizations after this
pass, so it's safe to set our branch hints now. */
static void
@@ -2715,6 +2729,7 @@ spu_machine_dependent_reorg (void)
function might have hinted a call or return. */
insert_hbrp ();
pad_bb ();
+ spu_var_tracking ();
return;
}
@@ -2921,14 +2936,7 @@ spu_machine_dependent_reorg (void)
XVECEXP (unspec, 0, 0) = plus_constant (label_ref, offset);
}
- if (spu_flag_var_tracking)
- {
- df_analyze ();
- timevar_push (TV_VAR_TRACKING);
- variable_tracking_main ();
- timevar_pop (TV_VAR_TRACKING);
- df_finish_pass (false);
- }
+ spu_var_tracking ();
free_bb_for_insn ();
@@ -7057,19 +7065,6 @@ spu_libgcc_shift_count_mode (void)
static void
asm_file_start (void)
{
- /* Variable tracking should be run after all optimizations which
- change order of insns. It also needs a valid CFG. Therefore,
- *if* we make nontrivial changes in machine-dependent reorg,
- run variable tracking after those. However, if we do not run
- our machine-dependent reorg pass, we must still run the normal
- variable tracking pass (or else we will ICE in final since
- debug insns have not been removed). */
- if (TARGET_BRANCH_HINTS && optimize)
- {
- spu_flag_var_tracking = flag_var_tracking;
- flag_var_tracking = 0;
- }
-
default_file_start ();
}