Skip to content

Commit 7d7b178

Browse files
committed
[IRCE][Test] Add test showing that fake wide exit does not inhibit the transform
1 parent 05e4c01 commit 7d7b178

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

llvm/test/Transforms/IRCE/wide_indvar.ll

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,60 @@ check_failed:
10571057
ret i32 -1
10581058
}
10591059

1060+
; Check that fake wide exit doesn't inhibit the transform.
1061+
define i16 @test_fake_wide_exit(i64 %x) {
1062+
; CHECK-LABEL: define i16 @test_fake_wide_exit
1063+
; CHECK-SAME: (i64 [[X:%.*]]) {
1064+
; CHECK-NEXT: entry:
1065+
; CHECK-NEXT: br label [[LOOP:%.*]]
1066+
; CHECK: loop:
1067+
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ]
1068+
; CHECK-NEXT: [[IV_WIDE:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[IV_WIDE_NEXT:%.*]], [[BACKEDGE]] ]
1069+
; CHECK-NEXT: [[RC:%.*]] = icmp slt i32 [[IV]], 100
1070+
; CHECK-NEXT: br i1 true, label [[CHECKED:%.*]], label [[CHECK_FAILED:%.*]]
1071+
; CHECK: checked:
1072+
; CHECK-NEXT: [[RC_WIDE:%.*]] = icmp ult i64 [[IV_WIDE]], [[X]]
1073+
; CHECK-NEXT: br i1 [[RC_WIDE]], label [[BACKEDGE]], label [[CHECK_FAILED]]
1074+
; CHECK: backedge:
1075+
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
1076+
; CHECK-NEXT: [[IV_WIDE_NEXT]] = add i64 [[IV_WIDE]], 1
1077+
; CHECK-NEXT: [[NARROW_IV:%.*]] = trunc i32 [[IV_NEXT]] to i16
1078+
; CHECK-NEXT: [[LATCH_COND:%.*]] = icmp slt i16 [[NARROW_IV]], 100
1079+
; CHECK-NEXT: br i1 [[LATCH_COND]], label [[LOOP]], label [[EXIT:%.*]]
1080+
; CHECK: exit:
1081+
; CHECK-NEXT: [[NARROW_IV_LCSSA:%.*]] = phi i16 [ [[NARROW_IV]], [[BACKEDGE]] ]
1082+
; CHECK-NEXT: ret i16 [[NARROW_IV_LCSSA]]
1083+
; CHECK: check_failed:
1084+
; CHECK-NEXT: ret i16 -1
1085+
;
1086+
entry:
1087+
br label %loop
1088+
1089+
loop:
1090+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
1091+
%iv.wide = phi i64 [ 0, %entry ], [ %iv.wide.next, %backedge ]
1092+
%rc = icmp slt i32 %iv, 100
1093+
br i1 %rc, label %checked, label %check_failed
1094+
1095+
checked:
1096+
%rc.wide = icmp ult i64 %iv.wide, %x
1097+
br i1 %rc.wide, label %backedge, label %check_failed
1098+
1099+
backedge:
1100+
%iv.next = add i32 %iv, 1
1101+
%iv.wide.next = add i64 %iv.wide, 1
1102+
%narrow.iv = trunc i32 %iv.next to i16
1103+
%latch.cond = icmp slt i16 %narrow.iv, 100
1104+
br i1 %latch.cond, label %loop, label %exit
1105+
1106+
exit:
1107+
ret i16 %narrow.iv
1108+
1109+
check_failed:
1110+
ret i16 -1
1111+
}
1112+
1113+
10601114
!0 = !{i32 0, i32 2147483647}
10611115
!1 = !{i64 0, i64 9223372036854775807}
10621116
!2 = !{i32 1, i32 2147483647}

0 commit comments

Comments
 (0)