From: Julian Seward Date: Mon, 20 Dec 2004 05:07:38 +0000 (+0000) Subject: iselCondCode: better handling of a pattern frequently generated by X-Git-Tag: svn/VALGRIND_3_0_1^2~658 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a78bd5e8bbc00d664256dc61d802fd0cf84848c0;p=thirdparty%2Fvalgrind.git iselCondCode: better handling of a pattern frequently generated by memcheck. git-svn-id: svn://svn.valgrind.org/vex/trunk@676 --- diff --git a/VEX/priv/host-x86/isel.c b/VEX/priv/host-x86/isel.c index f0f9cd7b1d..d211ddc9bb 100644 --- a/VEX/priv/host-x86/isel.c +++ b/VEX/priv/host-x86/isel.c @@ -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))