From d40a89e7776b2bdfb912f25dfa1cf93df23aa284 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 3 May 2012 12:16:01 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 4 ++++ gcc/config/arm/arm.c | 3 +++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.c-torture/compile/pr53187.c | 11 +++++++++++ gcc/testsuite/gcc.target/arm/pr53187.c | 13 +++++++++++++ 5 files changed, 37 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr53187.c create mode 100644 gcc/testsuite/gcc.target/arm/pr53187.c 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 + 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 + + PR target/53187 + * gcc.target/arm/pr53187.c: New test. + * gcc.c-torture/compile/pr53187.c: New test. + 2012-05-03 Richard Guenther * 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); +} -- 2.7.4