@@ -1421,6 +1421,37 @@ if.end:
1421
1421
ret i1 %cmp1
1422
1422
}
1423
1423
1424
+ ; FIXME: This is a miscompile.
1425
+ define i1 @phi_knownnonzero_eq_or_disjoint_icmp (i32 %n , i32 %s , ptr %P , i32 %val ) {
1426
+ ; CHECK-LABEL: @phi_knownnonzero_eq_or_disjoint_icmp(
1427
+ ; CHECK-NEXT: entry:
1428
+ ; CHECK-NEXT: [[TOBOOL:%.*]] = icmp slt i32 [[N:%.*]], [[S:%.*]]
1429
+ ; CHECK-NEXT: br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
1430
+ ; CHECK: if.then:
1431
+ ; CHECK-NEXT: br label [[IF_END]]
1432
+ ; CHECK: if.end:
1433
+ ; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 1, [[IF_THEN]] ], [ [[N]], [[ENTRY:%.*]] ]
1434
+ ; CHECK-NEXT: [[ORPHI:%.*]] = or disjoint i32 [[PHI]], [[VAL:%.*]]
1435
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[ORPHI]], 0
1436
+ ; CHECK-NEXT: ret i1 [[CMP1]]
1437
+ ;
1438
+ entry:
1439
+ %tobool = icmp slt i32 %n , %s
1440
+ br i1 %tobool , label %if.end , label %if.then
1441
+
1442
+ if.then:
1443
+ %load = load i32 , ptr %P
1444
+ %cmp = icmp eq i32 %n , %load
1445
+ %sel = select i1 %cmp , i32 1 , i32 2
1446
+ br label %if.end
1447
+
1448
+ if.end:
1449
+ %phi = phi i32 [ %sel , %if.then ], [ %n , %entry ]
1450
+ %orphi = or disjoint i32 %phi , %val
1451
+ %cmp1 = icmp eq i32 %orphi , 0
1452
+ ret i1 %cmp1
1453
+ }
1454
+
1424
1455
define i1 @phi_knownnonzero_ne_oricmp (i32 %n , i32 %s , ptr %P , i32 %val ) {
1425
1456
; CHECK-LABEL: @phi_knownnonzero_ne_oricmp(
1426
1457
; CHECK-NEXT: entry:
0 commit comments