1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu -mcpu=bdver2 < %s | FileCheck %s
4 define void @add0(i32* noalias %dst, i32* noalias %src) {
7 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
8 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
9 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
10 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
11 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
12 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
13 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast i32* [[SRC]] to <4 x i32>*
14 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, <4 x i32>* [[TMP0]], align 4
15 ; CHECK-NEXT: [[TMP2:%.*]] = add nsw <4 x i32> [[TMP1]], <i32 1, i32 1, i32 2, i32 3>
16 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i32* [[DST]] to <4 x i32>*
17 ; CHECK-NEXT: store <4 x i32> [[TMP2]], <4 x i32>* [[TMP3]], align 4
18 ; CHECK-NEXT: ret void
21 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
22 %0 = load i32, i32* %src, align 4
23 %add = add nsw i32 %0, 1
24 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
25 store i32 %add, i32* %dst, align 4
26 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
27 %1 = load i32, i32* %incdec.ptr, align 4
28 %add3 = add nsw i32 %1, 1
29 %incdec.ptr4 = getelementptr inbounds i32, i32* %dst, i64 2
30 store i32 %add3, i32* %incdec.ptr1, align 4
31 %incdec.ptr5 = getelementptr inbounds i32, i32* %src, i64 3
32 %2 = load i32, i32* %incdec.ptr2, align 4
33 %add6 = add nsw i32 %2, 2
34 %incdec.ptr7 = getelementptr inbounds i32, i32* %dst, i64 3
35 store i32 %add6, i32* %incdec.ptr4, align 4
36 %3 = load i32, i32* %incdec.ptr5, align 4
37 %add9 = add nsw i32 %3, 3
38 store i32 %add9, i32* %incdec.ptr7, align 4
42 define void @add1(i32* noalias %dst, i32* noalias %src) {
45 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
46 ; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[SRC]], align 4
47 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
48 ; CHECK-NEXT: store i32 [[TMP0]], i32* [[DST]], align 4
49 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
50 ; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[INCDEC_PTR]], align 4
51 ; CHECK-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP1]], 1
52 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
53 ; CHECK-NEXT: store i32 [[ADD3]], i32* [[INCDEC_PTR1]], align 4
54 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
55 ; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[INCDEC_PTR2]], align 4
56 ; CHECK-NEXT: [[ADD6:%.*]] = add nsw i32 [[TMP2]], 2
57 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
58 ; CHECK-NEXT: store i32 [[ADD6]], i32* [[INCDEC_PTR4]], align 4
59 ; CHECK-NEXT: [[TMP3:%.*]] = load i32, i32* [[INCDEC_PTR5]], align 4
60 ; CHECK-NEXT: [[ADD9:%.*]] = add nsw i32 [[TMP3]], 3
61 ; CHECK-NEXT: store i32 [[ADD9]], i32* [[INCDEC_PTR7]], align 4
62 ; CHECK-NEXT: ret void
65 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
66 %0 = load i32, i32* %src, align 4
67 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
68 store i32 %0, i32* %dst, align 4
69 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
70 %1 = load i32, i32* %incdec.ptr, align 4
71 %add3 = add nsw i32 %1, 1
72 %incdec.ptr4 = getelementptr inbounds i32, i32* %dst, i64 2
73 store i32 %add3, i32* %incdec.ptr1, align 4
74 %incdec.ptr5 = getelementptr inbounds i32, i32* %src, i64 3
75 %2 = load i32, i32* %incdec.ptr2, align 4
76 %add6 = add nsw i32 %2, 2
77 %incdec.ptr7 = getelementptr inbounds i32, i32* %dst, i64 3
78 store i32 %add6, i32* %incdec.ptr4, align 4
79 %3 = load i32, i32* %incdec.ptr5, align 4
80 %add9 = add nsw i32 %3, 3
81 store i32 %add9, i32* %incdec.ptr7, align 4
85 define void @sub0(i32* noalias %dst, i32* noalias %src) {
88 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
89 ; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[SRC]], align 4
90 ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[TMP0]], -1
91 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
92 ; CHECK-NEXT: store i32 [[SUB]], i32* [[DST]], align 4
93 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
94 ; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[INCDEC_PTR]], align 4
95 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
96 ; CHECK-NEXT: store i32 [[TMP1]], i32* [[INCDEC_PTR1]], align 4
97 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
98 ; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[INCDEC_PTR2]], align 4
99 ; CHECK-NEXT: [[SUB5:%.*]] = add nsw i32 [[TMP2]], -2
100 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
101 ; CHECK-NEXT: store i32 [[SUB5]], i32* [[INCDEC_PTR3]], align 4
102 ; CHECK-NEXT: [[TMP3:%.*]] = load i32, i32* [[INCDEC_PTR4]], align 4
103 ; CHECK-NEXT: [[SUB8:%.*]] = add nsw i32 [[TMP3]], -3
104 ; CHECK-NEXT: store i32 [[SUB8]], i32* [[INCDEC_PTR6]], align 4
105 ; CHECK-NEXT: ret void
108 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
109 %0 = load i32, i32* %src, align 4
110 %sub = add nsw i32 %0, -1
111 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
112 store i32 %sub, i32* %dst, align 4
113 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
114 %1 = load i32, i32* %incdec.ptr, align 4
115 %incdec.ptr3 = getelementptr inbounds i32, i32* %dst, i64 2
116 store i32 %1, i32* %incdec.ptr1, align 4
117 %incdec.ptr4 = getelementptr inbounds i32, i32* %src, i64 3
118 %2 = load i32, i32* %incdec.ptr2, align 4
119 %sub5 = add nsw i32 %2, -2
120 %incdec.ptr6 = getelementptr inbounds i32, i32* %dst, i64 3
121 store i32 %sub5, i32* %incdec.ptr3, align 4
122 %3 = load i32, i32* %incdec.ptr4, align 4
123 %sub8 = add nsw i32 %3, -3
124 store i32 %sub8, i32* %incdec.ptr6, align 4
128 define void @sub1(i32* noalias %dst, i32* noalias %src) {
129 ; CHECK-LABEL: @sub1(
131 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
132 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
133 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
134 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
135 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
136 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
137 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast i32* [[SRC]] to <4 x i32>*
138 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, <4 x i32>* [[TMP0]], align 4
139 ; CHECK-NEXT: [[TMP2:%.*]] = add nsw <4 x i32> [[TMP1]], <i32 4, i32 -1, i32 -2, i32 -3>
140 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i32* [[DST]] to <4 x i32>*
141 ; CHECK-NEXT: store <4 x i32> [[TMP2]], <4 x i32>* [[TMP3]], align 4
142 ; CHECK-NEXT: ret void
145 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
146 %0 = load i32, i32* %src, align 4
147 %add = add nsw i32 %0, 4
148 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
149 store i32 %add, i32* %dst, align 4
150 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
151 %1 = load i32, i32* %incdec.ptr, align 4
152 %sub = add nsw i32 %1, -1
153 %incdec.ptr3 = getelementptr inbounds i32, i32* %dst, i64 2
154 store i32 %sub, i32* %incdec.ptr1, align 4
155 %incdec.ptr4 = getelementptr inbounds i32, i32* %src, i64 3
156 %2 = load i32, i32* %incdec.ptr2, align 4
157 %sub5 = add nsw i32 %2, -2
158 %incdec.ptr6 = getelementptr inbounds i32, i32* %dst, i64 3
159 store i32 %sub5, i32* %incdec.ptr3, align 4
160 %3 = load i32, i32* %incdec.ptr4, align 4
161 %sub8 = add nsw i32 %3, -3
162 store i32 %sub8, i32* %incdec.ptr6, align 4
166 define void @sub2(i32* noalias %dst, i32* noalias %src) {
167 ; CHECK-LABEL: @sub2(
169 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
170 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
171 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
172 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
173 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
174 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
175 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast i32* [[SRC]] to <4 x i32>*
176 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, <4 x i32>* [[TMP0]], align 4
177 ; CHECK-NEXT: [[TMP2:%.*]] = add nsw <4 x i32> [[TMP1]], <i32 -1, i32 -1, i32 -2, i32 -3>
178 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i32* [[DST]] to <4 x i32>*
179 ; CHECK-NEXT: store <4 x i32> [[TMP2]], <4 x i32>* [[TMP3]], align 4
180 ; CHECK-NEXT: ret void
183 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
184 %0 = load i32, i32* %src, align 4
185 %sub = add nsw i32 %0, -1
186 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
187 store i32 %sub, i32* %dst, align 4
188 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
189 %1 = load i32, i32* %incdec.ptr, align 4
190 %sub3 = add nsw i32 %1, -1
191 %incdec.ptr4 = getelementptr inbounds i32, i32* %dst, i64 2
192 store i32 %sub3, i32* %incdec.ptr1, align 4
193 %incdec.ptr5 = getelementptr inbounds i32, i32* %src, i64 3
194 %2 = load i32, i32* %incdec.ptr2, align 4
195 %sub6 = add nsw i32 %2, -2
196 %incdec.ptr7 = getelementptr inbounds i32, i32* %dst, i64 3
197 store i32 %sub6, i32* %incdec.ptr4, align 4
198 %3 = load i32, i32* %incdec.ptr5, align 4
199 %sub9 = add nsw i32 %3, -3
200 store i32 %sub9, i32* %incdec.ptr7, align 4
204 define void @addsub0(i32* noalias %dst, i32* noalias %src) {
205 ; CHECK-LABEL: @addsub0(
207 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
208 ; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[SRC]], align 4
209 ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[TMP0]], -1
210 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
211 ; CHECK-NEXT: store i32 [[SUB]], i32* [[DST]], align 4
212 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
213 ; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[INCDEC_PTR]], align 4
214 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
215 ; CHECK-NEXT: store i32 [[TMP1]], i32* [[INCDEC_PTR1]], align 4
216 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
217 ; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[INCDEC_PTR2]], align 4
218 ; CHECK-NEXT: [[SUB5:%.*]] = add nsw i32 [[TMP2]], -2
219 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
220 ; CHECK-NEXT: store i32 [[SUB5]], i32* [[INCDEC_PTR3]], align 4
221 ; CHECK-NEXT: [[TMP3:%.*]] = load i32, i32* [[INCDEC_PTR4]], align 4
222 ; CHECK-NEXT: [[SUB8:%.*]] = sub nsw i32 [[TMP3]], -3
223 ; CHECK-NEXT: store i32 [[SUB8]], i32* [[INCDEC_PTR6]], align 4
224 ; CHECK-NEXT: ret void
227 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
228 %0 = load i32, i32* %src, align 4
229 %sub = add nsw i32 %0, -1
230 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
231 store i32 %sub, i32* %dst, align 4
232 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
233 %1 = load i32, i32* %incdec.ptr, align 4
234 %incdec.ptr3 = getelementptr inbounds i32, i32* %dst, i64 2
235 store i32 %1, i32* %incdec.ptr1, align 4
236 %incdec.ptr4 = getelementptr inbounds i32, i32* %src, i64 3
237 %2 = load i32, i32* %incdec.ptr2, align 4
238 %sub5 = add nsw i32 %2, -2
239 %incdec.ptr6 = getelementptr inbounds i32, i32* %dst, i64 3
240 store i32 %sub5, i32* %incdec.ptr3, align 4
241 %3 = load i32, i32* %incdec.ptr4, align 4
242 %sub8 = sub nsw i32 %3, -3
243 store i32 %sub8, i32* %incdec.ptr6, align 4
247 define void @addsub1(i32* noalias %dst, i32* noalias %src) {
248 ; CHECK-LABEL: @addsub1(
250 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
251 ; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[SRC]], align 4
252 ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[TMP0]], -1
253 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
254 ; CHECK-NEXT: store i32 [[SUB]], i32* [[DST]], align 4
255 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
256 ; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[INCDEC_PTR]], align 4
257 ; CHECK-NEXT: [[SUB1:%.*]] = sub nsw i32 [[TMP1]], -1
258 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
259 ; CHECK-NEXT: store i32 [[SUB1]], i32* [[INCDEC_PTR1]], align 4
260 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
261 ; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[INCDEC_PTR2]], align 4
262 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
263 ; CHECK-NEXT: store i32 [[TMP2]], i32* [[INCDEC_PTR3]], align 4
264 ; CHECK-NEXT: [[TMP3:%.*]] = load i32, i32* [[INCDEC_PTR4]], align 4
265 ; CHECK-NEXT: [[SUB8:%.*]] = sub nsw i32 [[TMP3]], -3
266 ; CHECK-NEXT: store i32 [[SUB8]], i32* [[INCDEC_PTR6]], align 4
267 ; CHECK-NEXT: ret void
270 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
271 %0 = load i32, i32* %src, align 4
272 %sub = add nsw i32 %0, -1
273 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
274 store i32 %sub, i32* %dst, align 4
275 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
276 %1 = load i32, i32* %incdec.ptr, align 4
277 %sub1 = sub nsw i32 %1, -1
278 %incdec.ptr3 = getelementptr inbounds i32, i32* %dst, i64 2
279 store i32 %sub1, i32* %incdec.ptr1, align 4
280 %incdec.ptr4 = getelementptr inbounds i32, i32* %src, i64 3
281 %2 = load i32, i32* %incdec.ptr2, align 4
282 %incdec.ptr6 = getelementptr inbounds i32, i32* %dst, i64 3
283 store i32 %2, i32* %incdec.ptr3, align 4
284 %3 = load i32, i32* %incdec.ptr4, align 4
285 %sub8 = sub nsw i32 %3, -3
286 store i32 %sub8, i32* %incdec.ptr6, align 4
290 define void @mul(i32* noalias %dst, i32* noalias %src) {
293 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
294 ; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[SRC]], align 4
295 ; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP0]], 257
296 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
297 ; CHECK-NEXT: store i32 [[MUL]], i32* [[DST]], align 4
298 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
299 ; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[INCDEC_PTR]], align 4
300 ; CHECK-NEXT: [[MUL3:%.*]] = mul nsw i32 [[TMP1]], -3
301 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
302 ; CHECK-NEXT: store i32 [[MUL3]], i32* [[INCDEC_PTR1]], align 4
303 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
304 ; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[INCDEC_PTR2]], align 4
305 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
306 ; CHECK-NEXT: store i32 [[TMP2]], i32* [[INCDEC_PTR4]], align 4
307 ; CHECK-NEXT: [[TMP3:%.*]] = load i32, i32* [[INCDEC_PTR5]], align 4
308 ; CHECK-NEXT: [[MUL9:%.*]] = mul nsw i32 [[TMP3]], -9
309 ; CHECK-NEXT: store i32 [[MUL9]], i32* [[INCDEC_PTR7]], align 4
310 ; CHECK-NEXT: ret void
313 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
314 %0 = load i32, i32* %src, align 4
315 %mul = mul nsw i32 %0, 257
316 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
317 store i32 %mul, i32* %dst, align 4
318 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
319 %1 = load i32, i32* %incdec.ptr, align 4
320 %mul3 = mul nsw i32 %1, -3
321 %incdec.ptr4 = getelementptr inbounds i32, i32* %dst, i64 2
322 store i32 %mul3, i32* %incdec.ptr1, align 4
323 %incdec.ptr5 = getelementptr inbounds i32, i32* %src, i64 3
324 %2 = load i32, i32* %incdec.ptr2, align 4
325 %incdec.ptr7 = getelementptr inbounds i32, i32* %dst, i64 3
326 store i32 %2, i32* %incdec.ptr4, align 4
327 %3 = load i32, i32* %incdec.ptr5, align 4
328 %mul9 = mul nsw i32 %3, -9
329 store i32 %mul9, i32* %incdec.ptr7, align 4
333 define void @shl0(i32* noalias %dst, i32* noalias %src) {
334 ; CHECK-LABEL: @shl0(
336 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
337 ; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[SRC]], align 4
338 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
339 ; CHECK-NEXT: store i32 [[TMP0]], i32* [[DST]], align 4
340 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
341 ; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[INCDEC_PTR]], align 4
342 ; CHECK-NEXT: [[SHL:%.*]] = shl i32 [[TMP1]], 1
343 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
344 ; CHECK-NEXT: store i32 [[SHL]], i32* [[INCDEC_PTR1]], align 4
345 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
346 ; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[INCDEC_PTR2]], align 4
347 ; CHECK-NEXT: [[SHL5:%.*]] = shl i32 [[TMP2]], 2
348 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
349 ; CHECK-NEXT: store i32 [[SHL5]], i32* [[INCDEC_PTR3]], align 4
350 ; CHECK-NEXT: [[TMP3:%.*]] = load i32, i32* [[INCDEC_PTR4]], align 4
351 ; CHECK-NEXT: [[SHL8:%.*]] = shl i32 [[TMP3]], 3
352 ; CHECK-NEXT: store i32 [[SHL8]], i32* [[INCDEC_PTR6]], align 4
353 ; CHECK-NEXT: ret void
356 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
357 %0 = load i32, i32* %src, align 4
358 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
359 store i32 %0, i32* %dst, align 4
360 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
361 %1 = load i32, i32* %incdec.ptr, align 4
363 %incdec.ptr3 = getelementptr inbounds i32, i32* %dst, i64 2
364 store i32 %shl, i32* %incdec.ptr1, align 4
365 %incdec.ptr4 = getelementptr inbounds i32, i32* %src, i64 3
366 %2 = load i32, i32* %incdec.ptr2, align 4
367 %shl5 = shl i32 %2, 2
368 %incdec.ptr6 = getelementptr inbounds i32, i32* %dst, i64 3
369 store i32 %shl5, i32* %incdec.ptr3, align 4
370 %3 = load i32, i32* %incdec.ptr4, align 4
371 %shl8 = shl i32 %3, 3
372 store i32 %shl8, i32* %incdec.ptr6, align 4
376 define void @shl1(i32* noalias %dst, i32* noalias %src) {
377 ; CHECK-LABEL: @shl1(
379 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, i32* [[SRC:%.*]], i64 1
380 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 1
381 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 2
382 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 2
383 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, i32* [[SRC]], i64 3
384 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, i32* [[DST]], i64 3
385 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast i32* [[SRC]] to <4 x i32>*
386 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, <4 x i32>* [[TMP0]], align 4
387 ; CHECK-NEXT: [[TMP2:%.*]] = shl <4 x i32> [[TMP1]], <i32 7, i32 1, i32 2, i32 3>
388 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast i32* [[DST]] to <4 x i32>*
389 ; CHECK-NEXT: store <4 x i32> [[TMP2]], <4 x i32>* [[TMP3]], align 4
390 ; CHECK-NEXT: ret void
393 %incdec.ptr = getelementptr inbounds i32, i32* %src, i64 1
394 %0 = load i32, i32* %src, align 4
396 %incdec.ptr1 = getelementptr inbounds i32, i32* %dst, i64 1
397 store i32 %shl, i32* %dst, align 4
398 %incdec.ptr2 = getelementptr inbounds i32, i32* %src, i64 2
399 %1 = load i32, i32* %incdec.ptr, align 4
400 %shl3 = shl i32 %1, 1
401 %incdec.ptr4 = getelementptr inbounds i32, i32* %dst, i64 2
402 store i32 %shl3, i32* %incdec.ptr1, align 4
403 %incdec.ptr5 = getelementptr inbounds i32, i32* %src, i64 3
404 %2 = load i32, i32* %incdec.ptr2, align 4
405 %shl6 = shl i32 %2, 2
406 %incdec.ptr7 = getelementptr inbounds i32, i32* %dst, i64 3
407 store i32 %shl6, i32* %incdec.ptr4, align 4
408 %3 = load i32, i32* %incdec.ptr5, align 4
409 %shl9 = shl i32 %3, 3
410 store i32 %shl9, i32* %incdec.ptr7, align 4
414 define void @add0f(float* noalias %dst, float* noalias %src) {
415 ; CHECK-LABEL: @add0f(
417 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
418 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
419 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
420 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
421 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
422 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
423 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast float* [[SRC]] to <4 x float>*
424 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* [[TMP0]], align 4
425 ; CHECK-NEXT: [[TMP2:%.*]] = fadd fast <4 x float> [[TMP1]], <float 1.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>
426 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast float* [[DST]] to <4 x float>*
427 ; CHECK-NEXT: store <4 x float> [[TMP2]], <4 x float>* [[TMP3]], align 4
428 ; CHECK-NEXT: ret void
431 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
432 %0 = load float, float* %src, align 4
433 %add = fadd fast float %0, 1.000000e+00
434 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
435 store float %add, float* %dst, align 4
436 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
437 %1 = load float, float* %incdec.ptr, align 4
438 %add3 = fadd fast float %1, 1.000000e+00
439 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
440 store float %add3, float* %incdec.ptr1, align 4
441 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
442 %2 = load float, float* %incdec.ptr2, align 4
443 %add6 = fadd fast float %2, 2.000000e+00
444 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
445 store float %add6, float* %incdec.ptr4, align 4
446 %3 = load float, float* %incdec.ptr5, align 4
447 %add9 = fadd fast float %3, 3.000000e+00
448 store float %add9, float* %incdec.ptr7, align 4
452 define void @add1f(float* noalias %dst, float* noalias %src) {
453 ; CHECK-LABEL: @add1f(
455 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
456 ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[SRC]], align 4
457 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
458 ; CHECK-NEXT: store float [[TMP0]], float* [[DST]], align 4
459 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
460 ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* [[INCDEC_PTR]], align 4
461 ; CHECK-NEXT: [[ADD3:%.*]] = fadd fast float [[TMP1]], 1.000000e+00
462 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
463 ; CHECK-NEXT: store float [[ADD3]], float* [[INCDEC_PTR1]], align 4
464 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
465 ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[INCDEC_PTR2]], align 4
466 ; CHECK-NEXT: [[ADD6:%.*]] = fadd fast float [[TMP2]], 2.000000e+00
467 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
468 ; CHECK-NEXT: store float [[ADD6]], float* [[INCDEC_PTR4]], align 4
469 ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[INCDEC_PTR5]], align 4
470 ; CHECK-NEXT: [[ADD9:%.*]] = fadd fast float [[TMP3]], 3.000000e+00
471 ; CHECK-NEXT: store float [[ADD9]], float* [[INCDEC_PTR7]], align 4
472 ; CHECK-NEXT: ret void
475 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
476 %0 = load float, float* %src, align 4
477 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
478 store float %0, float* %dst, align 4
479 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
480 %1 = load float, float* %incdec.ptr, align 4
481 %add3 = fadd fast float %1, 1.000000e+00
482 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
483 store float %add3, float* %incdec.ptr1, align 4
484 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
485 %2 = load float, float* %incdec.ptr2, align 4
486 %add6 = fadd fast float %2, 2.000000e+00
487 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
488 store float %add6, float* %incdec.ptr4, align 4
489 %3 = load float, float* %incdec.ptr5, align 4
490 %add9 = fadd fast float %3, 3.000000e+00
491 store float %add9, float* %incdec.ptr7, align 4
495 define void @sub0f(float* noalias %dst, float* noalias %src) {
496 ; CHECK-LABEL: @sub0f(
498 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
499 ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[SRC]], align 4
500 ; CHECK-NEXT: [[ADD:%.*]] = fadd fast float [[TMP0]], -1.000000e+00
501 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
502 ; CHECK-NEXT: store float [[ADD]], float* [[DST]], align 4
503 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
504 ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* [[INCDEC_PTR]], align 4
505 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
506 ; CHECK-NEXT: store float [[TMP1]], float* [[INCDEC_PTR1]], align 4
507 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
508 ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[INCDEC_PTR2]], align 4
509 ; CHECK-NEXT: [[ADD6:%.*]] = fadd fast float [[TMP2]], -2.000000e+00
510 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
511 ; CHECK-NEXT: store float [[ADD6]], float* [[INCDEC_PTR4]], align 4
512 ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[INCDEC_PTR5]], align 4
513 ; CHECK-NEXT: [[ADD9:%.*]] = fadd fast float [[TMP3]], -3.000000e+00
514 ; CHECK-NEXT: store float [[ADD9]], float* [[INCDEC_PTR7]], align 4
515 ; CHECK-NEXT: ret void
518 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
519 %0 = load float, float* %src, align 4
520 %add = fadd fast float %0, -1.000000e+00
521 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
522 store float %add, float* %dst, align 4
523 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
524 %1 = load float, float* %incdec.ptr, align 4
525 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
526 store float %1, float* %incdec.ptr1, align 4
527 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
528 %2 = load float, float* %incdec.ptr2, align 4
529 %add6 = fadd fast float %2, -2.000000e+00
530 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
531 store float %add6, float* %incdec.ptr4, align 4
532 %3 = load float, float* %incdec.ptr5, align 4
533 %add9 = fadd fast float %3, -3.000000e+00
534 store float %add9, float* %incdec.ptr7, align 4
538 define void @sub1f(float* noalias %dst, float* noalias %src) {
539 ; CHECK-LABEL: @sub1f(
541 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
542 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
543 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
544 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
545 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
546 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
547 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast float* [[SRC]] to <4 x float>*
548 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* [[TMP0]], align 4
549 ; CHECK-NEXT: [[TMP2:%.*]] = fadd fast <4 x float> [[TMP1]], <float 4.000000e+00, float -1.000000e+00, float -2.000000e+00, float -3.000000e+00>
550 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast float* [[DST]] to <4 x float>*
551 ; CHECK-NEXT: store <4 x float> [[TMP2]], <4 x float>* [[TMP3]], align 4
552 ; CHECK-NEXT: ret void
555 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
556 %0 = load float, float* %src, align 4
557 %add = fadd fast float %0, 4.000000e+00
558 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
559 store float %add, float* %dst, align 4
560 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
561 %1 = load float, float* %incdec.ptr, align 4
562 %sub = fadd fast float %1, -1.000000e+00
563 %incdec.ptr3 = getelementptr inbounds float, float* %dst, i64 2
564 store float %sub, float* %incdec.ptr1, align 4
565 %incdec.ptr4 = getelementptr inbounds float, float* %src, i64 3
566 %2 = load float, float* %incdec.ptr2, align 4
567 %sub5 = fadd fast float %2, -2.000000e+00
568 %incdec.ptr6 = getelementptr inbounds float, float* %dst, i64 3
569 store float %sub5, float* %incdec.ptr3, align 4
570 %3 = load float, float* %incdec.ptr4, align 4
571 %sub8 = fadd fast float %3, -3.000000e+00
572 store float %sub8, float* %incdec.ptr6, align 4
576 define void @sub2f(float* noalias %dst, float* noalias %src) {
577 ; CHECK-LABEL: @sub2f(
579 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
580 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
581 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
582 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
583 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
584 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
585 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast float* [[SRC]] to <4 x float>*
586 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* [[TMP0]], align 4
587 ; CHECK-NEXT: [[TMP2:%.*]] = fadd fast <4 x float> [[TMP1]], <float -1.000000e+00, float -1.000000e+00, float -2.000000e+00, float -3.000000e+00>
588 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast float* [[DST]] to <4 x float>*
589 ; CHECK-NEXT: store <4 x float> [[TMP2]], <4 x float>* [[TMP3]], align 4
590 ; CHECK-NEXT: ret void
593 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
594 %0 = load float, float* %src, align 4
595 %sub = fadd fast float %0, -1.000000e+00
596 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
597 store float %sub, float* %dst, align 4
598 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
599 %1 = load float, float* %incdec.ptr, align 4
600 %sub3 = fadd fast float %1, -1.000000e+00
601 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
602 store float %sub3, float* %incdec.ptr1, align 4
603 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
604 %2 = load float, float* %incdec.ptr2, align 4
605 %sub6 = fadd fast float %2, -2.000000e+00
606 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
607 store float %sub6, float* %incdec.ptr4, align 4
608 %3 = load float, float* %incdec.ptr5, align 4
609 %sub9 = fadd fast float %3, -3.000000e+00
610 store float %sub9, float* %incdec.ptr7, align 4
614 define void @addsub0f(float* noalias %dst, float* noalias %src) {
615 ; CHECK-LABEL: @addsub0f(
617 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
618 ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[SRC]], align 4
619 ; CHECK-NEXT: [[SUB:%.*]] = fadd fast float [[TMP0]], -1.000000e+00
620 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
621 ; CHECK-NEXT: store float [[SUB]], float* [[DST]], align 4
622 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
623 ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* [[INCDEC_PTR]], align 4
624 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
625 ; CHECK-NEXT: store float [[TMP1]], float* [[INCDEC_PTR1]], align 4
626 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
627 ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[INCDEC_PTR2]], align 4
628 ; CHECK-NEXT: [[SUB5:%.*]] = fadd fast float [[TMP2]], -2.000000e+00
629 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
630 ; CHECK-NEXT: store float [[SUB5]], float* [[INCDEC_PTR3]], align 4
631 ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[INCDEC_PTR4]], align 4
632 ; CHECK-NEXT: [[SUB8:%.*]] = fsub fast float [[TMP3]], -3.000000e+00
633 ; CHECK-NEXT: store float [[SUB8]], float* [[INCDEC_PTR6]], align 4
634 ; CHECK-NEXT: ret void
637 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
638 %0 = load float, float* %src, align 4
639 %sub = fadd fast float %0, -1.000000e+00
640 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
641 store float %sub, float* %dst, align 4
642 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
643 %1 = load float, float* %incdec.ptr, align 4
644 %incdec.ptr3 = getelementptr inbounds float, float* %dst, i64 2
645 store float %1, float* %incdec.ptr1, align 4
646 %incdec.ptr4 = getelementptr inbounds float, float* %src, i64 3
647 %2 = load float, float* %incdec.ptr2, align 4
648 %sub5 = fadd fast float %2, -2.000000e+00
649 %incdec.ptr6 = getelementptr inbounds float, float* %dst, i64 3
650 store float %sub5, float* %incdec.ptr3, align 4
651 %3 = load float, float* %incdec.ptr4, align 4
652 %sub8 = fsub fast float %3, -3.000000e+00
653 store float %sub8, float* %incdec.ptr6, align 4
657 define void @addsub1f(float* noalias %dst, float* noalias %src) {
658 ; CHECK-LABEL: @addsub1f(
660 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
661 ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[SRC]], align 4
662 ; CHECK-NEXT: [[SUB:%.*]] = fadd fast float [[TMP0]], -1.000000e+00
663 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
664 ; CHECK-NEXT: store float [[SUB]], float* [[DST]], align 4
665 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
666 ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* [[INCDEC_PTR]], align 4
667 ; CHECK-NEXT: [[SUB1:%.*]] = fsub fast float [[TMP1]], -1.000000e+00
668 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
669 ; CHECK-NEXT: store float [[SUB1]], float* [[INCDEC_PTR1]], align 4
670 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
671 ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[INCDEC_PTR2]], align 4
672 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
673 ; CHECK-NEXT: store float [[TMP2]], float* [[INCDEC_PTR3]], align 4
674 ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[INCDEC_PTR4]], align 4
675 ; CHECK-NEXT: [[SUB8:%.*]] = fsub fast float [[TMP3]], -3.000000e+00
676 ; CHECK-NEXT: store float [[SUB8]], float* [[INCDEC_PTR6]], align 4
677 ; CHECK-NEXT: ret void
680 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
681 %0 = load float, float* %src, align 4
682 %sub = fadd fast float %0, -1.000000e+00
683 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
684 store float %sub, float* %dst, align 4
685 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
686 %1 = load float, float* %incdec.ptr, align 4
687 %sub1 = fsub fast float %1, -1.000000e+00
688 %incdec.ptr3 = getelementptr inbounds float, float* %dst, i64 2
689 store float %sub1, float* %incdec.ptr1, align 4
690 %incdec.ptr4 = getelementptr inbounds float, float* %src, i64 3
691 %2 = load float, float* %incdec.ptr2, align 4
692 %incdec.ptr6 = getelementptr inbounds float, float* %dst, i64 3
693 store float %2, float* %incdec.ptr3, align 4
694 %3 = load float, float* %incdec.ptr4, align 4
695 %sub8 = fsub fast float %3, -3.000000e+00
696 store float %sub8, float* %incdec.ptr6, align 4
700 define void @mulf(float* noalias %dst, float* noalias %src) {
701 ; CHECK-LABEL: @mulf(
703 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
704 ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[SRC]], align 4
705 ; CHECK-NEXT: [[SUB:%.*]] = fmul fast float [[TMP0]], 2.570000e+02
706 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
707 ; CHECK-NEXT: store float [[SUB]], float* [[DST]], align 4
708 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
709 ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* [[INCDEC_PTR]], align 4
710 ; CHECK-NEXT: [[SUB3:%.*]] = fmul fast float [[TMP1]], -3.000000e+00
711 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
712 ; CHECK-NEXT: store float [[SUB3]], float* [[INCDEC_PTR1]], align 4
713 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
714 ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[INCDEC_PTR2]], align 4
715 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
716 ; CHECK-NEXT: store float [[TMP2]], float* [[INCDEC_PTR4]], align 4
717 ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[INCDEC_PTR5]], align 4
718 ; CHECK-NEXT: [[SUB9:%.*]] = fmul fast float [[TMP3]], -9.000000e+00
719 ; CHECK-NEXT: store float [[SUB9]], float* [[INCDEC_PTR7]], align 4
720 ; CHECK-NEXT: ret void
723 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
724 %0 = load float, float* %src, align 4
725 %sub = fmul fast float %0, 2.570000e+02
726 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
727 store float %sub, float* %dst, align 4
728 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
729 %1 = load float, float* %incdec.ptr, align 4
730 %sub3 = fmul fast float %1, -3.000000e+00
731 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
732 store float %sub3, float* %incdec.ptr1, align 4
733 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
734 %2 = load float, float* %incdec.ptr2, align 4
735 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
736 store float %2, float* %incdec.ptr4, align 4
737 %3 = load float, float* %incdec.ptr5, align 4
738 %sub9 = fmul fast float %3, -9.000000e+00
739 store float %sub9, float* %incdec.ptr7, align 4
743 define void @add0fn(float* noalias %dst, float* noalias %src) {
744 ; CHECK-LABEL: @add0fn(
746 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
747 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
748 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
749 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
750 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
751 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
752 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast float* [[SRC]] to <4 x float>*
753 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* [[TMP0]], align 4
754 ; CHECK-NEXT: [[TMP2:%.*]] = fadd <4 x float> [[TMP1]], <float 1.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>
755 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast float* [[DST]] to <4 x float>*
756 ; CHECK-NEXT: store <4 x float> [[TMP2]], <4 x float>* [[TMP3]], align 4
757 ; CHECK-NEXT: ret void
760 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
761 %0 = load float, float* %src, align 4
762 %add = fadd float %0, 1.000000e+00
763 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
764 store float %add, float* %dst, align 4
765 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
766 %1 = load float, float* %incdec.ptr, align 4
767 %add3 = fadd float %1, 1.000000e+00
768 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
769 store float %add3, float* %incdec.ptr1, align 4
770 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
771 %2 = load float, float* %incdec.ptr2, align 4
772 %add6 = fadd float %2, 2.000000e+00
773 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
774 store float %add6, float* %incdec.ptr4, align 4
775 %3 = load float, float* %incdec.ptr5, align 4
776 %add9 = fadd float %3, 3.000000e+00
777 store float %add9, float* %incdec.ptr7, align 4
781 define void @add1fn(float* noalias %dst, float* noalias %src) {
782 ; CHECK-LABEL: @add1fn(
784 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
785 ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[SRC]], align 4
786 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
787 ; CHECK-NEXT: store float [[TMP0]], float* [[DST]], align 4
788 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
789 ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* [[INCDEC_PTR]], align 4
790 ; CHECK-NEXT: [[ADD3:%.*]] = fadd float [[TMP1]], 1.000000e+00
791 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
792 ; CHECK-NEXT: store float [[ADD3]], float* [[INCDEC_PTR1]], align 4
793 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
794 ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[INCDEC_PTR2]], align 4
795 ; CHECK-NEXT: [[ADD6:%.*]] = fadd float [[TMP2]], 2.000000e+00
796 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
797 ; CHECK-NEXT: store float [[ADD6]], float* [[INCDEC_PTR4]], align 4
798 ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[INCDEC_PTR5]], align 4
799 ; CHECK-NEXT: [[ADD9:%.*]] = fadd float [[TMP3]], 3.000000e+00
800 ; CHECK-NEXT: store float [[ADD9]], float* [[INCDEC_PTR7]], align 4
801 ; CHECK-NEXT: ret void
804 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
805 %0 = load float, float* %src, align 4
806 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
807 store float %0, float* %dst, align 4
808 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
809 %1 = load float, float* %incdec.ptr, align 4
810 %add3 = fadd float %1, 1.000000e+00
811 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
812 store float %add3, float* %incdec.ptr1, align 4
813 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
814 %2 = load float, float* %incdec.ptr2, align 4
815 %add6 = fadd float %2, 2.000000e+00
816 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
817 store float %add6, float* %incdec.ptr4, align 4
818 %3 = load float, float* %incdec.ptr5, align 4
819 %add9 = fadd float %3, 3.000000e+00
820 store float %add9, float* %incdec.ptr7, align 4
824 define void @sub0fn(float* noalias %dst, float* noalias %src) {
825 ; CHECK-LABEL: @sub0fn(
827 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
828 ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[SRC]], align 4
829 ; CHECK-NEXT: [[ADD:%.*]] = fadd fast float [[TMP0]], -1.000000e+00
830 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
831 ; CHECK-NEXT: store float [[ADD]], float* [[DST]], align 4
832 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
833 ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* [[INCDEC_PTR]], align 4
834 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
835 ; CHECK-NEXT: store float [[TMP1]], float* [[INCDEC_PTR1]], align 4
836 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
837 ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[INCDEC_PTR2]], align 4
838 ; CHECK-NEXT: [[ADD6:%.*]] = fadd float [[TMP2]], -2.000000e+00
839 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
840 ; CHECK-NEXT: store float [[ADD6]], float* [[INCDEC_PTR4]], align 4
841 ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[INCDEC_PTR5]], align 4
842 ; CHECK-NEXT: [[ADD9:%.*]] = fadd float [[TMP3]], -3.000000e+00
843 ; CHECK-NEXT: store float [[ADD9]], float* [[INCDEC_PTR7]], align 4
844 ; CHECK-NEXT: ret void
847 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
848 %0 = load float, float* %src, align 4
849 %add = fadd fast float %0, -1.000000e+00
850 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
851 store float %add, float* %dst, align 4
852 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
853 %1 = load float, float* %incdec.ptr, align 4
854 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
855 store float %1, float* %incdec.ptr1, align 4
856 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
857 %2 = load float, float* %incdec.ptr2, align 4
858 %add6 = fadd float %2, -2.000000e+00
859 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
860 store float %add6, float* %incdec.ptr4, align 4
861 %3 = load float, float* %incdec.ptr5, align 4
862 %add9 = fadd float %3, -3.000000e+00
863 store float %add9, float* %incdec.ptr7, align 4
867 define void @sub1fn(float* noalias %dst, float* noalias %src) {
868 ; CHECK-LABEL: @sub1fn(
870 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
871 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
872 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
873 ; CHECK-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
874 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
875 ; CHECK-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
876 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast float* [[SRC]] to <4 x float>*
877 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* [[TMP0]], align 4
878 ; CHECK-NEXT: [[TMP2:%.*]] = fadd <4 x float> [[TMP1]], <float 4.000000e+00, float -1.000000e+00, float -2.000000e+00, float -3.000000e+00>
879 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast float* [[DST]] to <4 x float>*
880 ; CHECK-NEXT: store <4 x float> [[TMP2]], <4 x float>* [[TMP3]], align 4
881 ; CHECK-NEXT: ret void
884 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
885 %0 = load float, float* %src, align 4
886 %add = fadd float %0, 4.000000e+00
887 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
888 store float %add, float* %dst, align 4
889 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
890 %1 = load float, float* %incdec.ptr, align 4
891 %sub = fadd float %1, -1.000000e+00
892 %incdec.ptr3 = getelementptr inbounds float, float* %dst, i64 2
893 store float %sub, float* %incdec.ptr1, align 4
894 %incdec.ptr4 = getelementptr inbounds float, float* %src, i64 3
895 %2 = load float, float* %incdec.ptr2, align 4
896 %sub5 = fadd float %2, -2.000000e+00
897 %incdec.ptr6 = getelementptr inbounds float, float* %dst, i64 3
898 store float %sub5, float* %incdec.ptr3, align 4
899 %3 = load float, float* %incdec.ptr4, align 4
900 %sub8 = fadd float %3, -3.000000e+00
901 store float %sub8, float* %incdec.ptr6, align 4
905 define void @sub2fn(float* noalias %dst, float* noalias %src) {
906 ; CHECK-LABEL: @sub2fn(
908 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
909 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
910 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
911 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
912 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
913 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
914 ; CHECK-NEXT: [[TMP0:%.*]] = bitcast float* [[SRC]] to <4 x float>*
915 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* [[TMP0]], align 4
916 ; CHECK-NEXT: [[TMP2:%.*]] = fadd <4 x float> [[TMP1]], <float -1.000000e+00, float -1.000000e+00, float -2.000000e+00, float -3.000000e+00>
917 ; CHECK-NEXT: [[TMP3:%.*]] = bitcast float* [[DST]] to <4 x float>*
918 ; CHECK-NEXT: store <4 x float> [[TMP2]], <4 x float>* [[TMP3]], align 4
919 ; CHECK-NEXT: ret void
922 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
923 %0 = load float, float* %src, align 4
924 %sub = fadd float %0, -1.000000e+00
925 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
926 store float %sub, float* %dst, align 4
927 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
928 %1 = load float, float* %incdec.ptr, align 4
929 %sub3 = fadd float %1, -1.000000e+00
930 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
931 store float %sub3, float* %incdec.ptr1, align 4
932 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
933 %2 = load float, float* %incdec.ptr2, align 4
934 %sub6 = fadd float %2, -2.000000e+00
935 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
936 store float %sub6, float* %incdec.ptr4, align 4
937 %3 = load float, float* %incdec.ptr5, align 4
938 %sub9 = fadd float %3, -3.000000e+00
939 store float %sub9, float* %incdec.ptr7, align 4
943 define void @mulfn(float* noalias %dst, float* noalias %src) {
944 ; CHECK-LABEL: @mulfn(
946 ; CHECK-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 1
947 ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[SRC]], align 4
948 ; CHECK-NEXT: [[SUB:%.*]] = fmul float [[TMP0]], 2.570000e+02
949 ; CHECK-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, float* [[DST:%.*]], i64 1
950 ; CHECK-NEXT: store float [[SUB]], float* [[DST]], align 4
951 ; CHECK-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 2
952 ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* [[INCDEC_PTR]], align 4
953 ; CHECK-NEXT: [[SUB3:%.*]] = fmul float [[TMP1]], -3.000000e+00
954 ; CHECK-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds float, float* [[DST]], i64 2
955 ; CHECK-NEXT: store float [[SUB3]], float* [[INCDEC_PTR1]], align 4
956 ; CHECK-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds float, float* [[SRC]], i64 3
957 ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[INCDEC_PTR2]], align 4
958 ; CHECK-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds float, float* [[DST]], i64 3
959 ; CHECK-NEXT: store float [[TMP2]], float* [[INCDEC_PTR4]], align 4
960 ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[INCDEC_PTR5]], align 4
961 ; CHECK-NEXT: [[SUB9:%.*]] = fmul fast float [[TMP3]], -9.000000e+00
962 ; CHECK-NEXT: store float [[SUB9]], float* [[INCDEC_PTR7]], align 4
963 ; CHECK-NEXT: ret void
966 %incdec.ptr = getelementptr inbounds float, float* %src, i64 1
967 %0 = load float, float* %src, align 4
968 %sub = fmul float %0, 2.570000e+02
969 %incdec.ptr1 = getelementptr inbounds float, float* %dst, i64 1
970 store float %sub, float* %dst, align 4
971 %incdec.ptr2 = getelementptr inbounds float, float* %src, i64 2
972 %1 = load float, float* %incdec.ptr, align 4
973 %sub3 = fmul float %1, -3.000000e+00
974 %incdec.ptr4 = getelementptr inbounds float, float* %dst, i64 2
975 store float %sub3, float* %incdec.ptr1, align 4
976 %incdec.ptr5 = getelementptr inbounds float, float* %src, i64 3
977 %2 = load float, float* %incdec.ptr2, align 4
978 %incdec.ptr7 = getelementptr inbounds float, float* %dst, i64 3
979 store float %2, float* %incdec.ptr4, align 4
980 %3 = load float, float* %incdec.ptr5, align 4
981 %sub9 = fmul fast float %3, -9.000000e+00
982 store float %sub9, float* %incdec.ptr7, align 4