@@ -1919,9 +1919,9 @@ define i32 @select_dominating_cond_inverted_multiple_duplicating_preds(i1 %cond,
1919
1919
; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_FALSE:%.*]], label [[IF_TRUE:%.*]]
1920
1920
; CHECK: if.true:
1921
1921
; CHECK-NEXT: switch i32 [[COND2:%.*]], label [[SWITCH_CASE_1:%.*]] [
1922
- ; CHECK-NEXT: i32 1, label [[MERGE:%.*]]
1923
- ; CHECK-NEXT: i32 2, label [[MERGE]]
1924
- ; CHECK-NEXT: i32 3, label [[MERGE]]
1922
+ ; CHECK-NEXT: i32 1, label [[MERGE:%.*]]
1923
+ ; CHECK-NEXT: i32 2, label [[MERGE]]
1924
+ ; CHECK-NEXT: i32 3, label [[MERGE]]
1925
1925
; CHECK-NEXT: ]
1926
1926
; CHECK: switch.case.1:
1927
1927
; CHECK-NEXT: br label [[MERGE]]
@@ -2172,13 +2172,13 @@ define i32 @test_invoke_neg(i32 %x, i32 %y) nounwind uwtable ssp personality ptr
2172
2172
; CHECK-LABEL: @test_invoke_neg(
2173
2173
; CHECK-NEXT: entry:
2174
2174
; CHECK-NEXT: [[COND:%.*]] = invoke i1 @foo()
2175
- ; CHECK-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
2175
+ ; CHECK-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
2176
2176
; CHECK: invoke.cont:
2177
2177
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i32 [[X:%.*]], i32 [[Y:%.*]]
2178
2178
; CHECK-NEXT: ret i32 [[SEL]]
2179
2179
; CHECK: lpad:
2180
2180
; CHECK-NEXT: [[LP:%.*]] = landingpad { i1, i32 }
2181
- ; CHECK-NEXT: filter [0 x i1] zeroinitializer
2181
+ ; CHECK-NEXT: filter [0 x i1] zeroinitializer
2182
2182
; CHECK-NEXT: unreachable
2183
2183
;
2184
2184
entry:
@@ -2205,14 +2205,14 @@ define i32 @test_invoke_2_neg(i1 %cond, i32 %x, i32 %y) nounwind uwtable ssp per
2205
2205
; CHECK-NEXT: br label [[MERGE:%.*]]
2206
2206
; CHECK: if.false:
2207
2207
; CHECK-NEXT: [[RESULT:%.*]] = invoke i32 @bar()
2208
- ; CHECK-NEXT: to label [[MERGE]] unwind label [[LPAD:%.*]]
2208
+ ; CHECK-NEXT: to label [[MERGE]] unwind label [[LPAD:%.*]]
2209
2209
; CHECK: merge:
2210
2210
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 0, [[IF_TRUE]] ], [ [[RESULT]], [[IF_FALSE]] ]
2211
2211
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i32 1, i32 [[PHI]]
2212
2212
; CHECK-NEXT: ret i32 [[SEL]]
2213
2213
; CHECK: lpad:
2214
2214
; CHECK-NEXT: [[LP:%.*]] = landingpad { i1, i32 }
2215
- ; CHECK-NEXT: filter [0 x i1] zeroinitializer
2215
+ ; CHECK-NEXT: filter [0 x i1] zeroinitializer
2216
2216
; CHECK-NEXT: unreachable
2217
2217
;
2218
2218
entry:
@@ -2242,8 +2242,8 @@ define i32 @select_phi_same_condition_switch(i1 %cond, i32 %x, i32 %y) {
2242
2242
; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
2243
2243
; CHECK: if.true:
2244
2244
; CHECK-NEXT: switch i32 [[X:%.*]], label [[EXIT:%.*]] [
2245
- ; CHECK-NEXT: i32 1, label [[MERGE:%.*]]
2246
- ; CHECK-NEXT: i32 2, label [[MERGE]]
2245
+ ; CHECK-NEXT: i32 1, label [[MERGE:%.*]]
2246
+ ; CHECK-NEXT: i32 2, label [[MERGE]]
2247
2247
; CHECK-NEXT: ]
2248
2248
; CHECK: exit:
2249
2249
; CHECK-NEXT: ret i32 0
@@ -2903,6 +2903,31 @@ define ptr @select_replacement_gep_inbounds(ptr %base, i64 %offset) {
2903
2903
ret ptr %sel
2904
2904
}
2905
2905
2906
+ define i8 @replace_false_op_eq_shl_or_disjoint (i8 %x ) {
2907
+ ; CHECK-LABEL: @replace_false_op_eq_shl_or_disjoint(
2908
+ ; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[X:%.*]], 3
2909
+ ; CHECK-NEXT: [[OR:%.*]] = or i8 [[SHL]], [[X]]
2910
+ ; CHECK-NEXT: ret i8 [[OR]]
2911
+ ;
2912
+ %eq0 = icmp eq i8 %x , -1
2913
+ %shl = shl i8 %x , 3
2914
+ %or = or disjoint i8 %x , %shl
2915
+ %sel = select i1 %eq0 , i8 -1 , i8 %or
2916
+ ret i8 %sel
2917
+ }
2918
+
2919
+ ; FIXME: This is a miscompile.
2920
+ define i8 @select_or_disjoint_eq (i8 %x , i8 %y ) {
2921
+ ; CHECK-LABEL: @select_or_disjoint_eq(
2922
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint i8 [[X:%.*]], [[Y:%.*]]
2923
+ ; CHECK-NEXT: ret i8 [[OR]]
2924
+ ;
2925
+ %cmp = icmp eq i8 %x , %y
2926
+ %or = or disjoint i8 %x , %y
2927
+ %sel = select i1 %cmp , i8 %x , i8 %or
2928
+ ret i8 %sel
2929
+ }
2930
+
2906
2931
define <2 x i1 > @partial_true_undef_condval (<2 x i1 > %x ) {
2907
2932
; CHECK-LABEL: @partial_true_undef_condval(
2908
2933
; CHECK-NEXT: ret <2 x i1> <i1 true, i1 poison>
0 commit comments