From abf29d9862d898c02f3df95cbdc4e9bdba396b6f Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Tue, 17 Nov 2020 17:22:36 +0000 Subject: [PATCH] [InstCombine] visitAnd - use m_SpecificInt instead of m_APInt + comparison. NFCI. m_SpecificInt has the same 'no undef element' behaviour as m_APInt so no change there, and anyway we have test coverage for undef elements in the fold. Noticed while fixing a Wshadow warning about shadow Value *X, *Y variables. --- llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index e9f9f4d..bb8ace2 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -1962,16 +1962,12 @@ Instruction *InstCombinerImpl::visitAnd(BinaryOperator &I) { return SelectInst::Create(A, Op0, Constant::getNullValue(Ty)); // and(ashr(subNSW(Y, X), ScalarSizeInBits(Y)-1), X) --> X s> Y ? X : 0. - { - Value *X, *Y; - const APInt *ShAmt; - if (match(&I, m_c_And(m_OneUse(m_AShr(m_NSWSub(m_Value(Y), m_Value(X)), - m_APInt(ShAmt))), - m_Deferred(X))) && - *ShAmt == Ty->getScalarSizeInBits() - 1) { - Value *NewICmpInst = Builder.CreateICmpSGT(X, Y); - return SelectInst::Create(NewICmpInst, X, ConstantInt::getNullValue(Ty)); - } + if (match(&I, m_c_And(m_OneUse(m_AShr( + m_NSWSub(m_Value(Y), m_Value(X)), + m_SpecificInt(Ty->getScalarSizeInBits() - 1))), + m_Deferred(X)))) { + Value *NewICmpInst = Builder.CreateICmpSGT(X, Y); + return SelectInst::Create(NewICmpInst, X, ConstantInt::getNullValue(Ty)); } return nullptr; -- 2.7.4