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
This commit is contained in:
parent
731c68a204
commit
95afbcac54
4 changed files with 38 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
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>
|
||||
|
||||
* c-opts.c: Include "tm_p.h".
|
||||
|
|
|
@ -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
|
||||
that further simplification will help, so loop, but limit the number
|
||||
of repetitions that will be performed. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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.
|
||||
|
|
15
gcc/testsuite/gcc.target/i386/cmov7.c
Normal file
15
gcc/testsuite/gcc.target/i386/cmov7.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue