aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2009-11-22 10:30:50 +0100
committerUros Bizjak <uros@gcc.gnu.org>2009-11-22 10:30:50 +0100
commit7e82354a007d345a99baf022bf1766bd6612f1f4 (patch)
treef9955b94d3ae475296b173b72bc77d117c663259 /gcc
parented2eaa9f6e74a146aa686c4fabb7de227abf99b5 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/alpha/alpha.md12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/alpha/pr42113.c12
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;
+}