@@ -2364,10 +2364,77 @@ _Z3fooPKc.exit20:
2364
2364
ret i1 %and9
2365
2365
}
2366
2366
2367
- define i1 @fold_or_phi_into_or_icmp (ptr noundef readnone %dv1 , ptr noundef %val1 , ptr noundef readnone %dv2 , ptr noundef %val2 ) {
2367
+ define i1 @fold_or_phi_into_or_icmp (ptr noundef readnone %dv1 , ptr noundef readnone %dv2 , ptr noundef %val1 , ptr noundef %val2 , i64 %i1 , i64 %i2 ) {
2368
2368
; CHECK-LABEL: @fold_or_phi_into_or_icmp(
2369
2369
; CHECK-NEXT: entry:
2370
2370
; CHECK-NEXT: [[CMP_I:%.*]] = icmp eq ptr [[VAL1:%.*]], null
2371
+ ; CHECK-NEXT: br i1 [[CMP_I]], label [[_Z3FOOPKC_EXIT:%.*]], label [[COND_I:%.*]]
2372
+ ; CHECK: cond.i:
2373
+ ; CHECK-NEXT: br label [[_Z3FOOPKC_EXIT]]
2374
+ ; CHECK: _Z3fooPKc.exit:
2375
+ ; CHECK-NEXT: [[RETVAL_0_I:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[I1:%.*]], [[COND_I]] ]
2376
+ ; CHECK-NEXT: [[CMP_I10:%.*]] = icmp eq ptr [[VAL2:%.*]], null
2377
+ ; CHECK-NEXT: br i1 [[CMP_I10]], label [[_Z3FOOPKC_EXIT19:%.*]], label [[COND_I11:%.*]]
2378
+ ; CHECK: cond.i11:
2379
+ ; CHECK-NEXT: br label [[_Z3FOOPKC_EXIT19]]
2380
+ ; CHECK: _Z3fooPKc.exit19:
2381
+ ; CHECK-NEXT: [[RETVAL_0_I20:%.*]] = phi i64 [ 0, [[_Z3FOOPKC_EXIT]] ], [ [[I2:%.*]], [[COND_I11]] ]
2382
+ ; CHECK-NEXT: [[TMP0:%.*]] = or i64 [[RETVAL_0_I]], [[RETVAL_0_I20]]
2383
+ ; CHECK-NEXT: [[OR_COND_NOT:%.*]] = icmp eq i64 [[TMP0]], 0
2384
+ ; CHECK-NEXT: br i1 [[OR_COND_NOT]], label [[IF_THEN:%.*]], label [[IF_END4:%.*]]
2385
+ ; CHECK: if.then:
2386
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[DV1:%.*]], [[DV2:%.*]]
2387
+ ; CHECK-NEXT: br label [[CLEANUP:%.*]]
2388
+ ; CHECK: if.end4:
2389
+ ; CHECK-NEXT: [[TOBOOL2:%.*]] = icmp ne i64 [[RETVAL_0_I20]], 0
2390
+ ; CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i64 [[RETVAL_0_I]], 0
2391
+ ; CHECK-NEXT: [[OR_COND10:%.*]] = and i1 [[TOBOOL]], [[TOBOOL2]]
2392
+ ; CHECK-NEXT: br label [[CLEANUP]]
2393
+ ; CHECK: cleanup:
2394
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i1 [ [[CMP]], [[IF_THEN]] ], [ [[OR_COND10]], [[IF_END4]] ]
2395
+ ; CHECK-NEXT: ret i1 [[RETVAL_0]]
2396
+ ;
2397
+ entry:
2398
+ %cmp.i = icmp eq ptr %val1 , null
2399
+ br i1 %cmp.i , label %_Z3fooPKc.exit , label %cond.i
2400
+
2401
+ cond.i:
2402
+ br label %_Z3fooPKc.exit
2403
+
2404
+ _Z3fooPKc.exit:
2405
+ %retval.0.i = phi i64 [ 0 , %entry ], [ %i1 , %cond.i ]
2406
+ %cmp.i10 = icmp eq ptr %val2 , null
2407
+ br i1 %cmp.i10 , label %_Z3fooPKc.exit19 , label %cond.i11
2408
+
2409
+ cond.i11 :
2410
+ br label %_Z3fooPKc.exit19
2411
+
2412
+ _Z3fooPKc.exit19:
2413
+ %retval.0.i20 = phi i64 [ 0 , %_Z3fooPKc.exit ], [ %i2 , %cond.i11 ]
2414
+ %0 = or i64 %retval.0.i , %retval.0.i20
2415
+ %or.cond.not = icmp eq i64 %0 , 0
2416
+ br i1 %or.cond.not , label %if.then , label %if.end4
2417
+
2418
+ if.then:
2419
+ %cmp = icmp eq ptr %dv1 , %dv2
2420
+ br label %cleanup
2421
+
2422
+ if.end4:
2423
+ %tobool2 = icmp ne i64 %retval.0.i20 , 0
2424
+ %tobool = icmp ne i64 %retval.0.i , 0
2425
+ %or.cond10 = and i1 %tobool , %tobool2
2426
+ br label %cleanup
2427
+
2428
+ cleanup:
2429
+ %retval.0 = phi i1 [ %cmp , %if.then ], [ %or.cond10 , %if.end4 ]
2430
+ ret i1 %retval.0
2431
+ }
2432
+
2433
+
2434
+ define i1 @fold_or_phi_into_or_icmp2 (ptr noundef readnone %dv1 , ptr noundef %val1 , ptr noundef readnone %dv2 , ptr noundef %val2 ) {
2435
+ ; CHECK-LABEL: @fold_or_phi_into_or_icmp2(
2436
+ ; CHECK-NEXT: entry:
2437
+ ; CHECK-NEXT: [[CMP_I:%.*]] = icmp eq ptr [[VAL1:%.*]], null
2371
2438
; CHECK-NEXT: br i1 [[CMP_I]], label [[_Z3FOOPKC_EXIT:%.*]], label [[WHILE_COND_I:%.*]]
2372
2439
; CHECK: while.cond.i:
2373
2440
; CHECK-NEXT: [[TEST_0_I:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_COND_I]] ], [ [[VAL1]], [[ENTRY:%.*]] ]
0 commit comments