Commit 18117c05 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 05c219bb
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> 2007-12-14 Uros Bizjak <ubizjak@gmail.com>
* config/i386/sse.md (sse4_2_pcmpestr): Use reg_not_xmm0_operand * 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) ...@@ -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, /* 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 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) switch (code)
{ {
case LT: case LTU: case GE: case GEU: case LT: case LTU: case GE: case GEU:
ix86_compare_op0 = hi[0]; if (lo[1] == const0_rtx)
ix86_compare_op1 = hi[1]; {
ix86_expand_branch (code, label); ix86_compare_op0 = hi[0];
return; 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: default:
break; break;
} }
......
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> 2007-12-14 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/sse-12.c (dg-options): Use -msse4 * gcc.target/i386/sse-12.c (dg-options): Use -msse4
/* 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 } } } */
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