Skip to content

Commit 4bb006d

Browse files
fhahntru
authored andcommitted
[LV] Convert runtime diff check test to use opaque pointers.
Modernize the test to make it easier to extend with up-to-date IR. (cherry picked from commit 3b135ef)
1 parent 0c5ce1d commit 4bb006d

File tree

1 file changed

+39
-41
lines changed

1 file changed

+39
-41
lines changed

llvm/test/Transforms/LoopVectorize/runtime-checks-difference.ll

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33

44
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
55

6-
define void @same_step_and_size(i32* %a, i32* %b, i64 %n) {
6+
define void @same_step_and_size(ptr %a, i32* %b, i64 %n) {
77
; CHECK-LABEL: @same_step_and_size(
88
; CHECK-NEXT: entry:
9-
; CHECK-NEXT: [[A2:%.*]] = ptrtoint i32* [[A:%.*]] to i64
10-
; CHECK-NEXT: [[B1:%.*]] = ptrtoint i32* [[B:%.*]] to i64
9+
; CHECK-NEXT: [[A2:%.*]] = ptrtoint ptr [[A:%.*]] to i64
10+
; CHECK-NEXT: [[B1:%.*]] = ptrtoint ptr [[B:%.*]] to i64
1111
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
1212
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
1313
; CHECK: vector.memcheck:
@@ -20,11 +20,11 @@ entry:
2020

2121
loop:
2222
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
23-
%gep.a = getelementptr inbounds i32, i32* %a, i64 %iv
24-
%l = load i32, i32* %gep.a
23+
%gep.a = getelementptr inbounds i32, ptr %a, i64 %iv
24+
%l = load i32, ptr %gep.a
2525
%mul = mul nsw i32 %l, 3
26-
%gep.b = getelementptr inbounds i32, i32* %b, i64 %iv
27-
store i32 %mul, i32* %gep.b
26+
%gep.b = getelementptr inbounds i32, ptr %b, i64 %iv
27+
store i32 %mul, ptr %gep.b
2828
%iv.next = add nuw nsw i64 %iv, 1
2929
%exitcond = icmp eq i64 %iv.next, %n
3030
br i1 %exitcond, label %exit, label %loop
@@ -33,11 +33,11 @@ exit:
3333
ret void
3434
}
3535

36-
define void @same_step_and_size_no_dominance_between_accesses(i32* %a, i32* %b, i64 %n, i64 %x) {
36+
define void @same_step_and_size_no_dominance_between_accesses(ptr %a, ptr %b, i64 %n, i64 %x) {
3737
; CHECK-LABEL: @same_step_and_size_no_dominance_between_accesses(
3838
; CHECK-NEXT: entry:
39-
; CHECK-NEXT: [[B2:%.*]] = ptrtoint i32* [[B:%.*]] to i64
40-
; CHECK-NEXT: [[A1:%.*]] = ptrtoint i32* [[A:%.*]] to i64
39+
; CHECK-NEXT: [[B2:%.*]] = ptrtoint ptr [[B:%.*]] to i64
40+
; CHECK-NEXT: [[A1:%.*]] = ptrtoint ptr [[A:%.*]] to i64
4141
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
4242
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
4343
; CHECK: vector.memcheck:
@@ -54,13 +54,13 @@ loop:
5454
br i1 %cmp, label %then, label %else
5555

5656
then:
57-
%gep.a = getelementptr inbounds i32, i32* %a, i64 %iv
58-
store i32 0, i32* %gep.a
57+
%gep.a = getelementptr inbounds i32, ptr %a, i64 %iv
58+
store i32 0, ptr %gep.a
5959
br label %loop.latch
6060

6161
else:
62-
%gep.b = getelementptr inbounds i32, i32* %b, i64 %iv
63-
store i32 10, i32* %gep.b
62+
%gep.b = getelementptr inbounds i32, ptr %b, i64 %iv
63+
store i32 10, ptr %gep.b
6464
br label %loop.latch
6565

6666
loop.latch:
@@ -72,20 +72,18 @@ exit:
7272
ret void
7373
}
7474

75-
define void @different_steps_and_different_access_sizes(i16* %a, i32* %b, i64 %n) {
75+
define void @different_steps_and_different_access_sizes(ptr %a, ptr %b, i64 %n) {
7676
; CHECK-LABEL: @different_steps_and_different_access_sizes(
7777
; CHECK-NEXT: entry:
78-
; CHECK-NEXT: [[B1:%.*]] = bitcast i32* [[B:%.*]] to i8*
79-
; CHECK-NEXT: [[A3:%.*]] = bitcast i16* [[A:%.*]] to i8*
8078
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
8179
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
8280
; CHECK: vector.memcheck:
83-
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i32, i32* [[B]], i64 [[N]]
84-
; CHECK-NEXT: [[SCEVGEP2:%.*]] = bitcast i32* [[SCEVGEP]] to i8*
85-
; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i16, i16* [[A]], i64 [[N]]
86-
; CHECK-NEXT: [[SCEVGEP45:%.*]] = bitcast i16* [[SCEVGEP4]] to i8*
87-
; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult i8* [[B1]], [[SCEVGEP45]]
88-
; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult i8* [[A3]], [[SCEVGEP2]]
81+
; CHECK-NEXT: [[N_SHL_2:%.]] = shl i64 %n, 2
82+
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr %b, i64 [[N_SHL_2]]
83+
; CHECK-NEXT: [[N_SHL_1:%.]] = shl i64 %n, 1
84+
; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i8, ptr %a, i64 [[N_SHL_1]]
85+
; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr %b, [[SCEVGEP4]]
86+
; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr %a, [[SCEVGEP]]
8987
; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]]
9088
; CHECK-NEXT: br i1 [[FOUND_CONFLICT]], label %scalar.ph, label %vector.ph
9189
;
@@ -94,12 +92,12 @@ entry:
9492

9593
loop:
9694
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
97-
%gep.a = getelementptr inbounds i16, i16* %a, i64 %iv
98-
%l = load i16, i16* %gep.a
95+
%gep.a = getelementptr inbounds i16, ptr %a, i64 %iv
96+
%l = load i16, ptr %gep.a
9997
%l.ext = sext i16 %l to i32
10098
%mul = mul nsw i32 %l.ext, 3
101-
%gep.b = getelementptr inbounds i32, i32* %b, i64 %iv
102-
store i32 %mul, i32* %gep.b
99+
%gep.b = getelementptr inbounds i32, ptr %b, i64 %iv
100+
store i32 %mul, ptr %gep.b
103101
%iv.next = add nuw nsw i64 %iv, 1
104102
%exitcond = icmp eq i64 %iv.next, %n
105103
br i1 %exitcond, label %exit, label %loop
@@ -108,11 +106,11 @@ exit:
108106
ret void
109107
}
110108

111-
define void @steps_match_but_different_access_sizes_1([2 x i16]* %a, i32* %b, i64 %n) {
109+
define void @steps_match_but_different_access_sizes_1(ptr %a, ptr %b, i64 %n) {
112110
; CHECK-LABEL: @steps_match_but_different_access_sizes_1(
113111
; CHECK-NEXT: entry:
114-
; CHECK-NEXT: [[A2:%.*]] = ptrtoint [2 x i16]* [[A:%.*]] to i64
115-
; CHECK-NEXT: [[B1:%.*]] = ptrtoint i32* [[B:%.*]] to i64
112+
; CHECK-NEXT: [[A2:%.*]] = ptrtoint ptr [[A:%.*]] to i64
113+
; CHECK-NEXT: [[B1:%.*]] = ptrtoint ptr [[B:%.*]] to i64
116114
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
117115
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
118116
; CHECK: vector.memcheck:
@@ -126,12 +124,12 @@ entry:
126124

127125
loop:
128126
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
129-
%gep.a = getelementptr inbounds [2 x i16], [2 x i16]* %a, i64 %iv, i64 1
130-
%l = load i16, i16* %gep.a
127+
%gep.a = getelementptr inbounds [2 x i16], ptr %a, i64 %iv, i64 1
128+
%l = load i16, ptr %gep.a
131129
%l.ext = sext i16 %l to i32
132130
%mul = mul nsw i32 %l.ext, 3
133-
%gep.b = getelementptr inbounds i32, i32* %b, i64 %iv
134-
store i32 %mul, i32* %gep.b
131+
%gep.b = getelementptr inbounds i32, ptr %b, i64 %iv
132+
store i32 %mul, ptr %gep.b
135133
%iv.next = add nuw nsw i64 %iv, 1
136134
%exitcond = icmp eq i64 %iv.next, %n
137135
br i1 %exitcond, label %exit, label %loop
@@ -142,11 +140,11 @@ exit:
142140

143141
; Same as @steps_match_but_different_access_sizes_1, but with source and sink
144142
; accesses flipped.
145-
define void @steps_match_but_different_access_sizes_2([2 x i16]* %a, i32* %b, i64 %n) {
143+
define void @steps_match_but_different_access_sizes_2(ptr %a, ptr %b, i64 %n) {
146144
; CHECK-LABEL: @steps_match_but_different_access_sizes_2(
147145
; CHECK-NEXT: entry:
148-
; CHECK-NEXT: [[B2:%.*]] = ptrtoint i32* [[B:%.*]] to i64
149-
; CHECK-NEXT: [[A1:%.*]] = ptrtoint [2 x i16]* [[A:%.*]] to i64
146+
; CHECK-NEXT: [[B2:%.*]] = ptrtoint ptr [[B:%.*]] to i64
147+
; CHECK-NEXT: [[A1:%.*]] = ptrtoint ptr [[A:%.*]] to i64
150148
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
151149
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
152150
; CHECK: vector.memcheck:
@@ -160,12 +158,12 @@ entry:
160158

161159
loop:
162160
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
163-
%gep.b = getelementptr inbounds i32, i32* %b, i64 %iv
164-
%l = load i32, i32* %gep.b
161+
%gep.b = getelementptr inbounds i32, ptr %b, i64 %iv
162+
%l = load i32, ptr %gep.b
165163
%mul = mul nsw i32 %l, 3
166-
%gep.a = getelementptr inbounds [2 x i16], [2 x i16]* %a, i64 %iv, i64 1
164+
%gep.a = getelementptr inbounds [2 x i16], ptr %a, i64 %iv, i64 1
167165
%trunc = trunc i32 %mul to i16
168-
store i16 %trunc, i16* %gep.a
166+
store i16 %trunc, ptr %gep.a
169167
%iv.next = add nuw nsw i64 %iv, 1
170168
%exitcond = icmp eq i64 %iv.next, %n
171169
br i1 %exitcond, label %exit, label %loop

0 commit comments

Comments
 (0)