]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add folding rules for
authorJulian Seward <jseward@acm.org>
Fri, 29 Jun 2012 15:33:09 +0000 (15:33 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 29 Jun 2012 15:33:09 +0000 (15:33 +0000)
CmpEQ32x4 V256to64_0 V256to64_1 V256to64_2 V256to64_3

git-svn-id: svn://svn.valgrind.org/vex/trunk@2417

VEX/priv/ir_opt.c

index 928fd6713031337f6fe1b45b3e39052ec8e3f62e..3f9c79803e9372d90b5e0f1f13d4a5f6db038511 100644 (file)
@@ -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;