@@ -2313,6 +2313,58 @@ if.else:
2313
2313
ret i8 %c
2314
2314
}
2315
2315
2316
+ define i8 @test_trunc_cond_and (i8 %x , i1 %c ) {
2317
+ ; CHECK-LABEL: @test_trunc_cond_and(
2318
+ ; CHECK-NEXT: [[CMP:%.*]] = trunc i8 [[X:%.*]] to i1
2319
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[C:%.*]], [[CMP]]
2320
+ ; CHECK-NEXT: br i1 [[COND]], label [[IF:%.*]], label [[EXIT:%.*]]
2321
+ ; CHECK: if:
2322
+ ; CHECK-NEXT: [[OR1:%.*]] = or i8 [[X]], -2
2323
+ ; CHECK-NEXT: ret i8 [[OR1]]
2324
+ ; CHECK: exit:
2325
+ ; CHECK-NEXT: [[OR2:%.*]] = or i8 [[X]], -2
2326
+ ; CHECK-NEXT: ret i8 [[OR2]]
2327
+ ;
2328
+ %cmp = trunc i8 %x to i1
2329
+ %cond = and i1 %cmp , %c
2330
+ br i1 %cond , label %if , label %exit
2331
+
2332
+ if:
2333
+ %or1 = or i8 %x , -2
2334
+ ret i8 %or1
2335
+
2336
+ exit:
2337
+ %or2 = or i8 %x , -2
2338
+ ret i8 %or2
2339
+ }
2340
+
2341
+ define i8 @test_not_trunc_cond_and (i8 %x , i1 %c ) {
2342
+ ; CHECK-LABEL: @test_not_trunc_cond_and(
2343
+ ; CHECK-NEXT: [[CMP:%.*]] = trunc i8 [[X:%.*]] to i1
2344
+ ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[CMP]], true
2345
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[C:%.*]], [[NOT]]
2346
+ ; CHECK-NEXT: br i1 [[COND]], label [[IF:%.*]], label [[EXIT:%.*]]
2347
+ ; CHECK: if:
2348
+ ; CHECK-NEXT: [[OR1:%.*]] = or i8 [[X]], -2
2349
+ ; CHECK-NEXT: ret i8 [[OR1]]
2350
+ ; CHECK: exit:
2351
+ ; CHECK-NEXT: [[OR2:%.*]] = or i8 [[X]], -2
2352
+ ; CHECK-NEXT: ret i8 [[OR2]]
2353
+ ;
2354
+ %cmp = trunc i8 %x to i1
2355
+ %not = xor i1 %cmp , true
2356
+ %cond = and i1 %not , %c
2357
+ br i1 %cond , label %if , label %exit
2358
+
2359
+ if:
2360
+ %or1 = or i8 %x , -2
2361
+ ret i8 %or1
2362
+
2363
+ exit:
2364
+ %or2 = or i8 %x , -2
2365
+ ret i8 %or2
2366
+ }
2367
+
2316
2368
declare void @dummy ()
2317
2369
declare void @use (i1 )
2318
2370
declare void @sink (i8 )
0 commit comments