537 changes: 92 additions & 445 deletions lib/Transforms/Scalar/SCCP.cpp

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions test/Transforms/IPConstantProp/PR16052.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ entry:

; CHECK-DAG: define i64 @fn2(
; CHECK: %[[CALL:.*]] = call i64 @fn1(i64 undef)
; CHECK-NEXT: ret i64 undef

define internal i64 @fn1(i64 %p1) {
entry:
Expand All @@ -22,5 +23,4 @@ entry:
}

; CHECK-DAG: define internal i64 @fn1(
; CHECK: %[[SEL:.*]] = select i1 undef, i64 undef, i64 undef
; CHECK: ret i64 %[[SEL]]
; CHECK: ret i64 undef
4 changes: 2 additions & 2 deletions test/Transforms/IPConstantProp/PR26044.ll
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ entry:
}

; CHECK-LABEL: define void @fn2(
; CHECK: call i32 @fn1(i32 undef)
; CHECK: call i32 @fn1(i32 %0)

; CHECK-LABEL: define internal i32 @fn1(
; CHECK:%[[COND:.*]] = select i1 undef, i32 undef, i32 undef
; CHECK:%[[COND:.*]] = select i1 %tobool, i32 %p1, i32 %p1
; CHECK: ret i32 %[[COND]]
4 changes: 2 additions & 2 deletions test/Transforms/SCCP/undef-resolve.ll
Original file line number Diff line number Diff line change
Expand Up @@ -154,12 +154,12 @@ define i1 @test8() {
; CHECK: ret i1 undef
}

; Make sure we don't conclude that relational comparisons simplify to undef
; Make sure we constant-fold to false
define i1 @test9() {
%t = icmp ugt i32 undef, -1
ret i1 %t
; CHECK-LABEL: @test9(
; CHECK: icmp ugt
; CHECK: ret i1 false
}

; Make sure we handle extractvalue
Expand Down