Commit 69fce32f by Roger Sayle Committed by Roger Sayle

simplify-rtx.c (simplify_relational_operation_1): Optimize comparisons of POPCOUNT against zero.


	* simplify-rtx.c (simplify_relational_operation_1): Optimize
	comparisons of POPCOUNT against zero.
	(simplify_const_relational_operation): Likewise.

	* gcc.target/ia64/builtin-popcount-1.c: New test case.
	* gcc.target/ia64/builtin-popcount-2.c: Likewise.

From-SVN: r121838
parent cf24243e
2007-02-11 Roger Sayle <roger@eyesopen.com>
* simplify-rtx.c (simplify_relational_operation_1): Optimize
comparisons of POPCOUNT against zero.
(simplify_const_relational_operation): Likewise.
2007-02-11 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
* doc/invoke.texi (Wextra): Delete outdated paragraph.
......
......@@ -3802,6 +3802,27 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
simplify_gen_binary (XOR, cmp_mode,
XEXP (op0, 1), op1));
if (op0code == POPCOUNT && op1 == const0_rtx)
switch (code)
{
case EQ:
case LE:
case LEU:
/* (eq (popcount x) (const_int 0)) -> (eq x (const_int 0)). */
return simplify_gen_relational (EQ, mode, GET_MODE (XEXP (op0, 0)),
XEXP (op0, 0), const0_rtx);
case NE:
case GT:
case GTU:
/* (ne (popcount x) (const_int 0)) -> (ne x (const_int 0)). */
return simplify_gen_relational (EQ, mode, GET_MODE (XEXP (op0, 0)),
XEXP (op0, 0), const0_rtx);
default:
break;
}
return NULL_RTX;
}
......@@ -4067,6 +4088,10 @@ simplify_const_relational_operation (enum rtx_code code,
if (GET_CODE (tem) == ABS)
return const0_rtx;
}
/* Optimize popcount (x) < 0. */
if (GET_CODE (trueop0) == POPCOUNT && trueop1 == const0_rtx)
return const_true_rtx;
break;
case GE:
......@@ -4081,6 +4106,10 @@ simplify_const_relational_operation (enum rtx_code code,
if (GET_CODE (tem) == ABS)
return const_true_rtx;
}
/* Optimize popcount (x) >= 0. */
if (GET_CODE (trueop0) == POPCOUNT && trueop1 == const0_rtx)
return const_true_rtx;
break;
case UNGE:
......
2007-02-11 Roger Sayle <roger@eyesopen.com>
* gcc.target/ia64/builtin-popcount-1.c: New test case.
* gcc.target/ia64/builtin-popcount-2.c: Likewise.
2007-02-11 Tobias Schlter <tobi@gcc.gnu.org>
PR fortran/30478
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler "popcnt" } } */
int foo (int x)
{
return __builtin_popcount (x);
}
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-not "popcnt" } } */
int foo (int x)
{
return __builtin_popcount (x) == 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