From a70418fc91b353d0658b561aaf3990088cb47a8d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 23 Jan 2013 09:37:16 +0100 Subject: [PATCH] re PR target/49069 (ICE in gen_cstoredi4, at config/arm/arm.md:7554) PR target/49069 * config/arm/arm.md (cbranchdi4, cstoredi4): Use s_register_operand instead of cmpdi_operand for first comparison operand. Don't assert that comparison operands aren't both constants. * gcc.dg/pr49069.c: New test. From-SVN: r195398 --- gcc/ChangeLog | 7 +++++++ gcc/config/arm/arm.md | 12 ++---------- gcc/fortran/ChangeLog | 3 ++- gcc/testsuite/ChangeLog | 8 ++++++-- gcc/testsuite/gcc.dg/pr49069.c | 15 +++++++++++++++ 5 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr49069.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 245302af2cf..df62323ca42 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-01-23 Jakub Jelinek + + PR target/49069 + * config/arm/arm.md (cbranchdi4, cstoredi4): Use s_register_operand + instead of cmpdi_operand for first comparison operand. + Don't assert that comparison operands aren't both constants. + 2013-01-22 Jonathan Wakely * doc/install.texi (Downloading the Source): Update references to diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 22f2218dd0c..1bc21890b7e 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -7030,16 +7030,12 @@ (define_expand "cbranchdi4" [(set (pc) (if_then_else (match_operator 0 "expandable_comparison_operator" - [(match_operand:DI 1 "cmpdi_operand" "") + [(match_operand:DI 1 "s_register_operand" "") (match_operand:DI 2 "cmpdi_operand" "")]) (label_ref (match_operand 3 "" "")) (pc)))] "TARGET_32BIT" "{ - /* We should not have two constants. */ - gcc_assert (GET_MODE (operands[1]) == DImode - || GET_MODE (operands[2]) == DImode); - if (!arm_validize_comparison (&operands[0], &operands[1], &operands[2])) FAIL; emit_jump_insn (gen_cbranch_cc (operands[0], operands[1], operands[2], @@ -7955,14 +7951,10 @@ (define_expand "cstoredi4" [(set (match_operand:SI 0 "s_register_operand" "") (match_operator:SI 1 "expandable_comparison_operator" - [(match_operand:DI 2 "cmpdi_operand" "") + [(match_operand:DI 2 "s_register_operand" "") (match_operand:DI 3 "cmpdi_operand" "")]))] "TARGET_32BIT" "{ - /* We should not have two constants. */ - gcc_assert (GET_MODE (operands[2]) == DImode - || GET_MODE (operands[3]) == DImode); - if (!arm_validize_comparison (&operands[1], &operands[2], &operands[3])) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 126536b31c6..144da72020b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,7 +1,8 @@ 2013-01-21 Thomas Koenig PR fortran/55919 - * gfortran.dg/include_8.f90: New test. + * scanner.c (add_path_to_list): Copy path to temporary and strip + trailing directory separators before calling stat(). 2013-01-17 Richard Biener diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ed2b3e8904..3b212630d8b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-01-23 Jakub Jelinek + + PR target/49069 + * gcc.dg/pr49069.c: New test. + 2013-01-22 Paolo Carlini PR c++/55944 @@ -27,8 +32,7 @@ 2013-01-21 Thomas Koenig PR fortran/55919 - * add_path_to_list: Copy path to temporary and strip - trailing directory separators before calling stat(). + * gfortran.dg/include_8.f90: New test. 2013-01-21 Uros Bizjak diff --git a/gcc/testsuite/gcc.dg/pr49069.c b/gcc/testsuite/gcc.dg/pr49069.c new file mode 100644 index 00000000000..f0fe1f2f080 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr49069.c @@ -0,0 +1,15 @@ +/* PR target/49069 */ +/* { dg-do compile } */ +/* { dg-options "-Os -fno-tree-forwprop -Wno-div-by-zero" } */ + +int a; +const unsigned long long b[1] = { 1ULL }; +extern void bar (int); + +void +foo (void) +{ + for (a = 0; a == 1; a = 2) + ; + bar (b[0] == (a == 0 ? a : a / 0)); +} -- 2.30.2