From: Julian Seward Date: Tue, 16 Jan 2007 19:19:55 +0000 (+0000) Subject: Constant fold XorV128(t,t) -> 0. Effect is that memcheck 'knows' X-Git-Tag: svn/VALGRIND_3_3_1^2~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c379f58cf38e65361516b7e38fa8fcf6e3c82e8f;p=thirdparty%2Fvalgrind.git Constant fold XorV128(t,t) -> 0. Effect is that memcheck 'knows' that pxor %xmm_n, %xmm_n does not depend on the previous contents of %xmm_n. git-svn-id: svn://svn.valgrind.org/vex/trunk@1728 --- diff --git a/VEX/priv/ir/iropt.c b/VEX/priv/ir/iropt.c index 3703deb91f..9a2d958835 100644 --- a/VEX/priv/ir/iropt.c +++ b/VEX/priv/ir/iropt.c @@ -895,6 +895,7 @@ static IRExpr* mkZeroForXor ( IROp op ) case Iop_Xor16: return IRExpr_Const(IRConst_U16(0)); case Iop_Xor32: return IRExpr_Const(IRConst_U32(0)); case Iop_Xor64: return IRExpr_Const(IRConst_U64(0)); + case Iop_XorV128: return IRExpr_Const(IRConst_V128(0)); default: vpanic("mkZeroForXor: bad primop"); } } @@ -1487,11 +1488,12 @@ static IRExpr* fold_Expr ( IRExpr* e ) e2 = e->Iex.Binop.arg1; } - /* Xor8/16/32/64(t,t) ==> 0, for some IRTemp t */ + /* Xor8/16/32/64/V128(t,t) ==> 0, for some IRTemp t */ if ( (e->Iex.Binop.op == Iop_Xor64 || e->Iex.Binop.op == Iop_Xor32 || e->Iex.Binop.op == Iop_Xor16 - || e->Iex.Binop.op == Iop_Xor8) + || e->Iex.Binop.op == Iop_Xor8 + || e->Iex.Binop.op == Iop_XorV128) && sameIRTemps(e->Iex.Binop.arg1, e->Iex.Binop.arg2)) { e2 = mkZeroForXor(e->Iex.Binop.op); }