diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arc/arc.c | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ca9aa76..346fa54 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-10-24 Joern Rennecke <joern.rennecke@embecosm.com> + + * gcc/config/arc/arc.c (arc_ccfsm_post_advance): Also handle + TYPE_UNCOND_BRANCH. + 2013-08-24 Tobias Burnus <burnus@net-b.de> PR other/33426 diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index 83f92eb..7c39d53 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -3711,12 +3711,16 @@ arc_ccfsm_record_condition (rtx cond, bool reverse, rtx jump, static void arc_ccfsm_post_advance (rtx insn, struct arc_ccfsm *state) { + enum attr_type type; + if (LABEL_P (insn)) arc_ccfsm_at_label ("L", CODE_LABEL_NUMBER (insn), state); else if (JUMP_P (insn) && GET_CODE (PATTERN (insn)) != ADDR_VEC && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC - && get_attr_type (insn) == TYPE_BRANCH) + && ((type = get_attr_type (insn)) == TYPE_BRANCH + || (type == TYPE_UNCOND_BRANCH + && ARC_CCFSM_BRANCH_DELETED_P (state)))) { if (ARC_CCFSM_BRANCH_DELETED_P (state)) ARC_CCFSM_RECORD_BRANCH_DELETED (state); @@ -8120,6 +8124,7 @@ arc_ifcvt (void) basic_block succ_bb = BLOCK_FOR_INSN (NEXT_INSN (NEXT_INSN (PREV_INSN (insn)))); arc_ccfsm_post_advance (insn, statep); + gcc_assert (!IN_RANGE (statep->state, 1, 2)); rtx seq = NEXT_INSN (PREV_INSN (insn)); if (seq != insn) { |