; LLVM IR from aferikoglou/GenHLSOptimizer :: dataset/rodinia_lavaMD_3_unroll_0/lavaMD.ll (Z23lavaMD_unrolling_paddedPfS_S_)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@__const._Z23lavaMD_unrolling_paddedPfS_S_.neighborOffset = external hidden unnamed_addr constant [27 x [3 x i32]], align 16

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_Z23lavaMD_unrolling_paddedPfS_S_(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca [20 x float], align 16
  %27 = alloca [20 x float], align 16
  %28 = alloca [20 x float], align 16
  %29 = alloca [20 x float], align 16
  %30 = alloca [20 x float], align 16
  %31 = alloca [20 x float], align 16
  %32 = alloca [20 x float], align 16
  %33 = alloca [20 x [4 x float]], align 16
  %34 = alloca [27 x [3 x i32]], align 16
  %35 = alloca [100 x [4 x float]], align 16
  %36 = alloca [100 x [4 x float]], align 16
  %37 = alloca [100 x float], align 16
  %38 = alloca [100 x [4 x float]], align 16
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  br label %39

39:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 80, ptr %26) #4
  br label %40

40:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 80, ptr %27) #4
  br label %41

41:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 80, ptr %28) #4
  br label %42

42:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 80, ptr %29) #4
  br label %43

43:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 80, ptr %30) #4
  br label %44

44:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 80, ptr %31) #4
  br label %45

45:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 80, ptr %32) #4
  br label %46

46:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 320, ptr %33) #4
  br label %47

47:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 324, ptr %34) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %34, ptr align 16 @__const._Z23lavaMD_unrolling_paddedPfS_S_.neighborOffset, i64 324, i1 false)
  br label %48

48:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 1600, ptr %35) #4
  br label %49

49:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 1600, ptr %36) #4
  br label %50

50:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 400, ptr %37) #4
  br label %51

51:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 1600, ptr %38) #4
  br label %52

52:                                               ; preds = %51
  br label %53

53:                                               ; preds = %52
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %54

54:                                               ; preds = %682, %53
  %55 = load i32, ptr %7, align 4, !tbaa !9
  %56 = icmp slt i32 %55, 8
  br i1 %56, label %57, label %685

57:                                               ; preds = %54
  br label %58

58:                                               ; preds = %57
  br label %59

59:                                               ; preds = %58
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %60

60:                                               ; preds = %80, %59
  %61 = load i32, ptr %10, align 4, !tbaa !9
  %62 = icmp slt i32 %61, 100
  br i1 %62, label %63, label %83

63:                                               ; preds = %60
  %64 = load i32, ptr %10, align 4, !tbaa !9
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %65
  %67 = getelementptr inbounds [4 x float], ptr %66, i64 0, i64 0
  store float 0.000000e+00, ptr %67, align 16, !tbaa !11
  %68 = load i32, ptr %10, align 4, !tbaa !9
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %69
  %71 = getelementptr inbounds [4 x float], ptr %70, i64 0, i64 1
  store float 0.000000e+00, ptr %71, align 4, !tbaa !11
  %72 = load i32, ptr %10, align 4, !tbaa !9
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %73
  %75 = getelementptr inbounds [4 x float], ptr %74, i64 0, i64 2
  store float 0.000000e+00, ptr %75, align 8, !tbaa !11
  %76 = load i32, ptr %10, align 4, !tbaa !9
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %77
  %79 = getelementptr inbounds [4 x float], ptr %78, i64 0, i64 3
  store float 0.000000e+00, ptr %79, align 4, !tbaa !11
  br label %80

80:                                               ; preds = %63
  %81 = load i32, ptr %10, align 4, !tbaa !9
  %82 = add nsw i32 %81, 1
  store i32 %82, ptr %10, align 4, !tbaa !9
  br label %60, !llvm.loop !13

83:                                               ; preds = %60
  %84 = load i32, ptr %7, align 4, !tbaa !9
  %85 = mul nsw i32 %84, 100
  store i32 %85, ptr %24, align 4, !tbaa !9
  %86 = load i32, ptr %7, align 4, !tbaa !9
  %87 = sdiv i32 %86, 4
  store i32 %87, ptr %15, align 4, !tbaa !9
  %88 = load i32, ptr %7, align 4, !tbaa !9
  %89 = srem i32 %88, 4
  store i32 %89, ptr %25, align 4, !tbaa !9
  %90 = load i32, ptr %25, align 4, !tbaa !9
  %91 = sdiv i32 %90, 2
  store i32 %91, ptr %14, align 4, !tbaa !9
  %92 = load i32, ptr %25, align 4, !tbaa !9
  %93 = srem i32 %92, 2
  store i32 %93, ptr %13, align 4, !tbaa !9
  %94 = load i32, ptr %13, align 4, !tbaa !9
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr %19, align 4, !tbaa !9
  %96 = load i32, ptr %14, align 4, !tbaa !9
  %97 = add nsw i32 %96, 1
  store i32 %97, ptr %20, align 4, !tbaa !9
  %98 = load i32, ptr %15, align 4, !tbaa !9
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr %21, align 4, !tbaa !9
  %100 = load i32, ptr %21, align 4, !tbaa !9
  %101 = mul nsw i32 %100, 16
  %102 = load i32, ptr %20, align 4, !tbaa !9
  %103 = mul nsw i32 %102, 4
  %104 = add nsw i32 %101, %103
  %105 = load i32, ptr %19, align 4, !tbaa !9
  %106 = add nsw i32 %104, %105
  store i32 %106, ptr %22, align 4, !tbaa !9
  %107 = load i32, ptr %22, align 4, !tbaa !9
  %108 = mul nsw i32 %107, 100
  store i32 %108, ptr %22, align 4, !tbaa !9
  br label %109

109:                                              ; preds = %83
  br label %110

110:                                              ; preds = %109
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %111

111:                                              ; preds = %167, %110
  %112 = load i32, ptr %10, align 4, !tbaa !9
  %113 = icmp slt i32 %112, 100
  br i1 %113, label %114, label %170

114:                                              ; preds = %111
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = load i32, ptr %22, align 4, !tbaa !9
  %117 = load i32, ptr %10, align 4, !tbaa !9
  %118 = add nsw i32 %116, %117
  %119 = mul nsw i32 %118, 4
  %120 = add nsw i32 %119, 0
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds float, ptr %115, i64 %121
  %123 = load float, ptr %122, align 4, !tbaa !11
  %124 = load i32, ptr %10, align 4, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %125
  %127 = getelementptr inbounds [4 x float], ptr %126, i64 0, i64 0
  store float %123, ptr %127, align 16, !tbaa !11
  %128 = load ptr, ptr %4, align 8, !tbaa !5
  %129 = load i32, ptr %22, align 4, !tbaa !9
  %130 = load i32, ptr %10, align 4, !tbaa !9
  %131 = add nsw i32 %129, %130
  %132 = mul nsw i32 %131, 4
  %133 = add nsw i32 %132, 1
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds float, ptr %128, i64 %134
  %136 = load float, ptr %135, align 4, !tbaa !11
  %137 = load i32, ptr %10, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %138
  %140 = getelementptr inbounds [4 x float], ptr %139, i64 0, i64 1
  store float %136, ptr %140, align 4, !tbaa !11
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = load i32, ptr %22, align 4, !tbaa !9
  %143 = load i32, ptr %10, align 4, !tbaa !9
  %144 = add nsw i32 %142, %143
  %145 = mul nsw i32 %144, 4
  %146 = add nsw i32 %145, 2
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds float, ptr %141, i64 %147
  %149 = load float, ptr %148, align 4, !tbaa !11
  %150 = load i32, ptr %10, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %151
  %153 = getelementptr inbounds [4 x float], ptr %152, i64 0, i64 2
  store float %149, ptr %153, align 8, !tbaa !11
  %154 = load ptr, ptr %4, align 8, !tbaa !5
  %155 = load i32, ptr %22, align 4, !tbaa !9
  %156 = load i32, ptr %10, align 4, !tbaa !9
  %157 = add nsw i32 %155, %156
  %158 = mul nsw i32 %157, 4
  %159 = add nsw i32 %158, 3
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds float, ptr %154, i64 %160
  %162 = load float, ptr %161, align 4, !tbaa !11
  %163 = load i32, ptr %10, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %164
  %166 = getelementptr inbounds [4 x float], ptr %165, i64 0, i64 3
  store float %162, ptr %166, align 4, !tbaa !11
  br label %167

167:                                              ; preds = %114
  %168 = load i32, ptr %10, align 4, !tbaa !9
  %169 = add nsw i32 %168, 1
  store i32 %169, ptr %10, align 4, !tbaa !9
  br label %111, !llvm.loop !15

170:                                              ; preds = %111
  br label %171

171:                                              ; preds = %170
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %172

172:                                              ; preds = %616, %171
  %173 = load i32, ptr %16, align 4, !tbaa !9
  %174 = icmp slt i32 %173, 27
  br i1 %174, label %175, label %619

175:                                              ; preds = %172
  %176 = load i32, ptr %19, align 4, !tbaa !9
  %177 = load i32, ptr %16, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [27 x [3 x i32]], ptr %34, i64 0, i64 %178
  %180 = getelementptr inbounds [3 x i32], ptr %179, i64 0, i64 0
  %181 = load i32, ptr %180, align 4, !tbaa !9
  %182 = add nsw i32 %176, %181
  store i32 %182, ptr %13, align 4, !tbaa !9
  %183 = load i32, ptr %20, align 4, !tbaa !9
  %184 = load i32, ptr %16, align 4, !tbaa !9
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds [27 x [3 x i32]], ptr %34, i64 0, i64 %185
  %187 = getelementptr inbounds [3 x i32], ptr %186, i64 0, i64 1
  %188 = load i32, ptr %187, align 4, !tbaa !9
  %189 = add nsw i32 %183, %188
  store i32 %189, ptr %14, align 4, !tbaa !9
  %190 = load i32, ptr %21, align 4, !tbaa !9
  %191 = load i32, ptr %16, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds [27 x [3 x i32]], ptr %34, i64 0, i64 %192
  %194 = getelementptr inbounds [3 x i32], ptr %193, i64 0, i64 2
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = add nsw i32 %190, %195
  store i32 %196, ptr %15, align 4, !tbaa !9
  %197 = load i32, ptr %15, align 4, !tbaa !9
  %198 = mul nsw i32 %197, 16
  %199 = load i32, ptr %14, align 4, !tbaa !9
  %200 = mul nsw i32 %199, 4
  %201 = add nsw i32 %198, %200
  %202 = load i32, ptr %13, align 4, !tbaa !9
  %203 = add nsw i32 %201, %202
  store i32 %203, ptr %23, align 4, !tbaa !9
  %204 = load i32, ptr %23, align 4, !tbaa !9
  %205 = mul nsw i32 %204, 100
  store i32 %205, ptr %23, align 4, !tbaa !9
  br label %206

206:                                              ; preds = %175
  br label %207

207:                                              ; preds = %206
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %264, %207
  %209 = load i32, ptr %10, align 4, !tbaa !9
  %210 = icmp slt i32 %209, 100
  br i1 %210, label %211, label %267

211:                                              ; preds = %208
  %212 = load ptr, ptr %4, align 8, !tbaa !5
  %213 = load i32, ptr %23, align 4, !tbaa !9
  %214 = load i32, ptr %10, align 4, !tbaa !9
  %215 = add nsw i32 %213, %214
  %216 = mul nsw i32 %215, 4
  %217 = add nsw i32 %216, 0
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds float, ptr %212, i64 %218
  %220 = load float, ptr %219, align 4, !tbaa !11
  %221 = load i32, ptr %10, align 4, !tbaa !9
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %222
  %224 = getelementptr inbounds [4 x float], ptr %223, i64 0, i64 0
  store float %220, ptr %224, align 16, !tbaa !11
  %225 = load ptr, ptr %4, align 8, !tbaa !5
  %226 = load i32, ptr %23, align 4, !tbaa !9
  %227 = load i32, ptr %10, align 4, !tbaa !9
  %228 = add nsw i32 %226, %227
  %229 = mul nsw i32 %228, 4
  %230 = add nsw i32 %229, 1
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds float, ptr %225, i64 %231
  %233 = load float, ptr %232, align 4, !tbaa !11
  %234 = load i32, ptr %10, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %235
  %237 = getelementptr inbounds [4 x float], ptr %236, i64 0, i64 1
  store float %233, ptr %237, align 4, !tbaa !11
  %238 = load ptr, ptr %4, align 8, !tbaa !5
  %239 = load i32, ptr %23, align 4, !tbaa !9
  %240 = load i32, ptr %10, align 4, !tbaa !9
  %241 = add nsw i32 %239, %240
  %242 = mul nsw i32 %241, 4
  %243 = add nsw i32 %242, 2
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds float, ptr %238, i64 %244
  %246 = load float, ptr %245, align 4, !tbaa !11
  %247 = load i32, ptr %10, align 4, !tbaa !9
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %248
  %250 = getelementptr inbounds [4 x float], ptr %249, i64 0, i64 2
  store float %246, ptr %250, align 8, !tbaa !11
  %251 = load ptr, ptr %4, align 8, !tbaa !5
  %252 = load i32, ptr %23, align 4, !tbaa !9
  %253 = load i32, ptr %10, align 4, !tbaa !9
  %254 = add nsw i32 %252, %253
  %255 = mul nsw i32 %254, 4
  %256 = add nsw i32 %255, 3
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds float, ptr %251, i64 %257
  %259 = load float, ptr %258, align 4, !tbaa !11
  %260 = load i32, ptr %10, align 4, !tbaa !9
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %261
  %263 = getelementptr inbounds [4 x float], ptr %262, i64 0, i64 3
  store float %259, ptr %263, align 4, !tbaa !11
  br label %264

264:                                              ; preds = %211
  %265 = load i32, ptr %10, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %10, align 4, !tbaa !9
  br label %208, !llvm.loop !16

267:                                              ; preds = %208
  br label %268

268:                                              ; preds = %267
  br label %269

269:                                              ; preds = %268
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %270

270:                                              ; preds = %284, %269
  %271 = load i32, ptr %10, align 4, !tbaa !9
  %272 = icmp slt i32 %271, 100
  br i1 %272, label %273, label %287

273:                                              ; preds = %270
  %274 = load ptr, ptr %5, align 8, !tbaa !5
  %275 = load i32, ptr %23, align 4, !tbaa !9
  %276 = load i32, ptr %10, align 4, !tbaa !9
  %277 = add nsw i32 %275, %276
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds float, ptr %274, i64 %278
  %280 = load float, ptr %279, align 4, !tbaa !11
  %281 = load i32, ptr %10, align 4, !tbaa !9
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds [100 x float], ptr %37, i64 0, i64 %282
  store float %280, ptr %283, align 4, !tbaa !11
  br label %284

284:                                              ; preds = %273
  %285 = load i32, ptr %10, align 4, !tbaa !9
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr %10, align 4, !tbaa !9
  br label %270, !llvm.loop !17

287:                                              ; preds = %270
  br label %288

288:                                              ; preds = %287
  br label %289

289:                                              ; preds = %288
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %612, %289
  %291 = load i32, ptr %9, align 4, !tbaa !9
  %292 = icmp slt i32 %291, 100
  br i1 %292, label %293, label %615

293:                                              ; preds = %290
  br label %294

294:                                              ; preds = %293
  br label %295

295:                                              ; preds = %294
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %296

296:                                              ; preds = %608, %295
  %297 = load i32, ptr %8, align 4, !tbaa !9
  %298 = icmp slt i32 %297, 100
  br i1 %298, label %299, label %611

299:                                              ; preds = %296
  br label %300

300:                                              ; preds = %299
  br label %301

301:                                              ; preds = %300
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %302

302:                                              ; preds = %604, %301
  %303 = load i32, ptr %11, align 4, !tbaa !9
  %304 = icmp slt i32 %303, 20
  br i1 %304, label %305, label %607

305:                                              ; preds = %302
  %306 = load i32, ptr %8, align 4, !tbaa !9
  %307 = load i32, ptr %11, align 4, !tbaa !9
  %308 = add nsw i32 %306, %307
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %309
  %311 = getelementptr inbounds [4 x float], ptr %310, i64 0, i64 0
  %312 = load float, ptr %311, align 16, !tbaa !11
  %313 = load i32, ptr %9, align 4, !tbaa !9
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %314
  %316 = getelementptr inbounds [4 x float], ptr %315, i64 0, i64 0
  %317 = load float, ptr %316, align 16, !tbaa !11
  %318 = fadd float %312, %317
  %319 = load i32, ptr %8, align 4, !tbaa !9
  %320 = load i32, ptr %11, align 4, !tbaa !9
  %321 = add nsw i32 %319, %320
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %322
  %324 = getelementptr inbounds [4 x float], ptr %323, i64 0, i64 1
  %325 = load float, ptr %324, align 4, !tbaa !11
  %326 = load i32, ptr %9, align 4, !tbaa !9
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %327
  %329 = getelementptr inbounds [4 x float], ptr %328, i64 0, i64 1
  %330 = load float, ptr %329, align 4, !tbaa !11
  %331 = load i32, ptr %8, align 4, !tbaa !9
  %332 = load i32, ptr %11, align 4, !tbaa !9
  %333 = add nsw i32 %331, %332
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %334
  %336 = getelementptr inbounds [4 x float], ptr %335, i64 0, i64 2
  %337 = load float, ptr %336, align 8, !tbaa !11
  %338 = load i32, ptr %9, align 4, !tbaa !9
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %339
  %341 = getelementptr inbounds [4 x float], ptr %340, i64 0, i64 2
  %342 = load float, ptr %341, align 8, !tbaa !11
  %343 = fmul float %337, %342
  %344 = call float @llvm.fmuladd.f32(float %325, float %330, float %343)
  %345 = load i32, ptr %8, align 4, !tbaa !9
  %346 = load i32, ptr %11, align 4, !tbaa !9
  %347 = add nsw i32 %345, %346
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %348
  %350 = getelementptr inbounds [4 x float], ptr %349, i64 0, i64 3
  %351 = load float, ptr %350, align 4, !tbaa !11
  %352 = load i32, ptr %9, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %353
  %355 = getelementptr inbounds [4 x float], ptr %354, i64 0, i64 3
  %356 = load float, ptr %355, align 4, !tbaa !11
  %357 = call float @llvm.fmuladd.f32(float %351, float %356, float %344)
  %358 = fsub float %318, %357
  %359 = load i32, ptr %11, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds [20 x float], ptr %26, i64 0, i64 %360
  store float %358, ptr %361, align 4, !tbaa !11
  %362 = load i32, ptr %11, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds [20 x float], ptr %26, i64 0, i64 %363
  %365 = load float, ptr %364, align 4, !tbaa !11
  %366 = fpext float %365 to double
  %367 = fmul double 5.000000e-01, %366
  %368 = fptrunc double %367 to float
  %369 = load i32, ptr %11, align 4, !tbaa !9
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %370
  store float %368, ptr %371, align 4, !tbaa !11
  %372 = load i32, ptr %11, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %373
  %375 = load float, ptr %374, align 4, !tbaa !11
  %376 = fpext float %375 to double
  %377 = fmul double %376, -1.000000e+00
  %378 = fptrunc double %377 to float
  %379 = load i32, ptr %11, align 4, !tbaa !9
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %380
  store float %378, ptr %381, align 4, !tbaa !11
  %382 = load i32, ptr %11, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %383
  %385 = load float, ptr %384, align 4, !tbaa !11
  %386 = fpext float %385 to double
  %387 = fadd double 1.000000e+00, %386
  %388 = load i32, ptr %11, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %389
  %391 = load float, ptr %390, align 4, !tbaa !11
  %392 = load i32, ptr %11, align 4, !tbaa !9
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %393
  %395 = load float, ptr %394, align 4, !tbaa !11
  %396 = fmul float %391, %395
  %397 = fpext float %396 to double
  %398 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %397, double %387)
  %399 = load i32, ptr %11, align 4, !tbaa !9
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %400
  %402 = load float, ptr %401, align 4, !tbaa !11
  %403 = load i32, ptr %11, align 4, !tbaa !9
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %404
  %406 = load float, ptr %405, align 4, !tbaa !11
  %407 = fmul float %402, %406
  %408 = load i32, ptr %11, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %409
  %411 = load float, ptr %410, align 4, !tbaa !11
  %412 = fmul float %407, %411
  %413 = fpext float %412 to double
  %414 = call double @llvm.fmuladd.f64(double 1.666600e-01, double %413, double %398)
  %415 = load i32, ptr %11, align 4, !tbaa !9
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %416
  %418 = load float, ptr %417, align 4, !tbaa !11
  %419 = load i32, ptr %11, align 4, !tbaa !9
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %420
  %422 = load float, ptr %421, align 4, !tbaa !11
  %423 = fmul float %418, %422
  %424 = load i32, ptr %11, align 4, !tbaa !9
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %425
  %427 = load float, ptr %426, align 4, !tbaa !11
  %428 = fmul float %423, %427
  %429 = load i32, ptr %11, align 4, !tbaa !9
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds [20 x float], ptr %27, i64 0, i64 %430
  %432 = load float, ptr %431, align 4, !tbaa !11
  %433 = fmul float %428, %432
  %434 = fpext float %433 to double
  %435 = call double @llvm.fmuladd.f64(double 4.166600e-02, double %434, double %414)
  %436 = fptrunc double %435 to float
  %437 = load i32, ptr %11, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds [20 x float], ptr %29, i64 0, i64 %438
  store float %436, ptr %439, align 4, !tbaa !11
  %440 = load i32, ptr %11, align 4, !tbaa !9
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds [20 x float], ptr %29, i64 0, i64 %441
  %443 = load float, ptr %442, align 4, !tbaa !11
  %444 = fpext float %443 to double
  %445 = fmul double 2.000000e+00, %444
  %446 = fptrunc double %445 to float
  %447 = load i32, ptr %11, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds [20 x float], ptr %28, i64 0, i64 %448
  store float %446, ptr %449, align 4, !tbaa !11
  %450 = load i32, ptr %8, align 4, !tbaa !9
  %451 = load i32, ptr %11, align 4, !tbaa !9
  %452 = add nsw i32 %450, %451
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %453
  %455 = getelementptr inbounds [4 x float], ptr %454, i64 0, i64 1
  %456 = load float, ptr %455, align 4, !tbaa !11
  %457 = load i32, ptr %9, align 4, !tbaa !9
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %458
  %460 = getelementptr inbounds [4 x float], ptr %459, i64 0, i64 1
  %461 = load float, ptr %460, align 4, !tbaa !11
  %462 = fsub float %456, %461
  %463 = load i32, ptr %11, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds [20 x [4 x float]], ptr %33, i64 0, i64 %464
  %466 = getelementptr inbounds [4 x float], ptr %465, i64 0, i64 1
  store float %462, ptr %466, align 4, !tbaa !11
  %467 = load i32, ptr %8, align 4, !tbaa !9
  %468 = load i32, ptr %11, align 4, !tbaa !9
  %469 = add nsw i32 %467, %468
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %470
  %472 = getelementptr inbounds [4 x float], ptr %471, i64 0, i64 2
  %473 = load float, ptr %472, align 8, !tbaa !11
  %474 = load i32, ptr %9, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %475
  %477 = getelementptr inbounds [4 x float], ptr %476, i64 0, i64 2
  %478 = load float, ptr %477, align 8, !tbaa !11
  %479 = fsub float %473, %478
  %480 = load i32, ptr %11, align 4, !tbaa !9
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds [20 x [4 x float]], ptr %33, i64 0, i64 %481
  %483 = getelementptr inbounds [4 x float], ptr %482, i64 0, i64 2
  store float %479, ptr %483, align 8, !tbaa !11
  %484 = load i32, ptr %8, align 4, !tbaa !9
  %485 = load i32, ptr %11, align 4, !tbaa !9
  %486 = add nsw i32 %484, %485
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds [100 x [4 x float]], ptr %35, i64 0, i64 %487
  %489 = getelementptr inbounds [4 x float], ptr %488, i64 0, i64 3
  %490 = load float, ptr %489, align 4, !tbaa !11
  %491 = load i32, ptr %9, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds [100 x [4 x float]], ptr %36, i64 0, i64 %492
  %494 = getelementptr inbounds [4 x float], ptr %493, i64 0, i64 3
  %495 = load float, ptr %494, align 4, !tbaa !11
  %496 = fsub float %490, %495
  %497 = load i32, ptr %11, align 4, !tbaa !9
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds [20 x [4 x float]], ptr %33, i64 0, i64 %498
  %500 = getelementptr inbounds [4 x float], ptr %499, i64 0, i64 3
  store float %496, ptr %500, align 4, !tbaa !11
  %501 = load i32, ptr %11, align 4, !tbaa !9
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds [20 x float], ptr %28, i64 0, i64 %502
  %504 = load float, ptr %503, align 4, !tbaa !11
  %505 = load i32, ptr %11, align 4, !tbaa !9
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds [20 x [4 x float]], ptr %33, i64 0, i64 %506
  %508 = getelementptr inbounds [4 x float], ptr %507, i64 0, i64 1
  %509 = load float, ptr %508, align 4, !tbaa !11
  %510 = fmul float %504, %509
  %511 = load i32, ptr %11, align 4, !tbaa !9
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds [20 x float], ptr %30, i64 0, i64 %512
  store float %510, ptr %513, align 4, !tbaa !11
  %514 = load i32, ptr %11, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds [20 x float], ptr %28, i64 0, i64 %515
  %517 = load float, ptr %516, align 4, !tbaa !11
  %518 = load i32, ptr %11, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds [20 x [4 x float]], ptr %33, i64 0, i64 %519
  %521 = getelementptr inbounds [4 x float], ptr %520, i64 0, i64 2
  %522 = load float, ptr %521, align 8, !tbaa !11
  %523 = fmul float %517, %522
  %524 = load i32, ptr %11, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds [20 x float], ptr %31, i64 0, i64 %525
  store float %523, ptr %526, align 4, !tbaa !11
  %527 = load i32, ptr %11, align 4, !tbaa !9
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds [20 x float], ptr %28, i64 0, i64 %528
  %530 = load float, ptr %529, align 4, !tbaa !11
  %531 = load i32, ptr %11, align 4, !tbaa !9
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds [20 x [4 x float]], ptr %33, i64 0, i64 %532
  %534 = getelementptr inbounds [4 x float], ptr %533, i64 0, i64 3
  %535 = load float, ptr %534, align 4, !tbaa !11
  %536 = fmul float %530, %535
  %537 = load i32, ptr %11, align 4, !tbaa !9
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds [20 x float], ptr %32, i64 0, i64 %538
  store float %536, ptr %539, align 4, !tbaa !11
  %540 = load i32, ptr %9, align 4, !tbaa !9
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds [100 x float], ptr %37, i64 0, i64 %541
  %543 = load float, ptr %542, align 4, !tbaa !11
  %544 = load i32, ptr %11, align 4, !tbaa !9
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds [20 x float], ptr %29, i64 0, i64 %545
  %547 = load float, ptr %546, align 4, !tbaa !11
  %548 = load i32, ptr %8, align 4, !tbaa !9
  %549 = load i32, ptr %11, align 4, !tbaa !9
  %550 = add nsw i32 %548, %549
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %551
  %553 = getelementptr inbounds [4 x float], ptr %552, i64 0, i64 0
  %554 = load float, ptr %553, align 16, !tbaa !11
  %555 = call float @llvm.fmuladd.f32(float %543, float %547, float %554)
  store float %555, ptr %553, align 16, !tbaa !11
  %556 = load i32, ptr %9, align 4, !tbaa !9
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds [100 x float], ptr %37, i64 0, i64 %557
  %559 = load float, ptr %558, align 4, !tbaa !11
  %560 = load i32, ptr %11, align 4, !tbaa !9
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds [20 x float], ptr %30, i64 0, i64 %561
  %563 = load float, ptr %562, align 4, !tbaa !11
  %564 = load i32, ptr %8, align 4, !tbaa !9
  %565 = load i32, ptr %11, align 4, !tbaa !9
  %566 = add nsw i32 %564, %565
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %567
  %569 = getelementptr inbounds [4 x float], ptr %568, i64 0, i64 1
  %570 = load float, ptr %569, align 4, !tbaa !11
  %571 = call float @llvm.fmuladd.f32(float %559, float %563, float %570)
  store float %571, ptr %569, align 4, !tbaa !11
  %572 = load i32, ptr %9, align 4, !tbaa !9
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds [100 x float], ptr %37, i64 0, i64 %573
  %575 = load float, ptr %574, align 4, !tbaa !11
  %576 = load i32, ptr %11, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds [20 x float], ptr %31, i64 0, i64 %577
  %579 = load float, ptr %578, align 4, !tbaa !11
  %580 = load i32, ptr %8, align 4, !tbaa !9
  %581 = load i32, ptr %11, align 4, !tbaa !9
  %582 = add nsw i32 %580, %581
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %583
  %585 = getelementptr inbounds [4 x float], ptr %584, i64 0, i64 2
  %586 = load float, ptr %585, align 8, !tbaa !11
  %587 = call float @llvm.fmuladd.f32(float %575, float %579, float %586)
  store float %587, ptr %585, align 8, !tbaa !11
  %588 = load i32, ptr %9, align 4, !tbaa !9
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds [100 x float], ptr %37, i64 0, i64 %589
  %591 = load float, ptr %590, align 4, !tbaa !11
  %592 = load i32, ptr %11, align 4, !tbaa !9
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds [20 x float], ptr %32, i64 0, i64 %593
  %595 = load float, ptr %594, align 4, !tbaa !11
  %596 = load i32, ptr %8, align 4, !tbaa !9
  %597 = load i32, ptr %11, align 4, !tbaa !9
  %598 = add nsw i32 %596, %597
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %599
  %601 = getelementptr inbounds [4 x float], ptr %600, i64 0, i64 3
  %602 = load float, ptr %601, align 4, !tbaa !11
  %603 = call float @llvm.fmuladd.f32(float %591, float %595, float %602)
  store float %603, ptr %601, align 4, !tbaa !11
  br label %604

604:                                              ; preds = %305
  %605 = load i32, ptr %11, align 4, !tbaa !9
  %606 = add nsw i32 %605, 1
  store i32 %606, ptr %11, align 4, !tbaa !9
  br label %302, !llvm.loop !18

607:                                              ; preds = %302
  br label %608

608:                                              ; preds = %607
  %609 = load i32, ptr %8, align 4, !tbaa !9
  %610 = add nsw i32 %609, 20
  store i32 %610, ptr %8, align 4, !tbaa !9
  br label %296, !llvm.loop !19

611:                                              ; preds = %296
  br label %612

612:                                              ; preds = %611
  %613 = load i32, ptr %9, align 4, !tbaa !9
  %614 = add nsw i32 %613, 1
  store i32 %614, ptr %9, align 4, !tbaa !9
  br label %290, !llvm.loop !20

615:                                              ; preds = %290
  br label %616

616:                                              ; preds = %615
  %617 = load i32, ptr %16, align 4, !tbaa !9
  %618 = add nsw i32 %617, 1
  store i32 %618, ptr %16, align 4, !tbaa !9
  br label %172, !llvm.loop !21

619:                                              ; preds = %172
  br label %620

620:                                              ; preds = %619
  br label %621

621:                                              ; preds = %620
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %622

622:                                              ; preds = %678, %621
  %623 = load i32, ptr %10, align 4, !tbaa !9
  %624 = icmp slt i32 %623, 100
  br i1 %624, label %625, label %681

625:                                              ; preds = %622
  %626 = load i32, ptr %10, align 4, !tbaa !9
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %627
  %629 = getelementptr inbounds [4 x float], ptr %628, i64 0, i64 0
  %630 = load float, ptr %629, align 16, !tbaa !11
  %631 = load ptr, ptr %6, align 8, !tbaa !5
  %632 = load i32, ptr %24, align 4, !tbaa !9
  %633 = load i32, ptr %10, align 4, !tbaa !9
  %634 = add nsw i32 %632, %633
  %635 = mul nsw i32 %634, 4
  %636 = add nsw i32 %635, 0
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds float, ptr %631, i64 %637
  store float %630, ptr %638, align 4, !tbaa !11
  %639 = load i32, ptr %10, align 4, !tbaa !9
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %640
  %642 = getelementptr inbounds [4 x float], ptr %641, i64 0, i64 1
  %643 = load float, ptr %642, align 4, !tbaa !11
  %644 = load ptr, ptr %6, align 8, !tbaa !5
  %645 = load i32, ptr %24, align 4, !tbaa !9
  %646 = load i32, ptr %10, align 4, !tbaa !9
  %647 = add nsw i32 %645, %646
  %648 = mul nsw i32 %647, 4
  %649 = add nsw i32 %648, 1
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds float, ptr %644, i64 %650
  store float %643, ptr %651, align 4, !tbaa !11
  %652 = load i32, ptr %10, align 4, !tbaa !9
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %653
  %655 = getelementptr inbounds [4 x float], ptr %654, i64 0, i64 2
  %656 = load float, ptr %655, align 8, !tbaa !11
  %657 = load ptr, ptr %6, align 8, !tbaa !5
  %658 = load i32, ptr %24, align 4, !tbaa !9
  %659 = load i32, ptr %10, align 4, !tbaa !9
  %660 = add nsw i32 %658, %659
  %661 = mul nsw i32 %660, 4
  %662 = add nsw i32 %661, 2
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds float, ptr %657, i64 %663
  store float %656, ptr %664, align 4, !tbaa !11
  %665 = load i32, ptr %10, align 4, !tbaa !9
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds [100 x [4 x float]], ptr %38, i64 0, i64 %666
  %668 = getelementptr inbounds [4 x float], ptr %667, i64 0, i64 3
  %669 = load float, ptr %668, align 4, !tbaa !11
  %670 = load ptr, ptr %6, align 8, !tbaa !5
  %671 = load i32, ptr %24, align 4, !tbaa !9
  %672 = load i32, ptr %10, align 4, !tbaa !9
  %673 = add nsw i32 %671, %672
  %674 = mul nsw i32 %673, 4
  %675 = add nsw i32 %674, 3
  %676 = sext i32 %675 to i64
  %677 = getelementptr inbounds float, ptr %670, i64 %676
  store float %669, ptr %677, align 4, !tbaa !11
  br label %678

678:                                              ; preds = %625
  %679 = load i32, ptr %10, align 4, !tbaa !9
  %680 = add nsw i32 %679, 1
  store i32 %680, ptr %10, align 4, !tbaa !9
  br label %622, !llvm.loop !22

681:                                              ; preds = %622
  br label %682

682:                                              ; preds = %681
  %683 = load i32, ptr %7, align 4, !tbaa !9
  %684 = add nsw i32 %683, 1
  store i32 %684, ptr %7, align 4, !tbaa !9
  br label %54, !llvm.loop !23

685:                                              ; preds = %54
  call void @llvm.lifetime.end.p0(i64 1600, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 400, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 1600, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 1600, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 324, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 320, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@__const._Z23lavaMD_unrolling_paddedPfS_S_.neighborOffset = external hidden unnamed_addr constant [27 x [3 x i32]], align 16

; Function Attrs: mustprogress nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable
define dso_local void @_Z23lavaMD_unrolling_paddedPfS_S_(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #0 {
  %4 = alloca [100 x [4 x float]], align 16
  %5 = alloca [100 x [4 x float]], align 16
  %6 = alloca [100 x float], align 16
  %7 = alloca [100 x [4 x float]], align 16
  call void @llvm.lifetime.start.p0(i64 1600, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 1600, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 400, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 1600, ptr nonnull %7) #4
  %8 = getelementptr inbounds i8, ptr %6, i64 16
  %9 = getelementptr inbounds i8, ptr %6, i64 32
  %10 = getelementptr inbounds i8, ptr %6, i64 48
  %11 = getelementptr inbounds i8, ptr %6, i64 64
  %12 = getelementptr inbounds i8, ptr %6, i64 80
  %13 = getelementptr inbounds i8, ptr %6, i64 96
  %14 = getelementptr inbounds i8, ptr %6, i64 112
  %15 = getelementptr inbounds i8, ptr %6, i64 128
  %16 = getelementptr inbounds i8, ptr %6, i64 144
  %17 = getelementptr inbounds i8, ptr %6, i64 160
  %18 = getelementptr inbounds i8, ptr %6, i64 176
  %19 = getelementptr inbounds i8, ptr %6, i64 192
  %20 = getelementptr inbounds i8, ptr %6, i64 208
  %21 = getelementptr inbounds i8, ptr %6, i64 224
  %22 = getelementptr inbounds i8, ptr %6, i64 240
  %23 = getelementptr inbounds i8, ptr %6, i64 256
  %24 = getelementptr inbounds i8, ptr %6, i64 272
  %25 = getelementptr inbounds i8, ptr %6, i64 288
  %26 = getelementptr inbounds i8, ptr %6, i64 304
  %27 = getelementptr inbounds i8, ptr %6, i64 320
  %28 = getelementptr inbounds i8, ptr %6, i64 336
  %29 = getelementptr inbounds i8, ptr %6, i64 352
  %30 = getelementptr inbounds i8, ptr %6, i64 368
  %31 = getelementptr inbounds i8, ptr %6, i64 384
  %32 = getelementptr inbounds i8, ptr %6, i64 388
  %33 = getelementptr inbounds i8, ptr %6, i64 392
  %34 = getelementptr inbounds i8, ptr %6, i64 396
  %invariant.gep381 = getelementptr i8, ptr %2, i64 -12
  br label %.preheader174

.preheader174:                                    ; preds = %3, %middle.block
  %indvars.iv214 = phi i64 [ 0, %3 ], [ %indvars.iv.next215, %middle.block ]
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1600) %7, i8 0, i64 1600, i1 false), !tbaa !5
  %35 = trunc nuw nsw i64 %indvars.iv214 to i32
  %36 = lshr i32 %35, 2
  %37 = lshr i32 %35, 1
  %38 = and i32 %37, 1
  %39 = and i32 %35, 1
  %40 = add nuw nsw i32 %39, 1
  %41 = add nuw nsw i32 %38, 1
  %42 = add nuw nsw i32 %36, 1
  %43 = shl nuw nsw i32 %42, 4
  %44 = shl nuw nsw i32 %41, 2
  %45 = or disjoint i32 %44, %43
  %46 = or disjoint i32 %45, %40
  %47 = mul nuw nsw i32 %46, 100
  %48 = zext nneg i32 %47 to i64
  br label %vector.body369

vector.body369:                                   ; preds = %vector.body369, %.preheader174
  %index370 = phi i64 [ 0, %.preheader174 ], [ %index.next377.1, %vector.body369 ]
  %49 = add nuw nsw i64 %index370, %48
  %.idx = shl nsw i64 %49, 4
  %50 = getelementptr inbounds i8, ptr %0, i64 %.idx
  %wide.vec371 = load <8 x float>, ptr %50, align 4, !tbaa !5
  %51 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %index370
  store <8 x float> %wide.vec371, ptr %51, align 16, !tbaa !5
  %index.next377 = or disjoint i64 %index370, 2
  %52 = add nuw nsw i64 %index.next377, %48
  %.idx.1 = shl nsw i64 %52, 4
  %53 = getelementptr inbounds i8, ptr %0, i64 %.idx.1
  %wide.vec371.1 = load <8 x float>, ptr %53, align 4, !tbaa !5
  %54 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %index.next377
  store <8 x float> %wide.vec371.1, ptr %54, align 16, !tbaa !5
  %index.next377.1 = add nuw nsw i64 %index370, 4
  %55 = icmp eq i64 %index.next377.1, 100
  br i1 %55, label %.preheader173, label %vector.body369, !llvm.loop !9

.preheader173:                                    ; preds = %vector.body369, %386
  %indvars.iv206 = phi i64 [ %indvars.iv.next207, %386 ], [ 0, %vector.body369 ]
  %56 = getelementptr inbounds [27 x [3 x i32]], ptr @__const._Z23lavaMD_unrolling_paddedPfS_S_.neighborOffset, i64 0, i64 %indvars.iv206
  %57 = load i32, ptr %56, align 4, !tbaa !13
  %58 = getelementptr inbounds i8, ptr %56, i64 4
  %59 = load i32, ptr %58, align 4, !tbaa !13
  %60 = add nsw i32 %59, %41
  %61 = getelementptr inbounds i8, ptr %56, i64 8
  %62 = load i32, ptr %61, align 4, !tbaa !13
  %63 = add nsw i32 %62, %42
  %64 = shl nsw i32 %63, 4
  %65 = shl nsw i32 %60, 2
  %66 = add i32 %57, %40
  %67 = add i32 %66, %65
  %68 = add i32 %67, %64
  %69 = mul nsw i32 %68, 100
  %70 = sext i32 %69 to i64
  br label %vector.body356

vector.body356:                                   ; preds = %vector.body356, %.preheader173
  %index357 = phi i64 [ 0, %.preheader173 ], [ %index.next364.1, %vector.body356 ]
  %71 = add nsw i64 %index357, %70
  %.idx379 = shl nsw i64 %71, 4
  %72 = getelementptr inbounds i8, ptr %0, i64 %.idx379
  %wide.vec358 = load <8 x float>, ptr %72, align 4, !tbaa !5
  %73 = getelementptr inbounds [100 x [4 x float]], ptr %5, i64 0, i64 %index357
  store <8 x float> %wide.vec358, ptr %73, align 16, !tbaa !5
  %index.next364 = or disjoint i64 %index357, 2
  %74 = add nsw i64 %index.next364, %70
  %.idx379.1 = shl nsw i64 %74, 4
  %75 = getelementptr inbounds i8, ptr %0, i64 %.idx379.1
  %wide.vec358.1 = load <8 x float>, ptr %75, align 4, !tbaa !5
  %76 = getelementptr inbounds [100 x [4 x float]], ptr %5, i64 0, i64 %index.next364
  store <8 x float> %wide.vec358.1, ptr %76, align 16, !tbaa !5
  %index.next364.1 = add nuw nsw i64 %index357, 4
  %77 = icmp eq i64 %index.next364.1, 100
  br i1 %77, label %.preheader171.preheader, label %vector.body356, !llvm.loop !15

.preheader171.preheader:                          ; preds = %vector.body356
  %invariant.gep = getelementptr float, ptr %1, i64 %70
  %78 = getelementptr i8, ptr %invariant.gep, i64 16
  %wide.load = load <4 x float>, ptr %invariant.gep, align 4, !tbaa !5
  %wide.load350 = load <4 x float>, ptr %78, align 4, !tbaa !5
  store <4 x float> %wide.load, ptr %6, align 16, !tbaa !5
  store <4 x float> %wide.load350, ptr %8, align 16, !tbaa !5
  %79 = getelementptr i8, ptr %invariant.gep, i64 32
  %80 = getelementptr i8, ptr %invariant.gep, i64 48
  %wide.load.1 = load <4 x float>, ptr %79, align 4, !tbaa !5
  %wide.load350.1 = load <4 x float>, ptr %80, align 4, !tbaa !5
  store <4 x float> %wide.load.1, ptr %9, align 16, !tbaa !5
  store <4 x float> %wide.load350.1, ptr %10, align 16, !tbaa !5
  %81 = getelementptr i8, ptr %invariant.gep, i64 64
  %82 = getelementptr i8, ptr %invariant.gep, i64 80
  %wide.load.2 = load <4 x float>, ptr %81, align 4, !tbaa !5
  %wide.load350.2 = load <4 x float>, ptr %82, align 4, !tbaa !5
  store <4 x float> %wide.load.2, ptr %11, align 16, !tbaa !5
  store <4 x float> %wide.load350.2, ptr %12, align 16, !tbaa !5
  %83 = getelementptr i8, ptr %invariant.gep, i64 96
  %84 = getelementptr i8, ptr %invariant.gep, i64 112
  %wide.load.3 = load <4 x float>, ptr %83, align 4, !tbaa !5
  %wide.load350.3 = load <4 x float>, ptr %84, align 4, !tbaa !5
  store <4 x float> %wide.load.3, ptr %13, align 16, !tbaa !5
  store <4 x float> %wide.load350.3, ptr %14, align 16, !tbaa !5
  %85 = getelementptr i8, ptr %invariant.gep, i64 128
  %86 = getelementptr i8, ptr %invariant.gep, i64 144
  %wide.load.4 = load <4 x float>, ptr %85, align 4, !tbaa !5
  %wide.load350.4 = load <4 x float>, ptr %86, align 4, !tbaa !5
  store <4 x float> %wide.load.4, ptr %15, align 16, !tbaa !5
  store <4 x float> %wide.load350.4, ptr %16, align 16, !tbaa !5
  %87 = getelementptr i8, ptr %invariant.gep, i64 160
  %88 = getelementptr i8, ptr %invariant.gep, i64 176
  %wide.load.5 = load <4 x float>, ptr %87, align 4, !tbaa !5
  %wide.load350.5 = load <4 x float>, ptr %88, align 4, !tbaa !5
  store <4 x float> %wide.load.5, ptr %17, align 16, !tbaa !5
  store <4 x float> %wide.load350.5, ptr %18, align 16, !tbaa !5
  %89 = getelementptr i8, ptr %invariant.gep, i64 192
  %90 = getelementptr i8, ptr %invariant.gep, i64 208
  %wide.load.6 = load <4 x float>, ptr %89, align 4, !tbaa !5
  %wide.load350.6 = load <4 x float>, ptr %90, align 4, !tbaa !5
  store <4 x float> %wide.load.6, ptr %19, align 16, !tbaa !5
  store <4 x float> %wide.load350.6, ptr %20, align 16, !tbaa !5
  %91 = getelementptr i8, ptr %invariant.gep, i64 224
  %92 = getelementptr i8, ptr %invariant.gep, i64 240
  %wide.load.7 = load <4 x float>, ptr %91, align 4, !tbaa !5
  %wide.load350.7 = load <4 x float>, ptr %92, align 4, !tbaa !5
  store <4 x float> %wide.load.7, ptr %21, align 16, !tbaa !5
  store <4 x float> %wide.load350.7, ptr %22, align 16, !tbaa !5
  %93 = getelementptr i8, ptr %invariant.gep, i64 256
  %94 = getelementptr i8, ptr %invariant.gep, i64 272
  %wide.load.8 = load <4 x float>, ptr %93, align 4, !tbaa !5
  %wide.load350.8 = load <4 x float>, ptr %94, align 4, !tbaa !5
  store <4 x float> %wide.load.8, ptr %23, align 16, !tbaa !5
  store <4 x float> %wide.load350.8, ptr %24, align 16, !tbaa !5
  %95 = getelementptr i8, ptr %invariant.gep, i64 288
  %96 = getelementptr i8, ptr %invariant.gep, i64 304
  %wide.load.9 = load <4 x float>, ptr %95, align 4, !tbaa !5
  %wide.load350.9 = load <4 x float>, ptr %96, align 4, !tbaa !5
  store <4 x float> %wide.load.9, ptr %25, align 16, !tbaa !5
  store <4 x float> %wide.load350.9, ptr %26, align 16, !tbaa !5
  %97 = getelementptr i8, ptr %invariant.gep, i64 320
  %98 = getelementptr i8, ptr %invariant.gep, i64 336
  %wide.load.10 = load <4 x float>, ptr %97, align 4, !tbaa !5
  %wide.load350.10 = load <4 x float>, ptr %98, align 4, !tbaa !5
  store <4 x float> %wide.load.10, ptr %27, align 16, !tbaa !5
  store <4 x float> %wide.load350.10, ptr %28, align 16, !tbaa !5
  %99 = getelementptr i8, ptr %invariant.gep, i64 352
  %100 = getelementptr i8, ptr %invariant.gep, i64 368
  %wide.load.11 = load <4 x float>, ptr %99, align 4, !tbaa !5
  %wide.load350.11 = load <4 x float>, ptr %100, align 4, !tbaa !5
  store <4 x float> %wide.load.11, ptr %29, align 16, !tbaa !5
  store <4 x float> %wide.load350.11, ptr %30, align 16, !tbaa !5
  %gep = getelementptr i8, ptr %invariant.gep, i64 384
  %101 = load float, ptr %gep, align 4, !tbaa !5
  store float %101, ptr %31, align 16, !tbaa !5
  %gep.1 = getelementptr i8, ptr %invariant.gep, i64 388
  %102 = load float, ptr %gep.1, align 4, !tbaa !5
  store float %102, ptr %32, align 4, !tbaa !5
  %gep.2 = getelementptr i8, ptr %invariant.gep, i64 392
  %103 = load float, ptr %gep.2, align 4, !tbaa !5
  store float %103, ptr %33, align 8, !tbaa !5
  %gep.3 = getelementptr i8, ptr %invariant.gep, i64 396
  %104 = load float, ptr %gep.3, align 4, !tbaa !5
  store float %104, ptr %34, align 4, !tbaa !5
  br label %.preheader169

.preheader169:                                    ; preds = %.preheader171.preheader, %middle.block218
  %indvars.iv202 = phi i64 [ %indvars.iv.next203, %middle.block218 ], [ 0, %.preheader171.preheader ]
  %105 = getelementptr inbounds [100 x [4 x float]], ptr %5, i64 0, i64 %indvars.iv202
  %106 = load float, ptr %105, align 16, !tbaa !5
  %107 = getelementptr inbounds i8, ptr %105, i64 4
  %108 = load float, ptr %107, align 4, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %105, i64 8
  %110 = load float, ptr %109, align 8, !tbaa !5
  %111 = getelementptr inbounds i8, ptr %105, i64 12
  %112 = load float, ptr %111, align 4, !tbaa !5
  %113 = getelementptr inbounds [100 x float], ptr %6, i64 0, i64 %indvars.iv202
  %114 = load float, ptr %113, align 4, !tbaa !5
  %broadcast.splatinsert332 = insertelement <4 x float> poison, float %106, i64 0
  %broadcast.splat333 = shufflevector <4 x float> %broadcast.splatinsert332, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert334 = insertelement <4 x float> poison, float %110, i64 0
  %broadcast.splat335 = shufflevector <4 x float> %broadcast.splatinsert334, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert336 = insertelement <4 x float> poison, float %108, i64 0
  %broadcast.splat337 = shufflevector <4 x float> %broadcast.splatinsert336, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert338 = insertelement <4 x float> poison, float %112, i64 0
  %broadcast.splat339 = shufflevector <4 x float> %broadcast.splatinsert338, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert340 = insertelement <4 x float> poison, float %114, i64 0
  %broadcast.splat341 = shufflevector <4 x float> %broadcast.splatinsert340, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body330

vector.body330:                                   ; preds = %vector.body330, %.preheader169
  %index331 = phi i64 [ 0, %.preheader169 ], [ %index.next343, %vector.body330 ]
  %115 = or disjoint i64 %index331, 1
  %116 = or disjoint i64 %index331, 2
  %117 = or disjoint i64 %index331, 3
  %118 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %index331
  %119 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %115
  %120 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %116
  %121 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %117
  %122 = load float, ptr %118, align 16, !tbaa !5
  %123 = load float, ptr %119, align 16, !tbaa !5
  %124 = load float, ptr %120, align 16, !tbaa !5
  %125 = load float, ptr %121, align 16, !tbaa !5
  %126 = insertelement <4 x float> poison, float %122, i64 0
  %127 = insertelement <4 x float> %126, float %123, i64 1
  %128 = insertelement <4 x float> %127, float %124, i64 2
  %129 = insertelement <4 x float> %128, float %125, i64 3
  %130 = fadd <4 x float> %129, %broadcast.splat333
  %131 = getelementptr inbounds i8, ptr %118, i64 4
  %132 = getelementptr inbounds i8, ptr %119, i64 4
  %133 = getelementptr inbounds i8, ptr %120, i64 4
  %134 = getelementptr inbounds i8, ptr %121, i64 4
  %135 = load float, ptr %131, align 4, !tbaa !5
  %136 = load float, ptr %132, align 4, !tbaa !5
  %137 = load float, ptr %133, align 4, !tbaa !5
  %138 = load float, ptr %134, align 4, !tbaa !5
  %139 = insertelement <4 x float> poison, float %135, i64 0
  %140 = insertelement <4 x float> %139, float %136, i64 1
  %141 = insertelement <4 x float> %140, float %137, i64 2
  %142 = insertelement <4 x float> %141, float %138, i64 3
  %143 = getelementptr inbounds i8, ptr %118, i64 8
  %144 = getelementptr inbounds i8, ptr %119, i64 8
  %145 = getelementptr inbounds i8, ptr %120, i64 8
  %146 = getelementptr inbounds i8, ptr %121, i64 8
  %147 = load float, ptr %143, align 8, !tbaa !5
  %148 = load float, ptr %144, align 8, !tbaa !5
  %149 = load float, ptr %145, align 8, !tbaa !5
  %150 = load float, ptr %146, align 8, !tbaa !5
  %151 = insertelement <4 x float> poison, float %147, i64 0
  %152 = insertelement <4 x float> %151, float %148, i64 1
  %153 = insertelement <4 x float> %152, float %149, i64 2
  %154 = insertelement <4 x float> %153, float %150, i64 3
  %155 = fmul <4 x float> %154, %broadcast.splat335
  %156 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %142, <4 x float> %broadcast.splat337, <4 x float> %155)
  %157 = getelementptr inbounds i8, ptr %118, i64 12
  %158 = getelementptr inbounds i8, ptr %119, i64 12
  %159 = getelementptr inbounds i8, ptr %120, i64 12
  %160 = getelementptr inbounds i8, ptr %121, i64 12
  %161 = load float, ptr %157, align 4, !tbaa !5
  %162 = load float, ptr %158, align 4, !tbaa !5
  %163 = load float, ptr %159, align 4, !tbaa !5
  %164 = load float, ptr %160, align 4, !tbaa !5
  %165 = insertelement <4 x float> poison, float %161, i64 0
  %166 = insertelement <4 x float> %165, float %162, i64 1
  %167 = insertelement <4 x float> %166, float %163, i64 2
  %168 = insertelement <4 x float> %167, float %164, i64 3
  %169 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %168, <4 x float> %broadcast.splat339, <4 x float> %156)
  %170 = fsub <4 x float> %130, %169
  %171 = fmul <4 x float> %170, <float -5.000000e-01, float -5.000000e-01, float -5.000000e-01, float -5.000000e-01>
  %172 = fpext <4 x float> %171 to <4 x double>
  %173 = fadd <4 x double> %172, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
  %174 = fmul <4 x float> %171, %171
  %175 = fpext <4 x float> %174 to <4 x double>
  %176 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %175, <4 x double> <double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01>, <4 x double> %173)
  %177 = fmul <4 x float> %171, %174
  %178 = fpext <4 x float> %177 to <4 x double>
  %179 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %178, <4 x double> <double 1.666600e-01, double 1.666600e-01, double 1.666600e-01, double 1.666600e-01>, <4 x double> %176)
  %180 = fmul <4 x float> %171, %177
  %181 = fpext <4 x float> %180 to <4 x double>
  %182 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %181, <4 x double> <double 4.166600e-02, double 4.166600e-02, double 4.166600e-02, double 4.166600e-02>, <4 x double> %179)
  %183 = fptrunc <4 x double> %182 to <4 x float>
  %184 = fmul <4 x float> %183, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
  %185 = fsub <4 x float> %142, %broadcast.splat337
  %186 = fsub <4 x float> %154, %broadcast.splat335
  %187 = fsub <4 x float> %168, %broadcast.splat339
  %188 = fmul <4 x float> %185, %184
  %189 = fmul <4 x float> %186, %184
  %190 = fmul <4 x float> %187, %184
  %191 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %index331
  %192 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %115
  %193 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %116
  %194 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %117
  %195 = load float, ptr %191, align 16, !tbaa !5
  %196 = load float, ptr %192, align 16, !tbaa !5
  %197 = load float, ptr %193, align 16, !tbaa !5
  %198 = load float, ptr %194, align 16, !tbaa !5
  %199 = insertelement <4 x float> poison, float %195, i64 0
  %200 = insertelement <4 x float> %199, float %196, i64 1
  %201 = insertelement <4 x float> %200, float %197, i64 2
  %202 = insertelement <4 x float> %201, float %198, i64 3
  %203 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat341, <4 x float> %183, <4 x float> %202)
  %204 = getelementptr inbounds i8, ptr %191, i64 4
  %205 = getelementptr inbounds i8, ptr %192, i64 4
  %206 = getelementptr inbounds i8, ptr %193, i64 4
  %207 = getelementptr inbounds i8, ptr %194, i64 4
  %208 = load float, ptr %204, align 4, !tbaa !5
  %209 = load float, ptr %205, align 4, !tbaa !5
  %210 = load float, ptr %206, align 4, !tbaa !5
  %211 = load float, ptr %207, align 4, !tbaa !5
  %212 = insertelement <4 x float> poison, float %208, i64 0
  %213 = insertelement <4 x float> %212, float %209, i64 1
  %214 = insertelement <4 x float> %213, float %210, i64 2
  %215 = insertelement <4 x float> %214, float %211, i64 3
  %216 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat341, <4 x float> %188, <4 x float> %215)
  %217 = getelementptr inbounds i8, ptr %191, i64 8
  %218 = getelementptr inbounds i8, ptr %192, i64 8
  %219 = getelementptr inbounds i8, ptr %193, i64 8
  %220 = getelementptr inbounds i8, ptr %194, i64 8
  %221 = load float, ptr %217, align 8, !tbaa !5
  %222 = load float, ptr %218, align 8, !tbaa !5
  %223 = load float, ptr %219, align 8, !tbaa !5
  %224 = load float, ptr %220, align 8, !tbaa !5
  %225 = insertelement <4 x float> poison, float %221, i64 0
  %226 = insertelement <4 x float> %225, float %222, i64 1
  %227 = insertelement <4 x float> %226, float %223, i64 2
  %228 = insertelement <4 x float> %227, float %224, i64 3
  %229 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat341, <4 x float> %189, <4 x float> %228)
  %230 = getelementptr inbounds i8, ptr %191, i64 12
  %231 = getelementptr inbounds i8, ptr %192, i64 12
  %232 = getelementptr inbounds i8, ptr %193, i64 12
  %233 = getelementptr inbounds i8, ptr %194, i64 12
  %234 = load float, ptr %230, align 4, !tbaa !5
  %235 = load float, ptr %231, align 4, !tbaa !5
  %236 = load float, ptr %232, align 4, !tbaa !5
  %237 = load float, ptr %233, align 4, !tbaa !5
  %238 = insertelement <4 x float> poison, float %234, i64 0
  %239 = insertelement <4 x float> %238, float %235, i64 1
  %240 = insertelement <4 x float> %239, float %236, i64 2
  %241 = insertelement <4 x float> %240, float %237, i64 3
  %242 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat341, <4 x float> %190, <4 x float> %241)
  %243 = shufflevector <4 x float> %203, <4 x float> %216, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %244 = shufflevector <4 x float> %229, <4 x float> %242, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %interleaved.vec342 = shufflevector <8 x float> %243, <8 x float> %244, <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>
  store <16 x float> %interleaved.vec342, ptr %191, align 16, !tbaa !5
  %index.next343 = add nuw i64 %index331, 4
  %245 = icmp eq i64 %index.next343, 20
  br i1 %245, label %vector.ph300, label %vector.body330, !llvm.loop !16

vector.ph300:                                     ; preds = %vector.body330
  %broadcast.splatinsert309 = insertelement <4 x float> poison, float %106, i64 0
  %broadcast.splat310 = shufflevector <4 x float> %broadcast.splatinsert309, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert311 = insertelement <4 x float> poison, float %110, i64 0
  %broadcast.splat312 = shufflevector <4 x float> %broadcast.splatinsert311, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert313 = insertelement <4 x float> poison, float %108, i64 0
  %broadcast.splat314 = shufflevector <4 x float> %broadcast.splatinsert313, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert315 = insertelement <4 x float> poison, float %112, i64 0
  %broadcast.splat316 = shufflevector <4 x float> %broadcast.splatinsert315, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert322 = insertelement <4 x float> poison, float %114, i64 0
  %broadcast.splat323 = shufflevector <4 x float> %broadcast.splatinsert322, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body302

vector.body302:                                   ; preds = %vector.body302, %vector.ph300
  %index303 = phi i64 [ 0, %vector.ph300 ], [ %index.next325, %vector.body302 ]
  %246 = add nuw nsw i64 %index303, 20
  %247 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %246
  %wide.vec304 = load <16 x float>, ptr %247, align 16, !tbaa !5
  %strided.vec305 = shufflevector <16 x float> %wide.vec304, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec306 = shufflevector <16 x float> %wide.vec304, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec307 = shufflevector <16 x float> %wide.vec304, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec308 = shufflevector <16 x float> %wide.vec304, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %248 = fadd <4 x float> %strided.vec305, %broadcast.splat310
  %249 = fmul <4 x float> %strided.vec307, %broadcast.splat312
  %250 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec306, <4 x float> %broadcast.splat314, <4 x float> %249)
  %251 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec308, <4 x float> %broadcast.splat316, <4 x float> %250)
  %252 = fsub <4 x float> %248, %251
  %253 = fmul <4 x float> %252, <float -5.000000e-01, float -5.000000e-01, float -5.000000e-01, float -5.000000e-01>
  %254 = fpext <4 x float> %253 to <4 x double>
  %255 = fadd <4 x double> %254, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
  %256 = fmul <4 x float> %253, %253
  %257 = fpext <4 x float> %256 to <4 x double>
  %258 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %257, <4 x double> <double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01>, <4 x double> %255)
  %259 = fmul <4 x float> %253, %256
  %260 = fpext <4 x float> %259 to <4 x double>
  %261 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %260, <4 x double> <double 1.666600e-01, double 1.666600e-01, double 1.666600e-01, double 1.666600e-01>, <4 x double> %258)
  %262 = fmul <4 x float> %253, %259
  %263 = fpext <4 x float> %262 to <4 x double>
  %264 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %263, <4 x double> <double 4.166600e-02, double 4.166600e-02, double 4.166600e-02, double 4.166600e-02>, <4 x double> %261)
  %265 = fptrunc <4 x double> %264 to <4 x float>
  %266 = fmul <4 x float> %265, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
  %267 = fsub <4 x float> %strided.vec306, %broadcast.splat314
  %268 = fsub <4 x float> %strided.vec307, %broadcast.splat312
  %269 = fsub <4 x float> %strided.vec308, %broadcast.splat316
  %270 = fmul <4 x float> %267, %266
  %271 = fmul <4 x float> %268, %266
  %272 = fmul <4 x float> %269, %266
  %273 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %246
  %wide.vec317 = load <16 x float>, ptr %273, align 16, !tbaa !5
  %strided.vec318 = shufflevector <16 x float> %wide.vec317, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec319 = shufflevector <16 x float> %wide.vec317, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec320 = shufflevector <16 x float> %wide.vec317, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec321 = shufflevector <16 x float> %wide.vec317, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %274 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat323, <4 x float> %265, <4 x float> %strided.vec318)
  %275 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat323, <4 x float> %270, <4 x float> %strided.vec319)
  %276 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat323, <4 x float> %271, <4 x float> %strided.vec320)
  %277 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat323, <4 x float> %272, <4 x float> %strided.vec321)
  %278 = shufflevector <4 x float> %274, <4 x float> %275, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %279 = shufflevector <4 x float> %276, <4 x float> %277, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %interleaved.vec324 = shufflevector <8 x float> %278, <8 x float> %279, <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>
  store <16 x float> %interleaved.vec324, ptr %273, align 16, !tbaa !5
  %index.next325 = add nuw i64 %index303, 4
  %280 = icmp eq i64 %index.next325, 20
  br i1 %280, label %vector.ph272, label %vector.body302, !llvm.loop !17

vector.ph272:                                     ; preds = %vector.body302
  %broadcast.splatinsert281 = insertelement <4 x float> poison, float %106, i64 0
  %broadcast.splat282 = shufflevector <4 x float> %broadcast.splatinsert281, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert283 = insertelement <4 x float> poison, float %110, i64 0
  %broadcast.splat284 = shufflevector <4 x float> %broadcast.splatinsert283, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert285 = insertelement <4 x float> poison, float %108, i64 0
  %broadcast.splat286 = shufflevector <4 x float> %broadcast.splatinsert285, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert287 = insertelement <4 x float> poison, float %112, i64 0
  %broadcast.splat288 = shufflevector <4 x float> %broadcast.splatinsert287, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert294 = insertelement <4 x float> poison, float %114, i64 0
  %broadcast.splat295 = shufflevector <4 x float> %broadcast.splatinsert294, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body274

vector.body274:                                   ; preds = %vector.body274, %vector.ph272
  %index275 = phi i64 [ 0, %vector.ph272 ], [ %index.next297, %vector.body274 ]
  %281 = add nuw nsw i64 %index275, 40
  %282 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %281
  %wide.vec276 = load <16 x float>, ptr %282, align 16, !tbaa !5
  %strided.vec277 = shufflevector <16 x float> %wide.vec276, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec278 = shufflevector <16 x float> %wide.vec276, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec279 = shufflevector <16 x float> %wide.vec276, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec280 = shufflevector <16 x float> %wide.vec276, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %283 = fadd <4 x float> %strided.vec277, %broadcast.splat282
  %284 = fmul <4 x float> %strided.vec279, %broadcast.splat284
  %285 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec278, <4 x float> %broadcast.splat286, <4 x float> %284)
  %286 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec280, <4 x float> %broadcast.splat288, <4 x float> %285)
  %287 = fsub <4 x float> %283, %286
  %288 = fmul <4 x float> %287, <float -5.000000e-01, float -5.000000e-01, float -5.000000e-01, float -5.000000e-01>
  %289 = fpext <4 x float> %288 to <4 x double>
  %290 = fadd <4 x double> %289, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
  %291 = fmul <4 x float> %288, %288
  %292 = fpext <4 x float> %291 to <4 x double>
  %293 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %292, <4 x double> <double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01>, <4 x double> %290)
  %294 = fmul <4 x float> %288, %291
  %295 = fpext <4 x float> %294 to <4 x double>
  %296 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %295, <4 x double> <double 1.666600e-01, double 1.666600e-01, double 1.666600e-01, double 1.666600e-01>, <4 x double> %293)
  %297 = fmul <4 x float> %288, %294
  %298 = fpext <4 x float> %297 to <4 x double>
  %299 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %298, <4 x double> <double 4.166600e-02, double 4.166600e-02, double 4.166600e-02, double 4.166600e-02>, <4 x double> %296)
  %300 = fptrunc <4 x double> %299 to <4 x float>
  %301 = fmul <4 x float> %300, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
  %302 = fsub <4 x float> %strided.vec278, %broadcast.splat286
  %303 = fsub <4 x float> %strided.vec279, %broadcast.splat284
  %304 = fsub <4 x float> %strided.vec280, %broadcast.splat288
  %305 = fmul <4 x float> %302, %301
  %306 = fmul <4 x float> %303, %301
  %307 = fmul <4 x float> %304, %301
  %308 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %281
  %wide.vec289 = load <16 x float>, ptr %308, align 16, !tbaa !5
  %strided.vec290 = shufflevector <16 x float> %wide.vec289, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec291 = shufflevector <16 x float> %wide.vec289, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec292 = shufflevector <16 x float> %wide.vec289, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec293 = shufflevector <16 x float> %wide.vec289, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %309 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat295, <4 x float> %300, <4 x float> %strided.vec290)
  %310 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat295, <4 x float> %305, <4 x float> %strided.vec291)
  %311 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat295, <4 x float> %306, <4 x float> %strided.vec292)
  %312 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat295, <4 x float> %307, <4 x float> %strided.vec293)
  %313 = shufflevector <4 x float> %309, <4 x float> %310, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %314 = shufflevector <4 x float> %311, <4 x float> %312, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %interleaved.vec296 = shufflevector <8 x float> %313, <8 x float> %314, <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>
  store <16 x float> %interleaved.vec296, ptr %308, align 16, !tbaa !5
  %index.next297 = add nuw i64 %index275, 4
  %315 = icmp eq i64 %index.next297, 20
  br i1 %315, label %vector.ph244, label %vector.body274, !llvm.loop !18

vector.ph244:                                     ; preds = %vector.body274
  %broadcast.splatinsert253 = insertelement <4 x float> poison, float %106, i64 0
  %broadcast.splat254 = shufflevector <4 x float> %broadcast.splatinsert253, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert255 = insertelement <4 x float> poison, float %110, i64 0
  %broadcast.splat256 = shufflevector <4 x float> %broadcast.splatinsert255, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert257 = insertelement <4 x float> poison, float %108, i64 0
  %broadcast.splat258 = shufflevector <4 x float> %broadcast.splatinsert257, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert259 = insertelement <4 x float> poison, float %112, i64 0
  %broadcast.splat260 = shufflevector <4 x float> %broadcast.splatinsert259, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert266 = insertelement <4 x float> poison, float %114, i64 0
  %broadcast.splat267 = shufflevector <4 x float> %broadcast.splatinsert266, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body246

vector.body246:                                   ; preds = %vector.body246, %vector.ph244
  %index247 = phi i64 [ 0, %vector.ph244 ], [ %index.next269, %vector.body246 ]
  %316 = add nuw nsw i64 %index247, 60
  %317 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %316
  %wide.vec248 = load <16 x float>, ptr %317, align 16, !tbaa !5
  %strided.vec249 = shufflevector <16 x float> %wide.vec248, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec250 = shufflevector <16 x float> %wide.vec248, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec251 = shufflevector <16 x float> %wide.vec248, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec252 = shufflevector <16 x float> %wide.vec248, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %318 = fadd <4 x float> %strided.vec249, %broadcast.splat254
  %319 = fmul <4 x float> %strided.vec251, %broadcast.splat256
  %320 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec250, <4 x float> %broadcast.splat258, <4 x float> %319)
  %321 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec252, <4 x float> %broadcast.splat260, <4 x float> %320)
  %322 = fsub <4 x float> %318, %321
  %323 = fmul <4 x float> %322, <float -5.000000e-01, float -5.000000e-01, float -5.000000e-01, float -5.000000e-01>
  %324 = fpext <4 x float> %323 to <4 x double>
  %325 = fadd <4 x double> %324, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
  %326 = fmul <4 x float> %323, %323
  %327 = fpext <4 x float> %326 to <4 x double>
  %328 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %327, <4 x double> <double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01>, <4 x double> %325)
  %329 = fmul <4 x float> %323, %326
  %330 = fpext <4 x float> %329 to <4 x double>
  %331 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %330, <4 x double> <double 1.666600e-01, double 1.666600e-01, double 1.666600e-01, double 1.666600e-01>, <4 x double> %328)
  %332 = fmul <4 x float> %323, %329
  %333 = fpext <4 x float> %332 to <4 x double>
  %334 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %333, <4 x double> <double 4.166600e-02, double 4.166600e-02, double 4.166600e-02, double 4.166600e-02>, <4 x double> %331)
  %335 = fptrunc <4 x double> %334 to <4 x float>
  %336 = fmul <4 x float> %335, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
  %337 = fsub <4 x float> %strided.vec250, %broadcast.splat258
  %338 = fsub <4 x float> %strided.vec251, %broadcast.splat256
  %339 = fsub <4 x float> %strided.vec252, %broadcast.splat260
  %340 = fmul <4 x float> %337, %336
  %341 = fmul <4 x float> %338, %336
  %342 = fmul <4 x float> %339, %336
  %343 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %316
  %wide.vec261 = load <16 x float>, ptr %343, align 16, !tbaa !5
  %strided.vec262 = shufflevector <16 x float> %wide.vec261, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec263 = shufflevector <16 x float> %wide.vec261, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec264 = shufflevector <16 x float> %wide.vec261, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec265 = shufflevector <16 x float> %wide.vec261, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %344 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat267, <4 x float> %335, <4 x float> %strided.vec262)
  %345 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat267, <4 x float> %340, <4 x float> %strided.vec263)
  %346 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat267, <4 x float> %341, <4 x float> %strided.vec264)
  %347 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat267, <4 x float> %342, <4 x float> %strided.vec265)
  %348 = shufflevector <4 x float> %344, <4 x float> %345, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %349 = shufflevector <4 x float> %346, <4 x float> %347, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %interleaved.vec268 = shufflevector <8 x float> %348, <8 x float> %349, <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>
  store <16 x float> %interleaved.vec268, ptr %343, align 16, !tbaa !5
  %index.next269 = add nuw i64 %index247, 4
  %350 = icmp eq i64 %index.next269, 20
  br i1 %350, label %vector.ph220, label %vector.body246, !llvm.loop !19

vector.ph220:                                     ; preds = %vector.body246
  %broadcast.splatinsert = insertelement <4 x float> poison, float %106, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert227 = insertelement <4 x float> poison, float %110, i64 0
  %broadcast.splat228 = shufflevector <4 x float> %broadcast.splatinsert227, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert229 = insertelement <4 x float> poison, float %108, i64 0
  %broadcast.splat230 = shufflevector <4 x float> %broadcast.splatinsert229, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert231 = insertelement <4 x float> poison, float %112, i64 0
  %broadcast.splat232 = shufflevector <4 x float> %broadcast.splatinsert231, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert238 = insertelement <4 x float> poison, float %114, i64 0
  %broadcast.splat239 = shufflevector <4 x float> %broadcast.splatinsert238, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body222

vector.body222:                                   ; preds = %vector.body222, %vector.ph220
  %index223 = phi i64 [ 0, %vector.ph220 ], [ %index.next241, %vector.body222 ]
  %351 = add nuw nsw i64 %index223, 80
  %352 = getelementptr inbounds [100 x [4 x float]], ptr %4, i64 0, i64 %351
  %wide.vec = load <16 x float>, ptr %352, align 16, !tbaa !5
  %strided.vec = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec224 = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec225 = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec226 = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %353 = fadd <4 x float> %strided.vec, %broadcast.splat
  %354 = fmul <4 x float> %strided.vec225, %broadcast.splat228
  %355 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec224, <4 x float> %broadcast.splat230, <4 x float> %354)
  %356 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %strided.vec226, <4 x float> %broadcast.splat232, <4 x float> %355)
  %357 = fsub <4 x float> %353, %356
  %358 = fmul <4 x float> %357, <float -5.000000e-01, float -5.000000e-01, float -5.000000e-01, float -5.000000e-01>
  %359 = fpext <4 x float> %358 to <4 x double>
  %360 = fadd <4 x double> %359, <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
  %361 = fmul <4 x float> %358, %358
  %362 = fpext <4 x float> %361 to <4 x double>
  %363 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %362, <4 x double> <double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01>, <4 x double> %360)
  %364 = fmul <4 x float> %358, %361
  %365 = fpext <4 x float> %364 to <4 x double>
  %366 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %365, <4 x double> <double 1.666600e-01, double 1.666600e-01, double 1.666600e-01, double 1.666600e-01>, <4 x double> %363)
  %367 = fmul <4 x float> %358, %364
  %368 = fpext <4 x float> %367 to <4 x double>
  %369 = tail call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %368, <4 x double> <double 4.166600e-02, double 4.166600e-02, double 4.166600e-02, double 4.166600e-02>, <4 x double> %366)
  %370 = fptrunc <4 x double> %369 to <4 x float>
  %371 = fmul <4 x float> %370, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
  %372 = fsub <4 x float> %strided.vec224, %broadcast.splat230
  %373 = fsub <4 x float> %strided.vec225, %broadcast.splat228
  %374 = fsub <4 x float> %strided.vec226, %broadcast.splat232
  %375 = fmul <4 x float> %372, %371
  %376 = fmul <4 x float> %373, %371
  %377 = fmul <4 x float> %374, %371
  %378 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %351
  %wide.vec233 = load <16 x float>, ptr %378, align 16, !tbaa !5
  %strided.vec234 = shufflevector <16 x float> %wide.vec233, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec235 = shufflevector <16 x float> %wide.vec233, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec236 = shufflevector <16 x float> %wide.vec233, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec237 = shufflevector <16 x float> %wide.vec233, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %379 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat239, <4 x float> %370, <4 x float> %strided.vec234)
  %380 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat239, <4 x float> %375, <4 x float> %strided.vec235)
  %381 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat239, <4 x float> %376, <4 x float> %strided.vec236)
  %382 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat239, <4 x float> %377, <4 x float> %strided.vec237)
  %383 = shufflevector <4 x float> %379, <4 x float> %380, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %384 = shufflevector <4 x float> %381, <4 x float> %382, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %interleaved.vec240 = shufflevector <8 x float> %383, <8 x float> %384, <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>
  store <16 x float> %interleaved.vec240, ptr %378, align 16, !tbaa !5
  %index.next241 = add nuw i64 %index223, 4
  %385 = icmp eq i64 %index.next241, 20
  br i1 %385, label %middle.block218, label %vector.body222, !llvm.loop !20

middle.block218:                                  ; preds = %vector.body222
  %indvars.iv.next203 = add nuw nsw i64 %indvars.iv202, 1
  %exitcond205.not = icmp eq i64 %indvars.iv.next203, 100
  br i1 %exitcond205.not, label %386, label %.preheader169, !llvm.loop !21

386:                                              ; preds = %middle.block218
  %indvars.iv.next207 = add nuw nsw i64 %indvars.iv206, 1
  %exitcond209.not = icmp eq i64 %indvars.iv.next207, 27
  br i1 %exitcond209.not, label %.preheader172.preheader, label %.preheader173, !llvm.loop !22

.preheader172.preheader:                          ; preds = %386
  %387 = mul nuw nsw i64 %indvars.iv214, 100
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %.preheader172.preheader
  %index = phi i64 [ 0, %.preheader172.preheader ], [ %index.next, %vector.body ]
  %388 = or disjoint i64 %index, 1
  %389 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %index
  %390 = getelementptr inbounds [100 x [4 x float]], ptr %7, i64 0, i64 %388
  %391 = load float, ptr %389, align 16, !tbaa !5
  %392 = load float, ptr %390, align 16, !tbaa !5
  %393 = insertelement <2 x float> poison, float %391, i64 0
  %394 = insertelement <2 x float> %393, float %392, i64 1
  %395 = add nuw nsw i64 %index, %387
  %396 = shl nuw nsw i64 %395, 2
  %397 = getelementptr inbounds i8, ptr %389, i64 4
  %398 = getelementptr inbounds i8, ptr %390, i64 4
  %399 = load float, ptr %397, align 4, !tbaa !5
  %400 = load float, ptr %398, align 4, !tbaa !5
  %401 = insertelement <2 x float> poison, float %399, i64 0
  %402 = insertelement <2 x float> %401, float %400, i64 1
  %403 = getelementptr inbounds i8, ptr %389, i64 8
  %404 = getelementptr inbounds i8, ptr %390, i64 8
  %405 = load float, ptr %403, align 8, !tbaa !5
  %406 = load float, ptr %404, align 8, !tbaa !5
  %407 = insertelement <2 x float> poison, float %405, i64 0
  %408 = insertelement <2 x float> %407, float %406, i64 1
  %409 = getelementptr inbounds i8, ptr %389, i64 12
  %410 = getelementptr inbounds i8, ptr %390, i64 12
  %411 = load float, ptr %409, align 4, !tbaa !5
  %412 = load float, ptr %410, align 4, !tbaa !5
  %413 = insertelement <2 x float> poison, float %411, i64 0
  %414 = insertelement <2 x float> %413, float %412, i64 1
  %415 = or disjoint i64 %396, 3
  %gep382 = getelementptr float, ptr %invariant.gep381, i64 %415
  %416 = shufflevector <2 x float> %394, <2 x float> %402, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %417 = shufflevector <2 x float> %408, <2 x float> %414, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %interleaved.vec = shufflevector <4 x float> %416, <4 x float> %417, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 1, i32 3, i32 5, i32 7>
  store <8 x float> %interleaved.vec, ptr %gep382, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 2
  %418 = icmp eq i64 %index.next, 100
  br i1 %418, label %middle.block, label %vector.body, !llvm.loop !23

middle.block:                                     ; preds = %vector.body
  %indvars.iv.next215 = add nuw nsw i64 %indvars.iv214, 1
  %exitcond217.not = icmp eq i64 %indvars.iv.next215, 8
  br i1 %exitcond217.not, label %419, label %.preheader174, !llvm.loop !24

419:                                              ; preds = %middle.block
  call void @llvm.lifetime.end.p0(i64 1600, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 400, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 1600, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 1600, ptr nonnull %4) #4
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x double> @llvm.fmuladd.v4f64(<4 x double>, <4 x double>, <4 x double>) #3

attributes #0 = { mustprogress nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10, !11, !12}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.isvectorized", i32 1}
!12 = !{!"llvm.loop.unroll.runtime.disable"}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = distinct !{!15, !10, !11, !12}
!16 = distinct !{!16, !10, !11, !12}
!17 = distinct !{!17, !10, !11, !12}
!18 = distinct !{!18, !10, !11, !12}
!19 = distinct !{!19, !10, !11, !12}
!20 = distinct !{!20, !10, !11, !12}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10, !11, !12}
!24 = distinct !{!24, !10}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopIdiomRecognizePass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass