aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-05-03 12:16:01 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2012-05-03 12:16:01 +0200
commitd40a89e7776b2bdfb912f25dfa1cf93df23aa284 (patch)
tree2a75287eede10ad1ed073af99a32942d4efd0f79
parentd5becc1117cec39943cc3cbd6d31a9c37f916408 (diff)
downloadgcc-d40a89e7776b2bdfb912f25dfa1cf93df23aa284.zip
gcc-d40a89e7776b2bdfb912f25dfa1cf93df23aa284.tar.gz
gcc-d40a89e7776b2bdfb912f25dfa1cf93df23aa284.tar.bz2
re PR target/53187 (ICE in arm_select_dominance_cc_mode)
PR target/53187 * config/arm/arm.c (arm_select_cc_mode): If x has MODE_CC class mode, return that mode. * gcc.target/arm/pr53187.c: New test. * gcc.c-torture/compile/pr53187.c: New test. From-SVN: r187085
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/arm/arm.c3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr53187.c11
-rw-r--r--gcc/testsuite/gcc.target/arm/pr53187.c13
5 files changed, 37 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1023859..80cf8c0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2012-05-03 Jakub Jelinek <jakub@redhat.com>
+ PR target/53187
+ * config/arm/arm.c (arm_select_cc_mode): If x has MODE_CC class
+ mode, return that mode.
+
PR target/53194
* config/i386/i386-c.c (ix86_target_macros_internal): Don't
define __ATOMIC_HLE_* macros here.
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 68350b1..4d11d7e 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -11964,6 +11964,9 @@ arm_select_cc_mode (enum rtx_code op, rtx x, rtx y)
}
}
+ if (GET_MODE_CLASS (GET_MODE (x)) == MODE_CC)
+ return GET_MODE (x);
+
return CCmode;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 51777a2..9a56a5b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2012-05-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/53187
+ * gcc.target/arm/pr53187.c: New test.
+ * gcc.c-torture/compile/pr53187.c: New test.
+
2012-05-03 Richard Guenther <rguenther@suse.de>
* gfortran.dg/pr52621.f90: Add -w to avoid diagnostic about
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53187.c b/gcc/testsuite/gcc.c-torture/compile/pr53187.c
new file mode 100644
index 0000000..13455f4
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr53187.c
@@ -0,0 +1,11 @@
+/* PR target/53187 */
+
+void bar (int);
+
+void
+foo (int x, double y, double z)
+{
+ _Bool t = z >= y;
+ if (!t || x)
+ bar (t ? 1 : 16);
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr53187.c b/gcc/testsuite/gcc.target/arm/pr53187.c
new file mode 100644
index 0000000..648a06d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr53187.c
@@ -0,0 +1,13 @@
+/* PR target/53187 */
+/* { dg-do compile } */
+/* { dg-options "-march=armv7-a -mfloat-abi=hard -O2" } */
+
+void bar (int);
+
+void
+foo (int x, double y, double z)
+{
+ _Bool t = z >= y;
+ if (!t || x)
+ bar (t ? 1 : 16);
+}