diff options
author | Richard Henderson <rth@redhat.com> | 2001-08-18 19:51:35 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-08-18 19:51:35 -0700 |
commit | b395ddbee5de0f2028dae0ed6239e0e4a103c7d4 (patch) | |
tree | 8fba3f5a42eb2aff1a57c41ed32ec6ae196c2ed8 /gcc | |
parent | f83594c41cf89df9817cc9cf61f7dcd57f90340c (diff) | |
download | gcc-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/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.c | 47 |
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]; |