From: rth Date: Sun, 19 Aug 2001 02:51:35 +0000 (+0000) Subject: * config/ia64/ia64.c (ia64_sched_reorder2): Also skip past X-Git-Tag: upstream/4.9.2~92538 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5eb8a656385840a42cd8bcbb2ec2e2a75b55f78d;p=platform%2Fupstream%2Flinaro-gcc.git * config/ia64/ia64.c (ia64_sched_reorder2): Also skip past pred_rel_mutex when searching for insn_group_barrier. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45019 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 + * 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];