Commit 03e0a65f by Jeffrey A Law Committed by Jeff Law

* fold-const.c (fold): Detect rotates built from BIT_XOR_EXPRs.

From-SVN: r29966
parent 0918eca0
Thu Oct 14 02:54:13 1999 Jeffrey A Law (law@cygnus.com)
* fold-const.c (fold): Detect rotates built from BIT_XOR_EXPRs.
Thu Oct 14 02:18:19 1999 Marc Espie <espie@cvs.openbsd.org> Thu Oct 14 02:18:19 1999 Marc Espie <espie@cvs.openbsd.org>
* combine.c (simplify_logical): Recognize xor pattern that encodes * combine.c (simplify_logical): Recognize xor pattern that encodes
......
...@@ -5097,11 +5097,15 @@ fold (expr) ...@@ -5097,11 +5097,15 @@ fold (expr)
if (t1 != NULL_TREE) if (t1 != NULL_TREE)
return t1; return t1;
bit_rotate:
/* (A << C1) | (A >> C2) if A is unsigned and C1+C2 is the size of A /* (A << C1) | (A >> C2) if A is unsigned and C1+C2 is the size of A
is a rotate of A by C1 bits. */ is a rotate of A by C1 bits. */
/* (A << B) | (A >> (Z - B)) if A is unsigned and Z is the size of A /* (A << B) | (A >> (Z - B)) if A is unsigned and Z is the size of A
is a rotate of A by B bits. */ is a rotate of A by B bits. */
/* Both transformations noted above also apply to when the inner
operation is an XOR. */
code0 = TREE_CODE (arg0); code0 = TREE_CODE (arg0);
code1 = TREE_CODE (arg1); code1 = TREE_CODE (arg1);
if (((code0 == RSHIFT_EXPR && code1 == LSHIFT_EXPR) if (((code0 == RSHIFT_EXPR && code1 == LSHIFT_EXPR)
...@@ -5170,7 +5174,9 @@ fold (expr) ...@@ -5170,7 +5174,9 @@ fold (expr)
return non_lvalue (convert (type, arg0)); return non_lvalue (convert (type, arg0));
if (integer_all_onesp (arg1)) if (integer_all_onesp (arg1))
return fold (build1 (BIT_NOT_EXPR, type, arg0)); return fold (build1 (BIT_NOT_EXPR, type, arg0));
goto associate; /* See if this can be simplified into a rotate first. If that
is unsuccessful we will jump to the association code. */
goto bit_rotate;
case BIT_AND_EXPR: case BIT_AND_EXPR:
bit_and: bit_and:
......
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