Skip to content

Commit b7af286

Browse files
committed
[InstCombine] Add test for "or disjoint" miscompile (NFC)
1 parent b8bbd5f commit b7af286

File tree

1 file changed

+31
-0
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+31
-0
lines changed

llvm/test/Transforms/InstCombine/phi.ll

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,6 +1421,37 @@ if.end:
14211421
ret i1 %cmp1
14221422
}
14231423

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+
14241455
define i1 @phi_knownnonzero_ne_oricmp(i32 %n, i32 %s, ptr %P, i32 %val) {
14251456
; CHECK-LABEL: @phi_knownnonzero_ne_oricmp(
14261457
; CHECK-NEXT: entry:

0 commit comments

Comments
 (0)