From 498f5165756e1cb440073494db866a582fe1b17d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 23 May 2011 00:09:55 +0000 Subject: [PATCH] use the valuetracking isPowerOfTwo function, which is more powerful than checking for a constant directly. Thanks to Duncan for pointing this out. llvm-svn: 131885 --- lib/Transforms/InstCombine/InstCombineMulDivRem.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp b/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp index 98a36545ad7..fdec6407b80 100644 --- a/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp +++ b/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp @@ -31,13 +31,13 @@ static Value *simplifyValueKnownNonZero(Value *V, InstCombiner &IC) { // ((1 << A) >>u B) --> (1 << (A-B)) // Because V cannot be zero, we know that B is less than A. - Value *A = 0, *B = 0; ConstantInt *One = 0; - if (match(V, m_LShr(m_OneUse(m_Shl(m_ConstantInt(One), m_Value(A))), + Value *A = 0, *B = 0, *PowerOf2 = 0; + if (match(V, m_LShr(m_OneUse(m_Shl(m_Value(PowerOf2), m_Value(A))), m_Value(B))) && // The "1" can be any value known to be a power of 2. - One->getValue().isPowerOf2()) { + isPowerOfTwo(PowerOf2, IC.getTargetData())) { A = IC.Builder->CreateSub(A, B, "tmp"); - return IC.Builder->CreateShl(One, A); + return IC.Builder->CreateShl(PowerOf2, A); } // TODO: Lots more we could do here: