forked from OSchip/llvm-project
InstCombine: Don't create an unused instruction
We would create an instruction but not inserting it. Not inserting the unused instruction would lead us to verification failure. This fixes PR21653. llvm-svn: 222659
This commit is contained in:
parent
11bdb8bf33
commit
8e6f6a98b5
|
@ -300,8 +300,7 @@ Instruction *InstCombiner::visitMul(BinaryOperator &I) {
|
|||
if (match(Op0, m_Shl(m_One(), m_Value(Y)))) {
|
||||
BO = BinaryOperator::CreateShl(Op1, Y);
|
||||
ShlNSW = cast<BinaryOperator>(Op0)->hasNoSignedWrap();
|
||||
}
|
||||
if (match(Op1, m_Shl(m_One(), m_Value(Y)))) {
|
||||
} else if (match(Op1, m_Shl(m_One(), m_Value(Y)))) {
|
||||
BO = BinaryOperator::CreateShl(Op0, Y);
|
||||
ShlNSW = cast<BinaryOperator>(Op1)->hasNoSignedWrap();
|
||||
}
|
||||
|
|
|
@ -245,3 +245,13 @@ define i32 @test27(i32 %A, i32 %B) {
|
|||
ret i32 %D
|
||||
; CHECK: shl nuw i32 %A, %B
|
||||
}
|
||||
|
||||
define i32 @test28(i32 %A) {
|
||||
; CHECK-LABEL: @test28(
|
||||
%B = shl i32 1, %A
|
||||
%C = mul nsw i32 %B, %B
|
||||
ret i32 %C
|
||||
; CHECK: %[[shl1:.*]] = shl i32 1, %A
|
||||
; CHECK-NEXT: %[[shl2:.*]] = shl i32 %[[shl1]], %A
|
||||
; CHECK-NEXT: ret i32 %[[shl2]]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue