From: Julian Seward Date: Fri, 29 Jun 2012 15:33:09 +0000 (+0000) Subject: Add folding rules for X-Git-Tag: svn/VALGRIND_3_8_1^2~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b8fe7b6aff06d8585dee99a75898f5b7bed42db;p=thirdparty%2Fvalgrind.git Add folding rules for CmpEQ32x4 V256to64_0 V256to64_1 V256to64_2 V256to64_3 git-svn-id: svn://svn.valgrind.org/vex/trunk@2417 --- diff --git a/VEX/priv/ir_opt.c b/VEX/priv/ir_opt.c index 928fd67130..3f9c79803e 100644 --- a/VEX/priv/ir_opt.c +++ b/VEX/priv/ir_opt.c @@ -1163,6 +1163,7 @@ static IRExpr* mkOnesOfPrimopResultType ( IROp op ) case Iop_Or64: return IRExpr_Const(IRConst_U64(0xFFFFFFFFFFFFFFFFULL)); case Iop_CmpEQ8x16: + case Iop_CmpEQ32x4: return IRExpr_Const(IRConst_V128(0xFFFF)); default: ppIROp(op); @@ -1508,6 +1509,18 @@ static IRExpr* fold_Expr ( IRExpr** env, IRExpr* e ) break; } + /* Even stupider (although still correct ..) */ + case Iop_V256to64_0: case Iop_V256to64_1: + case Iop_V256to64_2: case Iop_V256to64_3: { + UInt v256 = e->Iex.Unop.arg->Iex.Const.con->Ico.V256; + if (v256 == 0x00000000) { + e2 = IRExpr_Const(IRConst_U64(0)); + } else { + goto unhandled; + } + break; + } + default: goto unhandled; } @@ -2056,6 +2069,7 @@ static IRExpr* fold_Expr ( IRExpr** env, IRExpr* e ) case Iop_CmpEQ64: case Iop_CmpEQ8x8: case Iop_CmpEQ8x16: + case Iop_CmpEQ32x4: if (sameIRExprs(env, e->Iex.Binop.arg1, e->Iex.Binop.arg2)) { e2 = mkOnesOfPrimopResultType(e->Iex.Binop.op); break;