aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-08-18 19:51:35 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-08-18 19:51:35 -0700
commitb395ddbee5de0f2028dae0ed6239e0e4a103c7d4 (patch)
tree8fba3f5a42eb2aff1a57c41ed32ec6ae196c2ed8 /gcc
parentf83594c41cf89df9817cc9cf61f7dcd57f90340c (diff)
downloadgcc-b395ddbee5de0f2028dae0ed6239e0e4a103c7d4.zip
gcc-b395ddbee5de0f2028dae0ed6239e0e4a103c7d4.tar.gz
gcc-b395ddbee5de0f2028dae0ed6239e0e4a103c7d4.tar.bz2
ia64.c (ia64_sched_reorder2): Also skip past pred_rel_mutex when searching for insn_group_barrier.
* config/ia64/ia64.c (ia64_sched_reorder2): Also skip past pred_rel_mutex when searching for insn_group_barrier. From-SVN: r45019
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/config/ia64/ia64.c47
2 files changed, 33 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c77f0f3..8333b68 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
2001-08-18 Richard Henderson <rth@redhat.com>
+ * config/ia64/ia64.c (ia64_sched_reorder2): Also skip past
+ pred_rel_mutex when searching for insn_group_barrier.
+
* config/ia64/ia64.c (ia64_internal_sched_reorder): Emit stop
bit before asm as needed.
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index a8070de..aee3ee2 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -6211,30 +6211,43 @@ ia64_sched_reorder2 (dump, sched_verbose, ready, pn_ready, clock_var)
&& (sched_data.types[2] == TYPE_I || sched_data.types[2] == TYPE_A)
&& (sched_data.types[3] != TYPE_M && sched_data.types[3] != TYPE_A))
|| (sched_data.cur == 3
- && (sched_data.types[1] == TYPE_M || sched_data.types[1] == TYPE_A)
- && (sched_data.types[2] != TYPE_M && sched_data.types[2] != TYPE_I
+ && (sched_data.types[1] == TYPE_M
+ || sched_data.types[1] == TYPE_A)
+ && (sched_data.types[2] != TYPE_M
+ && sched_data.types[2] != TYPE_I
&& sched_data.types[2] != TYPE_A))))
{
int i, best;
- rtx stop = PREV_INSN (sched_data.insns[1]);
- rtx pat;
+ rtx stop = sched_data.insns[1];
- sched_data.stopbit[0] = 0;
- sched_data.stopbit[2] = 1;
- if (GET_CODE (stop) != INSN)
- abort ();
+ /* Search backward for the stop bit that must be there. */
+ while (1)
+ {
+ int insn_code;
+
+ stop = PREV_INSN (stop);
+ if (GET_CODE (stop) != INSN)
+ abort ();
+ insn_code = recog_memoized (stop);
- pat = PATTERN (stop);
- /* Ignore cycle displays. */
- if (GET_CODE (pat) == UNSPEC && XINT (pat, 1) == 23)
- stop = PREV_INSN (stop);
- pat = PATTERN (stop);
- if (GET_CODE (pat) != UNSPEC_VOLATILE
- || XINT (pat, 1) != 2
- || INTVAL (XVECEXP (pat, 0, 0)) != 1)
+ /* Ignore cycle displays and .pred.rel.mutex. */
+ if (insn_code == CODE_FOR_cycle_display
+ || insn_code == CODE_FOR_pred_rel_mutex)
+ continue;
+
+ if (insn_code == CODE_FOR_insn_group_barrier)
+ break;
+ abort ();
+ }
+
+ /* Adjust the stop bit's slot selector. */
+ if (INTVAL (XVECEXP (PATTERN (stop), 0, 0)) != 1)
abort ();
- XVECEXP (pat, 0, 0) = GEN_INT (3);
+ XVECEXP (PATTERN (stop), 0, 0) = GEN_INT (3);
+
+ sched_data.stopbit[0] = 0;
+ sched_data.stopbit[2] = 1;
sched_data.types[5] = sched_data.types[3];
sched_data.types[4] = sched_data.types[2];