re PR target/29978 (redundant jumps)
PR target/29978 * config/i386/i386.c (ix86_expand_branch): Optimize LE/LEU/GT/GTU DImode comparisons against constant with all 1's in the lower word. * gcc.target/i386/pr29978.c: New test. From-SVN: r130938
This commit is contained in:
parent
05c219bb49
commit
18117c0574
@ -1,3 +1,9 @@
|
||||
2007-12-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/29978
|
||||
* config/i386/i386.c (ix86_expand_branch): Optimize LE/LEU/GT/GTU
|
||||
DImode comparisons against constant with all 1's in the lower word.
|
||||
|
||||
2007-12-14 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/sse.md (sse4_2_pcmpestr): Use reg_not_xmm0_operand
|
||||
|
@ -12093,16 +12093,28 @@ ix86_expand_branch (enum rtx_code code, rtx label)
|
||||
|
||||
/* Otherwise, if we are doing less-than or greater-or-equal-than,
|
||||
op1 is a constant and the low word is zero, then we can just
|
||||
examine the high word. */
|
||||
examine the high word. Similarly for low word -1 and
|
||||
less-or-equal-than or greater-than. */
|
||||
|
||||
if (CONST_INT_P (hi[1]) && lo[1] == const0_rtx)
|
||||
if (CONST_INT_P (hi[1]))
|
||||
switch (code)
|
||||
{
|
||||
case LT: case LTU: case GE: case GEU:
|
||||
ix86_compare_op0 = hi[0];
|
||||
ix86_compare_op1 = hi[1];
|
||||
ix86_expand_branch (code, label);
|
||||
return;
|
||||
if (lo[1] == const0_rtx)
|
||||
{
|
||||
ix86_compare_op0 = hi[0];
|
||||
ix86_compare_op1 = hi[1];
|
||||
ix86_expand_branch (code, label);
|
||||
return;
|
||||
}
|
||||
case LE: case LEU: case GT: case GTU:
|
||||
if (lo[1] == constm1_rtx)
|
||||
{
|
||||
ix86_compare_op0 = hi[0];
|
||||
ix86_compare_op1 = hi[1];
|
||||
ix86_expand_branch (code, label);
|
||||
return;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-12-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/29978
|
||||
* gcc.target/i386/pr29978.c: New test.
|
||||
|
||||
2007-12-14 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* gcc.target/i386/sse-12.c (dg-options): Use -msse4
|
||||
|
16
gcc/testsuite/gcc.target/i386/pr29978.c
Normal file
16
gcc/testsuite/gcc.target/i386/pr29978.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* PR target/29978 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os" } */
|
||||
|
||||
void g ();
|
||||
|
||||
void
|
||||
f (long long v)
|
||||
{
|
||||
if (v > 0xfffffffffLL)
|
||||
g ();
|
||||
g ();
|
||||
}
|
||||
|
||||
/* Verify there are no redundant jumps jl .L2; jle .L2 */
|
||||
/* { dg-final { scan-assembler-not "jl\[^e\]*\\.L" { target ilp32 } } } */
|
Loading…
Reference in New Issue
Block a user