Commit 95afbcac by Uros Bizjak Committed by Uros Bizjak

re PR middle-end/33187 (Missed cmove opportunity)

       PR middle-end/33187
       * combine.c (subst): Do not try to simplify X if it represents load
       of FP constant from the constant pool via float extension.

testsuite/ChangeLog:

       PR middle-end/33187
       * gcc.target/i386/cmov7.c: New file.

From-SVN: r128072
parent 731c68a2
2007-09-04 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/33187
* combine.c (subst): Do not try to simplify X if it represents load
of FP constant from the constant pool via float extension.
2007-09-04 Ben Elliston <bje@au.ibm.com> 2007-09-04 Ben Elliston <bje@au.ibm.com>
* c-opts.c: Include "tm_p.h". * c-opts.c: Include "tm_p.h".
......
...@@ -4478,6 +4478,18 @@ subst (rtx x, rtx from, rtx to, int in_dest, int unique_copy) ...@@ -4478,6 +4478,18 @@ subst (rtx x, rtx from, rtx to, int in_dest, int unique_copy)
} }
} }
/* Check if we are loading something from the constant pool via float
extension; in this case we would undo compress_float_constant
optimization and degenerate constant load to an immediate value. */
if (GET_CODE (x) == FLOAT_EXTEND
&& MEM_P (XEXP (x, 0))
&& MEM_READONLY_P (XEXP (x, 0)))
{
rtx tmp = avoid_constant_pool_reference (x);
if (x != tmp)
return x;
}
/* Try to simplify X. If the simplification changed the code, it is likely /* Try to simplify X. If the simplification changed the code, it is likely
that further simplification will help, so loop, but limit the number that further simplification will help, so loop, but limit the number
of repetitions that will be performed. */ of repetitions that will be performed. */
......
2007-09-04 Uros Bizjak <ubizjak@gmail.com> 2007-09-04 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/33187
* gcc.target/i386/cmov7.c: New file.
2007-09-04 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/sse4a-check.h: New file. * gcc.target/i386/sse4a-check.h: New file.
* gcc.target/i386/sse4a-extract.c: Include sse4a-check.h. Remove main. * gcc.target/i386/sse4a-extract.c: Include sse4a-check.h. Remove main.
* gcc.target/i386/sse4a-insert.c: Ditto. * gcc.target/i386/sse4a-insert.c: Ditto.
/* PR middle-end/33187 */
/* { dg-do compile } */
/* { dg-options "-O2 -march=k8 -ffast-math -mfpmath=387" } */
/* { dg-final { scan-assembler "fcmov" } } */
/* compress_float_constant generates load + float_extend
sequence which combine pass failed to combine into
(set (reg:DF) (float_extend:DF (mem:SF (symbol_ref...)))). */
double
sgn (double __x)
{
return __x >= 0.0 ? 1.0 : -1.0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment