diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10238595a66..80cf8c050e6 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 68350b158da..4d11d7e5e36 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 51777a203f1..9a56a5be2ed 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 00000000000..13455f42271 --- /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 00000000000..648a06df5f6 --- /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); +}