3
3
4
4
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
5
5
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 ) {
7
7
; CHECK-LABEL: @same_step_and_size(
8
8
; 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
11
11
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
12
12
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
13
13
; CHECK: vector.memcheck:
@@ -20,11 +20,11 @@ entry:
20
20
21
21
loop:
22
22
%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
25
25
%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
28
28
%iv.next = add nuw nsw i64 %iv , 1
29
29
%exitcond = icmp eq i64 %iv.next , %n
30
30
br i1 %exitcond , label %exit , label %loop
@@ -33,11 +33,11 @@ exit:
33
33
ret void
34
34
}
35
35
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 ) {
37
37
; CHECK-LABEL: @same_step_and_size_no_dominance_between_accesses(
38
38
; 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
41
41
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
42
42
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
43
43
; CHECK: vector.memcheck:
@@ -54,13 +54,13 @@ loop:
54
54
br i1 %cmp , label %then , label %else
55
55
56
56
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
59
59
br label %loop.latch
60
60
61
61
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
64
64
br label %loop.latch
65
65
66
66
loop.latch:
@@ -72,20 +72,18 @@ exit:
72
72
ret void
73
73
}
74
74
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 ) {
76
76
; CHECK-LABEL: @different_steps_and_different_access_sizes(
77
77
; CHECK-NEXT: entry:
78
- ; CHECK-NEXT: [[B1:%.*]] = bitcast i32* [[B:%.*]] to i8*
79
- ; CHECK-NEXT: [[A3:%.*]] = bitcast i16* [[A:%.*]] to i8*
80
78
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
81
79
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
82
80
; 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 ]]
89
87
; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]]
90
88
; CHECK-NEXT: br i1 [[FOUND_CONFLICT]], label %scalar.ph, label %vector.ph
91
89
;
@@ -94,12 +92,12 @@ entry:
94
92
95
93
loop:
96
94
%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
99
97
%l.ext = sext i16 %l to i32
100
98
%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
103
101
%iv.next = add nuw nsw i64 %iv , 1
104
102
%exitcond = icmp eq i64 %iv.next , %n
105
103
br i1 %exitcond , label %exit , label %loop
@@ -108,11 +106,11 @@ exit:
108
106
ret void
109
107
}
110
108
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 ) {
112
110
; CHECK-LABEL: @steps_match_but_different_access_sizes_1(
113
111
; 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
116
114
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
117
115
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
118
116
; CHECK: vector.memcheck:
@@ -126,12 +124,12 @@ entry:
126
124
127
125
loop:
128
126
%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
131
129
%l.ext = sext i16 %l to i32
132
130
%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
135
133
%iv.next = add nuw nsw i64 %iv , 1
136
134
%exitcond = icmp eq i64 %iv.next , %n
137
135
br i1 %exitcond , label %exit , label %loop
@@ -142,11 +140,11 @@ exit:
142
140
143
141
; Same as @steps_match_but_different_access_sizes_1, but with source and sink
144
142
; 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 ) {
146
144
; CHECK-LABEL: @steps_match_but_different_access_sizes_2(
147
145
; 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
150
148
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[N:%.*]], 4
151
149
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %scalar.ph, label %vector.memcheck
152
150
; CHECK: vector.memcheck:
@@ -160,12 +158,12 @@ entry:
160
158
161
159
loop:
162
160
%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
165
163
%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
167
165
%trunc = trunc i32 %mul to i16
168
- store i16 %trunc , i16* %gep.a
166
+ store i16 %trunc , ptr %gep.a
169
167
%iv.next = add nuw nsw i64 %iv , 1
170
168
%exitcond = icmp eq i64 %iv.next , %n
171
169
br i1 %exitcond , label %exit , label %loop
0 commit comments