diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2009-11-22 10:30:50 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2009-11-22 10:30:50 +0100 |
commit | 7e82354a007d345a99baf022bf1766bd6612f1f4 (patch) | |
tree | f9955b94d3ae475296b173b72bc77d117c663259 | |
parent | ed2eaa9f6e74a146aa686c4fabb7de227abf99b5 (diff) | |
download | gcc-7e82354a007d345a99baf022bf1766bd6612f1f4.zip gcc-7e82354a007d345a99baf022bf1766bd6612f1f4.tar.gz gcc-7e82354a007d345a99baf022bf1766bd6612f1f4.tar.bz2 |
re PR target/42113 (Internal Compiler error with -O3, breaking commit known)
PR target/42113
* config/alpha/alpha.md (*cmp_sadd_si): Change mode
of scratch register to SImode.
(*cmp_sadd_sidi): Ditto.
(*cmp_ssub_si): Ditto.
(*cmp_ssub_sidi): Ditto.
testsuite/ChangeLog:
PR target/42113
* gcc.target/alpha/pr42113.c: New test.
From-SVN: r154423
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.md | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/alpha/pr42113.c | 12 |
4 files changed, 32 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 31dcdb6..57feb9a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2009-11-22 Uros Bizjak <ubizjak@gmail.com> + + PR target/42113 + * config/alpha/alpha.md (*cmp_sadd_si): Change mode + of scratch register to SImode. + (*cmp_sadd_sidi): Ditto. + (*cmp_ssub_si): Ditto. + (*cmp_ssub_sidi): Ditto. + 2009-11-21 Ian Lance Taylor <iant@google.com> * Makefile.in (HOST_LIBS): Move higher in file. diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index 2327879..86bfd74 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -4197,7 +4197,7 @@ (match_dup 4)))] { if (can_create_pseudo_p ()) - operands[5] = gen_reg_rtx (DImode); + operands[5] = gen_reg_rtx (SImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; }) @@ -4223,9 +4223,9 @@ (match_dup 4))))] { if (can_create_pseudo_p ()) - operands[5] = gen_reg_rtx (DImode); + operands[5] = gen_reg_rtx (SImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) - operands[5] = operands[0]; + operands[5] = gen_rtx_REG (SImode, REGNO (operands[0])); }) (define_insn_and_split "*cmp_ssub_di" @@ -4273,7 +4273,7 @@ (match_dup 4)))] { if (can_create_pseudo_p ()) - operands[5] = gen_reg_rtx (DImode); + operands[5] = gen_reg_rtx (SImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; }) @@ -4299,9 +4299,9 @@ (match_dup 4))))] { if (can_create_pseudo_p ()) - operands[5] = gen_reg_rtx (DImode); + operands[5] = gen_reg_rtx (SImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) - operands[5] = operands[0]; + operands[5] = gen_rtx_REG (SImode, REGNO (operands[0])); }) ;; Here are the CALL and unconditional branch insns. Calls on NT and OSF diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 68e7afa..9aafea5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-11-22 Uros Bizjak <ubizjak@gmail.com> + + PR target/42113 + * gcc.target/alpha/pr42113.c: New test. + 2009-11-21 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/41807 diff --git a/gcc/testsuite/gcc.target/alpha/pr42113.c b/gcc/testsuite/gcc.target/alpha/pr42113.c new file mode 100644 index 0000000..228c14a --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/pr42113.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int foo (int a, int b) +{ + int bar = a * sizeof (int); + + if (b) + bar += sizeof (int); + + return bar; +} |