mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
IR: Make the X / undef -> undef fold match the comment
The constant folding for sdiv and udiv has a big discrepancy between the comments and the code, which looks like a typo. Currently, we're folding X / undef pretty inconsistently: 0 / undef -> undef C / undef -> 0 undef / undef -> 0 Whereas the comments state we do X / undef -> undef. The logic that returns zero is actually commented as doing undef / X -> 0, despite that the LHS isn't undef in many of the cases that hit it. llvm-svn: 261813
This commit is contained in:
parent
e684ff35db
commit
24f8ffc3c6
@ -948,7 +948,7 @@ Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode,
|
||||
case Instruction::SDiv:
|
||||
case Instruction::UDiv:
|
||||
// X / undef -> undef
|
||||
if (match(C1, m_Zero()))
|
||||
if (isa<UndefValue>(C2))
|
||||
return C2;
|
||||
// undef / 0 -> undef
|
||||
// undef / 1 -> undef
|
||||
|
@ -279,3 +279,24 @@ define i32 @test36(i32 %V) {
|
||||
%b = extractelement <4 x i32> undef, i32 %V
|
||||
ret i32 %b
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test37
|
||||
; CHECK: ret i32 undef
|
||||
define i32 @test37() {
|
||||
%b = udiv i32 undef, undef
|
||||
ret i32 %b
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test38
|
||||
; CHECK: ret i32 undef
|
||||
define i32 @test38(i32 %a) {
|
||||
%b = udiv i32 %a, undef
|
||||
ret i32 %b
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test39
|
||||
; CHECK: ret i32 undef
|
||||
define i32 @test39() {
|
||||
%b = udiv i32 0, undef
|
||||
ret i32 %b
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user