diff options
author | Eric Botcazou <ebotcazou@libertysurf.fr> | 2003-03-24 12:29:11 +0100 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2003-03-24 11:29:11 +0000 |
commit | 02484af985da5f2f56cf2f8aecb69f7d50848807 (patch) | |
tree | 420839c3baf4ce62bb9390453b158cc7001f3df3 /gcc | |
parent | 941bc65971482ba8194d7ab1b3eb2514b481cc70 (diff) | |
download | gcc-02484af985da5f2f56cf2f8aecb69f7d50848807.zip gcc-02484af985da5f2f56cf2f8aecb69f7d50848807.tar.gz gcc-02484af985da5f2f56cf2f8aecb69f7d50848807.tar.bz2 |
re PR target/10072 ([Sparc] internal compiler error: in trunc_int_for_mode, at explow.c:54)
PR target/10072
* combine.c (simplify_if_then_else): Check that the mode
has MODE_INT class before applying the (OP Z (mult COND C2))
transformation.
From-SVN: r64785
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/combine.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ultrasp5.c | 12 |
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a470d16..9bc5b91 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2003-03-23 Eric Botcazou <ebotcazou@libertysurf.fr> + PR target/10072 + * combine.c (simplify_if_then_else): Check that the mode + has MODE_INT class before applying the (OP Z (mult COND C2)) + transformation. + +2003-03-23 Eric Botcazou <ebotcazou@libertysurf.fr> + PR optimization/9414 * config/sparc/sparc.md (widening peepholes): Use widen_memory_access instead of change_address. @@ -9040,3 +9047,4 @@ * doc/tm.texi (REGISTER_TARGET_PRAGMAS): Update See ChangeLog.8 for earlier changes. + diff --git a/gcc/combine.c b/gcc/combine.c index cd7261b..dd01706 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -4969,7 +4969,9 @@ simplify_if_then_else (x) neither 1 or -1, but it isn't worth checking for. */ if ((STORE_FLAG_VALUE == 1 || STORE_FLAG_VALUE == -1) - && comparison_p && mode != VOIDmode && ! side_effects_p (x)) + && comparison_p + && GET_MODE_CLASS (mode) == MODE_INT + && ! side_effects_p (x)) { rtx t = make_compound_operation (true_rtx, SET); rtx f = make_compound_operation (false_rtx, SET); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b796581..d5fbd91 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-03-23 Eric Botcazou <ebotcazou@libertysurf.fr> + + * gcc.dg/ultrasp5.c: New test. + 2003-03-23 Arpad Beszedes <beszedes@cc.u-szeged.hu> PR middle-end/9967 diff --git a/gcc/testsuite/gcc.dg/ultrasp5.c b/gcc/testsuite/gcc.dg/ultrasp5.c new file mode 100644 index 0000000..c366007 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ultrasp5.c @@ -0,0 +1,12 @@ +/* PR target/10072 */ +/* Originator: Peter van Hoof <p.van-hoof@qub.ac.uk> +/* { dg-do compile } */ +/* { dg-options "-O1 -mcpu=ultrasparc -ffast-math" { target sparc-*-* } } */ + +void p(int v) +{ + int i=v,j; + float a,b,c,x[i]; + + x[i] = (a/(((b)>(c)) ? (b) : (c)) - (((i) == (j)) ? 1.f : 0.f)); +} |