|
From: <sv...@va...> - 2007-04-04 22:48:09
|
Author: sewardj
Date: 2007-04-04 23:48:06 +0100 (Wed, 04 Apr 2007)
New Revision: 1747
Log:
Fold Add8(t,t) ==> t << 1. Fixes #143817 (Unused bitfield pad bits
confuse memcheck)
Modified:
trunk/priv/ir/iropt.c
Modified: trunk/priv/ir/iropt.c
===================================================================
--- trunk/priv/ir/iropt.c 2007-03-31 19:12:38 UTC (rev 1746)
+++ trunk/priv/ir/iropt.c 2007-04-04 22:48:06 UTC (rev 1747)
@@ -1432,6 +1432,18 @@
IRExpr_Const(IRConst_U8(1)));
} else
+ /* Add8(t,t) ==> t << 1; rationale as for Add32(t,t) above. */
+ if (e->Iex.Binop.op == Iop_Add8
+ && e->Iex.Binop.arg1->tag == Iex_RdTmp
+ && e->Iex.Binop.arg2->tag == Iex_RdTmp
+ && e->Iex.Binop.arg1->Iex.RdTmp.tmp
+ == e->Iex.Binop.arg2->Iex.RdTmp.tmp) {
+ e2 = IRExpr_Binop(Iop_Shl8,
+ e->Iex.Binop.arg1,
+ IRExpr_Const(IRConst_U8(1)));
+ } else
+ /* NB no Add16(t,t) case yet as no known test case exists */
+
/* Or64/Add64(x,0) ==> x */
if ((e->Iex.Binop.op == Iop_Add64 || e->Iex.Binop.op == Iop_Or64)
&& e->Iex.Binop.arg2->tag == Iex_Const
|