diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2008-04-28 19:49:51 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2008-04-28 19:49:51 +0200 |
commit | 0d5fd2b8e3a038293d2c6303876ee6e821e16aca (patch) | |
tree | edaf2043436b84d496ffab9be7d87f5412c9ffdc | |
parent | 177bf4913f8e539e21d97d33a9a9b714a5d18f4a (diff) | |
download | gcc-0d5fd2b8e3a038293d2c6303876ee6e821e16aca.zip gcc-0d5fd2b8e3a038293d2c6303876ee6e821e16aca.tar.gz gcc-0d5fd2b8e3a038293d2c6303876ee6e821e16aca.tar.bz2 |
re PR target/36073 (ICE with -ffast-math and -mfpmath=sse,387)
PR target/36073
* config/i386/i386.md
(*float<SSEMODEI24:mode><MODEF:mode>2_mixed_interunit):
Change operand 1 predicate to nonimmediate_operand.
testsuite/ChangeLog:
PR target/36073
* gcc.target/i386/pr36073.c: New test.
From-SVN: r134757
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr36073.c | 12 |
4 files changed, 27 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b839254..83383da 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-04-28 Uros Bizjak <ubizjak@gmail.com> + + PR target/36073 + * config/i386/i386.md + (*float<SSEMODEI24:mode><MODEF:mode>2_mixed_interunit): + Change operand 1 predicate to nonimmediate_operand. + 2008-04-28 Jakub Jelinek <jakub@redhat.com> PR debug/36060 @@ -16,7 +23,8 @@ 2008-04-28 Uros Bizjak <ubizjak@gmail.com> PR target/36064 - * config/i386/i386.md (floatdi<X87MODEF:mode>2_i387_with_xmm splitters): + * config/i386/i386.md + (floatdi<X87MODEF:mode>2_i387_with_xmm splitters): Use match_scratch instead of match_operand for operands 3 and 4. 2008-04-27 Richard Guenther <rguenther@suse.de> diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 6e62157..a68c7ec 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -5035,7 +5035,7 @@ (define_insn "*float<SSEMODEI24:mode><MODEF:mode>2_mixed_interunit" [(set (match_operand:MODEF 0 "register_operand" "=f,x,x") (float:MODEF - (match_operand:SSEMODEI24 1 "register_operand" "m,r,m")))] + (match_operand:SSEMODEI24 1 "nonimmediate_operand" "m,r,m")))] "(<SSEMODEI24:MODE>mode != DImode || TARGET_64BIT) && SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_MIX_SSE_I387 && (TARGET_INTER_UNIT_CONVERSIONS || optimize_size)" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 70a716a..4ac8b14 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-04-28 Uros Bizjak <ubizjak@gmail.com> + + PR target/36073 + * gcc.target/i386/pr36073.c: New test. + 2008-04-28 Richard Guenther <rguenther@suse.de> PR testsuite/34223 diff --git a/gcc/testsuite/gcc.target/i386/pr36073.c b/gcc/testsuite/gcc.target/i386/pr36073.c new file mode 100644 index 0000000..b158757 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr36073.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O -march=core2 -mfpmath=sse,387 -ffast-math" } */ + +extern double log (double x); +extern int f (void); + +double cached_value; + +void g (void) +{ + cached_value = log (f ()); +} |