]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
iselCondCode: better handling of a pattern frequently generated by
authorJulian Seward <jseward@acm.org>
Mon, 20 Dec 2004 05:07:38 +0000 (05:07 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 20 Dec 2004 05:07:38 +0000 (05:07 +0000)
memcheck.

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

VEX/priv/host-x86/isel.c

index f0f9cd7b1d7a6296b396f2c027e0ad6c937a98ca..d211ddc9bbe38ea25034d95d3f8c447f4f507b58 100644 (file)
@@ -1416,9 +1416,8 @@ static X86CondCode iselCondCode_wrk ( ISelEnv* env, IRExpr* e )
 {
    MatchInfo mi;
    DECLARE_PATTERN(p_32to1);
-   //DECLARE_PATTERN(p_eq32_literal);
-   //DECLARE_PATTERN(p_ne32_zero);
    DECLARE_PATTERN(p_1Uto32_then_32to1);
+   DECLARE_PATTERN(p_1Sto32_then_32to1);
 
    vassert(e);
    vassert(typeOfIRExpr(env->type_env,e) == Ity_I1);
@@ -1447,6 +1446,14 @@ static X86CondCode iselCondCode_wrk ( ISelEnv* env, IRExpr* e )
       return iselCondCode(env, expr1);
    }
 
+   /* 32to1(1Sto32(expr1)) -- the casts are pointless, ignore them */
+   DEFINE_PATTERN(p_1Sto32_then_32to1,
+                  unop(Iop_32to1,unop(Iop_1Sto32,bind(0))));
+   if (matchIRExpr(&mi,p_1Sto32_then_32to1,e)) {
+      IRExpr* expr1 = mi.bindee[0];
+      return iselCondCode(env, expr1);
+   }
+
    /* pattern: 32to1(expr32) */
    DEFINE_PATTERN(p_32to1, 
       unop(Iop_32to1,bind(0))