Index: lib/Analysis/InstructionSimplify.cpp =================================================================== --- lib/Analysis/InstructionSimplify.cpp +++ lib/Analysis/InstructionSimplify.cpp @@ -992,6 +992,11 @@ return X; } + // (X << C1) / X -> 1 << C1 + const APInt *C = nullptr; + if (match(Op0, m_Shl(m_Value(X), m_APInt(C))) && X == Op1) + return ConstantInt::get(X->getType(), APInt(C->getBitWidth(), 1).shl(*C)); + // (X rem Y) / Y -> 0 if ((IsSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) || (!IsSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1)))))