diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-01-23 09:37:16 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-01-23 09:37:16 +0100 |
commit | a70418fc91b353d0658b561aaf3990088cb47a8d (patch) | |
tree | 6619fc5a54a03f8b79142fb660586e6d1ffbca31 /gcc/config | |
parent | a4bfae44d4a9ddfd5d707231e7c0260f6280b7c3 (diff) | |
download | gcc-a70418fc91b353d0658b561aaf3990088cb47a8d.zip gcc-a70418fc91b353d0658b561aaf3990088cb47a8d.tar.gz gcc-a70418fc91b353d0658b561aaf3990088cb47a8d.tar.bz2 |
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
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/arm/arm.md | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 22f2218..1bc2189 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])) |