1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1
2
; RUN: opt < %s -basicaa -slp-vectorizer -S | FileCheck %s
2
3
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
3
4
target triple = "x86_64-unknown-linux-gnu"
@@ -12,14 +13,22 @@ target triple = "x86_64-unknown-linux-gnu"
12
13
@fa = common global [4 x float ] zeroinitializer , align 16
13
14
@fd = common global [4 x float ] zeroinitializer , align 16
14
15
15
- ; CHECK-LABEL: @addsub
16
- ; CHECK: %5 = add nsw <4 x i32> %3, %4
17
- ; CHECK: %6 = add nsw <4 x i32> %2, %5
18
- ; CHECK: %7 = sub nsw <4 x i32> %2, %5
19
- ; CHECK: %8 = shufflevector <4 x i32> %6, <4 x i32> %7, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
20
-
21
16
; Function Attrs: nounwind uwtable
22
17
define void @addsub () #0 {
18
+ ; CHECK-LABEL: @addsub(
19
+ ; CHECK-NEXT: entry:
20
+ ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @b to <4 x i32>*), align 4
21
+ ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @c to <4 x i32>*), align 4
22
+ ; CHECK-NEXT: [[TMP2:%.*]] = add nsw <4 x i32> [[TMP0]], [[TMP1]]
23
+ ; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @d to <4 x i32>*), align 4
24
+ ; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @e to <4 x i32>*), align 4
25
+ ; CHECK-NEXT: [[TMP5:%.*]] = add nsw <4 x i32> [[TMP3]], [[TMP4]]
26
+ ; CHECK-NEXT: [[TMP6:%.*]] = add nsw <4 x i32> [[TMP2]], [[TMP5]]
27
+ ; CHECK-NEXT: [[TMP7:%.*]] = sub nsw <4 x i32> [[TMP2]], [[TMP5]]
28
+ ; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> [[TMP7]], <4 x i32> <i32 0, i32 5, i32 2, i32 7>
29
+ ; CHECK-NEXT: store <4 x i32> [[TMP8]], <4 x i32>* bitcast ([4 x i32]* @a to <4 x i32>*), align 4
30
+ ; CHECK-NEXT: ret void
31
+ ;
23
32
entry:
24
33
%0 = load i32 , i32* getelementptr inbounds ([4 x i32 ], [4 x i32 ]* @b , i32 0 , i64 0 ), align 4
25
34
%1 = load i32 , i32* getelementptr inbounds ([4 x i32 ], [4 x i32 ]* @c , i32 0 , i64 0 ), align 4
@@ -56,14 +65,22 @@ entry:
56
65
ret void
57
66
}
58
67
59
- ; CHECK-LABEL: @subadd
60
- ; CHECK: %5 = add nsw <4 x i32> %3, %4
61
- ; CHECK: %6 = sub nsw <4 x i32> %2, %5
62
- ; CHECK: %7 = add nsw <4 x i32> %2, %5
63
- ; CHECK: %8 = shufflevector <4 x i32> %6, <4 x i32> %7, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
64
-
65
68
; Function Attrs: nounwind uwtable
66
69
define void @subadd () #0 {
70
+ ; CHECK-LABEL: @subadd(
71
+ ; CHECK-NEXT: entry:
72
+ ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @b to <4 x i32>*), align 4
73
+ ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @c to <4 x i32>*), align 4
74
+ ; CHECK-NEXT: [[TMP2:%.*]] = add nsw <4 x i32> [[TMP0]], [[TMP1]]
75
+ ; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @d to <4 x i32>*), align 4
76
+ ; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @e to <4 x i32>*), align 4
77
+ ; CHECK-NEXT: [[TMP5:%.*]] = add nsw <4 x i32> [[TMP3]], [[TMP4]]
78
+ ; CHECK-NEXT: [[TMP6:%.*]] = sub nsw <4 x i32> [[TMP2]], [[TMP5]]
79
+ ; CHECK-NEXT: [[TMP7:%.*]] = add nsw <4 x i32> [[TMP2]], [[TMP5]]
80
+ ; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> [[TMP7]], <4 x i32> <i32 0, i32 5, i32 2, i32 7>
81
+ ; CHECK-NEXT: store <4 x i32> [[TMP8]], <4 x i32>* bitcast ([4 x i32]* @a to <4 x i32>*), align 4
82
+ ; CHECK-NEXT: ret void
83
+ ;
67
84
entry:
68
85
%0 = load i32 , i32* getelementptr inbounds ([4 x i32 ], [4 x i32 ]* @b , i32 0 , i64 0 ), align 4
69
86
%1 = load i32 , i32* getelementptr inbounds ([4 x i32 ], [4 x i32 ]* @c , i32 0 , i64 0 ), align 4
@@ -100,12 +117,18 @@ entry:
100
117
ret void
101
118
}
102
119
103
- ; CHECK-LABEL: @faddfsub
104
- ; CHECK: %2 = fadd <4 x float> %0, %1
105
- ; CHECK: %3 = fsub <4 x float> %0, %1
106
- ; CHECK: %4 = shufflevector <4 x float> %2, <4 x float> %3, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
107
120
; Function Attrs: nounwind uwtable
108
121
define void @faddfsub () #0 {
122
+ ; CHECK-LABEL: @faddfsub(
123
+ ; CHECK-NEXT: entry:
124
+ ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fb to <4 x float>*), align 4
125
+ ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fc to <4 x float>*), align 4
126
+ ; CHECK-NEXT: [[TMP2:%.*]] = fadd <4 x float> [[TMP0]], [[TMP1]]
127
+ ; CHECK-NEXT: [[TMP3:%.*]] = fsub <4 x float> [[TMP0]], [[TMP1]]
128
+ ; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x float> [[TMP2]], <4 x float> [[TMP3]], <4 x i32> <i32 0, i32 5, i32 2, i32 7>
129
+ ; CHECK-NEXT: store <4 x float> [[TMP4]], <4 x float>* bitcast ([4 x float]* @fa to <4 x float>*), align 4
130
+ ; CHECK-NEXT: ret void
131
+ ;
109
132
entry:
110
133
%0 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fb , i32 0 , i64 0 ), align 4
111
134
%1 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fc , i32 0 , i64 0 ), align 4
@@ -126,12 +149,18 @@ entry:
126
149
ret void
127
150
}
128
151
129
- ; CHECK-LABEL: @fsubfadd
130
- ; CHECK: %2 = fsub <4 x float> %0, %1
131
- ; CHECK: %3 = fadd <4 x float> %0, %1
132
- ; CHECK: %4 = shufflevector <4 x float> %2, <4 x float> %3, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
133
152
; Function Attrs: nounwind uwtable
134
153
define void @fsubfadd () #0 {
154
+ ; CHECK-LABEL: @fsubfadd(
155
+ ; CHECK-NEXT: entry:
156
+ ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fb to <4 x float>*), align 4
157
+ ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fc to <4 x float>*), align 4
158
+ ; CHECK-NEXT: [[TMP2:%.*]] = fsub <4 x float> [[TMP0]], [[TMP1]]
159
+ ; CHECK-NEXT: [[TMP3:%.*]] = fadd <4 x float> [[TMP0]], [[TMP1]]
160
+ ; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x float> [[TMP2]], <4 x float> [[TMP3]], <4 x i32> <i32 0, i32 5, i32 2, i32 7>
161
+ ; CHECK-NEXT: store <4 x float> [[TMP4]], <4 x float>* bitcast ([4 x float]* @fa to <4 x float>*), align 4
162
+ ; CHECK-NEXT: ret void
163
+ ;
135
164
entry:
136
165
%0 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fb , i32 0 , i64 0 ), align 4
137
166
%1 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fc , i32 0 , i64 0 ), align 4
@@ -152,12 +181,28 @@ entry:
152
181
ret void
153
182
}
154
183
155
- ; CHECK-LABEL: @No_faddfsub
156
- ; CHECK-NOT: fadd <4 x float>
157
- ; CHECK-NOT: fsub <4 x float>
158
- ; CHECK-NOT: shufflevector
159
184
; Function Attrs: nounwind uwtable
160
185
define void @No_faddfsub () #0 {
186
+ ; CHECK-LABEL: @No_faddfsub(
187
+ ; CHECK-NEXT: entry:
188
+ ; CHECK-NEXT: [[TMP0:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fb, i32 0, i64 0), align 4
189
+ ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fc, i32 0, i64 0), align 4
190
+ ; CHECK-NEXT: [[ADD:%.*]] = fadd float [[TMP0]], [[TMP1]]
191
+ ; CHECK-NEXT: store float [[ADD]], float* getelementptr inbounds ([4 x float], [4 x float]* @fa, i32 0, i64 0), align 4
192
+ ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fb, i32 0, i64 1), align 4
193
+ ; CHECK-NEXT: [[TMP3:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fc, i32 0, i64 1), align 4
194
+ ; CHECK-NEXT: [[ADD1:%.*]] = fadd float [[TMP2]], [[TMP3]]
195
+ ; CHECK-NEXT: store float [[ADD1]], float* getelementptr inbounds ([4 x float], [4 x float]* @fa, i32 0, i64 1), align 4
196
+ ; CHECK-NEXT: [[TMP4:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fb, i32 0, i64 2), align 4
197
+ ; CHECK-NEXT: [[TMP5:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fc, i32 0, i64 2), align 4
198
+ ; CHECK-NEXT: [[ADD2:%.*]] = fadd float [[TMP4]], [[TMP5]]
199
+ ; CHECK-NEXT: store float [[ADD2]], float* getelementptr inbounds ([4 x float], [4 x float]* @fa, i32 0, i64 2), align 4
200
+ ; CHECK-NEXT: [[TMP6:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fb, i32 0, i64 3), align 4
201
+ ; CHECK-NEXT: [[TMP7:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fc, i32 0, i64 3), align 4
202
+ ; CHECK-NEXT: [[SUB:%.*]] = fsub float [[TMP6]], [[TMP7]]
203
+ ; CHECK-NEXT: store float [[SUB]], float* getelementptr inbounds ([4 x float], [4 x float]* @fa, i32 0, i64 3), align 4
204
+ ; CHECK-NEXT: ret void
205
+ ;
161
206
entry:
162
207
%0 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fb , i32 0 , i64 0 ), align 4
163
208
%1 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fc , i32 0 , i64 0 ), align 4
@@ -184,11 +229,16 @@ entry:
184
229
; fc[2] = fa[2]+fb[2];
185
230
; fc[3] = fa[3]-fb[3];
186
231
187
- ; CHECK-LABEL: @reorder_alt
188
- ; CHECK: %3 = fadd <4 x float> %1, %2
189
- ; CHECK: %4 = fsub <4 x float> %1, %2
190
- ; CHECK: %5 = shufflevector <4 x float> %3, <4 x float> %4, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
191
232
define void @reorder_alt () #0 {
233
+ ; CHECK-LABEL: @reorder_alt(
234
+ ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fa to <4 x float>*), align 4
235
+ ; CHECK-NEXT: [[TMP2:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fb to <4 x float>*), align 4
236
+ ; CHECK-NEXT: [[TMP3:%.*]] = fadd <4 x float> [[TMP1]], [[TMP2]]
237
+ ; CHECK-NEXT: [[TMP4:%.*]] = fsub <4 x float> [[TMP1]], [[TMP2]]
238
+ ; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x float> [[TMP3]], <4 x float> [[TMP4]], <4 x i32> <i32 0, i32 5, i32 2, i32 7>
239
+ ; CHECK-NEXT: store <4 x float> [[TMP5]], <4 x float>* bitcast ([4 x float]* @fc to <4 x float>*), align 4
240
+ ; CHECK-NEXT: ret void
241
+ ;
192
242
%1 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fb , i32 0 , i64 0 ), align 4
193
243
%2 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fa , i32 0 , i64 0 ), align 4
194
244
%3 = fadd float %1 , %2
@@ -212,16 +262,22 @@ define void @reorder_alt() #0 {
212
262
; fc[0] = fa[0]+(fb[0]-fd[0]);
213
263
; fc[1] = fa[1]-(fb[1]+fd[1]);
214
264
; fc[2] = fa[2]+(fb[2]-fd[2]);
215
- ; fc[3] = fa[3]-(fd[3]+fb[3]); //swapped fd and fb
265
+ ; fc[3] = fa[3]-(fd[3]+fb[3]); //swapped fd and fb
216
266
217
- ; CHECK-LABEL: @reorder_alt_subTree
218
- ; CHECK: %4 = fsub <4 x float> %3, %2
219
- ; CHECK: %5 = fadd <4 x float> %3, %2
220
- ; CHECK: %6 = shufflevector <4 x float> %4, <4 x float> %5, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
221
- ; CHECK: %7 = fadd <4 x float> %1, %6
222
- ; CHECK: %8 = fsub <4 x float> %1, %6
223
- ; CHECK: %9 = shufflevector <4 x float> %7, <4 x float> %8, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
224
267
define void @reorder_alt_subTree () #0 {
268
+ ; CHECK-LABEL: @reorder_alt_subTree(
269
+ ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fa to <4 x float>*), align 4
270
+ ; CHECK-NEXT: [[TMP2:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fd to <4 x float>*), align 4
271
+ ; CHECK-NEXT: [[TMP3:%.*]] = load <4 x float>, <4 x float>* bitcast ([4 x float]* @fb to <4 x float>*), align 4
272
+ ; CHECK-NEXT: [[TMP4:%.*]] = fsub <4 x float> [[TMP3]], [[TMP2]]
273
+ ; CHECK-NEXT: [[TMP5:%.*]] = fadd <4 x float> [[TMP3]], [[TMP2]]
274
+ ; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <4 x float> [[TMP4]], <4 x float> [[TMP5]], <4 x i32> <i32 0, i32 5, i32 2, i32 7>
275
+ ; CHECK-NEXT: [[TMP7:%.*]] = fadd <4 x float> [[TMP1]], [[TMP6]]
276
+ ; CHECK-NEXT: [[TMP8:%.*]] = fsub <4 x float> [[TMP1]], [[TMP6]]
277
+ ; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <4 x float> [[TMP7]], <4 x float> [[TMP8]], <4 x i32> <i32 0, i32 5, i32 2, i32 7>
278
+ ; CHECK-NEXT: store <4 x float> [[TMP9]], <4 x float>* bitcast ([4 x float]* @fc to <4 x float>*), align 4
279
+ ; CHECK-NEXT: ret void
280
+ ;
225
281
%1 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fa , i32 0 , i64 0 ), align 4
226
282
%2 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fb , i32 0 , i64 0 ), align 4
227
283
%3 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fd , i32 0 , i64 0 ), align 4
@@ -251,13 +307,28 @@ define void @reorder_alt_subTree() #0 {
251
307
252
308
; Check vectorization of following code for double data type-
253
309
; c[0] = (a[0]+b[0])-d[0];
254
- ; c[1] = d[1]+(a[1]+b[1]); //swapped d[1] and (a[1]+b[1])
310
+ ; c[1] = d[1]+(a[1]+b[1]); //swapped d[1] and (a[1]+b[1])
255
311
256
- ; CHECK-LABEL: @reorder_alt_rightsubTree
257
- ; CHECK: fadd <2 x double>
258
- ; CHECK: fsub <2 x double>
259
- ; CHECK: shufflevector <2 x double>
260
312
define void @reorder_alt_rightsubTree (double * nocapture %c , double * noalias nocapture readonly %a , double * noalias nocapture readonly %b , double * noalias nocapture readonly %d ) {
313
+ ; CHECK-LABEL: @reorder_alt_rightsubTree(
314
+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds double, double* [[D:%.*]], i64 1
315
+ ; CHECK-NEXT: [[TMP2:%.*]] = bitcast double* [[D]] to <2 x double>*
316
+ ; CHECK-NEXT: [[TMP3:%.*]] = load <2 x double>, <2 x double>* [[TMP2]], align 8
317
+ ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds double, double* [[A:%.*]], i64 1
318
+ ; CHECK-NEXT: [[TMP5:%.*]] = bitcast double* [[A]] to <2 x double>*
319
+ ; CHECK-NEXT: [[TMP6:%.*]] = load <2 x double>, <2 x double>* [[TMP5]], align 8
320
+ ; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds double, double* [[B:%.*]], i64 1
321
+ ; CHECK-NEXT: [[TMP8:%.*]] = bitcast double* [[B]] to <2 x double>*
322
+ ; CHECK-NEXT: [[TMP9:%.*]] = load <2 x double>, <2 x double>* [[TMP8]], align 8
323
+ ; CHECK-NEXT: [[TMP10:%.*]] = fadd <2 x double> [[TMP6]], [[TMP9]]
324
+ ; CHECK-NEXT: [[TMP11:%.*]] = fsub <2 x double> [[TMP10]], [[TMP3]]
325
+ ; CHECK-NEXT: [[TMP12:%.*]] = fadd <2 x double> [[TMP10]], [[TMP3]]
326
+ ; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <2 x double> [[TMP11]], <2 x double> [[TMP12]], <2 x i32> <i32 0, i32 3>
327
+ ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds double, double* [[C:%.*]], i64 1
328
+ ; CHECK-NEXT: [[TMP15:%.*]] = bitcast double* [[C]] to <2 x double>*
329
+ ; CHECK-NEXT: store <2 x double> [[TMP13]], <2 x double>* [[TMP15]], align 8
330
+ ; CHECK-NEXT: ret void
331
+ ;
261
332
%1 = load double , double * %a
262
333
%2 = load double , double * %b
263
334
%3 = fadd double %1 , %2
@@ -283,13 +354,28 @@ define void @reorder_alt_rightsubTree(double* nocapture %c, double* noalias noca
283
354
; fc[2] = fa[2]+fb[2];
284
355
; fc[3] = fb[3]-fa[3];
285
356
; In the above code we can swap the 1st and 2nd operation as fadd is commutative
286
- ; but not 2nd or 4th as fsub is not commutative.
357
+ ; but not 2nd or 4th as fsub is not commutative.
287
358
288
- ; CHECK-LABEL: @no_vec_shuff_reorder
289
- ; CHECK-NOT: fadd <4 x float>
290
- ; CHECK-NOT: fsub <4 x float>
291
- ; CHECK-NOT: shufflevector
292
359
define void @no_vec_shuff_reorder () #0 {
360
+ ; CHECK-LABEL: @no_vec_shuff_reorder(
361
+ ; CHECK-NEXT: [[TMP1:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fb, i32 0, i64 0), align 4
362
+ ; CHECK-NEXT: [[TMP2:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fa, i32 0, i64 0), align 4
363
+ ; CHECK-NEXT: [[TMP3:%.*]] = fadd float [[TMP1]], [[TMP2]]
364
+ ; CHECK-NEXT: store float [[TMP3]], float* getelementptr inbounds ([4 x float], [4 x float]* @fc, i32 0, i64 0), align 4
365
+ ; CHECK-NEXT: [[TMP4:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fa, i32 0, i64 1), align 4
366
+ ; CHECK-NEXT: [[TMP5:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fb, i32 0, i64 1), align 4
367
+ ; CHECK-NEXT: [[TMP6:%.*]] = fsub float [[TMP4]], [[TMP5]]
368
+ ; CHECK-NEXT: store float [[TMP6]], float* getelementptr inbounds ([4 x float], [4 x float]* @fc, i32 0, i64 1), align 4
369
+ ; CHECK-NEXT: [[TMP7:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fa, i32 0, i64 2), align 4
370
+ ; CHECK-NEXT: [[TMP8:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fb, i32 0, i64 2), align 4
371
+ ; CHECK-NEXT: [[TMP9:%.*]] = fadd float [[TMP7]], [[TMP8]]
372
+ ; CHECK-NEXT: store float [[TMP9]], float* getelementptr inbounds ([4 x float], [4 x float]* @fc, i32 0, i64 2), align 4
373
+ ; CHECK-NEXT: [[TMP10:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fb, i32 0, i64 3), align 4
374
+ ; CHECK-NEXT: [[TMP11:%.*]] = load float, float* getelementptr inbounds ([4 x float], [4 x float]* @fa, i32 0, i64 3), align 4
375
+ ; CHECK-NEXT: [[TMP12:%.*]] = fsub float [[TMP10]], [[TMP11]]
376
+ ; CHECK-NEXT: store float [[TMP12]], float* getelementptr inbounds ([4 x float], [4 x float]* @fc, i32 0, i64 3), align 4
377
+ ; CHECK-NEXT: ret void
378
+ ;
293
379
%1 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fb , i32 0 , i64 0 ), align 4
294
380
%2 = load float , float * getelementptr inbounds ([4 x float ], [4 x float ]* @fa , i32 0 , i64 0 ), align 4
295
381
%3 = fadd float %1 , %2
0 commit comments