From: Julian Seward Date: Wed, 4 Apr 2007 22:48:06 +0000 (+0000) Subject: Fold Add8(t,t) ==> t << 1. Fixes #143817 (Unused bitfield pad bits X-Git-Tag: svn/VALGRIND_3_3_1^2~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=73bd5f7159a5a8a79d154adc6bd70db92838cc26;p=thirdparty%2Fvalgrind.git Fold Add8(t,t) ==> t << 1. Fixes #143817 (Unused bitfield pad bits confuse memcheck) git-svn-id: svn://svn.valgrind.org/vex/trunk@1747 --- diff --git a/VEX/priv/ir/iropt.c b/VEX/priv/ir/iropt.c index 40c7888163..db7aa6b0bc 100644 --- a/VEX/priv/ir/iropt.c +++ b/VEX/priv/ir/iropt.c @@ -1432,6 +1432,18 @@ static IRExpr* fold_Expr ( IRExpr* e ) 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