Skip to content

Commit 5ecc86b

Browse files
committed
[ValueTracking] test trunc to i1 as condition in dominating condition. (NFC)
1 parent 7b348f9 commit 5ecc86b

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed

llvm/test/Transforms/InstCombine/known-bits.ll

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2161,6 +2161,158 @@ define i1 @mul_nuw_nsw_nonneg_cant_be_one_commuted(i8 %x, i8 %y) {
21612161
ret i1 %cmp
21622162
}
21632163

2164+
define i8 @test_trunc_and_1(i8 %a) {
2165+
; CHECK-LABEL: @test_trunc_and_1(
2166+
; CHECK-NEXT: entry:
2167+
; CHECK-NEXT: [[CAST:%.*]] = trunc i8 [[A:%.*]] to i1
2168+
; CHECK-NEXT: br i1 [[CAST]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
2169+
; CHECK: if.then:
2170+
; CHECK-NEXT: [[B:%.*]] = and i8 [[A]], 1
2171+
; CHECK-NEXT: ret i8 [[B]]
2172+
; CHECK: if.else:
2173+
; CHECK-NEXT: [[C:%.*]] = and i8 [[A]], 1
2174+
; CHECK-NEXT: ret i8 [[C]]
2175+
;
2176+
entry:
2177+
%cast = trunc i8 %a to i1
2178+
br i1 %cast, label %if.then, label %if.else
2179+
2180+
if.then:
2181+
%b = and i8 %a, 1
2182+
ret i8 %b
2183+
2184+
if.else:
2185+
%c = and i8 %a, 1
2186+
ret i8 %c
2187+
}
2188+
2189+
define i8 @test_not_trunc_and_1(i8 %a) {
2190+
; CHECK-LABEL: @test_not_trunc_and_1(
2191+
; CHECK-NEXT: entry:
2192+
; CHECK-NEXT: [[CAST:%.*]] = trunc i8 [[A:%.*]] to i1
2193+
; CHECK-NEXT: br i1 [[CAST]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
2194+
; CHECK: if.then:
2195+
; CHECK-NEXT: [[B:%.*]] = and i8 [[A]], 1
2196+
; CHECK-NEXT: ret i8 [[B]]
2197+
; CHECK: if.else:
2198+
; CHECK-NEXT: [[C:%.*]] = and i8 [[A]], 1
2199+
; CHECK-NEXT: ret i8 [[C]]
2200+
;
2201+
entry:
2202+
%cast = trunc i8 %a to i1
2203+
%not = xor i1 %cast, true
2204+
br i1 %not, label %if.then, label %if.else
2205+
2206+
if.then:
2207+
%b = and i8 %a, 1
2208+
ret i8 %b
2209+
2210+
if.else:
2211+
%c = and i8 %a, 1
2212+
ret i8 %c
2213+
}
2214+
2215+
define i8 @neg_test_trunc_or_2(i8 %a) {
2216+
; CHECK-LABEL: @neg_test_trunc_or_2(
2217+
; CHECK-NEXT: entry:
2218+
; CHECK-NEXT: [[CAST:%.*]] = trunc i8 [[A:%.*]] to i1
2219+
; CHECK-NEXT: br i1 [[CAST]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
2220+
; CHECK: if.then:
2221+
; CHECK-NEXT: [[B:%.*]] = or i8 [[A]], 2
2222+
; CHECK-NEXT: ret i8 [[B]]
2223+
; CHECK: if.else:
2224+
; CHECK-NEXT: [[C:%.*]] = or i8 [[A]], 2
2225+
; CHECK-NEXT: ret i8 [[C]]
2226+
;
2227+
entry:
2228+
%cast = trunc i8 %a to i1
2229+
br i1 %cast, label %if.then, label %if.else
2230+
2231+
if.then:
2232+
%b = or i8 %a, 2
2233+
ret i8 %b
2234+
2235+
if.else:
2236+
%c = or i8 %a, 2
2237+
ret i8 %c
2238+
}
2239+
2240+
define i8 @test_trunc_nuw_and_1(i8 %a) {
2241+
; CHECK-LABEL: @test_trunc_nuw_and_1(
2242+
; CHECK-NEXT: entry:
2243+
; CHECK-NEXT: [[CAST:%.*]] = trunc nuw i8 [[A:%.*]] to i1
2244+
; CHECK-NEXT: br i1 [[CAST]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
2245+
; CHECK: if.then:
2246+
; CHECK-NEXT: [[B:%.*]] = and i8 [[A]], 1
2247+
; CHECK-NEXT: ret i8 [[B]]
2248+
; CHECK: if.else:
2249+
; CHECK-NEXT: [[C:%.*]] = and i8 [[A]], 1
2250+
; CHECK-NEXT: ret i8 [[C]]
2251+
;
2252+
entry:
2253+
%cast = trunc nuw i8 %a to i1
2254+
br i1 %cast, label %if.else, label %if.then
2255+
2256+
if.then:
2257+
%b = and i8 %a, 1
2258+
ret i8 %b
2259+
2260+
if.else:
2261+
%c = and i8 %a, 1
2262+
ret i8 %c
2263+
}
2264+
2265+
define i8 @test_trunc_nuw_or_2(i8 %a) {
2266+
; CHECK-LABEL: @test_trunc_nuw_or_2(
2267+
; CHECK-NEXT: entry:
2268+
; CHECK-NEXT: [[CAST:%.*]] = trunc nuw i8 [[A:%.*]] to i1
2269+
; CHECK-NEXT: br i1 [[CAST]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
2270+
; CHECK: if.then:
2271+
; CHECK-NEXT: [[B:%.*]] = or i8 [[A]], 2
2272+
; CHECK-NEXT: ret i8 [[B]]
2273+
; CHECK: if.else:
2274+
; CHECK-NEXT: [[C:%.*]] = or i8 [[A]], 2
2275+
; CHECK-NEXT: ret i8 [[C]]
2276+
;
2277+
entry:
2278+
%cast = trunc nuw i8 %a to i1
2279+
br i1 %cast, label %if.else, label %if.then
2280+
2281+
if.then:
2282+
%b = or i8 %a, 2
2283+
ret i8 %b
2284+
2285+
if.else:
2286+
%c = or i8 %a, 2
2287+
ret i8 %c
2288+
}
2289+
2290+
define i8 @test_not_trunc_nuw_and_1(i8 %a) {
2291+
; CHECK-LABEL: @test_not_trunc_nuw_and_1(
2292+
; CHECK-NEXT: entry:
2293+
; CHECK-NEXT: [[CAST:%.*]] = trunc nuw i8 [[A:%.*]] to i1
2294+
; CHECK-NEXT: br i1 [[CAST]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
2295+
; CHECK: if.then:
2296+
; CHECK-NEXT: [[B:%.*]] = and i8 [[A]], 1
2297+
; CHECK-NEXT: ret i8 [[B]]
2298+
; CHECK: if.else:
2299+
; CHECK-NEXT: [[C:%.*]] = and i8 [[A]], 1
2300+
; CHECK-NEXT: ret i8 [[C]]
2301+
;
2302+
entry:
2303+
%cast = trunc nuw i8 %a to i1
2304+
%not = xor i1 %cast, true
2305+
br i1 %not, label %if.then, label %if.else
2306+
2307+
if.then:
2308+
%b = and i8 %a, 1
2309+
ret i8 %b
2310+
2311+
if.else:
2312+
%c = and i8 %a, 1
2313+
ret i8 %c
2314+
}
2315+
21642316
declare void @dummy()
21652317
declare void @use(i1)
21662318
declare void @sink(i8)

0 commit comments

Comments
 (0)