mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Expand this test to handle more cases (remainder and shifts) of zero.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73839 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5b038b793c
commit
e47f59db44
@ -629,7 +629,7 @@ Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode,
|
||||
}
|
||||
}
|
||||
|
||||
// Handle simplifications of the RHS when a constant int.
|
||||
// Handle simplifications when the RHS is a constant int.
|
||||
if (const ConstantInt *CI2 = dyn_cast<ConstantInt>(C2)) {
|
||||
switch (Opcode) {
|
||||
case Instruction::Add:
|
||||
@ -773,13 +773,20 @@ Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 0 / x -> 0.
|
||||
if ((Opcode == Instruction::UDiv ||
|
||||
Opcode == Instruction::SDiv) &&
|
||||
CI1->isZero())
|
||||
return const_cast<Constant*>(C1);
|
||||
|
||||
|
||||
switch (Opcode) {
|
||||
case Instruction::SDiv:
|
||||
case Instruction::UDiv:
|
||||
case Instruction::URem:
|
||||
case Instruction::SRem:
|
||||
case Instruction::LShr:
|
||||
case Instruction::AShr:
|
||||
case Instruction::Shl:
|
||||
if (CI1->equalsInt(0)) return const_cast<Constant*>(C1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (const ConstantFP *CFP1 = dyn_cast<ConstantFP>(C1)) {
|
||||
if (const ConstantFP *CFP2 = dyn_cast<ConstantFP>(C2)) {
|
||||
APFloat C1V = CFP1->getValueAPF();
|
||||
|
11
test/Transforms/ConstProp/2009-06-20-constexpr-zero-lhs.ll
Normal file
11
test/Transforms/ConstProp/2009-06-20-constexpr-zero-lhs.ll
Normal file
@ -0,0 +1,11 @@
|
||||
; RUN: llvm-as < %s | llvm-dis | not grep ptrtoint
|
||||
; PR4424
|
||||
@G = external global i32
|
||||
@test1 = constant i32 sdiv (i32 0, i32 ptrtoint (i32* @G to i32))
|
||||
@test2 = constant i32 udiv (i32 0, i32 ptrtoint (i32* @G to i32))
|
||||
@test3 = constant i32 srem (i32 0, i32 ptrtoint (i32* @G to i32))
|
||||
@test4 = constant i32 urem (i32 0, i32 ptrtoint (i32* @G to i32))
|
||||
@test5 = constant i32 lshr (i32 0, i32 ptrtoint (i32* @G to i32))
|
||||
@test6 = constant i32 ashr (i32 0, i32 ptrtoint (i32* @G to i32))
|
||||
@test7 = constant i32 shl (i32 0, i32 ptrtoint (i32* @G to i32))
|
||||
|
Loading…
Reference in New Issue
Block a user