]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Constant fold XorV128(t,t) -> 0. Effect is that memcheck 'knows'
authorJulian Seward <jseward@acm.org>
Tue, 16 Jan 2007 19:19:55 +0000 (19:19 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 16 Jan 2007 19:19:55 +0000 (19:19 +0000)
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

VEX/priv/ir/iropt.c

index 3703deb91f647bac42c921a3e76e5177b3ac9bf8..9a2d958835cfbe684b15ebcce6631090a17fa6ea 100644 (file)
@@ -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);
          }