From: Kyrylo Tkachov Date: Wed, 3 Apr 2013 15:37:31 +0000 (+0000) Subject: re PR target/56809 (Revision 197266 causes trunk ICE for arm-none-eabi targets) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4a32ef809ace73d7fb581e97e154b325f36ab0b9;p=gcc.git re PR target/56809 (Revision 197266 causes trunk ICE for arm-none-eabi targets) gcc/ 2013-04-03 Kyrylo Tkachov PR target/56809 * config/arm/arm.c (is_jump_table): Use next_active_insn instead of next_real_insn. (thumb1_output_casesi): Likewise. (thumb2_output_casesi): Likewise. gcc/testsuite 2013-04-03 Kyrylo Tkachov PR target/56809 * gcc.dg/pr56809.c: New testcase. From-SVN: r197425 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f6b00ca6700..9ce142c7707 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-04-03 Kyrylo Tkachov + + PR target/56809 + * config/arm/arm.c (is_jump_table): Use next_active_insn instead of + next_real_insn. + (thumb1_output_casesi): Likewise. + (thumb2_output_casesi): Likewise. + 2013-04-03 Richard Biener PR tree-optimization/56817 diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index fe6902f2225..f5676e0965a 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -12821,8 +12821,8 @@ is_jump_table (rtx insn) rtx table; if (jump_to_label_p (insn) - && ((table = next_real_insn (JUMP_LABEL (insn))) - == next_real_insn (insn)) + && ((table = next_active_insn (JUMP_LABEL (insn))) + == next_active_insn (insn)) && table != NULL && JUMP_TABLE_DATA_P (table)) return table; @@ -25802,7 +25802,7 @@ arm_output_iwmmxt_tinsr (rtx *operands) const char * thumb1_output_casesi (rtx *operands) { - rtx diff_vec = PATTERN (next_real_insn (operands[0])); + rtx diff_vec = PATTERN (next_active_insn (operands[0])); gcc_assert (GET_CODE (diff_vec) == ADDR_DIFF_VEC); @@ -25825,7 +25825,7 @@ thumb1_output_casesi (rtx *operands) const char * thumb2_output_casesi (rtx *operands) { - rtx diff_vec = PATTERN (next_real_insn (operands[2])); + rtx diff_vec = PATTERN (next_active_insn (operands[2])); gcc_assert (GET_CODE (diff_vec) == ADDR_DIFF_VEC); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e16812c071..5e64fa68db9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-04-03 Kyrylo Tkachov + + PR target/56809 + * gcc.dg/pr56809.c: New testcase. + 2013-04-03 Jakub Jelinek PR debug/56819 diff --git a/gcc/testsuite/gcc.dg/pr56809.c b/gcc/testsuite/gcc.dg/pr56809.c new file mode 100644 index 00000000000..3f1f3115c3f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr56809.c @@ -0,0 +1,32 @@ +/* PR target/56809 */ +/* { dg-do compile } */ +/* { dg-options "-Os" } */ + +int +foo (int mode, int i) +{ + int x; + + switch (mode) + { + case 0: + x = i + 1; + break; + case 1: + x = i / 2; + break; + case 2: + x = i * 3; + break; + case 3: + x = i + 3; + break; + case 4: + x = i + 5; + break; + default: + x = i - 1; + } + + return x; +}