From b6dc550705f6631e85e882a6ebcb79f3c1956071 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Thu, 24 Mar 2005 23:07:35 +0000 Subject: [PATCH] predicates.md (easy_fp_constant): Return 0 for SFmode and DFmode before reload when... * config/rs6000/predicates.md (easy_fp_constant): Return 0 for SFmode and DFmode before reload when flag_unsafe_math_optimizations not enabled. From-SVN: r97014 --- gcc/ChangeLog | 6 ++++++ gcc/config/rs6000/predicates.md | 20 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dba48fffb9c..50f33446bb6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-03-24 David Edelsohn + + * 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 * config/i386/darwin.h (TARGET_SUBTARGET_DEFAULT): Add diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index 110898fcec6..ab0cd8b1568 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); -- 2.30.2