]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merge r1747 (Fold Add8(t,t) ==> t << 1. Fixes #143817 (Unused
authorJulian Seward <jseward@acm.org>
Sun, 29 Apr 2007 10:28:33 +0000 (10:28 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 29 Apr 2007 10:28:33 +0000 (10:28 +0000)
bitfield pad bits confuse memcheck))

git-svn-id: svn://svn.valgrind.org/vex/branches/VEX_3_2_BRANCH@1756

VEX/priv/ir/iropt.c

index d579d0852eba64a08b412c67debfa631de5bfe59..31e4cdb0a6e664550f9757093cfc287d417a952f 100644 (file)
@@ -1431,6 +1431,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_Tmp
+             && e->Iex.Binop.arg2->tag == Iex_Tmp
+             && e->Iex.Binop.arg1->Iex.Tmp.tmp 
+                == e->Iex.Binop.arg2->Iex.Tmp.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