From: Florian Krohm Date: Fri, 6 Sep 2013 23:13:39 +0000 (+0000) Subject: Add a few more optimisations for CmpwNEZ64, CmpNEZ32, and CmpNEZ64. X-Git-Tag: svn/VALGRIND_3_9_0^2~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21d67a99b113fe2453f880fc84ee1051c3941229;p=thirdparty%2Fvalgrind.git Add a few more optimisations for CmpwNEZ64, CmpNEZ32, and CmpNEZ64. Observed on s390. git-svn-id: svn://svn.valgrind.org/vex/trunk@2755 --- diff --git a/VEX/priv/ir_opt.c b/VEX/priv/ir_opt.c index b36c2d5a4c..1d657a9fef 100644 --- a/VEX/priv/ir_opt.c +++ b/VEX/priv/ir_opt.c @@ -5023,6 +5023,9 @@ static IRExpr* fold_IRExpr_Unop ( IROp op, IRExpr* aa ) { switch (op) { case Iop_CmpwNEZ64: + /* CmpwNEZ64( CmpwNEZ64 ( x ) ) --> CmpwNEZ64 ( x ) */ + if (is_Unop(aa, Iop_CmpwNEZ64)) + return IRExpr_Unop( Iop_CmpwNEZ64, aa->Iex.Unop.arg ); /* CmpwNEZ64( Or64 ( CmpwNEZ64(x), y ) ) --> CmpwNEZ64( Or64( x, y ) ) */ if (is_Binop(aa, Iop_Or64) && is_Unop(aa->Iex.Binop.arg1, Iop_CmpwNEZ64)) @@ -5044,6 +5047,9 @@ static IRExpr* fold_IRExpr_Unop ( IROp op, IRExpr* aa ) /* CmpNEZ64( Left64(x) ) --> CmpNEZ64(x) */ if (is_Unop(aa, Iop_Left64)) return IRExpr_Unop(Iop_CmpNEZ64, aa->Iex.Unop.arg); + /* CmpNEZ64( 1Uto64(X) ) --> X */ + if (is_Unop(aa, Iop_1Uto64)) + return aa->Iex.Unop.arg; break; case Iop_CmpwNEZ32: /* CmpwNEZ32( CmpwNEZ32 ( x ) ) --> CmpwNEZ32 ( x ) */ @@ -5057,6 +5063,9 @@ static IRExpr* fold_IRExpr_Unop ( IROp op, IRExpr* aa ) /* CmpNEZ32( 1Uto32(X) ) --> X */ if (is_Unop(aa, Iop_1Uto32)) return aa->Iex.Unop.arg; + /* CmpNEZ32( 64to32( CmpwNEZ64(X) ) ) --> CmpNEZ64(X) */ + if (is_Unop(aa, Iop_64to32) && is_Unop(aa->Iex.Unop.arg, Iop_CmpwNEZ64)) + return IRExpr_Unop(Iop_CmpNEZ64, aa->Iex.Unop.arg->Iex.Unop.arg); break; case Iop_CmpNEZ8: /* CmpNEZ8( 1Uto8(X) ) --> X */