forked from OSchip/llvm-project
implement PR4424: 0/x is always 0 for integer division.
llvm-svn: 73835
This commit is contained in:
parent
7d2b049404
commit
62fdd112fc
|
@ -773,6 +773,13 @@ Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 0 / x -> 0.
|
||||
if ((Opcode == Instruction::UDiv ||
|
||||
Opcode == Instruction::SDiv) &&
|
||||
CI1->isZero())
|
||||
return const_cast<Constant*>(C1);
|
||||
|
||||
} else if (const ConstantFP *CFP1 = dyn_cast<ConstantFP>(C1)) {
|
||||
if (const ConstantFP *CFP2 = dyn_cast<ConstantFP>(C2)) {
|
||||
APFloat C1V = CFP1->getValueAPF();
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {ret i32 0}
|
||||
; PR4424
|
||||
declare void @ext()
|
||||
|
||||
define i32 @foo(i32 %ptr) {
|
||||
entry:
|
||||
%zero = sub i32 %ptr, %ptr ; <i32> [#uses=1]
|
||||
%div_zero = sdiv i32 %zero, ptrtoint (i32* getelementptr (i32* null,
|
||||
i32 1) to i32) ; <i32> [#uses=1]
|
||||
ret i32 %div_zero
|
||||
}
|
||||
|
Loading…
Reference in New Issue