From: Julian Seward Date: Wed, 11 May 2005 22:47:32 +0000 (+0000) Subject: Do a bit better for (part of) a very common memcheck idiom: "is this X-Git-Tag: svn/VALGRIND_3_0_1^2~146 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=68758a69e1ff8c94dd05ea54a43c36ca5a9b7b0b;p=thirdparty%2Fvalgrind.git Do a bit better for (part of) a very common memcheck idiom: "is this pointer defined ?" git-svn-id: svn://svn.valgrind.org/vex/trunk@1188 --- diff --git a/VEX/priv/host-amd64/isel.c b/VEX/priv/host-amd64/isel.c index 0664d22538..8e1f079ebc 100644 --- a/VEX/priv/host-amd64/isel.c +++ b/VEX/priv/host-amd64/isel.c @@ -2008,6 +2008,21 @@ static AMD64CondCode iselCondCode_wrk ( ISelEnv* env, IRExpr* e ) /* --- patterns rooted at: CmpNEZ64 --- */ + /* CmpNEZ64(Or64(x,y)) */ + { + DECLARE_PATTERN(p_CmpNEZ64_Or64); + DEFINE_PATTERN(p_CmpNEZ64_Or64, + unop(Iop_CmpNEZ64, binop(Iop_Or64, bind(0), bind(1)))); + if (matchIRExpr(&mi, p_CmpNEZ64_Or64, e)) { + HReg r0 = iselIntExpr_R(env, mi.bindee[0]); + AMD64RMI* rmi1 = iselIntExpr_RMI(env, mi.bindee[1]); + HReg tmp = newVRegI(env); + addInstr(env, mk_iMOVsd_RR(r0, tmp)); + addInstr(env, AMD64Instr_Alu64R(Aalu_OR,rmi1,tmp)); + return Acc_NZ; + } + } + /* CmpNEZ64(x) */ if (e->tag == Iex_Unop && e->Iex.Unop.op == Iop_CmpNEZ64) {