diff options
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/config/rs6000/predicates.md | 20 |
2 files changed, 24 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dba48ff..50f3344 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-03-24 David Edelsohn <edelsohn@gnu.org> + + * config/rs6000/predicates.md (easy_fp_constant): Return 0 for + SFmode and DFmode before reload when + flag_unsafe_math_optimizations not enabled. + 2005-03-24 Geoffrey Keating <geoffk@apple.com> * config/i386/darwin.h (TARGET_SUBTARGET_DEFAULT): Add diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index 110898f..ab0cd8b 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -219,8 +219,15 @@ long k[2]; REAL_VALUE_TYPE rv; - if (TARGET_E500_DOUBLE) - return 0; + /* Force constants to memory before reload to utilize + compress_float_constant. + Avoid this when flag_unsafe_math_optimizations is enabled + because RDIV division to reciprocal optimization is not able + to regenerate the division. */ + if (TARGET_E500_DOUBLE + || (!reload_in_progress && !reload_completed + && !flag_unsafe_math_optimizations)) + return 0; REAL_VALUE_FROM_CONST_DOUBLE (rv, op); REAL_VALUE_TO_TARGET_DOUBLE (rv, k); @@ -234,6 +241,15 @@ long l; REAL_VALUE_TYPE rv; + /* Force constants to memory before reload to utilize + compress_float_constant. + Avoid this when flag_unsafe_math_optimizations is enabled + because RDIV division to reciprocal optimization is not able + to regenerate the division. */ + if (!reload_in_progress && !reload_completed + && !flag_unsafe_math_optimizations) + return 0; + REAL_VALUE_FROM_CONST_DOUBLE (rv, op); REAL_VALUE_TO_TARGET_SINGLE (rv, l); |
