|
From: <sv...@va...> - 2007-01-16 19:19:58
|
Author: sewardj
Date: 2007-01-16 19:19:55 +0000 (Tue, 16 Jan 2007)
New Revision: 1728
Log:
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.
Modified:
trunk/priv/ir/iropt.c
Modified: trunk/priv/ir/iropt.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/ir/iropt.c 2007-01-12 21:26:51 UTC (rev 1727)
+++ trunk/priv/ir/iropt.c 2007-01-16 19:19:55 UTC (rev 1728)
@@ -895,6 +895,7 @@
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 @@
e2 =3D e->Iex.Binop.arg1;
}
=20
- /* Xor8/16/32/64(t,t) =3D=3D> 0, for some IRTemp t */
+ /* Xor8/16/32/64/V128(t,t) =3D=3D> 0, for some IRTemp t */
if ( (e->Iex.Binop.op =3D=3D Iop_Xor64
|| e->Iex.Binop.op =3D=3D Iop_Xor32
|| e->Iex.Binop.op =3D=3D Iop_Xor16
- || e->Iex.Binop.op =3D=3D Iop_Xor8)
+ || e->Iex.Binop.op =3D=3D Iop_Xor8
+ || e->Iex.Binop.op =3D=3D Iop_XorV128)
&& sameIRTemps(e->Iex.Binop.arg1, e->Iex.Binop.arg2)) {
e2 =3D mkZeroForXor(e->Iex.Binop.op);
}
|