• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; ModuleID = '<stdin>'
2source_filename = "matmul.c"
3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4target triple = "x86_64-unknown-linux-gnu"
5
6%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
7%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
8
9@A = common dso_local local_unnamed_addr global [1536 x [1536 x float]] zeroinitializer, align 16
10@B = common dso_local local_unnamed_addr global [1536 x [1536 x float]] zeroinitializer, align 16
11@stdout = external dso_local local_unnamed_addr global %struct._IO_FILE*, align 8
12@.str = private unnamed_addr constant [5 x i8] c"%lf \00", align 1
13@C = common dso_local local_unnamed_addr global [1536 x [1536 x float]] zeroinitializer, align 16
14
15; Function Attrs: noinline norecurse nounwind uwtable writeonly
16define dso_local void @init_array() local_unnamed_addr #0 {
17entry:
18  br label %polly.loop_header
19
20polly.exiting:                                    ; preds = %polly.loop_exit3
21  ret void
22
23polly.loop_header:                                ; preds = %polly.loop_exit3, %entry
24  %polly.indvar = phi i64 [ 0, %entry ], [ %polly.indvar_next, %polly.loop_exit3 ]
25  %0 = trunc i64 %polly.indvar to i32
26  br label %polly.loop_header1
27
28polly.loop_exit3:                                 ; preds = %polly.loop_header1
29  %polly.indvar_next = add nuw nsw i64 %polly.indvar, 1
30  %exitcond1 = icmp eq i64 %polly.indvar_next, 1536
31  br i1 %exitcond1, label %polly.exiting, label %polly.loop_header, !llvm.loop !2
32
33polly.loop_header1:                               ; preds = %polly.loop_header1, %polly.loop_header
34  %polly.indvar4 = phi i64 [ 0, %polly.loop_header ], [ %polly.indvar_next5.1, %polly.loop_header1 ]
35  %1 = trunc i64 %polly.indvar4 to i32
36  %2 = mul nuw nsw i32 %1, %0
37  %3 = and i32 %2, 1022
38  %4 = or i32 %3, 1
39  %p_conv = sitofp i32 %4 to double
40  %p_div = fmul double %p_conv, 5.000000e-01
41  %p_conv4 = fptrunc double %p_div to float
42  %scevgep7 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @A, i64 0, i64 %polly.indvar, i64 %polly.indvar4
43  store float %p_conv4, float* %scevgep7, align 8, !alias.scope !3, !noalias !5, !llvm.mem.parallel_loop_access !2
44  %scevgep9 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @B, i64 0, i64 %polly.indvar, i64 %polly.indvar4
45  store float %p_conv4, float* %scevgep9, align 8, !alias.scope !6, !noalias !7, !llvm.mem.parallel_loop_access !2
46  %polly.indvar_next5 = or i64 %polly.indvar4, 1
47  %5 = trunc i64 %polly.indvar_next5 to i32
48  %6 = mul nuw nsw i32 %5, %0
49  %7 = and i32 %6, 1023
50  %8 = add nuw nsw i32 %7, 1
51  %p_conv.1 = sitofp i32 %8 to double
52  %p_div.1 = fmul double %p_conv.1, 5.000000e-01
53  %p_conv4.1 = fptrunc double %p_div.1 to float
54  %scevgep7.1 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @A, i64 0, i64 %polly.indvar, i64 %polly.indvar_next5
55  store float %p_conv4.1, float* %scevgep7.1, align 4, !alias.scope !3, !noalias !5, !llvm.mem.parallel_loop_access !2
56  %scevgep9.1 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @B, i64 0, i64 %polly.indvar, i64 %polly.indvar_next5
57  store float %p_conv4.1, float* %scevgep9.1, align 4, !alias.scope !6, !noalias !7, !llvm.mem.parallel_loop_access !2
58  %polly.indvar_next5.1 = add nuw nsw i64 %polly.indvar4, 2
59  %exitcond.1 = icmp eq i64 %polly.indvar_next5.1, 1536
60  br i1 %exitcond.1, label %polly.loop_exit3, label %polly.loop_header1
61}
62
63; Function Attrs: noinline nounwind uwtable
64define dso_local void @print_array() local_unnamed_addr #1 {
65entry:
66  br label %for.cond1.preheader
67
68for.cond1.preheader:                              ; preds = %for.end, %entry
69  %indvars.iv6 = phi i64 [ 0, %entry ], [ %indvars.iv.next7, %for.end ]
70  %0 = load %struct._IO_FILE*, %struct._IO_FILE** @stdout, align 8
71  br label %for.body3
72
73for.body3:                                        ; preds = %for.inc, %for.cond1.preheader
74  %indvars.iv = phi i64 [ 0, %for.cond1.preheader ], [ %indvars.iv.next, %for.inc ]
75  %1 = phi %struct._IO_FILE* [ %0, %for.cond1.preheader ], [ %5, %for.inc ]
76  %arrayidx5 = getelementptr inbounds [1536 x [1536 x float]], [1536 x [1536 x float]]* @C, i64 0, i64 %indvars.iv6, i64 %indvars.iv
77  %2 = load float, float* %arrayidx5, align 4
78  %conv = fpext float %2 to double
79  %call = tail call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %1, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %conv) #4
80  %3 = trunc i64 %indvars.iv to i32
81  %rem = urem i32 %3, 80
82  %cmp6 = icmp eq i32 %rem, 79
83  br i1 %cmp6, label %if.then, label %for.inc
84
85if.then:                                          ; preds = %for.body3
86  %4 = load %struct._IO_FILE*, %struct._IO_FILE** @stdout, align 8
87  %fputc3 = tail call i32 @fputc(i32 10, %struct._IO_FILE* %4)
88  br label %for.inc
89
90for.inc:                                          ; preds = %if.then, %for.body3
91  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
92  %5 = load %struct._IO_FILE*, %struct._IO_FILE** @stdout, align 8
93  %exitcond = icmp eq i64 %indvars.iv.next, 1536
94  br i1 %exitcond, label %for.end, label %for.body3
95
96for.end:                                          ; preds = %for.inc
97  %fputc = tail call i32 @fputc(i32 10, %struct._IO_FILE* %5)
98  %indvars.iv.next7 = add nuw nsw i64 %indvars.iv6, 1
99  %exitcond8 = icmp eq i64 %indvars.iv.next7, 1536
100  br i1 %exitcond8, label %for.end12, label %for.cond1.preheader
101
102for.end12:                                        ; preds = %for.end
103  ret void
104}
105
106; Function Attrs: nounwind
107declare dso_local i32 @fprintf(%struct._IO_FILE* nocapture, i8* nocapture readonly, ...) local_unnamed_addr #2
108
109; Function Attrs: noinline norecurse nounwind uwtable
110define dso_local i32 @main() local_unnamed_addr #3 {
111entry:
112  tail call void @init_array()
113  call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([1536 x [1536 x float]]* @C to i8*), i8 0, i64 9437184, i1 false)
114  br label %polly.loop_header8
115
116polly.exiting:                                    ; preds = %polly.loop_exit16
117  ret i32 0
118
119polly.loop_header8:                               ; preds = %entry, %polly.loop_exit16
120  %indvars.iv5 = phi i64 [ 64, %entry ], [ %indvars.iv.next6, %polly.loop_exit16 ]
121  %polly.indvar11 = phi i64 [ 0, %entry ], [ %polly.indvar_next12, %polly.loop_exit16 ]
122  br label %polly.loop_header14
123
124polly.loop_exit16:                                ; preds = %polly.loop_exit22
125  %polly.indvar_next12 = add nuw nsw i64 %polly.indvar11, 64
126  %polly.loop_cond13 = icmp ult i64 %polly.indvar_next12, 1536
127  %indvars.iv.next6 = add nuw nsw i64 %indvars.iv5, 64
128  br i1 %polly.loop_cond13, label %polly.loop_header8, label %polly.exiting, !llvm.loop !8
129
130polly.loop_header14:                              ; preds = %polly.loop_header8, %polly.loop_exit22
131  %indvar = phi i64 [ 0, %polly.loop_header8 ], [ %indvar.next, %polly.loop_exit22 ]
132  %polly.indvar17 = phi i64 [ 0, %polly.loop_header8 ], [ %polly.indvar_next18, %polly.loop_exit22 ]
133  %0 = shl i64 %indvar, 6
134  %offset.idx.1 = or i64 %0, 16
135  %offset.idx.2 = or i64 %0, 32
136  %offset.idx.3 = or i64 %0, 48
137  br label %polly.loop_header20
138
139polly.loop_exit22:                                ; preds = %polly.loop_exit28
140  %polly.indvar_next18 = add nuw nsw i64 %polly.indvar17, 64
141  %polly.loop_cond19 = icmp ult i64 %polly.indvar_next18, 1536
142  %indvar.next = add i64 %indvar, 1
143  br i1 %polly.loop_cond19, label %polly.loop_header14, label %polly.loop_exit16
144
145polly.loop_header20:                              ; preds = %polly.loop_header14, %polly.loop_exit28
146  %indvars.iv3 = phi i64 [ 64, %polly.loop_header14 ], [ %indvars.iv.next4, %polly.loop_exit28 ]
147  %polly.indvar23 = phi i64 [ 0, %polly.loop_header14 ], [ %polly.indvar_next24, %polly.loop_exit28 ]
148  br label %polly.loop_header26
149
150polly.loop_exit28:                                ; preds = %polly.loop_exit34
151  %polly.indvar_next24 = add nuw nsw i64 %polly.indvar23, 64
152  %polly.loop_cond25 = icmp ult i64 %polly.indvar_next24, 1536
153  %indvars.iv.next4 = add nuw nsw i64 %indvars.iv3, 64
154  br i1 %polly.loop_cond25, label %polly.loop_header20, label %polly.loop_exit22
155
156polly.loop_header26:                              ; preds = %polly.loop_exit34, %polly.loop_header20
157  %polly.indvar29 = phi i64 [ %polly.indvar11, %polly.loop_header20 ], [ %polly.indvar_next30, %polly.loop_exit34 ]
158  %1 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @C, i64 0, i64 %polly.indvar29, i64 %0
159  %2 = bitcast float* %1 to <16 x float>*
160  %3 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @C, i64 0, i64 %polly.indvar29, i64 %offset.idx.1
161  %4 = bitcast float* %3 to <16 x float>*
162  %5 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @C, i64 0, i64 %polly.indvar29, i64 %offset.idx.2
163  %6 = bitcast float* %5 to <16 x float>*
164  %7 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @C, i64 0, i64 %polly.indvar29, i64 %offset.idx.3
165  %8 = bitcast float* %7 to <16 x float>*
166  %.promoted = load <16 x float>, <16 x float>* %2, align 4, !alias.scope !9, !noalias !11
167  %.promoted22 = load <16 x float>, <16 x float>* %4, align 4, !alias.scope !9, !noalias !11
168  %.promoted24 = load <16 x float>, <16 x float>* %6, align 4, !alias.scope !9, !noalias !11
169  %.promoted26 = load <16 x float>, <16 x float>* %8, align 4, !alias.scope !9, !noalias !11
170  br label %vector.ph
171
172polly.loop_exit34:                                ; preds = %vector.ph
173  store <16 x float> %interleaved.vec, <16 x float>* %2, align 4, !alias.scope !9, !noalias !11
174  store <16 x float> %interleaved.vec.1, <16 x float>* %4, align 4, !alias.scope !9, !noalias !11
175  store <16 x float> %interleaved.vec.2, <16 x float>* %6, align 4, !alias.scope !9, !noalias !11
176  store <16 x float> %interleaved.vec.3, <16 x float>* %8, align 4, !alias.scope !9, !noalias !11
177  %polly.indvar_next30 = add nuw nsw i64 %polly.indvar29, 1
178  %exitcond7 = icmp eq i64 %polly.indvar_next30, %indvars.iv5
179  br i1 %exitcond7, label %polly.loop_exit28, label %polly.loop_header26
180
181vector.ph:                                        ; preds = %polly.loop_header26, %vector.ph
182  %wide.vec.327 = phi <16 x float> [ %.promoted26, %polly.loop_header26 ], [ %interleaved.vec.3, %vector.ph ]
183  %wide.vec.225 = phi <16 x float> [ %.promoted24, %polly.loop_header26 ], [ %interleaved.vec.2, %vector.ph ]
184  %wide.vec.123 = phi <16 x float> [ %.promoted22, %polly.loop_header26 ], [ %interleaved.vec.1, %vector.ph ]
185  %wide.vec21 = phi <16 x float> [ %.promoted, %polly.loop_header26 ], [ %interleaved.vec, %vector.ph ]
186  %polly.indvar35 = phi i64 [ %polly.indvar23, %polly.loop_header26 ], [ %polly.indvar_next36, %vector.ph ]
187  %scevgep53 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @A, i64 0, i64 %polly.indvar29, i64 %polly.indvar35
188  %_p_scalar_54 = load float, float* %scevgep53, align 4, !alias.scope !12, !noalias !14, !llvm.mem.parallel_loop_access !8
189  %broadcast.splatinsert19 = insertelement <4 x float> undef, float %_p_scalar_54, i32 0
190  %broadcast.splat20 = shufflevector <4 x float> %broadcast.splatinsert19, <4 x float> undef, <4 x i32> zeroinitializer
191  %strided.vec = shufflevector <16 x float> %wide.vec21, <16 x float> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
192  %strided.vec11 = shufflevector <16 x float> %wide.vec21, <16 x float> undef, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
193  %strided.vec12 = shufflevector <16 x float> %wide.vec21, <16 x float> undef, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
194  %strided.vec13 = shufflevector <16 x float> %wide.vec21, <16 x float> undef, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
195  %9 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @B, i64 0, i64 %polly.indvar35, i64 %0
196  %10 = bitcast float* %9 to <16 x float>*
197  %wide.vec14 = load <16 x float>, <16 x float>* %10, align 16, !alias.scope !13, !noalias !15
198  %strided.vec15 = shufflevector <16 x float> %wide.vec14, <16 x float> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
199  %strided.vec16 = shufflevector <16 x float> %wide.vec14, <16 x float> undef, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
200  %strided.vec17 = shufflevector <16 x float> %wide.vec14, <16 x float> undef, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
201  %strided.vec18 = shufflevector <16 x float> %wide.vec14, <16 x float> undef, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
202  %11 = fmul <4 x float> %broadcast.splat20, %strided.vec15
203  %12 = fadd <4 x float> %strided.vec, %11
204  %13 = fmul <4 x float> %broadcast.splat20, %strided.vec16
205  %14 = fadd <4 x float> %strided.vec11, %13
206  %15 = fmul <4 x float> %broadcast.splat20, %strided.vec17
207  %16 = fadd <4 x float> %strided.vec12, %15
208  %17 = fmul <4 x float> %broadcast.splat20, %strided.vec18
209  %18 = fadd <4 x float> %strided.vec13, %17
210  %19 = shufflevector <4 x float> %12, <4 x float> %14, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
211  %20 = shufflevector <4 x float> %16, <4 x float> %18, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
212  %interleaved.vec = shufflevector <8 x float> %19, <8 x float> %20, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>
213  %strided.vec.1 = shufflevector <16 x float> %wide.vec.123, <16 x float> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
214  %strided.vec11.1 = shufflevector <16 x float> %wide.vec.123, <16 x float> undef, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
215  %strided.vec12.1 = shufflevector <16 x float> %wide.vec.123, <16 x float> undef, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
216  %strided.vec13.1 = shufflevector <16 x float> %wide.vec.123, <16 x float> undef, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
217  %21 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @B, i64 0, i64 %polly.indvar35, i64 %offset.idx.1
218  %22 = bitcast float* %21 to <16 x float>*
219  %wide.vec14.1 = load <16 x float>, <16 x float>* %22, align 16, !alias.scope !13, !noalias !15
220  %strided.vec15.1 = shufflevector <16 x float> %wide.vec14.1, <16 x float> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
221  %strided.vec16.1 = shufflevector <16 x float> %wide.vec14.1, <16 x float> undef, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
222  %strided.vec17.1 = shufflevector <16 x float> %wide.vec14.1, <16 x float> undef, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
223  %strided.vec18.1 = shufflevector <16 x float> %wide.vec14.1, <16 x float> undef, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
224  %23 = fmul <4 x float> %broadcast.splat20, %strided.vec15.1
225  %24 = fadd <4 x float> %strided.vec.1, %23
226  %25 = fmul <4 x float> %broadcast.splat20, %strided.vec16.1
227  %26 = fadd <4 x float> %strided.vec11.1, %25
228  %27 = fmul <4 x float> %broadcast.splat20, %strided.vec17.1
229  %28 = fadd <4 x float> %strided.vec12.1, %27
230  %29 = fmul <4 x float> %broadcast.splat20, %strided.vec18.1
231  %30 = fadd <4 x float> %strided.vec13.1, %29
232  %31 = shufflevector <4 x float> %24, <4 x float> %26, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
233  %32 = shufflevector <4 x float> %28, <4 x float> %30, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
234  %interleaved.vec.1 = shufflevector <8 x float> %31, <8 x float> %32, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>
235  %strided.vec.2 = shufflevector <16 x float> %wide.vec.225, <16 x float> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
236  %strided.vec11.2 = shufflevector <16 x float> %wide.vec.225, <16 x float> undef, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
237  %strided.vec12.2 = shufflevector <16 x float> %wide.vec.225, <16 x float> undef, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
238  %strided.vec13.2 = shufflevector <16 x float> %wide.vec.225, <16 x float> undef, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
239  %33 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @B, i64 0, i64 %polly.indvar35, i64 %offset.idx.2
240  %34 = bitcast float* %33 to <16 x float>*
241  %wide.vec14.2 = load <16 x float>, <16 x float>* %34, align 16, !alias.scope !13, !noalias !15
242  %strided.vec15.2 = shufflevector <16 x float> %wide.vec14.2, <16 x float> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
243  %strided.vec16.2 = shufflevector <16 x float> %wide.vec14.2, <16 x float> undef, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
244  %strided.vec17.2 = shufflevector <16 x float> %wide.vec14.2, <16 x float> undef, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
245  %strided.vec18.2 = shufflevector <16 x float> %wide.vec14.2, <16 x float> undef, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
246  %35 = fmul <4 x float> %broadcast.splat20, %strided.vec15.2
247  %36 = fadd <4 x float> %strided.vec.2, %35
248  %37 = fmul <4 x float> %broadcast.splat20, %strided.vec16.2
249  %38 = fadd <4 x float> %strided.vec11.2, %37
250  %39 = fmul <4 x float> %broadcast.splat20, %strided.vec17.2
251  %40 = fadd <4 x float> %strided.vec12.2, %39
252  %41 = fmul <4 x float> %broadcast.splat20, %strided.vec18.2
253  %42 = fadd <4 x float> %strided.vec13.2, %41
254  %43 = shufflevector <4 x float> %36, <4 x float> %38, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
255  %44 = shufflevector <4 x float> %40, <4 x float> %42, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
256  %interleaved.vec.2 = shufflevector <8 x float> %43, <8 x float> %44, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>
257  %strided.vec.3 = shufflevector <16 x float> %wide.vec.327, <16 x float> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
258  %strided.vec11.3 = shufflevector <16 x float> %wide.vec.327, <16 x float> undef, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
259  %strided.vec12.3 = shufflevector <16 x float> %wide.vec.327, <16 x float> undef, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
260  %strided.vec13.3 = shufflevector <16 x float> %wide.vec.327, <16 x float> undef, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
261  %45 = getelementptr [1536 x [1536 x float]], [1536 x [1536 x float]]* @B, i64 0, i64 %polly.indvar35, i64 %offset.idx.3
262  %46 = bitcast float* %45 to <16 x float>*
263  %wide.vec14.3 = load <16 x float>, <16 x float>* %46, align 16, !alias.scope !13, !noalias !15
264  %strided.vec15.3 = shufflevector <16 x float> %wide.vec14.3, <16 x float> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
265  %strided.vec16.3 = shufflevector <16 x float> %wide.vec14.3, <16 x float> undef, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
266  %strided.vec17.3 = shufflevector <16 x float> %wide.vec14.3, <16 x float> undef, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
267  %strided.vec18.3 = shufflevector <16 x float> %wide.vec14.3, <16 x float> undef, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
268  %47 = fmul <4 x float> %broadcast.splat20, %strided.vec15.3
269  %48 = fadd <4 x float> %strided.vec.3, %47
270  %49 = fmul <4 x float> %broadcast.splat20, %strided.vec16.3
271  %50 = fadd <4 x float> %strided.vec11.3, %49
272  %51 = fmul <4 x float> %broadcast.splat20, %strided.vec17.3
273  %52 = fadd <4 x float> %strided.vec12.3, %51
274  %53 = fmul <4 x float> %broadcast.splat20, %strided.vec18.3
275  %54 = fadd <4 x float> %strided.vec13.3, %53
276  %55 = shufflevector <4 x float> %48, <4 x float> %50, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
277  %56 = shufflevector <4 x float> %52, <4 x float> %54, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
278  %interleaved.vec.3 = shufflevector <8 x float> %55, <8 x float> %56, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>
279  %polly.indvar_next36 = add nuw nsw i64 %polly.indvar35, 1
280  %exitcond = icmp eq i64 %polly.indvar_next36, %indvars.iv3
281  br i1 %exitcond, label %polly.loop_exit34, label %vector.ph
282}
283
284; Function Attrs: nounwind
285declare i32 @fputc(i32, %struct._IO_FILE* nocapture) local_unnamed_addr #4
286
287; Function Attrs: argmemonly nounwind
288declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1) #5
289
290attributes #0 = { noinline norecurse nounwind uwtable writeonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "polly-optimized" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
291attributes #1 = { noinline nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
292attributes #2 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
293attributes #3 = { noinline norecurse nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "polly-optimized" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
294attributes #4 = { nounwind }
295attributes #5 = { argmemonly nounwind }
296
297!llvm.module.flags = !{!0}
298!llvm.ident = !{!1}
299
300!0 = !{i32 1, !"wchar_size", i32 4}
301!1 = !{!"clang version 8.0.0 (trunk 342834) (llvm/trunk 342856)"}
302!2 = distinct !{!2}
303!3 = distinct !{!3, !4, !"polly.alias.scope.MemRef_A"}
304!4 = distinct !{!4, !"polly.alias.scope.domain"}
305!5 = !{!6}
306!6 = distinct !{!6, !4, !"polly.alias.scope.MemRef_B"}
307!7 = !{!3}
308!8 = distinct !{!8}
309!9 = distinct !{!9, !10, !"polly.alias.scope.MemRef_C"}
310!10 = distinct !{!10, !"polly.alias.scope.domain"}
311!11 = !{!12, !13}
312!12 = distinct !{!12, !10, !"polly.alias.scope.MemRef_A"}
313!13 = distinct !{!13, !10, !"polly.alias.scope.MemRef_B"}
314!14 = !{!9, !13}
315!15 = !{!9, !12}
316