; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (dlagtm)

; 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"

@.str = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dlagtm_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11) #0 {
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  store ptr %0, ptr %13, align 8, !tbaa !5
  store ptr %1, ptr %14, align 8, !tbaa !5
  store ptr %2, ptr %15, align 8, !tbaa !5
  store ptr %3, ptr %16, align 8, !tbaa !5
  store ptr %4, ptr %17, align 8, !tbaa !5
  store ptr %5, ptr %18, align 8, !tbaa !5
  store ptr %6, ptr %19, align 8, !tbaa !5
  store ptr %7, ptr %20, align 8, !tbaa !5
  store ptr %8, ptr %21, align 8, !tbaa !5
  store ptr %9, ptr %22, align 8, !tbaa !5
  store ptr %10, ptr %23, align 8, !tbaa !5
  store ptr %11, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %34 = load ptr, ptr %17, align 8, !tbaa !5
  %35 = getelementptr inbounds double, ptr %34, i32 -1
  store ptr %35, ptr %17, align 8, !tbaa !5
  %36 = load ptr, ptr %18, align 8, !tbaa !5
  %37 = getelementptr inbounds double, ptr %36, i32 -1
  store ptr %37, ptr %18, align 8, !tbaa !5
  %38 = load ptr, ptr %19, align 8, !tbaa !5
  %39 = getelementptr inbounds double, ptr %38, i32 -1
  store ptr %39, ptr %19, align 8, !tbaa !5
  %40 = load ptr, ptr %21, align 8, !tbaa !5
  %41 = load i32, ptr %40, align 4, !tbaa !9
  store i32 %41, ptr %27, align 4, !tbaa !9
  %42 = load i32, ptr %27, align 4, !tbaa !9
  %43 = mul nsw i32 %42, 1
  %44 = add nsw i32 1, %43
  store i32 %44, ptr %28, align 4, !tbaa !9
  %45 = load i32, ptr %28, align 4, !tbaa !9
  %46 = load ptr, ptr %20, align 8, !tbaa !5
  %47 = sext i32 %45 to i64
  %48 = sub i64 0, %47
  %49 = getelementptr inbounds double, ptr %46, i64 %48
  store ptr %49, ptr %20, align 8, !tbaa !5
  %50 = load ptr, ptr %24, align 8, !tbaa !5
  %51 = load i32, ptr %50, align 4, !tbaa !9
  store i32 %51, ptr %25, align 4, !tbaa !9
  %52 = load i32, ptr %25, align 4, !tbaa !9
  %53 = mul nsw i32 %52, 1
  %54 = add nsw i32 1, %53
  store i32 %54, ptr %26, align 4, !tbaa !9
  %55 = load i32, ptr %26, align 4, !tbaa !9
  %56 = load ptr, ptr %23, align 8, !tbaa !5
  %57 = sext i32 %55 to i64
  %58 = sub i64 0, %57
  %59 = getelementptr inbounds double, ptr %56, i64 %58
  store ptr %59, ptr %23, align 8, !tbaa !5
  %60 = load ptr, ptr %14, align 8, !tbaa !5
  %61 = load i32, ptr %60, align 4, !tbaa !9
  %62 = icmp eq i32 %61, 0
  br i1 %62, label %63, label %64

63:                                               ; preds = %12
  store i32 1, ptr %33, align 4
  br label %1017

64:                                               ; preds = %12
  %65 = load ptr, ptr %22, align 8, !tbaa !5
  %66 = load double, ptr %65, align 8, !tbaa !11
  %67 = fcmp oeq double %66, 0.000000e+00
  br i1 %67, label %68, label %99

68:                                               ; preds = %64
  %69 = load ptr, ptr %15, align 8, !tbaa !5
  %70 = load i32, ptr %69, align 4, !tbaa !9
  store i32 %70, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !9
  br label %71

71:                                               ; preds = %95, %68
  %72 = load i32, ptr %32, align 4, !tbaa !9
  %73 = load i32, ptr %29, align 4, !tbaa !9
  %74 = icmp sle i32 %72, %73
  br i1 %74, label %75, label %98

75:                                               ; preds = %71
  %76 = load ptr, ptr %14, align 8, !tbaa !5
  %77 = load i32, ptr %76, align 4, !tbaa !9
  store i32 %77, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %78

78:                                               ; preds = %91, %75
  %79 = load i32, ptr %31, align 4, !tbaa !9
  %80 = load i32, ptr %30, align 4, !tbaa !9
  %81 = icmp sle i32 %79, %80
  br i1 %81, label %82, label %94

82:                                               ; preds = %78
  %83 = load ptr, ptr %23, align 8, !tbaa !5
  %84 = load i32, ptr %31, align 4, !tbaa !9
  %85 = load i32, ptr %32, align 4, !tbaa !9
  %86 = load i32, ptr %25, align 4, !tbaa !9
  %87 = mul nsw i32 %85, %86
  %88 = add nsw i32 %84, %87
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds double, ptr %83, i64 %89
  store double 0.000000e+00, ptr %90, align 8, !tbaa !11
  br label %91

91:                                               ; preds = %82
  %92 = load i32, ptr %31, align 4, !tbaa !9
  %93 = add nsw i32 %92, 1
  store i32 %93, ptr %31, align 4, !tbaa !9
  br label %78, !llvm.loop !13

94:                                               ; preds = %78
  br label %95

95:                                               ; preds = %94
  %96 = load i32, ptr %32, align 4, !tbaa !9
  %97 = add nsw i32 %96, 1
  store i32 %97, ptr %32, align 4, !tbaa !9
  br label %71, !llvm.loop !15

98:                                               ; preds = %71
  br label %145

99:                                               ; preds = %64
  %100 = load ptr, ptr %22, align 8, !tbaa !5
  %101 = load double, ptr %100, align 8, !tbaa !11
  %102 = fcmp oeq double %101, -1.000000e+00
  br i1 %102, label %103, label %144

103:                                              ; preds = %99
  %104 = load ptr, ptr %15, align 8, !tbaa !5
  %105 = load i32, ptr %104, align 4, !tbaa !9
  store i32 %105, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %140, %103
  %107 = load i32, ptr %32, align 4, !tbaa !9
  %108 = load i32, ptr %29, align 4, !tbaa !9
  %109 = icmp sle i32 %107, %108
  br i1 %109, label %110, label %143

110:                                              ; preds = %106
  %111 = load ptr, ptr %14, align 8, !tbaa !5
  %112 = load i32, ptr %111, align 4, !tbaa !9
  store i32 %112, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %113

113:                                              ; preds = %136, %110
  %114 = load i32, ptr %31, align 4, !tbaa !9
  %115 = load i32, ptr %30, align 4, !tbaa !9
  %116 = icmp sle i32 %114, %115
  br i1 %116, label %117, label %139

117:                                              ; preds = %113
  %118 = load ptr, ptr %23, align 8, !tbaa !5
  %119 = load i32, ptr %31, align 4, !tbaa !9
  %120 = load i32, ptr %32, align 4, !tbaa !9
  %121 = load i32, ptr %25, align 4, !tbaa !9
  %122 = mul nsw i32 %120, %121
  %123 = add nsw i32 %119, %122
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds double, ptr %118, i64 %124
  %126 = load double, ptr %125, align 8, !tbaa !11
  %127 = fneg double %126
  %128 = load ptr, ptr %23, align 8, !tbaa !5
  %129 = load i32, ptr %31, align 4, !tbaa !9
  %130 = load i32, ptr %32, align 4, !tbaa !9
  %131 = load i32, ptr %25, align 4, !tbaa !9
  %132 = mul nsw i32 %130, %131
  %133 = add nsw i32 %129, %132
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds double, ptr %128, i64 %134
  store double %127, ptr %135, align 8, !tbaa !11
  br label %136

136:                                              ; preds = %117
  %137 = load i32, ptr %31, align 4, !tbaa !9
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr %31, align 4, !tbaa !9
  br label %113, !llvm.loop !16

139:                                              ; preds = %113
  br label %140

140:                                              ; preds = %139
  %141 = load i32, ptr %32, align 4, !tbaa !9
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr %32, align 4, !tbaa !9
  br label %106, !llvm.loop !17

143:                                              ; preds = %106
  br label %144

144:                                              ; preds = %143, %99
  br label %145

145:                                              ; preds = %144, %98
  %146 = load ptr, ptr %16, align 8, !tbaa !5
  %147 = load double, ptr %146, align 8, !tbaa !11
  %148 = fcmp oeq double %147, 1.000000e+00
  br i1 %148, label %149, label %572

149:                                              ; preds = %145
  %150 = load ptr, ptr %13, align 8, !tbaa !5
  %151 = call i32 @lsame_(ptr noundef %150, ptr noundef @.str)
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %153, label %362

153:                                              ; preds = %149
  %154 = load ptr, ptr %15, align 8, !tbaa !5
  %155 = load i32, ptr %154, align 4, !tbaa !9
  store i32 %155, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !9
  br label %156

156:                                              ; preds = %358, %153
  %157 = load i32, ptr %32, align 4, !tbaa !9
  %158 = load i32, ptr %29, align 4, !tbaa !9
  %159 = icmp sle i32 %157, %158
  br i1 %159, label %160, label %361

160:                                              ; preds = %156
  %161 = load ptr, ptr %14, align 8, !tbaa !5
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = icmp eq i32 %162, 1
  br i1 %163, label %164, label %185

164:                                              ; preds = %160
  %165 = load ptr, ptr %18, align 8, !tbaa !5
  %166 = getelementptr inbounds double, ptr %165, i64 1
  %167 = load double, ptr %166, align 8, !tbaa !11
  %168 = load ptr, ptr %20, align 8, !tbaa !5
  %169 = load i32, ptr %32, align 4, !tbaa !9
  %170 = load i32, ptr %27, align 4, !tbaa !9
  %171 = mul nsw i32 %169, %170
  %172 = add nsw i32 %171, 1
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds double, ptr %168, i64 %173
  %175 = load double, ptr %174, align 8, !tbaa !11
  %176 = load ptr, ptr %23, align 8, !tbaa !5
  %177 = load i32, ptr %32, align 4, !tbaa !9
  %178 = load i32, ptr %25, align 4, !tbaa !9
  %179 = mul nsw i32 %177, %178
  %180 = add nsw i32 %179, 1
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds double, ptr %176, i64 %181
  %183 = load double, ptr %182, align 8, !tbaa !11
  %184 = call double @llvm.fmuladd.f64(double %167, double %175, double %183)
  store double %184, ptr %182, align 8, !tbaa !11
  br label %357

185:                                              ; preds = %160
  %186 = load ptr, ptr %23, align 8, !tbaa !5
  %187 = load i32, ptr %32, align 4, !tbaa !9
  %188 = load i32, ptr %25, align 4, !tbaa !9
  %189 = mul nsw i32 %187, %188
  %190 = add nsw i32 %189, 1
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds double, ptr %186, i64 %191
  %193 = load double, ptr %192, align 8, !tbaa !11
  %194 = load ptr, ptr %18, align 8, !tbaa !5
  %195 = getelementptr inbounds double, ptr %194, i64 1
  %196 = load double, ptr %195, align 8, !tbaa !11
  %197 = load ptr, ptr %20, align 8, !tbaa !5
  %198 = load i32, ptr %32, align 4, !tbaa !9
  %199 = load i32, ptr %27, align 4, !tbaa !9
  %200 = mul nsw i32 %198, %199
  %201 = add nsw i32 %200, 1
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds double, ptr %197, i64 %202
  %204 = load double, ptr %203, align 8, !tbaa !11
  %205 = call double @llvm.fmuladd.f64(double %196, double %204, double %193)
  %206 = load ptr, ptr %19, align 8, !tbaa !5
  %207 = getelementptr inbounds double, ptr %206, i64 1
  %208 = load double, ptr %207, align 8, !tbaa !11
  %209 = load ptr, ptr %20, align 8, !tbaa !5
  %210 = load i32, ptr %32, align 4, !tbaa !9
  %211 = load i32, ptr %27, align 4, !tbaa !9
  %212 = mul nsw i32 %210, %211
  %213 = add nsw i32 %212, 2
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds double, ptr %209, i64 %214
  %216 = load double, ptr %215, align 8, !tbaa !11
  %217 = call double @llvm.fmuladd.f64(double %208, double %216, double %205)
  %218 = load ptr, ptr %23, align 8, !tbaa !5
  %219 = load i32, ptr %32, align 4, !tbaa !9
  %220 = load i32, ptr %25, align 4, !tbaa !9
  %221 = mul nsw i32 %219, %220
  %222 = add nsw i32 %221, 1
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds double, ptr %218, i64 %223
  store double %217, ptr %224, align 8, !tbaa !11
  %225 = load ptr, ptr %23, align 8, !tbaa !5
  %226 = load ptr, ptr %14, align 8, !tbaa !5
  %227 = load i32, ptr %226, align 4, !tbaa !9
  %228 = load i32, ptr %32, align 4, !tbaa !9
  %229 = load i32, ptr %25, align 4, !tbaa !9
  %230 = mul nsw i32 %228, %229
  %231 = add nsw i32 %227, %230
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds double, ptr %225, i64 %232
  %234 = load double, ptr %233, align 8, !tbaa !11
  %235 = load ptr, ptr %17, align 8, !tbaa !5
  %236 = load ptr, ptr %14, align 8, !tbaa !5
  %237 = load i32, ptr %236, align 4, !tbaa !9
  %238 = sub nsw i32 %237, 1
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds double, ptr %235, i64 %239
  %241 = load double, ptr %240, align 8, !tbaa !11
  %242 = load ptr, ptr %20, align 8, !tbaa !5
  %243 = load ptr, ptr %14, align 8, !tbaa !5
  %244 = load i32, ptr %243, align 4, !tbaa !9
  %245 = sub nsw i32 %244, 1
  %246 = load i32, ptr %32, align 4, !tbaa !9
  %247 = load i32, ptr %27, align 4, !tbaa !9
  %248 = mul nsw i32 %246, %247
  %249 = add nsw i32 %245, %248
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds double, ptr %242, i64 %250
  %252 = load double, ptr %251, align 8, !tbaa !11
  %253 = call double @llvm.fmuladd.f64(double %241, double %252, double %234)
  %254 = load ptr, ptr %18, align 8, !tbaa !5
  %255 = load ptr, ptr %14, align 8, !tbaa !5
  %256 = load i32, ptr %255, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds double, ptr %254, i64 %257
  %259 = load double, ptr %258, align 8, !tbaa !11
  %260 = load ptr, ptr %20, align 8, !tbaa !5
  %261 = load ptr, ptr %14, align 8, !tbaa !5
  %262 = load i32, ptr %261, align 4, !tbaa !9
  %263 = load i32, ptr %32, align 4, !tbaa !9
  %264 = load i32, ptr %27, align 4, !tbaa !9
  %265 = mul nsw i32 %263, %264
  %266 = add nsw i32 %262, %265
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds double, ptr %260, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !11
  %270 = call double @llvm.fmuladd.f64(double %259, double %269, double %253)
  %271 = load ptr, ptr %23, align 8, !tbaa !5
  %272 = load ptr, ptr %14, align 8, !tbaa !5
  %273 = load i32, ptr %272, align 4, !tbaa !9
  %274 = load i32, ptr %32, align 4, !tbaa !9
  %275 = load i32, ptr %25, align 4, !tbaa !9
  %276 = mul nsw i32 %274, %275
  %277 = add nsw i32 %273, %276
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds double, ptr %271, i64 %278
  store double %270, ptr %279, align 8, !tbaa !11
  %280 = load ptr, ptr %14, align 8, !tbaa !5
  %281 = load i32, ptr %280, align 4, !tbaa !9
  %282 = sub nsw i32 %281, 1
  store i32 %282, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %31, align 4, !tbaa !9
  br label %283

283:                                              ; preds = %353, %185
  %284 = load i32, ptr %31, align 4, !tbaa !9
  %285 = load i32, ptr %30, align 4, !tbaa !9
  %286 = icmp sle i32 %284, %285
  br i1 %286, label %287, label %356

287:                                              ; preds = %283
  %288 = load ptr, ptr %23, align 8, !tbaa !5
  %289 = load i32, ptr %31, align 4, !tbaa !9
  %290 = load i32, ptr %32, align 4, !tbaa !9
  %291 = load i32, ptr %25, align 4, !tbaa !9
  %292 = mul nsw i32 %290, %291
  %293 = add nsw i32 %289, %292
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds double, ptr %288, i64 %294
  %296 = load double, ptr %295, align 8, !tbaa !11
  %297 = load ptr, ptr %17, align 8, !tbaa !5
  %298 = load i32, ptr %31, align 4, !tbaa !9
  %299 = sub nsw i32 %298, 1
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds double, ptr %297, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !11
  %303 = load ptr, ptr %20, align 8, !tbaa !5
  %304 = load i32, ptr %31, align 4, !tbaa !9
  %305 = sub nsw i32 %304, 1
  %306 = load i32, ptr %32, align 4, !tbaa !9
  %307 = load i32, ptr %27, align 4, !tbaa !9
  %308 = mul nsw i32 %306, %307
  %309 = add nsw i32 %305, %308
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds double, ptr %303, i64 %310
  %312 = load double, ptr %311, align 8, !tbaa !11
  %313 = call double @llvm.fmuladd.f64(double %302, double %312, double %296)
  %314 = load ptr, ptr %18, align 8, !tbaa !5
  %315 = load i32, ptr %31, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds double, ptr %314, i64 %316
  %318 = load double, ptr %317, align 8, !tbaa !11
  %319 = load ptr, ptr %20, align 8, !tbaa !5
  %320 = load i32, ptr %31, align 4, !tbaa !9
  %321 = load i32, ptr %32, align 4, !tbaa !9
  %322 = load i32, ptr %27, align 4, !tbaa !9
  %323 = mul nsw i32 %321, %322
  %324 = add nsw i32 %320, %323
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds double, ptr %319, i64 %325
  %327 = load double, ptr %326, align 8, !tbaa !11
  %328 = call double @llvm.fmuladd.f64(double %318, double %327, double %313)
  %329 = load ptr, ptr %19, align 8, !tbaa !5
  %330 = load i32, ptr %31, align 4, !tbaa !9
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds double, ptr %329, i64 %331
  %333 = load double, ptr %332, align 8, !tbaa !11
  %334 = load ptr, ptr %20, align 8, !tbaa !5
  %335 = load i32, ptr %31, align 4, !tbaa !9
  %336 = add nsw i32 %335, 1
  %337 = load i32, ptr %32, align 4, !tbaa !9
  %338 = load i32, ptr %27, align 4, !tbaa !9
  %339 = mul nsw i32 %337, %338
  %340 = add nsw i32 %336, %339
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds double, ptr %334, i64 %341
  %343 = load double, ptr %342, align 8, !tbaa !11
  %344 = call double @llvm.fmuladd.f64(double %333, double %343, double %328)
  %345 = load ptr, ptr %23, align 8, !tbaa !5
  %346 = load i32, ptr %31, align 4, !tbaa !9
  %347 = load i32, ptr %32, align 4, !tbaa !9
  %348 = load i32, ptr %25, align 4, !tbaa !9
  %349 = mul nsw i32 %347, %348
  %350 = add nsw i32 %346, %349
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds double, ptr %345, i64 %351
  store double %344, ptr %352, align 8, !tbaa !11
  br label %353

353:                                              ; preds = %287
  %354 = load i32, ptr %31, align 4, !tbaa !9
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %31, align 4, !tbaa !9
  br label %283, !llvm.loop !18

356:                                              ; preds = %283
  br label %357

357:                                              ; preds = %356, %164
  br label %358

358:                                              ; preds = %357
  %359 = load i32, ptr %32, align 4, !tbaa !9
  %360 = add nsw i32 %359, 1
  store i32 %360, ptr %32, align 4, !tbaa !9
  br label %156, !llvm.loop !19

361:                                              ; preds = %156
  br label %571

362:                                              ; preds = %149
  %363 = load ptr, ptr %15, align 8, !tbaa !5
  %364 = load i32, ptr %363, align 4, !tbaa !9
  store i32 %364, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !9
  br label %365

365:                                              ; preds = %567, %362
  %366 = load i32, ptr %32, align 4, !tbaa !9
  %367 = load i32, ptr %29, align 4, !tbaa !9
  %368 = icmp sle i32 %366, %367
  br i1 %368, label %369, label %570

369:                                              ; preds = %365
  %370 = load ptr, ptr %14, align 8, !tbaa !5
  %371 = load i32, ptr %370, align 4, !tbaa !9
  %372 = icmp eq i32 %371, 1
  br i1 %372, label %373, label %394

373:                                              ; preds = %369
  %374 = load ptr, ptr %18, align 8, !tbaa !5
  %375 = getelementptr inbounds double, ptr %374, i64 1
  %376 = load double, ptr %375, align 8, !tbaa !11
  %377 = load ptr, ptr %20, align 8, !tbaa !5
  %378 = load i32, ptr %32, align 4, !tbaa !9
  %379 = load i32, ptr %27, align 4, !tbaa !9
  %380 = mul nsw i32 %378, %379
  %381 = add nsw i32 %380, 1
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds double, ptr %377, i64 %382
  %384 = load double, ptr %383, align 8, !tbaa !11
  %385 = load ptr, ptr %23, align 8, !tbaa !5
  %386 = load i32, ptr %32, align 4, !tbaa !9
  %387 = load i32, ptr %25, align 4, !tbaa !9
  %388 = mul nsw i32 %386, %387
  %389 = add nsw i32 %388, 1
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds double, ptr %385, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !11
  %393 = call double @llvm.fmuladd.f64(double %376, double %384, double %392)
  store double %393, ptr %391, align 8, !tbaa !11
  br label %566

394:                                              ; preds = %369
  %395 = load ptr, ptr %23, align 8, !tbaa !5
  %396 = load i32, ptr %32, align 4, !tbaa !9
  %397 = load i32, ptr %25, align 4, !tbaa !9
  %398 = mul nsw i32 %396, %397
  %399 = add nsw i32 %398, 1
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds double, ptr %395, i64 %400
  %402 = load double, ptr %401, align 8, !tbaa !11
  %403 = load ptr, ptr %18, align 8, !tbaa !5
  %404 = getelementptr inbounds double, ptr %403, i64 1
  %405 = load double, ptr %404, align 8, !tbaa !11
  %406 = load ptr, ptr %20, align 8, !tbaa !5
  %407 = load i32, ptr %32, align 4, !tbaa !9
  %408 = load i32, ptr %27, align 4, !tbaa !9
  %409 = mul nsw i32 %407, %408
  %410 = add nsw i32 %409, 1
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds double, ptr %406, i64 %411
  %413 = load double, ptr %412, align 8, !tbaa !11
  %414 = call double @llvm.fmuladd.f64(double %405, double %413, double %402)
  %415 = load ptr, ptr %17, align 8, !tbaa !5
  %416 = getelementptr inbounds double, ptr %415, i64 1
  %417 = load double, ptr %416, align 8, !tbaa !11
  %418 = load ptr, ptr %20, align 8, !tbaa !5
  %419 = load i32, ptr %32, align 4, !tbaa !9
  %420 = load i32, ptr %27, align 4, !tbaa !9
  %421 = mul nsw i32 %419, %420
  %422 = add nsw i32 %421, 2
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds double, ptr %418, i64 %423
  %425 = load double, ptr %424, align 8, !tbaa !11
  %426 = call double @llvm.fmuladd.f64(double %417, double %425, double %414)
  %427 = load ptr, ptr %23, align 8, !tbaa !5
  %428 = load i32, ptr %32, align 4, !tbaa !9
  %429 = load i32, ptr %25, align 4, !tbaa !9
  %430 = mul nsw i32 %428, %429
  %431 = add nsw i32 %430, 1
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds double, ptr %427, i64 %432
  store double %426, ptr %433, align 8, !tbaa !11
  %434 = load ptr, ptr %23, align 8, !tbaa !5
  %435 = load ptr, ptr %14, align 8, !tbaa !5
  %436 = load i32, ptr %435, align 4, !tbaa !9
  %437 = load i32, ptr %32, align 4, !tbaa !9
  %438 = load i32, ptr %25, align 4, !tbaa !9
  %439 = mul nsw i32 %437, %438
  %440 = add nsw i32 %436, %439
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds double, ptr %434, i64 %441
  %443 = load double, ptr %442, align 8, !tbaa !11
  %444 = load ptr, ptr %19, align 8, !tbaa !5
  %445 = load ptr, ptr %14, align 8, !tbaa !5
  %446 = load i32, ptr %445, align 4, !tbaa !9
  %447 = sub nsw i32 %446, 1
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %444, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !11
  %451 = load ptr, ptr %20, align 8, !tbaa !5
  %452 = load ptr, ptr %14, align 8, !tbaa !5
  %453 = load i32, ptr %452, align 4, !tbaa !9
  %454 = sub nsw i32 %453, 1
  %455 = load i32, ptr %32, align 4, !tbaa !9
  %456 = load i32, ptr %27, align 4, !tbaa !9
  %457 = mul nsw i32 %455, %456
  %458 = add nsw i32 %454, %457
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds double, ptr %451, i64 %459
  %461 = load double, ptr %460, align 8, !tbaa !11
  %462 = call double @llvm.fmuladd.f64(double %450, double %461, double %443)
  %463 = load ptr, ptr %18, align 8, !tbaa !5
  %464 = load ptr, ptr %14, align 8, !tbaa !5
  %465 = load i32, ptr %464, align 4, !tbaa !9
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds double, ptr %463, i64 %466
  %468 = load double, ptr %467, align 8, !tbaa !11
  %469 = load ptr, ptr %20, align 8, !tbaa !5
  %470 = load ptr, ptr %14, align 8, !tbaa !5
  %471 = load i32, ptr %470, align 4, !tbaa !9
  %472 = load i32, ptr %32, align 4, !tbaa !9
  %473 = load i32, ptr %27, align 4, !tbaa !9
  %474 = mul nsw i32 %472, %473
  %475 = add nsw i32 %471, %474
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds double, ptr %469, i64 %476
  %478 = load double, ptr %477, align 8, !tbaa !11
  %479 = call double @llvm.fmuladd.f64(double %468, double %478, double %462)
  %480 = load ptr, ptr %23, align 8, !tbaa !5
  %481 = load ptr, ptr %14, align 8, !tbaa !5
  %482 = load i32, ptr %481, align 4, !tbaa !9
  %483 = load i32, ptr %32, align 4, !tbaa !9
  %484 = load i32, ptr %25, align 4, !tbaa !9
  %485 = mul nsw i32 %483, %484
  %486 = add nsw i32 %482, %485
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds double, ptr %480, i64 %487
  store double %479, ptr %488, align 8, !tbaa !11
  %489 = load ptr, ptr %14, align 8, !tbaa !5
  %490 = load i32, ptr %489, align 4, !tbaa !9
  %491 = sub nsw i32 %490, 1
  store i32 %491, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %31, align 4, !tbaa !9
  br label %492

492:                                              ; preds = %562, %394
  %493 = load i32, ptr %31, align 4, !tbaa !9
  %494 = load i32, ptr %30, align 4, !tbaa !9
  %495 = icmp sle i32 %493, %494
  br i1 %495, label %496, label %565

496:                                              ; preds = %492
  %497 = load ptr, ptr %23, align 8, !tbaa !5
  %498 = load i32, ptr %31, align 4, !tbaa !9
  %499 = load i32, ptr %32, align 4, !tbaa !9
  %500 = load i32, ptr %25, align 4, !tbaa !9
  %501 = mul nsw i32 %499, %500
  %502 = add nsw i32 %498, %501
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds double, ptr %497, i64 %503
  %505 = load double, ptr %504, align 8, !tbaa !11
  %506 = load ptr, ptr %19, align 8, !tbaa !5
  %507 = load i32, ptr %31, align 4, !tbaa !9
  %508 = sub nsw i32 %507, 1
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds double, ptr %506, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !11
  %512 = load ptr, ptr %20, align 8, !tbaa !5
  %513 = load i32, ptr %31, align 4, !tbaa !9
  %514 = sub nsw i32 %513, 1
  %515 = load i32, ptr %32, align 4, !tbaa !9
  %516 = load i32, ptr %27, align 4, !tbaa !9
  %517 = mul nsw i32 %515, %516
  %518 = add nsw i32 %514, %517
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds double, ptr %512, i64 %519
  %521 = load double, ptr %520, align 8, !tbaa !11
  %522 = call double @llvm.fmuladd.f64(double %511, double %521, double %505)
  %523 = load ptr, ptr %18, align 8, !tbaa !5
  %524 = load i32, ptr %31, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds double, ptr %523, i64 %525
  %527 = load double, ptr %526, align 8, !tbaa !11
  %528 = load ptr, ptr %20, align 8, !tbaa !5
  %529 = load i32, ptr %31, align 4, !tbaa !9
  %530 = load i32, ptr %32, align 4, !tbaa !9
  %531 = load i32, ptr %27, align 4, !tbaa !9
  %532 = mul nsw i32 %530, %531
  %533 = add nsw i32 %529, %532
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds double, ptr %528, i64 %534
  %536 = load double, ptr %535, align 8, !tbaa !11
  %537 = call double @llvm.fmuladd.f64(double %527, double %536, double %522)
  %538 = load ptr, ptr %17, align 8, !tbaa !5
  %539 = load i32, ptr %31, align 4, !tbaa !9
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds double, ptr %538, i64 %540
  %542 = load double, ptr %541, align 8, !tbaa !11
  %543 = load ptr, ptr %20, align 8, !tbaa !5
  %544 = load i32, ptr %31, align 4, !tbaa !9
  %545 = add nsw i32 %544, 1
  %546 = load i32, ptr %32, align 4, !tbaa !9
  %547 = load i32, ptr %27, align 4, !tbaa !9
  %548 = mul nsw i32 %546, %547
  %549 = add nsw i32 %545, %548
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds double, ptr %543, i64 %550
  %552 = load double, ptr %551, align 8, !tbaa !11
  %553 = call double @llvm.fmuladd.f64(double %542, double %552, double %537)
  %554 = load ptr, ptr %23, align 8, !tbaa !5
  %555 = load i32, ptr %31, align 4, !tbaa !9
  %556 = load i32, ptr %32, align 4, !tbaa !9
  %557 = load i32, ptr %25, align 4, !tbaa !9
  %558 = mul nsw i32 %556, %557
  %559 = add nsw i32 %555, %558
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds double, ptr %554, i64 %560
  store double %553, ptr %561, align 8, !tbaa !11
  br label %562

562:                                              ; preds = %496
  %563 = load i32, ptr %31, align 4, !tbaa !9
  %564 = add nsw i32 %563, 1
  store i32 %564, ptr %31, align 4, !tbaa !9
  br label %492, !llvm.loop !20

565:                                              ; preds = %492
  br label %566

566:                                              ; preds = %565, %373
  br label %567

567:                                              ; preds = %566
  %568 = load i32, ptr %32, align 4, !tbaa !9
  %569 = add nsw i32 %568, 1
  store i32 %569, ptr %32, align 4, !tbaa !9
  br label %365, !llvm.loop !21

570:                                              ; preds = %365
  br label %571

571:                                              ; preds = %570, %361
  br label %1016

572:                                              ; preds = %145
  %573 = load ptr, ptr %16, align 8, !tbaa !5
  %574 = load double, ptr %573, align 8, !tbaa !11
  %575 = fcmp oeq double %574, -1.000000e+00
  br i1 %575, label %576, label %1015

576:                                              ; preds = %572
  %577 = load ptr, ptr %13, align 8, !tbaa !5
  %578 = call i32 @lsame_(ptr noundef %577, ptr noundef @.str)
  %579 = icmp ne i32 %578, 0
  br i1 %579, label %580, label %797

580:                                              ; preds = %576
  %581 = load ptr, ptr %15, align 8, !tbaa !5
  %582 = load i32, ptr %581, align 4, !tbaa !9
  store i32 %582, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !9
  br label %583

583:                                              ; preds = %793, %580
  %584 = load i32, ptr %32, align 4, !tbaa !9
  %585 = load i32, ptr %29, align 4, !tbaa !9
  %586 = icmp sle i32 %584, %585
  br i1 %586, label %587, label %796

587:                                              ; preds = %583
  %588 = load ptr, ptr %14, align 8, !tbaa !5
  %589 = load i32, ptr %588, align 4, !tbaa !9
  %590 = icmp eq i32 %589, 1
  br i1 %590, label %591, label %613

591:                                              ; preds = %587
  %592 = load ptr, ptr %18, align 8, !tbaa !5
  %593 = getelementptr inbounds double, ptr %592, i64 1
  %594 = load double, ptr %593, align 8, !tbaa !11
  %595 = load ptr, ptr %20, align 8, !tbaa !5
  %596 = load i32, ptr %32, align 4, !tbaa !9
  %597 = load i32, ptr %27, align 4, !tbaa !9
  %598 = mul nsw i32 %596, %597
  %599 = add nsw i32 %598, 1
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds double, ptr %595, i64 %600
  %602 = load double, ptr %601, align 8, !tbaa !11
  %603 = load ptr, ptr %23, align 8, !tbaa !5
  %604 = load i32, ptr %32, align 4, !tbaa !9
  %605 = load i32, ptr %25, align 4, !tbaa !9
  %606 = mul nsw i32 %604, %605
  %607 = add nsw i32 %606, 1
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds double, ptr %603, i64 %608
  %610 = load double, ptr %609, align 8, !tbaa !11
  %611 = fneg double %594
  %612 = call double @llvm.fmuladd.f64(double %611, double %602, double %610)
  store double %612, ptr %609, align 8, !tbaa !11
  br label %792

613:                                              ; preds = %587
  %614 = load ptr, ptr %23, align 8, !tbaa !5
  %615 = load i32, ptr %32, align 4, !tbaa !9
  %616 = load i32, ptr %25, align 4, !tbaa !9
  %617 = mul nsw i32 %615, %616
  %618 = add nsw i32 %617, 1
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds double, ptr %614, i64 %619
  %621 = load double, ptr %620, align 8, !tbaa !11
  %622 = load ptr, ptr %18, align 8, !tbaa !5
  %623 = getelementptr inbounds double, ptr %622, i64 1
  %624 = load double, ptr %623, align 8, !tbaa !11
  %625 = load ptr, ptr %20, align 8, !tbaa !5
  %626 = load i32, ptr %32, align 4, !tbaa !9
  %627 = load i32, ptr %27, align 4, !tbaa !9
  %628 = mul nsw i32 %626, %627
  %629 = add nsw i32 %628, 1
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds double, ptr %625, i64 %630
  %632 = load double, ptr %631, align 8, !tbaa !11
  %633 = fneg double %624
  %634 = call double @llvm.fmuladd.f64(double %633, double %632, double %621)
  %635 = load ptr, ptr %19, align 8, !tbaa !5
  %636 = getelementptr inbounds double, ptr %635, i64 1
  %637 = load double, ptr %636, align 8, !tbaa !11
  %638 = load ptr, ptr %20, align 8, !tbaa !5
  %639 = load i32, ptr %32, align 4, !tbaa !9
  %640 = load i32, ptr %27, align 4, !tbaa !9
  %641 = mul nsw i32 %639, %640
  %642 = add nsw i32 %641, 2
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds double, ptr %638, i64 %643
  %645 = load double, ptr %644, align 8, !tbaa !11
  %646 = fneg double %637
  %647 = call double @llvm.fmuladd.f64(double %646, double %645, double %634)
  %648 = load ptr, ptr %23, align 8, !tbaa !5
  %649 = load i32, ptr %32, align 4, !tbaa !9
  %650 = load i32, ptr %25, align 4, !tbaa !9
  %651 = mul nsw i32 %649, %650
  %652 = add nsw i32 %651, 1
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds double, ptr %648, i64 %653
  store double %647, ptr %654, align 8, !tbaa !11
  %655 = load ptr, ptr %23, align 8, !tbaa !5
  %656 = load ptr, ptr %14, align 8, !tbaa !5
  %657 = load i32, ptr %656, align 4, !tbaa !9
  %658 = load i32, ptr %32, align 4, !tbaa !9
  %659 = load i32, ptr %25, align 4, !tbaa !9
  %660 = mul nsw i32 %658, %659
  %661 = add nsw i32 %657, %660
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds double, ptr %655, i64 %662
  %664 = load double, ptr %663, align 8, !tbaa !11
  %665 = load ptr, ptr %17, align 8, !tbaa !5
  %666 = load ptr, ptr %14, align 8, !tbaa !5
  %667 = load i32, ptr %666, align 4, !tbaa !9
  %668 = sub nsw i32 %667, 1
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds double, ptr %665, i64 %669
  %671 = load double, ptr %670, align 8, !tbaa !11
  %672 = load ptr, ptr %20, align 8, !tbaa !5
  %673 = load ptr, ptr %14, align 8, !tbaa !5
  %674 = load i32, ptr %673, align 4, !tbaa !9
  %675 = sub nsw i32 %674, 1
  %676 = load i32, ptr %32, align 4, !tbaa !9
  %677 = load i32, ptr %27, align 4, !tbaa !9
  %678 = mul nsw i32 %676, %677
  %679 = add nsw i32 %675, %678
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds double, ptr %672, i64 %680
  %682 = load double, ptr %681, align 8, !tbaa !11
  %683 = fneg double %671
  %684 = call double @llvm.fmuladd.f64(double %683, double %682, double %664)
  %685 = load ptr, ptr %18, align 8, !tbaa !5
  %686 = load ptr, ptr %14, align 8, !tbaa !5
  %687 = load i32, ptr %686, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds double, ptr %685, i64 %688
  %690 = load double, ptr %689, align 8, !tbaa !11
  %691 = load ptr, ptr %20, align 8, !tbaa !5
  %692 = load ptr, ptr %14, align 8, !tbaa !5
  %693 = load i32, ptr %692, align 4, !tbaa !9
  %694 = load i32, ptr %32, align 4, !tbaa !9
  %695 = load i32, ptr %27, align 4, !tbaa !9
  %696 = mul nsw i32 %694, %695
  %697 = add nsw i32 %693, %696
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds double, ptr %691, i64 %698
  %700 = load double, ptr %699, align 8, !tbaa !11
  %701 = fneg double %690
  %702 = call double @llvm.fmuladd.f64(double %701, double %700, double %684)
  %703 = load ptr, ptr %23, align 8, !tbaa !5
  %704 = load ptr, ptr %14, align 8, !tbaa !5
  %705 = load i32, ptr %704, align 4, !tbaa !9
  %706 = load i32, ptr %32, align 4, !tbaa !9
  %707 = load i32, ptr %25, align 4, !tbaa !9
  %708 = mul nsw i32 %706, %707
  %709 = add nsw i32 %705, %708
  %710 = sext i32 %709 to i64
  %711 = getelementptr inbounds double, ptr %703, i64 %710
  store double %702, ptr %711, align 8, !tbaa !11
  %712 = load ptr, ptr %14, align 8, !tbaa !5
  %713 = load i32, ptr %712, align 4, !tbaa !9
  %714 = sub nsw i32 %713, 1
  store i32 %714, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %31, align 4, !tbaa !9
  br label %715

715:                                              ; preds = %788, %613
  %716 = load i32, ptr %31, align 4, !tbaa !9
  %717 = load i32, ptr %30, align 4, !tbaa !9
  %718 = icmp sle i32 %716, %717
  br i1 %718, label %719, label %791

719:                                              ; preds = %715
  %720 = load ptr, ptr %23, align 8, !tbaa !5
  %721 = load i32, ptr %31, align 4, !tbaa !9
  %722 = load i32, ptr %32, align 4, !tbaa !9
  %723 = load i32, ptr %25, align 4, !tbaa !9
  %724 = mul nsw i32 %722, %723
  %725 = add nsw i32 %721, %724
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds double, ptr %720, i64 %726
  %728 = load double, ptr %727, align 8, !tbaa !11
  %729 = load ptr, ptr %17, align 8, !tbaa !5
  %730 = load i32, ptr %31, align 4, !tbaa !9
  %731 = sub nsw i32 %730, 1
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds double, ptr %729, i64 %732
  %734 = load double, ptr %733, align 8, !tbaa !11
  %735 = load ptr, ptr %20, align 8, !tbaa !5
  %736 = load i32, ptr %31, align 4, !tbaa !9
  %737 = sub nsw i32 %736, 1
  %738 = load i32, ptr %32, align 4, !tbaa !9
  %739 = load i32, ptr %27, align 4, !tbaa !9
  %740 = mul nsw i32 %738, %739
  %741 = add nsw i32 %737, %740
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds double, ptr %735, i64 %742
  %744 = load double, ptr %743, align 8, !tbaa !11
  %745 = fneg double %734
  %746 = call double @llvm.fmuladd.f64(double %745, double %744, double %728)
  %747 = load ptr, ptr %18, align 8, !tbaa !5
  %748 = load i32, ptr %31, align 4, !tbaa !9
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds double, ptr %747, i64 %749
  %751 = load double, ptr %750, align 8, !tbaa !11
  %752 = load ptr, ptr %20, align 8, !tbaa !5
  %753 = load i32, ptr %31, align 4, !tbaa !9
  %754 = load i32, ptr %32, align 4, !tbaa !9
  %755 = load i32, ptr %27, align 4, !tbaa !9
  %756 = mul nsw i32 %754, %755
  %757 = add nsw i32 %753, %756
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds double, ptr %752, i64 %758
  %760 = load double, ptr %759, align 8, !tbaa !11
  %761 = fneg double %751
  %762 = call double @llvm.fmuladd.f64(double %761, double %760, double %746)
  %763 = load ptr, ptr %19, align 8, !tbaa !5
  %764 = load i32, ptr %31, align 4, !tbaa !9
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds double, ptr %763, i64 %765
  %767 = load double, ptr %766, align 8, !tbaa !11
  %768 = load ptr, ptr %20, align 8, !tbaa !5
  %769 = load i32, ptr %31, align 4, !tbaa !9
  %770 = add nsw i32 %769, 1
  %771 = load i32, ptr %32, align 4, !tbaa !9
  %772 = load i32, ptr %27, align 4, !tbaa !9
  %773 = mul nsw i32 %771, %772
  %774 = add nsw i32 %770, %773
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds double, ptr %768, i64 %775
  %777 = load double, ptr %776, align 8, !tbaa !11
  %778 = fneg double %767
  %779 = call double @llvm.fmuladd.f64(double %778, double %777, double %762)
  %780 = load ptr, ptr %23, align 8, !tbaa !5
  %781 = load i32, ptr %31, align 4, !tbaa !9
  %782 = load i32, ptr %32, align 4, !tbaa !9
  %783 = load i32, ptr %25, align 4, !tbaa !9
  %784 = mul nsw i32 %782, %783
  %785 = add nsw i32 %781, %784
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds double, ptr %780, i64 %786
  store double %779, ptr %787, align 8, !tbaa !11
  br label %788

788:                                              ; preds = %719
  %789 = load i32, ptr %31, align 4, !tbaa !9
  %790 = add nsw i32 %789, 1
  store i32 %790, ptr %31, align 4, !tbaa !9
  br label %715, !llvm.loop !22

791:                                              ; preds = %715
  br label %792

792:                                              ; preds = %791, %591
  br label %793

793:                                              ; preds = %792
  %794 = load i32, ptr %32, align 4, !tbaa !9
  %795 = add nsw i32 %794, 1
  store i32 %795, ptr %32, align 4, !tbaa !9
  br label %583, !llvm.loop !23

796:                                              ; preds = %583
  br label %1014

797:                                              ; preds = %576
  %798 = load ptr, ptr %15, align 8, !tbaa !5
  %799 = load i32, ptr %798, align 4, !tbaa !9
  store i32 %799, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !9
  br label %800

800:                                              ; preds = %1010, %797
  %801 = load i32, ptr %32, align 4, !tbaa !9
  %802 = load i32, ptr %29, align 4, !tbaa !9
  %803 = icmp sle i32 %801, %802
  br i1 %803, label %804, label %1013

804:                                              ; preds = %800
  %805 = load ptr, ptr %14, align 8, !tbaa !5
  %806 = load i32, ptr %805, align 4, !tbaa !9
  %807 = icmp eq i32 %806, 1
  br i1 %807, label %808, label %830

808:                                              ; preds = %804
  %809 = load ptr, ptr %18, align 8, !tbaa !5
  %810 = getelementptr inbounds double, ptr %809, i64 1
  %811 = load double, ptr %810, align 8, !tbaa !11
  %812 = load ptr, ptr %20, align 8, !tbaa !5
  %813 = load i32, ptr %32, align 4, !tbaa !9
  %814 = load i32, ptr %27, align 4, !tbaa !9
  %815 = mul nsw i32 %813, %814
  %816 = add nsw i32 %815, 1
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds double, ptr %812, i64 %817
  %819 = load double, ptr %818, align 8, !tbaa !11
  %820 = load ptr, ptr %23, align 8, !tbaa !5
  %821 = load i32, ptr %32, align 4, !tbaa !9
  %822 = load i32, ptr %25, align 4, !tbaa !9
  %823 = mul nsw i32 %821, %822
  %824 = add nsw i32 %823, 1
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds double, ptr %820, i64 %825
  %827 = load double, ptr %826, align 8, !tbaa !11
  %828 = fneg double %811
  %829 = call double @llvm.fmuladd.f64(double %828, double %819, double %827)
  store double %829, ptr %826, align 8, !tbaa !11
  br label %1009

830:                                              ; preds = %804
  %831 = load ptr, ptr %23, align 8, !tbaa !5
  %832 = load i32, ptr %32, align 4, !tbaa !9
  %833 = load i32, ptr %25, align 4, !tbaa !9
  %834 = mul nsw i32 %832, %833
  %835 = add nsw i32 %834, 1
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds double, ptr %831, i64 %836
  %838 = load double, ptr %837, align 8, !tbaa !11
  %839 = load ptr, ptr %18, align 8, !tbaa !5
  %840 = getelementptr inbounds double, ptr %839, i64 1
  %841 = load double, ptr %840, align 8, !tbaa !11
  %842 = load ptr, ptr %20, align 8, !tbaa !5
  %843 = load i32, ptr %32, align 4, !tbaa !9
  %844 = load i32, ptr %27, align 4, !tbaa !9
  %845 = mul nsw i32 %843, %844
  %846 = add nsw i32 %845, 1
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds double, ptr %842, i64 %847
  %849 = load double, ptr %848, align 8, !tbaa !11
  %850 = fneg double %841
  %851 = call double @llvm.fmuladd.f64(double %850, double %849, double %838)
  %852 = load ptr, ptr %17, align 8, !tbaa !5
  %853 = getelementptr inbounds double, ptr %852, i64 1
  %854 = load double, ptr %853, align 8, !tbaa !11
  %855 = load ptr, ptr %20, align 8, !tbaa !5
  %856 = load i32, ptr %32, align 4, !tbaa !9
  %857 = load i32, ptr %27, align 4, !tbaa !9
  %858 = mul nsw i32 %856, %857
  %859 = add nsw i32 %858, 2
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds double, ptr %855, i64 %860
  %862 = load double, ptr %861, align 8, !tbaa !11
  %863 = fneg double %854
  %864 = call double @llvm.fmuladd.f64(double %863, double %862, double %851)
  %865 = load ptr, ptr %23, align 8, !tbaa !5
  %866 = load i32, ptr %32, align 4, !tbaa !9
  %867 = load i32, ptr %25, align 4, !tbaa !9
  %868 = mul nsw i32 %866, %867
  %869 = add nsw i32 %868, 1
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds double, ptr %865, i64 %870
  store double %864, ptr %871, align 8, !tbaa !11
  %872 = load ptr, ptr %23, align 8, !tbaa !5
  %873 = load ptr, ptr %14, align 8, !tbaa !5
  %874 = load i32, ptr %873, align 4, !tbaa !9
  %875 = load i32, ptr %32, align 4, !tbaa !9
  %876 = load i32, ptr %25, align 4, !tbaa !9
  %877 = mul nsw i32 %875, %876
  %878 = add nsw i32 %874, %877
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds double, ptr %872, i64 %879
  %881 = load double, ptr %880, align 8, !tbaa !11
  %882 = load ptr, ptr %19, align 8, !tbaa !5
  %883 = load ptr, ptr %14, align 8, !tbaa !5
  %884 = load i32, ptr %883, align 4, !tbaa !9
  %885 = sub nsw i32 %884, 1
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds double, ptr %882, i64 %886
  %888 = load double, ptr %887, align 8, !tbaa !11
  %889 = load ptr, ptr %20, align 8, !tbaa !5
  %890 = load ptr, ptr %14, align 8, !tbaa !5
  %891 = load i32, ptr %890, align 4, !tbaa !9
  %892 = sub nsw i32 %891, 1
  %893 = load i32, ptr %32, align 4, !tbaa !9
  %894 = load i32, ptr %27, align 4, !tbaa !9
  %895 = mul nsw i32 %893, %894
  %896 = add nsw i32 %892, %895
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds double, ptr %889, i64 %897
  %899 = load double, ptr %898, align 8, !tbaa !11
  %900 = fneg double %888
  %901 = call double @llvm.fmuladd.f64(double %900, double %899, double %881)
  %902 = load ptr, ptr %18, align 8, !tbaa !5
  %903 = load ptr, ptr %14, align 8, !tbaa !5
  %904 = load i32, ptr %903, align 4, !tbaa !9
  %905 = sext i32 %904 to i64
  %906 = getelementptr inbounds double, ptr %902, i64 %905
  %907 = load double, ptr %906, align 8, !tbaa !11
  %908 = load ptr, ptr %20, align 8, !tbaa !5
  %909 = load ptr, ptr %14, align 8, !tbaa !5
  %910 = load i32, ptr %909, align 4, !tbaa !9
  %911 = load i32, ptr %32, align 4, !tbaa !9
  %912 = load i32, ptr %27, align 4, !tbaa !9
  %913 = mul nsw i32 %911, %912
  %914 = add nsw i32 %910, %913
  %915 = sext i32 %914 to i64
  %916 = getelementptr inbounds double, ptr %908, i64 %915
  %917 = load double, ptr %916, align 8, !tbaa !11
  %918 = fneg double %907
  %919 = call double @llvm.fmuladd.f64(double %918, double %917, double %901)
  %920 = load ptr, ptr %23, align 8, !tbaa !5
  %921 = load ptr, ptr %14, align 8, !tbaa !5
  %922 = load i32, ptr %921, align 4, !tbaa !9
  %923 = load i32, ptr %32, align 4, !tbaa !9
  %924 = load i32, ptr %25, align 4, !tbaa !9
  %925 = mul nsw i32 %923, %924
  %926 = add nsw i32 %922, %925
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds double, ptr %920, i64 %927
  store double %919, ptr %928, align 8, !tbaa !11
  %929 = load ptr, ptr %14, align 8, !tbaa !5
  %930 = load i32, ptr %929, align 4, !tbaa !9
  %931 = sub nsw i32 %930, 1
  store i32 %931, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %31, align 4, !tbaa !9
  br label %932

932:                                              ; preds = %1005, %830
  %933 = load i32, ptr %31, align 4, !tbaa !9
  %934 = load i32, ptr %30, align 4, !tbaa !9
  %935 = icmp sle i32 %933, %934
  br i1 %935, label %936, label %1008

936:                                              ; preds = %932
  %937 = load ptr, ptr %23, align 8, !tbaa !5
  %938 = load i32, ptr %31, align 4, !tbaa !9
  %939 = load i32, ptr %32, align 4, !tbaa !9
  %940 = load i32, ptr %25, align 4, !tbaa !9
  %941 = mul nsw i32 %939, %940
  %942 = add nsw i32 %938, %941
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds double, ptr %937, i64 %943
  %945 = load double, ptr %944, align 8, !tbaa !11
  %946 = load ptr, ptr %19, align 8, !tbaa !5
  %947 = load i32, ptr %31, align 4, !tbaa !9
  %948 = sub nsw i32 %947, 1
  %949 = sext i32 %948 to i64
  %950 = getelementptr inbounds double, ptr %946, i64 %949
  %951 = load double, ptr %950, align 8, !tbaa !11
  %952 = load ptr, ptr %20, align 8, !tbaa !5
  %953 = load i32, ptr %31, align 4, !tbaa !9
  %954 = sub nsw i32 %953, 1
  %955 = load i32, ptr %32, align 4, !tbaa !9
  %956 = load i32, ptr %27, align 4, !tbaa !9
  %957 = mul nsw i32 %955, %956
  %958 = add nsw i32 %954, %957
  %959 = sext i32 %958 to i64
  %960 = getelementptr inbounds double, ptr %952, i64 %959
  %961 = load double, ptr %960, align 8, !tbaa !11
  %962 = fneg double %951
  %963 = call double @llvm.fmuladd.f64(double %962, double %961, double %945)
  %964 = load ptr, ptr %18, align 8, !tbaa !5
  %965 = load i32, ptr %31, align 4, !tbaa !9
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds double, ptr %964, i64 %966
  %968 = load double, ptr %967, align 8, !tbaa !11
  %969 = load ptr, ptr %20, align 8, !tbaa !5
  %970 = load i32, ptr %31, align 4, !tbaa !9
  %971 = load i32, ptr %32, align 4, !tbaa !9
  %972 = load i32, ptr %27, align 4, !tbaa !9
  %973 = mul nsw i32 %971, %972
  %974 = add nsw i32 %970, %973
  %975 = sext i32 %974 to i64
  %976 = getelementptr inbounds double, ptr %969, i64 %975
  %977 = load double, ptr %976, align 8, !tbaa !11
  %978 = fneg double %968
  %979 = call double @llvm.fmuladd.f64(double %978, double %977, double %963)
  %980 = load ptr, ptr %17, align 8, !tbaa !5
  %981 = load i32, ptr %31, align 4, !tbaa !9
  %982 = sext i32 %981 to i64
  %983 = getelementptr inbounds double, ptr %980, i64 %982
  %984 = load double, ptr %983, align 8, !tbaa !11
  %985 = load ptr, ptr %20, align 8, !tbaa !5
  %986 = load i32, ptr %31, align 4, !tbaa !9
  %987 = add nsw i32 %986, 1
  %988 = load i32, ptr %32, align 4, !tbaa !9
  %989 = load i32, ptr %27, align 4, !tbaa !9
  %990 = mul nsw i32 %988, %989
  %991 = add nsw i32 %987, %990
  %992 = sext i32 %991 to i64
  %993 = getelementptr inbounds double, ptr %985, i64 %992
  %994 = load double, ptr %993, align 8, !tbaa !11
  %995 = fneg double %984
  %996 = call double @llvm.fmuladd.f64(double %995, double %994, double %979)
  %997 = load ptr, ptr %23, align 8, !tbaa !5
  %998 = load i32, ptr %31, align 4, !tbaa !9
  %999 = load i32, ptr %32, align 4, !tbaa !9
  %1000 = load i32, ptr %25, align 4, !tbaa !9
  %1001 = mul nsw i32 %999, %1000
  %1002 = add nsw i32 %998, %1001
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds double, ptr %997, i64 %1003
  store double %996, ptr %1004, align 8, !tbaa !11
  br label %1005

1005:                                             ; preds = %936
  %1006 = load i32, ptr %31, align 4, !tbaa !9
  %1007 = add nsw i32 %1006, 1
  store i32 %1007, ptr %31, align 4, !tbaa !9
  br label %932, !llvm.loop !24

1008:                                             ; preds = %932
  br label %1009

1009:                                             ; preds = %1008, %808
  br label %1010

1010:                                             ; preds = %1009
  %1011 = load i32, ptr %32, align 4, !tbaa !9
  %1012 = add nsw i32 %1011, 1
  store i32 %1012, ptr %32, align 4, !tbaa !9
  br label %800, !llvm.loop !25

1013:                                             ; preds = %800
  br label %1014

1014:                                             ; preds = %1013, %796
  br label %1015

1015:                                             ; preds = %1014, %572
  br label %1016

1016:                                             ; preds = %1015, %571
  store i32 1, ptr %33, align 4
  br label %1017

1017:                                             ; preds = %1016, %63
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  ret void
}

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

declare i32 @lsame_(ptr noundef, ptr noundef) #2

; 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 = { 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 = { "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 #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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !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}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !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"

@.str = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dlagtm_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, ptr nocapture noundef readonly %6, ptr nocapture noundef readonly %7, ptr nocapture noundef readonly %8, ptr nocapture noundef readonly %9, ptr nocapture noundef %10, ptr nocapture noundef readonly %11) local_unnamed_addr #0 {
  %13 = getelementptr inbounds i8, ptr %4, i64 -8
  %14 = getelementptr inbounds i8, ptr %5, i64 -8
  %15 = getelementptr inbounds i8, ptr %6, i64 -8
  %16 = load i32, ptr %8, align 4, !tbaa !5
  %narrow = xor i32 %16, -1
  %17 = sext i32 %narrow to i64
  %18 = getelementptr inbounds double, ptr %7, i64 %17
  %19 = load i32, ptr %11, align 4, !tbaa !5
  %narrow357 = xor i32 %19, -1
  %20 = sext i32 %narrow357 to i64
  %21 = getelementptr inbounds double, ptr %10, i64 %20
  %22 = load i32, ptr %1, align 4, !tbaa !5
  %23 = icmp eq i32 %22, 0
  br i1 %23, label %.loopexit371, label %24

24:                                               ; preds = %12
  %25 = load double, ptr %9, align 8, !tbaa !9
  %26 = fcmp oeq double %25, 0.000000e+00
  br i1 %26, label %27, label %48

27:                                               ; preds = %24
  %28 = load i32, ptr %2, align 4, !tbaa !5
  %.not359388 = icmp slt i32 %28, 1
  %.not370385 = icmp slt i32 %22, 1
  %or.cond = or i1 %.not359388, %.not370385
  br i1 %or.cond, label %.loopexit378, label %.preheader.preheader

.preheader.preheader:                             ; preds = %27
  %29 = add i32 %19, 1
  %30 = sext i32 %29 to i64
  %31 = add nsw i64 %20, %30
  %32 = shl nsw i64 %31, 3
  %33 = sext i32 %19 to i64
  %34 = shl nsw i64 %33, 3
  %35 = zext nneg i32 %22 to i64
  %36 = shl nuw nsw i64 %35, 3
  %wide.trip.count462 = zext nneg i32 %28 to i64
  %37 = getelementptr i8, ptr %10, i64 %32
  %38 = add nsw i64 %wide.trip.count462, -1
  %xtraiter = and i64 %wide.trip.count462, 7
  %39 = icmp ult i64 %38, 7
  br i1 %39, label %.loopexit378.loopexit.unr-lcssa, label %.preheader.preheader.new

.preheader.preheader.new:                         ; preds = %.preheader.preheader
  %unroll_iter = and i64 %wide.trip.count462, 2147483640
  br label %.preheader

.preheader:                                       ; preds = %.preheader, %.preheader.preheader.new
  %indvar = phi i64 [ 0, %.preheader.preheader.new ], [ %indvar.next.7, %.preheader ]
  %niter = phi i64 [ 0, %.preheader.preheader.new ], [ %niter.next.7, %.preheader ]
  %40 = mul i64 %34, %indvar
  %scevgep = getelementptr i8, ptr %37, i64 %40
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next = or disjoint i64 %indvar, 1
  %41 = mul i64 %34, %indvar.next
  %scevgep.1 = getelementptr i8, ptr %37, i64 %41
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.1, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next.1 = or disjoint i64 %indvar, 2
  %42 = mul i64 %34, %indvar.next.1
  %scevgep.2 = getelementptr i8, ptr %37, i64 %42
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.2, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next.2 = or disjoint i64 %indvar, 3
  %43 = mul i64 %34, %indvar.next.2
  %scevgep.3 = getelementptr i8, ptr %37, i64 %43
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.3, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next.3 = or disjoint i64 %indvar, 4
  %44 = mul i64 %34, %indvar.next.3
  %scevgep.4 = getelementptr i8, ptr %37, i64 %44
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.4, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next.4 = or disjoint i64 %indvar, 5
  %45 = mul i64 %34, %indvar.next.4
  %scevgep.5 = getelementptr i8, ptr %37, i64 %45
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.5, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next.5 = or disjoint i64 %indvar, 6
  %46 = mul i64 %34, %indvar.next.5
  %scevgep.6 = getelementptr i8, ptr %37, i64 %46
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.6, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next.6 = or disjoint i64 %indvar, 7
  %47 = mul i64 %34, %indvar.next.6
  %scevgep.7 = getelementptr i8, ptr %37, i64 %47
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.7, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next.7 = add nuw nsw i64 %indvar, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %.loopexit378.loopexit.unr-lcssa, label %.preheader, !llvm.loop !11

48:                                               ; preds = %24
  %49 = fcmp oeq double %25, -1.000000e+00
  br i1 %49, label %50, label %.loopexit378

50:                                               ; preds = %48
  %51 = load i32, ptr %2, align 4, !tbaa !5
  %.not383 = icmp slt i32 %51, 1
  %.not358381 = icmp slt i32 %22, 1
  %or.cond590 = or i1 %.not383, %.not358381
  br i1 %or.cond590, label %.loopexit378, label %.preheader379.preheader

.preheader379.preheader:                          ; preds = %50
  %52 = add nuw i32 %22, 1
  %53 = sext i32 %19 to i64
  %54 = add nuw i32 %51, 1
  %wide.trip.count457 = zext i32 %54 to i64
  %wide.trip.count = zext i32 %52 to i64
  %55 = zext nneg i32 %22 to i64
  %min.iters.check = icmp ult i32 %22, 4
  %n.vec = and i64 %55, 2147483644
  %ind.end = or disjoint i64 %n.vec, 1
  %cmp.n = icmp eq i64 %n.vec, %55
  br label %.preheader379

.preheader379:                                    ; preds = %.preheader379.preheader, %._crit_edge
  %indvars.iv454 = phi i64 [ 1, %.preheader379.preheader ], [ %indvars.iv.next455, %._crit_edge ]
  %56 = mul nsw i64 %indvars.iv454, %53
  %invariant.gep532 = getelementptr double, ptr %21, i64 %56
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.preheader379, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader379 ]
  %offset.idx = or disjoint i64 %index, 1
  %57 = getelementptr double, ptr %invariant.gep532, i64 %offset.idx
  %58 = getelementptr i8, ptr %57, i64 16
  %wide.load = load <2 x double>, ptr %57, align 8, !tbaa !9
  %wide.load599 = load <2 x double>, ptr %58, align 8, !tbaa !9
  %59 = fneg <2 x double> %wide.load
  %60 = fneg <2 x double> %wide.load599
  store <2 x double> %59, ptr %57, align 8, !tbaa !9
  store <2 x double> %60, ptr %58, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %61 = icmp eq i64 %index.next, %n.vec
  br i1 %61, label %middle.block, label %vector.body, !llvm.loop !13

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.preheader379
  %indvars.iv.ph = phi i64 [ 1, %.preheader379 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %gep533 = getelementptr double, ptr %invariant.gep532, i64 %indvars.iv
  %62 = load double, ptr %gep533, align 8, !tbaa !9
  %63 = fneg double %62
  store double %63, ptr %gep533, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !16

._crit_edge:                                      ; preds = %scalar.ph, %middle.block
  %indvars.iv.next455 = add nuw nsw i64 %indvars.iv454, 1
  %exitcond458.not = icmp eq i64 %indvars.iv.next455, %wide.trip.count457
  br i1 %exitcond458.not, label %.loopexit378, label %.preheader379, !llvm.loop !17

.loopexit378.loopexit.unr-lcssa:                  ; preds = %.preheader, %.preheader.preheader
  %indvar.unr = phi i64 [ 0, %.preheader.preheader ], [ %indvar.next.7, %.preheader ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit378, label %.preheader.epil

.preheader.epil:                                  ; preds = %.loopexit378.loopexit.unr-lcssa, %.preheader.epil
  %indvar.epil = phi i64 [ %indvar.next.epil, %.preheader.epil ], [ %indvar.unr, %.loopexit378.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.preheader.epil ], [ 0, %.loopexit378.loopexit.unr-lcssa ]
  %64 = mul i64 %34, %indvar.epil
  %scevgep.epil = getelementptr i8, ptr %37, i64 %64
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.epil, i8 0, i64 %36, i1 false), !tbaa !9
  %indvar.next.epil = add nuw nsw i64 %indvar.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.loopexit378, label %.preheader.epil, !llvm.loop !18

.loopexit378:                                     ; preds = %._crit_edge, %.loopexit378.loopexit.unr-lcssa, %.preheader.epil, %50, %27, %48
  %65 = load double, ptr %3, align 8, !tbaa !9
  %66 = fcmp oeq double %65, 1.000000e+00
  br i1 %66, label %67, label %300

67:                                               ; preds = %.loopexit378
  %68 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not365 = icmp eq i32 %68, 0
  %69 = load i32, ptr %2, align 4, !tbaa !5
  %invariant.gep433 = getelementptr i8, ptr %21, i64 8
  %invariant.gep435 = getelementptr i8, ptr %18, i64 8
  %.not366439 = icmp slt i32 %69, 1
  br i1 %.not365, label %185, label %70

70:                                               ; preds = %67
  br i1 %.not366439, label %.loopexit371, label %.lr.ph428

.lr.ph428:                                        ; preds = %70
  %71 = load i32, ptr %1, align 4, !tbaa !5
  %72 = icmp eq i32 %71, 1
  %73 = add nsw i32 %71, -1
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds double, ptr %13, i64 %74
  %76 = sext i32 %71 to i64
  %77 = getelementptr inbounds double, ptr %14, i64 %76
  %.not369.not415 = icmp sgt i32 %71, 2
  %78 = add nuw i32 %69, 1
  %wide.trip.count507 = zext i32 %78 to i64
  br i1 %72, label %.lr.ph428.split.us.preheader, label %.lr.ph428.split.preheader

.lr.ph428.split.preheader:                        ; preds = %.lr.ph428
  %79 = sext i32 %19 to i64
  %80 = sext i32 %16 to i64
  %invariant.gep570 = getelementptr double, ptr %21, i64 %76
  %invariant.gep572 = getelementptr double, ptr %18, i64 %74
  %invariant.gep574 = getelementptr double, ptr %18, i64 %76
  %wide.trip.count497 = zext i32 %71 to i64
  %81 = shl nsw i64 %79, 3
  %82 = shl nsw i64 %20, 3
  %83 = getelementptr i8, ptr %10, i64 %81
  %84 = getelementptr i8, ptr %83, i64 %82
  %scevgep759 = getelementptr i8, ptr %84, i64 16
  %85 = shl nuw nsw i64 %wide.trip.count507, 3
  %86 = add nsw i64 %85, -8
  %87 = mul i64 %86, %79
  %88 = shl nuw nsw i64 %wide.trip.count497, 3
  %89 = getelementptr i8, ptr %10, i64 %87
  %90 = getelementptr i8, ptr %89, i64 %82
  %scevgep760 = getelementptr i8, ptr %90, i64 %88
  %91 = getelementptr i8, ptr %4, i64 %88
  %scevgep761 = getelementptr i8, ptr %91, i64 -16
  %92 = shl nsw i64 %80, 3
  %93 = shl nsw i64 %17, 3
  %94 = getelementptr i8, ptr %7, i64 %92
  %95 = getelementptr i8, ptr %94, i64 %93
  %scevgep762 = getelementptr i8, ptr %95, i64 8
  %96 = mul i64 %86, %80
  %97 = getelementptr i8, ptr %7, i64 %96
  %98 = getelementptr i8, ptr %97, i64 %93
  %99 = getelementptr i8, ptr %98, i64 %88
  %scevgep763 = getelementptr i8, ptr %99, i64 8
  %scevgep764 = getelementptr i8, ptr %5, i64 8
  %100 = add nsw i64 %88, -8
  %scevgep765 = getelementptr i8, ptr %5, i64 %100
  %scevgep766 = getelementptr i8, ptr %6, i64 8
  %scevgep767 = getelementptr i8, ptr %6, i64 %100
  %101 = add nsw i64 %wide.trip.count497, -2
  %min.iters.check790 = icmp ult i64 %101, 6
  %bound0768 = icmp ult ptr %scevgep759, %scevgep761
  %bound1769 = icmp ugt ptr %scevgep760, %4
  %found.conflict770 = and i1 %bound0768, %bound1769
  %stride.check771 = icmp slt i32 %19, 0
  %102 = or i1 %found.conflict770, %stride.check771
  %bound0772 = icmp ult ptr %scevgep759, %scevgep763
  %bound1773 = icmp ult ptr %scevgep762, %scevgep760
  %found.conflict774 = and i1 %bound0772, %bound1773
  %103 = or i32 %19, %16
  %104 = icmp slt i32 %103, 0
  %105 = or i1 %found.conflict774, %104
  %conflict.rdx777 = or i1 %102, %105
  %bound0778 = icmp ult ptr %scevgep759, %scevgep765
  %bound1779 = icmp ult ptr %scevgep764, %scevgep760
  %found.conflict780 = and i1 %bound0778, %bound1779
  %conflict.rdx782 = or i1 %found.conflict780, %conflict.rdx777
  %bound0783 = icmp ult ptr %scevgep759, %scevgep767
  %bound1784 = icmp ult ptr %scevgep766, %scevgep760
  %found.conflict785 = and i1 %bound0783, %bound1784
  %conflict.rdx787 = or i1 %found.conflict785, %conflict.rdx782
  %n.vec793 = and i64 %101, -2
  %ind.end794 = add nsw i64 %n.vec793, 2
  %cmp.n807 = icmp eq i64 %101, %n.vec793
  br label %.lr.ph428.split

.lr.ph428.split.us.preheader:                     ; preds = %.lr.ph428
  %106 = sext i32 %16 to i64
  %107 = sext i32 %19 to i64
  %108 = zext nneg i32 %69 to i64
  %min.iters.check824 = icmp ult i32 %69, 12
  br i1 %min.iters.check824, label %.lr.ph428.split.us.preheader927, label %vector.scevcheck808

vector.scevcheck808:                              ; preds = %.lr.ph428.split.us.preheader
  %ident.check809 = icmp ne i32 %19, 1
  %ident.check810 = icmp ne i32 %16, 1
  %109 = or i1 %ident.check809, %ident.check810
  br i1 %109, label %.lr.ph428.split.us.preheader927, label %vector.memcheck811

vector.memcheck811:                               ; preds = %vector.scevcheck808
  %110 = shl nuw nsw i64 %wide.trip.count507, 3
  %111 = add nsw i64 %110, -8
  %scevgep812 = getelementptr i8, ptr %10, i64 %111
  %scevgep813 = getelementptr i8, ptr %5, i64 8
  %scevgep814 = getelementptr i8, ptr %7, i64 %111
  %bound0815 = icmp ugt ptr %scevgep813, %10
  %bound1816 = icmp ugt ptr %scevgep812, %5
  %found.conflict817 = and i1 %bound0815, %bound1816
  %bound0818 = icmp ugt ptr %scevgep814, %10
  %bound1819 = icmp ugt ptr %scevgep812, %7
  %found.conflict820 = and i1 %bound0818, %bound1819
  %conflict.rdx821 = or i1 %found.conflict817, %found.conflict820
  br i1 %conflict.rdx821, label %.lr.ph428.split.us.preheader927, label %vector.ph825

vector.ph825:                                     ; preds = %vector.memcheck811
  %n.vec827 = and i64 %108, 2147483644
  %ind.end828 = or disjoint i64 %n.vec827, 1
  %112 = load double, ptr %5, align 8, !tbaa !9, !alias.scope !20
  %broadcast.splatinsert837 = insertelement <2 x double> poison, double %112, i64 0
  %broadcast.splat838 = shufflevector <2 x double> %broadcast.splatinsert837, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body830

vector.body830:                                   ; preds = %vector.body830, %vector.ph825
  %index831 = phi i64 [ 0, %vector.ph825 ], [ %index.next839, %vector.body830 ]
  %offset.idx832 = or disjoint i64 %index831, 1
  %113 = getelementptr double, ptr %invariant.gep435, i64 %offset.idx832
  %114 = getelementptr i8, ptr %113, i64 16
  %wide.load833 = load <2 x double>, ptr %113, align 8, !tbaa !9, !alias.scope !23
  %wide.load834 = load <2 x double>, ptr %114, align 8, !tbaa !9, !alias.scope !23
  %115 = getelementptr double, ptr %invariant.gep433, i64 %offset.idx832
  %116 = getelementptr i8, ptr %115, i64 16
  %wide.load835 = load <2 x double>, ptr %115, align 8, !tbaa !9, !alias.scope !25, !noalias !27
  %wide.load836 = load <2 x double>, ptr %116, align 8, !tbaa !9, !alias.scope !25, !noalias !27
  %117 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat838, <2 x double> %wide.load833, <2 x double> %wide.load835)
  %118 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat838, <2 x double> %wide.load834, <2 x double> %wide.load836)
  store <2 x double> %117, ptr %115, align 8, !tbaa !9, !alias.scope !25, !noalias !27
  store <2 x double> %118, ptr %116, align 8, !tbaa !9, !alias.scope !25, !noalias !27
  %index.next839 = add nuw i64 %index831, 4
  %119 = icmp eq i64 %index.next839, %n.vec827
  br i1 %119, label %middle.block822, label %vector.body830, !llvm.loop !28

middle.block822:                                  ; preds = %vector.body830
  %cmp.n840 = icmp eq i64 %n.vec827, %108
  br i1 %cmp.n840, label %.loopexit371, label %.lr.ph428.split.us.preheader927

.lr.ph428.split.us.preheader927:                  ; preds = %middle.block822, %vector.memcheck811, %vector.scevcheck808, %.lr.ph428.split.us.preheader
  %indvars.iv504.ph = phi i64 [ 1, %vector.memcheck811 ], [ 1, %vector.scevcheck808 ], [ 1, %.lr.ph428.split.us.preheader ], [ %ind.end828, %middle.block822 ]
  %120 = zext nneg i32 %69 to i64
  %121 = and i32 %69, 1
  %lcmp.mod945.not = icmp eq i32 %121, 0
  br i1 %lcmp.mod945.not, label %.lr.ph428.split.us.prol.loopexit, label %.lr.ph428.split.us.prol

.lr.ph428.split.us.prol:                          ; preds = %.lr.ph428.split.us.preheader927
  %122 = load double, ptr %5, align 8, !tbaa !9
  %123 = mul nsw i64 %indvars.iv504.ph, %106
  %gep422.us.prol = getelementptr double, ptr %invariant.gep435, i64 %123
  %124 = load double, ptr %gep422.us.prol, align 8, !tbaa !9
  %125 = mul nsw i64 %indvars.iv504.ph, %107
  %gep424.us.prol = getelementptr double, ptr %invariant.gep433, i64 %125
  %126 = load double, ptr %gep424.us.prol, align 8, !tbaa !9
  %127 = tail call double @llvm.fmuladd.f64(double %122, double %124, double %126)
  store double %127, ptr %gep424.us.prol, align 8, !tbaa !9
  %indvars.iv.next505.prol = add nuw nsw i64 %indvars.iv504.ph, 1
  br label %.lr.ph428.split.us.prol.loopexit

.lr.ph428.split.us.prol.loopexit:                 ; preds = %.lr.ph428.split.us.prol, %.lr.ph428.split.us.preheader927
  %indvars.iv504.unr = phi i64 [ %indvars.iv504.ph, %.lr.ph428.split.us.preheader927 ], [ %indvars.iv.next505.prol, %.lr.ph428.split.us.prol ]
  %128 = icmp eq i64 %indvars.iv504.ph, %120
  br i1 %128, label %.loopexit371, label %.lr.ph428.split.us

.lr.ph428.split.us:                               ; preds = %.lr.ph428.split.us.prol.loopexit, %.lr.ph428.split.us
  %indvars.iv504 = phi i64 [ %indvars.iv.next505.1, %.lr.ph428.split.us ], [ %indvars.iv504.unr, %.lr.ph428.split.us.prol.loopexit ]
  %129 = load double, ptr %5, align 8, !tbaa !9
  %130 = mul nsw i64 %indvars.iv504, %106
  %gep422.us = getelementptr double, ptr %invariant.gep435, i64 %130
  %131 = load double, ptr %gep422.us, align 8, !tbaa !9
  %132 = mul nsw i64 %indvars.iv504, %107
  %gep424.us = getelementptr double, ptr %invariant.gep433, i64 %132
  %133 = load double, ptr %gep424.us, align 8, !tbaa !9
  %134 = tail call double @llvm.fmuladd.f64(double %129, double %131, double %133)
  store double %134, ptr %gep424.us, align 8, !tbaa !9
  %indvars.iv.next505 = add nuw nsw i64 %indvars.iv504, 1
  %135 = load double, ptr %5, align 8, !tbaa !9
  %136 = mul nsw i64 %indvars.iv.next505, %106
  %gep422.us.1 = getelementptr double, ptr %invariant.gep435, i64 %136
  %137 = load double, ptr %gep422.us.1, align 8, !tbaa !9
  %138 = mul nsw i64 %indvars.iv.next505, %107
  %gep424.us.1 = getelementptr double, ptr %invariant.gep433, i64 %138
  %139 = load double, ptr %gep424.us.1, align 8, !tbaa !9
  %140 = tail call double @llvm.fmuladd.f64(double %135, double %137, double %139)
  store double %140, ptr %gep424.us.1, align 8, !tbaa !9
  %indvars.iv.next505.1 = add nuw nsw i64 %indvars.iv504, 2
  %exitcond508.not.1 = icmp eq i64 %indvars.iv.next505.1, %wide.trip.count507
  br i1 %exitcond508.not.1, label %.loopexit371, label %.lr.ph428.split.us, !llvm.loop !29

.lr.ph428.split:                                  ; preds = %.lr.ph428.split.preheader, %.loopexit372
  %indvars.iv499 = phi i64 [ 1, %.lr.ph428.split.preheader ], [ %indvars.iv.next500, %.loopexit372 ]
  %141 = mul nsw i64 %indvars.iv499, %79
  %gep420 = getelementptr double, ptr %invariant.gep433, i64 %141
  %142 = load double, ptr %gep420, align 8, !tbaa !9
  %143 = load double, ptr %5, align 8, !tbaa !9
  %144 = mul nsw i64 %indvars.iv499, %80
  %145 = getelementptr double, ptr %18, i64 %144
  %146 = getelementptr i8, ptr %145, i64 8
  %147 = load double, ptr %146, align 8, !tbaa !9
  %148 = tail call double @llvm.fmuladd.f64(double %143, double %147, double %142)
  %149 = load double, ptr %6, align 8, !tbaa !9
  %150 = getelementptr i8, ptr %145, i64 16
  %151 = load double, ptr %150, align 8, !tbaa !9
  %152 = tail call double @llvm.fmuladd.f64(double %149, double %151, double %148)
  store double %152, ptr %gep420, align 8, !tbaa !9
  %gep571 = getelementptr double, ptr %invariant.gep570, i64 %141
  %153 = load double, ptr %gep571, align 8, !tbaa !9
  %154 = load double, ptr %75, align 8, !tbaa !9
  %gep573 = getelementptr double, ptr %invariant.gep572, i64 %144
  %155 = load double, ptr %gep573, align 8, !tbaa !9
  %156 = tail call double @llvm.fmuladd.f64(double %154, double %155, double %153)
  %157 = load double, ptr %77, align 8, !tbaa !9
  %gep575 = getelementptr double, ptr %invariant.gep574, i64 %144
  %158 = load double, ptr %gep575, align 8, !tbaa !9
  %159 = tail call double @llvm.fmuladd.f64(double %157, double %158, double %156)
  store double %159, ptr %gep571, align 8, !tbaa !9
  br i1 %.not369.not415, label %.lr.ph418.preheader, label %.loopexit372

.lr.ph418.preheader:                              ; preds = %.lr.ph428.split
  %invariant.gep562 = getelementptr double, ptr %21, i64 %141
  %invariant.gep564 = getelementptr double, ptr %18, i64 %144
  %invariant.gep566 = getelementptr double, ptr %18, i64 %144
  %invariant.gep568 = getelementptr double, ptr %18, i64 %144
  %brmerge = select i1 %min.iters.check790, i1 true, i1 %conflict.rdx787
  br i1 %brmerge, label %.lr.ph418.preheader929, label %vector.ph791

vector.ph791:                                     ; preds = %.lr.ph418.preheader
  %invariant.gep951 = getelementptr i8, ptr %invariant.gep568, i64 24
  br label %vector.body796

vector.body796:                                   ; preds = %vector.body796, %vector.ph791
  %index797 = phi i64 [ 0, %vector.ph791 ], [ %index.next806, %vector.body796 ]
  %offset.idx798 = add i64 %index797, 2
  %160 = getelementptr double, ptr %invariant.gep562, i64 %offset.idx798
  %wide.load799 = load <2 x double>, ptr %160, align 8, !tbaa !9, !alias.scope !30, !noalias !33
  %161 = or disjoint i64 %index797, 1
  %162 = getelementptr double, ptr %4, i64 %index797
  %wide.load800 = load <2 x double>, ptr %162, align 8, !tbaa !9, !alias.scope !38
  %163 = getelementptr double, ptr %invariant.gep564, i64 %161
  %wide.load801 = load <2 x double>, ptr %163, align 8, !tbaa !9, !alias.scope !39
  %164 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load800, <2 x double> %wide.load801, <2 x double> %wide.load799)
  %165 = getelementptr inbounds double, ptr %14, i64 %offset.idx798
  %wide.load802 = load <2 x double>, ptr %165, align 8, !tbaa !9, !alias.scope !40
  %166 = getelementptr double, ptr %invariant.gep566, i64 %offset.idx798
  %wide.load803 = load <2 x double>, ptr %166, align 8, !tbaa !9, !alias.scope !39
  %167 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load802, <2 x double> %wide.load803, <2 x double> %164)
  %168 = getelementptr inbounds double, ptr %15, i64 %offset.idx798
  %wide.load804 = load <2 x double>, ptr %168, align 8, !tbaa !9, !alias.scope !41
  %gep952 = getelementptr double, ptr %invariant.gep951, i64 %index797
  %wide.load805 = load <2 x double>, ptr %gep952, align 8, !tbaa !9, !alias.scope !39
  %169 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load804, <2 x double> %wide.load805, <2 x double> %167)
  store <2 x double> %169, ptr %160, align 8, !tbaa !9, !alias.scope !30, !noalias !33
  %index.next806 = add nuw i64 %index797, 2
  %170 = icmp eq i64 %index.next806, %n.vec793
  br i1 %170, label %middle.block788, label %vector.body796, !llvm.loop !42

middle.block788:                                  ; preds = %vector.body796
  br i1 %cmp.n807, label %.loopexit372, label %.lr.ph418.preheader929

.lr.ph418.preheader929:                           ; preds = %.lr.ph418.preheader, %middle.block788
  %indvars.iv494.ph = phi i64 [ 2, %.lr.ph418.preheader ], [ %ind.end794, %middle.block788 ]
  br label %.lr.ph418

.lr.ph418:                                        ; preds = %.lr.ph418.preheader929, %.lr.ph418
  %indvars.iv494 = phi i64 [ %indvars.iv.next495, %.lr.ph418 ], [ %indvars.iv494.ph, %.lr.ph418.preheader929 ]
  %gep563 = getelementptr double, ptr %invariant.gep562, i64 %indvars.iv494
  %171 = load double, ptr %gep563, align 8, !tbaa !9
  %172 = add nsw i64 %indvars.iv494, -1
  %173 = getelementptr inbounds double, ptr %13, i64 %172
  %174 = load double, ptr %173, align 8, !tbaa !9
  %gep565 = getelementptr double, ptr %invariant.gep564, i64 %172
  %175 = load double, ptr %gep565, align 8, !tbaa !9
  %176 = tail call double @llvm.fmuladd.f64(double %174, double %175, double %171)
  %177 = getelementptr inbounds double, ptr %14, i64 %indvars.iv494
  %178 = load double, ptr %177, align 8, !tbaa !9
  %gep567 = getelementptr double, ptr %invariant.gep566, i64 %indvars.iv494
  %179 = load double, ptr %gep567, align 8, !tbaa !9
  %180 = tail call double @llvm.fmuladd.f64(double %178, double %179, double %176)
  %181 = getelementptr inbounds double, ptr %15, i64 %indvars.iv494
  %182 = load double, ptr %181, align 8, !tbaa !9
  %indvars.iv.next495 = add nuw nsw i64 %indvars.iv494, 1
  %gep569 = getelementptr double, ptr %invariant.gep568, i64 %indvars.iv.next495
  %183 = load double, ptr %gep569, align 8, !tbaa !9
  %184 = tail call double @llvm.fmuladd.f64(double %182, double %183, double %180)
  store double %184, ptr %gep563, align 8, !tbaa !9
  %exitcond498.not = icmp eq i64 %indvars.iv.next495, %wide.trip.count497
  br i1 %exitcond498.not, label %.loopexit372, label %.lr.ph418, !llvm.loop !43

.loopexit372:                                     ; preds = %.lr.ph418, %middle.block788, %.lr.ph428.split
  %indvars.iv.next500 = add nuw nsw i64 %indvars.iv499, 1
  %exitcond503.not = icmp eq i64 %indvars.iv.next500, %wide.trip.count507
  br i1 %exitcond503.not, label %.loopexit371, label %.lr.ph428.split, !llvm.loop !44

185:                                              ; preds = %67
  br i1 %.not366439, label %.loopexit371, label %.lr.ph442

.lr.ph442:                                        ; preds = %185
  %186 = load i32, ptr %1, align 4, !tbaa !5
  %187 = icmp eq i32 %186, 1
  %188 = add nsw i32 %186, -1
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds double, ptr %15, i64 %189
  %191 = sext i32 %186 to i64
  %192 = getelementptr inbounds double, ptr %14, i64 %191
  %.not367.not429 = icmp sgt i32 %186, 2
  %193 = add nuw i32 %69, 1
  %wide.trip.count522 = zext i32 %193 to i64
  br i1 %187, label %.lr.ph442.split.us.preheader, label %.lr.ph442.split.preheader

.lr.ph442.split.preheader:                        ; preds = %.lr.ph442
  %194 = sext i32 %19 to i64
  %195 = sext i32 %16 to i64
  %invariant.gep584 = getelementptr double, ptr %21, i64 %191
  %invariant.gep586 = getelementptr double, ptr %18, i64 %189
  %invariant.gep588 = getelementptr double, ptr %18, i64 %191
  %wide.trip.count512 = zext i32 %186 to i64
  %196 = shl nsw i64 %194, 3
  %197 = shl nsw i64 %20, 3
  %198 = getelementptr i8, ptr %10, i64 %196
  %199 = getelementptr i8, ptr %198, i64 %197
  %scevgep842 = getelementptr i8, ptr %199, i64 16
  %200 = shl nuw nsw i64 %wide.trip.count522, 3
  %201 = add nsw i64 %200, -8
  %202 = mul i64 %201, %194
  %203 = shl nuw nsw i64 %wide.trip.count512, 3
  %204 = getelementptr i8, ptr %10, i64 %202
  %205 = getelementptr i8, ptr %204, i64 %197
  %scevgep843 = getelementptr i8, ptr %205, i64 %203
  %206 = getelementptr i8, ptr %6, i64 %203
  %scevgep844 = getelementptr i8, ptr %206, i64 -16
  %207 = shl nsw i64 %195, 3
  %208 = shl nsw i64 %17, 3
  %209 = getelementptr i8, ptr %7, i64 %207
  %210 = getelementptr i8, ptr %209, i64 %208
  %scevgep845 = getelementptr i8, ptr %210, i64 8
  %211 = mul i64 %201, %195
  %212 = getelementptr i8, ptr %7, i64 %211
  %213 = getelementptr i8, ptr %212, i64 %208
  %214 = getelementptr i8, ptr %213, i64 %203
  %scevgep846 = getelementptr i8, ptr %214, i64 8
  %scevgep847 = getelementptr i8, ptr %5, i64 8
  %215 = add nsw i64 %203, -8
  %scevgep848 = getelementptr i8, ptr %5, i64 %215
  %scevgep849 = getelementptr i8, ptr %4, i64 8
  %scevgep850 = getelementptr i8, ptr %4, i64 %215
  %216 = add nsw i64 %wide.trip.count512, -2
  %min.iters.check873 = icmp ult i64 %216, 6
  %bound0851 = icmp ult ptr %scevgep842, %scevgep844
  %bound1852 = icmp ugt ptr %scevgep843, %6
  %found.conflict853 = and i1 %bound0851, %bound1852
  %stride.check854 = icmp slt i32 %19, 0
  %217 = or i1 %found.conflict853, %stride.check854
  %bound0855 = icmp ult ptr %scevgep842, %scevgep846
  %bound1856 = icmp ult ptr %scevgep845, %scevgep843
  %found.conflict857 = and i1 %bound0855, %bound1856
  %218 = or i32 %19, %16
  %219 = icmp slt i32 %218, 0
  %220 = or i1 %found.conflict857, %219
  %conflict.rdx860 = or i1 %217, %220
  %bound0861 = icmp ult ptr %scevgep842, %scevgep848
  %bound1862 = icmp ult ptr %scevgep847, %scevgep843
  %found.conflict863 = and i1 %bound0861, %bound1862
  %conflict.rdx865 = or i1 %found.conflict863, %conflict.rdx860
  %bound0866 = icmp ult ptr %scevgep842, %scevgep850
  %bound1867 = icmp ult ptr %scevgep849, %scevgep843
  %found.conflict868 = and i1 %bound0866, %bound1867
  %conflict.rdx870 = or i1 %found.conflict868, %conflict.rdx865
  %n.vec876 = and i64 %216, -2
  %ind.end877 = add nsw i64 %n.vec876, 2
  %cmp.n890 = icmp eq i64 %216, %n.vec876
  br label %.lr.ph442.split

.lr.ph442.split.us.preheader:                     ; preds = %.lr.ph442
  %221 = sext i32 %16 to i64
  %222 = sext i32 %19 to i64
  %223 = zext nneg i32 %69 to i64
  %min.iters.check907 = icmp ult i32 %69, 12
  br i1 %min.iters.check907, label %.lr.ph442.split.us.preheader924, label %vector.scevcheck891

vector.scevcheck891:                              ; preds = %.lr.ph442.split.us.preheader
  %ident.check892 = icmp ne i32 %19, 1
  %ident.check893 = icmp ne i32 %16, 1
  %224 = or i1 %ident.check892, %ident.check893
  br i1 %224, label %.lr.ph442.split.us.preheader924, label %vector.memcheck894

vector.memcheck894:                               ; preds = %vector.scevcheck891
  %225 = shl nuw nsw i64 %wide.trip.count522, 3
  %226 = add nsw i64 %225, -8
  %scevgep895 = getelementptr i8, ptr %10, i64 %226
  %scevgep896 = getelementptr i8, ptr %5, i64 8
  %scevgep897 = getelementptr i8, ptr %7, i64 %226
  %bound0898 = icmp ugt ptr %scevgep896, %10
  %bound1899 = icmp ugt ptr %scevgep895, %5
  %found.conflict900 = and i1 %bound0898, %bound1899
  %bound0901 = icmp ugt ptr %scevgep897, %10
  %bound1902 = icmp ugt ptr %scevgep895, %7
  %found.conflict903 = and i1 %bound0901, %bound1902
  %conflict.rdx904 = or i1 %found.conflict900, %found.conflict903
  br i1 %conflict.rdx904, label %.lr.ph442.split.us.preheader924, label %vector.ph908

vector.ph908:                                     ; preds = %vector.memcheck894
  %n.vec910 = and i64 %223, 2147483644
  %ind.end911 = or disjoint i64 %n.vec910, 1
  %227 = load double, ptr %5, align 8, !tbaa !9, !alias.scope !45
  %broadcast.splatinsert920 = insertelement <2 x double> poison, double %227, i64 0
  %broadcast.splat921 = shufflevector <2 x double> %broadcast.splatinsert920, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body913

vector.body913:                                   ; preds = %vector.body913, %vector.ph908
  %index914 = phi i64 [ 0, %vector.ph908 ], [ %index.next922, %vector.body913 ]
  %offset.idx915 = or disjoint i64 %index914, 1
  %228 = getelementptr double, ptr %invariant.gep435, i64 %offset.idx915
  %229 = getelementptr i8, ptr %228, i64 16
  %wide.load916 = load <2 x double>, ptr %228, align 8, !tbaa !9, !alias.scope !48
  %wide.load917 = load <2 x double>, ptr %229, align 8, !tbaa !9, !alias.scope !48
  %230 = getelementptr double, ptr %invariant.gep433, i64 %offset.idx915
  %231 = getelementptr i8, ptr %230, i64 16
  %wide.load918 = load <2 x double>, ptr %230, align 8, !tbaa !9, !alias.scope !50, !noalias !52
  %wide.load919 = load <2 x double>, ptr %231, align 8, !tbaa !9, !alias.scope !50, !noalias !52
  %232 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat921, <2 x double> %wide.load916, <2 x double> %wide.load918)
  %233 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat921, <2 x double> %wide.load917, <2 x double> %wide.load919)
  store <2 x double> %232, ptr %230, align 8, !tbaa !9, !alias.scope !50, !noalias !52
  store <2 x double> %233, ptr %231, align 8, !tbaa !9, !alias.scope !50, !noalias !52
  %index.next922 = add nuw i64 %index914, 4
  %234 = icmp eq i64 %index.next922, %n.vec910
  br i1 %234, label %middle.block905, label %vector.body913, !llvm.loop !53

middle.block905:                                  ; preds = %vector.body913
  %cmp.n923 = icmp eq i64 %n.vec910, %223
  br i1 %cmp.n923, label %.loopexit371, label %.lr.ph442.split.us.preheader924

.lr.ph442.split.us.preheader924:                  ; preds = %middle.block905, %vector.memcheck894, %vector.scevcheck891, %.lr.ph442.split.us.preheader
  %indvars.iv519.ph = phi i64 [ 1, %vector.memcheck894 ], [ 1, %vector.scevcheck891 ], [ 1, %.lr.ph442.split.us.preheader ], [ %ind.end911, %middle.block905 ]
  %235 = zext nneg i32 %69 to i64
  %236 = and i32 %69, 1
  %lcmp.mod947.not = icmp eq i32 %236, 0
  br i1 %lcmp.mod947.not, label %.lr.ph442.split.us.prol.loopexit, label %.lr.ph442.split.us.prol

.lr.ph442.split.us.prol:                          ; preds = %.lr.ph442.split.us.preheader924
  %237 = load double, ptr %5, align 8, !tbaa !9
  %238 = mul nsw i64 %indvars.iv519.ph, %221
  %gep436.us.prol = getelementptr double, ptr %invariant.gep435, i64 %238
  %239 = load double, ptr %gep436.us.prol, align 8, !tbaa !9
  %240 = mul nsw i64 %indvars.iv519.ph, %222
  %gep438.us.prol = getelementptr double, ptr %invariant.gep433, i64 %240
  %241 = load double, ptr %gep438.us.prol, align 8, !tbaa !9
  %242 = tail call double @llvm.fmuladd.f64(double %237, double %239, double %241)
  store double %242, ptr %gep438.us.prol, align 8, !tbaa !9
  %indvars.iv.next520.prol = add nuw nsw i64 %indvars.iv519.ph, 1
  br label %.lr.ph442.split.us.prol.loopexit

.lr.ph442.split.us.prol.loopexit:                 ; preds = %.lr.ph442.split.us.prol, %.lr.ph442.split.us.preheader924
  %indvars.iv519.unr = phi i64 [ %indvars.iv519.ph, %.lr.ph442.split.us.preheader924 ], [ %indvars.iv.next520.prol, %.lr.ph442.split.us.prol ]
  %243 = icmp eq i64 %indvars.iv519.ph, %235
  br i1 %243, label %.loopexit371, label %.lr.ph442.split.us

.lr.ph442.split.us:                               ; preds = %.lr.ph442.split.us.prol.loopexit, %.lr.ph442.split.us
  %indvars.iv519 = phi i64 [ %indvars.iv.next520.1, %.lr.ph442.split.us ], [ %indvars.iv519.unr, %.lr.ph442.split.us.prol.loopexit ]
  %244 = load double, ptr %5, align 8, !tbaa !9
  %245 = mul nsw i64 %indvars.iv519, %221
  %gep436.us = getelementptr double, ptr %invariant.gep435, i64 %245
  %246 = load double, ptr %gep436.us, align 8, !tbaa !9
  %247 = mul nsw i64 %indvars.iv519, %222
  %gep438.us = getelementptr double, ptr %invariant.gep433, i64 %247
  %248 = load double, ptr %gep438.us, align 8, !tbaa !9
  %249 = tail call double @llvm.fmuladd.f64(double %244, double %246, double %248)
  store double %249, ptr %gep438.us, align 8, !tbaa !9
  %indvars.iv.next520 = add nuw nsw i64 %indvars.iv519, 1
  %250 = load double, ptr %5, align 8, !tbaa !9
  %251 = mul nsw i64 %indvars.iv.next520, %221
  %gep436.us.1 = getelementptr double, ptr %invariant.gep435, i64 %251
  %252 = load double, ptr %gep436.us.1, align 8, !tbaa !9
  %253 = mul nsw i64 %indvars.iv.next520, %222
  %gep438.us.1 = getelementptr double, ptr %invariant.gep433, i64 %253
  %254 = load double, ptr %gep438.us.1, align 8, !tbaa !9
  %255 = tail call double @llvm.fmuladd.f64(double %250, double %252, double %254)
  store double %255, ptr %gep438.us.1, align 8, !tbaa !9
  %indvars.iv.next520.1 = add nuw nsw i64 %indvars.iv519, 2
  %exitcond523.not.1 = icmp eq i64 %indvars.iv.next520.1, %wide.trip.count522
  br i1 %exitcond523.not.1, label %.loopexit371, label %.lr.ph442.split.us, !llvm.loop !54

.lr.ph442.split:                                  ; preds = %.lr.ph442.split.preheader, %.loopexit
  %indvars.iv514 = phi i64 [ 1, %.lr.ph442.split.preheader ], [ %indvars.iv.next515, %.loopexit ]
  %256 = mul nsw i64 %indvars.iv514, %194
  %gep434 = getelementptr double, ptr %invariant.gep433, i64 %256
  %257 = load double, ptr %gep434, align 8, !tbaa !9
  %258 = load double, ptr %5, align 8, !tbaa !9
  %259 = mul nsw i64 %indvars.iv514, %195
  %260 = getelementptr double, ptr %18, i64 %259
  %261 = getelementptr i8, ptr %260, i64 8
  %262 = load double, ptr %261, align 8, !tbaa !9
  %263 = tail call double @llvm.fmuladd.f64(double %258, double %262, double %257)
  %264 = load double, ptr %4, align 8, !tbaa !9
  %265 = getelementptr i8, ptr %260, i64 16
  %266 = load double, ptr %265, align 8, !tbaa !9
  %267 = tail call double @llvm.fmuladd.f64(double %264, double %266, double %263)
  store double %267, ptr %gep434, align 8, !tbaa !9
  %gep585 = getelementptr double, ptr %invariant.gep584, i64 %256
  %268 = load double, ptr %gep585, align 8, !tbaa !9
  %269 = load double, ptr %190, align 8, !tbaa !9
  %gep587 = getelementptr double, ptr %invariant.gep586, i64 %259
  %270 = load double, ptr %gep587, align 8, !tbaa !9
  %271 = tail call double @llvm.fmuladd.f64(double %269, double %270, double %268)
  %272 = load double, ptr %192, align 8, !tbaa !9
  %gep589 = getelementptr double, ptr %invariant.gep588, i64 %259
  %273 = load double, ptr %gep589, align 8, !tbaa !9
  %274 = tail call double @llvm.fmuladd.f64(double %272, double %273, double %271)
  store double %274, ptr %gep585, align 8, !tbaa !9
  br i1 %.not367.not429, label %.lr.ph432.preheader, label %.loopexit

.lr.ph432.preheader:                              ; preds = %.lr.ph442.split
  %invariant.gep576 = getelementptr double, ptr %21, i64 %256
  %invariant.gep578 = getelementptr double, ptr %18, i64 %259
  %invariant.gep580 = getelementptr double, ptr %18, i64 %259
  %invariant.gep582 = getelementptr double, ptr %18, i64 %259
  %brmerge955 = select i1 %min.iters.check873, i1 true, i1 %conflict.rdx870
  br i1 %brmerge955, label %.lr.ph432.preheader925, label %vector.ph874

vector.ph874:                                     ; preds = %.lr.ph432.preheader
  %invariant.gep953 = getelementptr i8, ptr %invariant.gep582, i64 24
  br label %vector.body879

vector.body879:                                   ; preds = %vector.body879, %vector.ph874
  %index880 = phi i64 [ 0, %vector.ph874 ], [ %index.next889, %vector.body879 ]
  %offset.idx881 = add i64 %index880, 2
  %275 = getelementptr double, ptr %invariant.gep576, i64 %offset.idx881
  %wide.load882 = load <2 x double>, ptr %275, align 8, !tbaa !9, !alias.scope !55, !noalias !58
  %276 = or disjoint i64 %index880, 1
  %277 = getelementptr double, ptr %6, i64 %index880
  %wide.load883 = load <2 x double>, ptr %277, align 8, !tbaa !9, !alias.scope !63
  %278 = getelementptr double, ptr %invariant.gep578, i64 %276
  %wide.load884 = load <2 x double>, ptr %278, align 8, !tbaa !9, !alias.scope !64
  %279 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load883, <2 x double> %wide.load884, <2 x double> %wide.load882)
  %280 = getelementptr inbounds double, ptr %14, i64 %offset.idx881
  %wide.load885 = load <2 x double>, ptr %280, align 8, !tbaa !9, !alias.scope !65
  %281 = getelementptr double, ptr %invariant.gep580, i64 %offset.idx881
  %wide.load886 = load <2 x double>, ptr %281, align 8, !tbaa !9, !alias.scope !64
  %282 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load885, <2 x double> %wide.load886, <2 x double> %279)
  %283 = getelementptr inbounds double, ptr %13, i64 %offset.idx881
  %wide.load887 = load <2 x double>, ptr %283, align 8, !tbaa !9, !alias.scope !66
  %gep954 = getelementptr double, ptr %invariant.gep953, i64 %index880
  %wide.load888 = load <2 x double>, ptr %gep954, align 8, !tbaa !9, !alias.scope !64
  %284 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load887, <2 x double> %wide.load888, <2 x double> %282)
  store <2 x double> %284, ptr %275, align 8, !tbaa !9, !alias.scope !55, !noalias !58
  %index.next889 = add nuw i64 %index880, 2
  %285 = icmp eq i64 %index.next889, %n.vec876
  br i1 %285, label %middle.block871, label %vector.body879, !llvm.loop !67

middle.block871:                                  ; preds = %vector.body879
  br i1 %cmp.n890, label %.loopexit, label %.lr.ph432.preheader925

.lr.ph432.preheader925:                           ; preds = %.lr.ph432.preheader, %middle.block871
  %indvars.iv509.ph = phi i64 [ 2, %.lr.ph432.preheader ], [ %ind.end877, %middle.block871 ]
  br label %.lr.ph432

.lr.ph432:                                        ; preds = %.lr.ph432.preheader925, %.lr.ph432
  %indvars.iv509 = phi i64 [ %indvars.iv.next510, %.lr.ph432 ], [ %indvars.iv509.ph, %.lr.ph432.preheader925 ]
  %gep577 = getelementptr double, ptr %invariant.gep576, i64 %indvars.iv509
  %286 = load double, ptr %gep577, align 8, !tbaa !9
  %287 = add nsw i64 %indvars.iv509, -1
  %288 = getelementptr inbounds double, ptr %15, i64 %287
  %289 = load double, ptr %288, align 8, !tbaa !9
  %gep579 = getelementptr double, ptr %invariant.gep578, i64 %287
  %290 = load double, ptr %gep579, align 8, !tbaa !9
  %291 = tail call double @llvm.fmuladd.f64(double %289, double %290, double %286)
  %292 = getelementptr inbounds double, ptr %14, i64 %indvars.iv509
  %293 = load double, ptr %292, align 8, !tbaa !9
  %gep581 = getelementptr double, ptr %invariant.gep580, i64 %indvars.iv509
  %294 = load double, ptr %gep581, align 8, !tbaa !9
  %295 = tail call double @llvm.fmuladd.f64(double %293, double %294, double %291)
  %296 = getelementptr inbounds double, ptr %13, i64 %indvars.iv509
  %297 = load double, ptr %296, align 8, !tbaa !9
  %indvars.iv.next510 = add nuw nsw i64 %indvars.iv509, 1
  %gep583 = getelementptr double, ptr %invariant.gep582, i64 %indvars.iv.next510
  %298 = load double, ptr %gep583, align 8, !tbaa !9
  %299 = tail call double @llvm.fmuladd.f64(double %297, double %298, double %295)
  store double %299, ptr %gep577, align 8, !tbaa !9
  %exitcond513.not = icmp eq i64 %indvars.iv.next510, %wide.trip.count512
  br i1 %exitcond513.not, label %.loopexit, label %.lr.ph432, !llvm.loop !68

.loopexit:                                        ; preds = %.lr.ph432, %middle.block871, %.lr.ph442.split
  %indvars.iv.next515 = add nuw nsw i64 %indvars.iv514, 1
  %exitcond518.not = icmp eq i64 %indvars.iv.next515, %wide.trip.count522
  br i1 %exitcond518.not, label %.loopexit371, label %.lr.ph442.split, !llvm.loop !69

300:                                              ; preds = %.loopexit378
  %301 = fcmp oeq double %65, -1.000000e+00
  br i1 %301, label %302, label %.loopexit371

302:                                              ; preds = %300
  %303 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not360 = icmp eq i32 %303, 0
  %304 = load i32, ptr %2, align 4, !tbaa !5
  %invariant.gep405 = getelementptr i8, ptr %21, i64 8
  %invariant.gep407 = getelementptr i8, ptr %18, i64 8
  %.not361411 = icmp slt i32 %304, 1
  br i1 %.not360, label %435, label %305

305:                                              ; preds = %302
  br i1 %.not361411, label %.loopexit371, label %.lr.ph400

.lr.ph400:                                        ; preds = %305
  %306 = load i32, ptr %1, align 4, !tbaa !5
  %307 = icmp eq i32 %306, 1
  %308 = add nsw i32 %306, -1
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds double, ptr %13, i64 %309
  %311 = sext i32 %306 to i64
  %312 = getelementptr inbounds double, ptr %14, i64 %311
  %.not364.not390 = icmp sgt i32 %306, 2
  %313 = add nuw i32 %304, 1
  %wide.trip.count477 = zext i32 %313 to i64
  br i1 %307, label %.lr.ph400.split.us.preheader, label %.lr.ph400.split.preheader

.lr.ph400.split.preheader:                        ; preds = %.lr.ph400
  %314 = sext i32 %19 to i64
  %315 = sext i32 %16 to i64
  %invariant.gep542 = getelementptr double, ptr %21, i64 %311
  %invariant.gep544 = getelementptr double, ptr %18, i64 %309
  %invariant.gep546 = getelementptr double, ptr %18, i64 %311
  %wide.trip.count467 = zext i32 %306 to i64
  %316 = shl nsw i64 %314, 3
  %317 = shl nsw i64 %20, 3
  %318 = getelementptr i8, ptr %10, i64 %316
  %319 = getelementptr i8, ptr %318, i64 %317
  %scevgep600 = getelementptr i8, ptr %319, i64 16
  %320 = shl nuw nsw i64 %wide.trip.count477, 3
  %321 = add nsw i64 %320, -8
  %322 = mul i64 %321, %314
  %323 = shl nuw nsw i64 %wide.trip.count467, 3
  %324 = getelementptr i8, ptr %10, i64 %322
  %325 = getelementptr i8, ptr %324, i64 %317
  %scevgep601 = getelementptr i8, ptr %325, i64 %323
  %326 = getelementptr i8, ptr %4, i64 %323
  %scevgep602 = getelementptr i8, ptr %326, i64 -16
  %327 = shl nsw i64 %315, 3
  %328 = shl nsw i64 %17, 3
  %329 = getelementptr i8, ptr %7, i64 %327
  %330 = getelementptr i8, ptr %329, i64 %328
  %scevgep603 = getelementptr i8, ptr %330, i64 8
  %331 = mul i64 %321, %315
  %332 = getelementptr i8, ptr %7, i64 %331
  %333 = getelementptr i8, ptr %332, i64 %328
  %334 = getelementptr i8, ptr %333, i64 %323
  %scevgep604 = getelementptr i8, ptr %334, i64 8
  %scevgep605 = getelementptr i8, ptr %5, i64 8
  %335 = add nsw i64 %323, -8
  %scevgep606 = getelementptr i8, ptr %5, i64 %335
  %scevgep607 = getelementptr i8, ptr %6, i64 8
  %scevgep608 = getelementptr i8, ptr %6, i64 %335
  %336 = add nsw i64 %wide.trip.count467, -2
  %min.iters.check626 = icmp ult i64 %336, 6
  %bound0 = icmp ult ptr %scevgep600, %scevgep602
  %bound1 = icmp ugt ptr %scevgep601, %4
  %found.conflict = and i1 %bound0, %bound1
  %stride.check = icmp slt i32 %19, 0
  %337 = or i1 %found.conflict, %stride.check
  %bound0609 = icmp ult ptr %scevgep600, %scevgep604
  %bound1610 = icmp ult ptr %scevgep603, %scevgep601
  %found.conflict611 = and i1 %bound0609, %bound1610
  %338 = or i32 %19, %16
  %339 = icmp slt i32 %338, 0
  %340 = or i1 %found.conflict611, %339
  %conflict.rdx = or i1 %337, %340
  %bound0614 = icmp ult ptr %scevgep600, %scevgep606
  %bound1615 = icmp ult ptr %scevgep605, %scevgep601
  %found.conflict616 = and i1 %bound0614, %bound1615
  %conflict.rdx618 = or i1 %found.conflict616, %conflict.rdx
  %bound0619 = icmp ult ptr %scevgep600, %scevgep608
  %bound1620 = icmp ult ptr %scevgep607, %scevgep601
  %found.conflict621 = and i1 %bound0619, %bound1620
  %conflict.rdx623 = or i1 %found.conflict621, %conflict.rdx618
  %n.vec629 = and i64 %336, -2
  %ind.end630 = add nsw i64 %n.vec629, 2
  %cmp.n643 = icmp eq i64 %336, %n.vec629
  br label %.lr.ph400.split

.lr.ph400.split.us.preheader:                     ; preds = %.lr.ph400
  %341 = sext i32 %16 to i64
  %342 = sext i32 %19 to i64
  %343 = zext nneg i32 %304 to i64
  %min.iters.check658 = icmp ult i32 %304, 12
  br i1 %min.iters.check658, label %.lr.ph400.split.us.preheader935, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph400.split.us.preheader
  %ident.check = icmp ne i32 %19, 1
  %ident.check644 = icmp ne i32 %16, 1
  %344 = or i1 %ident.check, %ident.check644
  br i1 %344, label %.lr.ph400.split.us.preheader935, label %vector.memcheck645

vector.memcheck645:                               ; preds = %vector.scevcheck
  %345 = shl nuw nsw i64 %wide.trip.count477, 3
  %346 = add nsw i64 %345, -8
  %scevgep646 = getelementptr i8, ptr %10, i64 %346
  %scevgep647 = getelementptr i8, ptr %5, i64 8
  %scevgep648 = getelementptr i8, ptr %7, i64 %346
  %bound0649 = icmp ugt ptr %scevgep647, %10
  %bound1650 = icmp ugt ptr %scevgep646, %5
  %found.conflict651 = and i1 %bound0649, %bound1650
  %bound0652 = icmp ugt ptr %scevgep648, %10
  %bound1653 = icmp ugt ptr %scevgep646, %7
  %found.conflict654 = and i1 %bound0652, %bound1653
  %conflict.rdx655 = or i1 %found.conflict651, %found.conflict654
  br i1 %conflict.rdx655, label %.lr.ph400.split.us.preheader935, label %vector.ph659

vector.ph659:                                     ; preds = %vector.memcheck645
  %n.vec661 = and i64 %343, 2147483644
  %ind.end662 = or disjoint i64 %n.vec661, 1
  %347 = load double, ptr %5, align 8, !tbaa !9, !alias.scope !70
  %broadcast.splatinsert671 = insertelement <2 x double> poison, double %347, i64 0
  %broadcast.splat672 = shufflevector <2 x double> %broadcast.splatinsert671, <2 x double> poison, <2 x i32> zeroinitializer
  %348 = fneg <2 x double> %broadcast.splat672
  %349 = fneg <2 x double> %broadcast.splat672
  br label %vector.body664

vector.body664:                                   ; preds = %vector.body664, %vector.ph659
  %index665 = phi i64 [ 0, %vector.ph659 ], [ %index.next673, %vector.body664 ]
  %offset.idx666 = or disjoint i64 %index665, 1
  %350 = getelementptr double, ptr %invariant.gep407, i64 %offset.idx666
  %351 = getelementptr i8, ptr %350, i64 16
  %wide.load667 = load <2 x double>, ptr %350, align 8, !tbaa !9, !alias.scope !73
  %wide.load668 = load <2 x double>, ptr %351, align 8, !tbaa !9, !alias.scope !73
  %352 = getelementptr double, ptr %invariant.gep405, i64 %offset.idx666
  %353 = getelementptr i8, ptr %352, i64 16
  %wide.load669 = load <2 x double>, ptr %352, align 8, !tbaa !9, !alias.scope !75, !noalias !77
  %wide.load670 = load <2 x double>, ptr %353, align 8, !tbaa !9, !alias.scope !75, !noalias !77
  %354 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %348, <2 x double> %wide.load667, <2 x double> %wide.load669)
  %355 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %349, <2 x double> %wide.load668, <2 x double> %wide.load670)
  store <2 x double> %354, ptr %352, align 8, !tbaa !9, !alias.scope !75, !noalias !77
  store <2 x double> %355, ptr %353, align 8, !tbaa !9, !alias.scope !75, !noalias !77
  %index.next673 = add nuw i64 %index665, 4
  %356 = icmp eq i64 %index.next673, %n.vec661
  br i1 %356, label %middle.block656, label %vector.body664, !llvm.loop !78

middle.block656:                                  ; preds = %vector.body664
  %cmp.n674 = icmp eq i64 %n.vec661, %343
  br i1 %cmp.n674, label %.loopexit371, label %.lr.ph400.split.us.preheader935

.lr.ph400.split.us.preheader935:                  ; preds = %middle.block656, %vector.memcheck645, %vector.scevcheck, %.lr.ph400.split.us.preheader
  %indvars.iv474.ph = phi i64 [ 1, %vector.memcheck645 ], [ 1, %vector.scevcheck ], [ 1, %.lr.ph400.split.us.preheader ], [ %ind.end662, %middle.block656 ]
  %357 = zext nneg i32 %304 to i64
  %358 = and i32 %304, 1
  %lcmp.mod941.not = icmp eq i32 %358, 0
  br i1 %lcmp.mod941.not, label %.lr.ph400.split.us.prol.loopexit, label %.lr.ph400.split.us.prol

.lr.ph400.split.us.prol:                          ; preds = %.lr.ph400.split.us.preheader935
  %359 = load double, ptr %5, align 8, !tbaa !9
  %360 = mul nsw i64 %indvars.iv474.ph, %341
  %gep394.us.prol = getelementptr double, ptr %invariant.gep407, i64 %360
  %361 = load double, ptr %gep394.us.prol, align 8, !tbaa !9
  %362 = mul nsw i64 %indvars.iv474.ph, %342
  %gep396.us.prol = getelementptr double, ptr %invariant.gep405, i64 %362
  %363 = load double, ptr %gep396.us.prol, align 8, !tbaa !9
  %364 = fneg double %359
  %365 = tail call double @llvm.fmuladd.f64(double %364, double %361, double %363)
  store double %365, ptr %gep396.us.prol, align 8, !tbaa !9
  %indvars.iv.next475.prol = add nuw nsw i64 %indvars.iv474.ph, 1
  br label %.lr.ph400.split.us.prol.loopexit

.lr.ph400.split.us.prol.loopexit:                 ; preds = %.lr.ph400.split.us.prol, %.lr.ph400.split.us.preheader935
  %indvars.iv474.unr = phi i64 [ %indvars.iv474.ph, %.lr.ph400.split.us.preheader935 ], [ %indvars.iv.next475.prol, %.lr.ph400.split.us.prol ]
  %366 = icmp eq i64 %indvars.iv474.ph, %357
  br i1 %366, label %.loopexit371, label %.lr.ph400.split.us

.lr.ph400.split.us:                               ; preds = %.lr.ph400.split.us.prol.loopexit, %.lr.ph400.split.us
  %indvars.iv474 = phi i64 [ %indvars.iv.next475.1, %.lr.ph400.split.us ], [ %indvars.iv474.unr, %.lr.ph400.split.us.prol.loopexit ]
  %367 = load double, ptr %5, align 8, !tbaa !9
  %368 = mul nsw i64 %indvars.iv474, %341
  %gep394.us = getelementptr double, ptr %invariant.gep407, i64 %368
  %369 = load double, ptr %gep394.us, align 8, !tbaa !9
  %370 = mul nsw i64 %indvars.iv474, %342
  %gep396.us = getelementptr double, ptr %invariant.gep405, i64 %370
  %371 = load double, ptr %gep396.us, align 8, !tbaa !9
  %372 = fneg double %367
  %373 = tail call double @llvm.fmuladd.f64(double %372, double %369, double %371)
  store double %373, ptr %gep396.us, align 8, !tbaa !9
  %indvars.iv.next475 = add nuw nsw i64 %indvars.iv474, 1
  %374 = load double, ptr %5, align 8, !tbaa !9
  %375 = mul nsw i64 %indvars.iv.next475, %341
  %gep394.us.1 = getelementptr double, ptr %invariant.gep407, i64 %375
  %376 = load double, ptr %gep394.us.1, align 8, !tbaa !9
  %377 = mul nsw i64 %indvars.iv.next475, %342
  %gep396.us.1 = getelementptr double, ptr %invariant.gep405, i64 %377
  %378 = load double, ptr %gep396.us.1, align 8, !tbaa !9
  %379 = fneg double %374
  %380 = tail call double @llvm.fmuladd.f64(double %379, double %376, double %378)
  store double %380, ptr %gep396.us.1, align 8, !tbaa !9
  %indvars.iv.next475.1 = add nuw nsw i64 %indvars.iv474, 2
  %exitcond478.not.1 = icmp eq i64 %indvars.iv.next475.1, %wide.trip.count477
  br i1 %exitcond478.not.1, label %.loopexit371, label %.lr.ph400.split.us, !llvm.loop !79

.lr.ph400.split:                                  ; preds = %.lr.ph400.split.preheader, %.loopexit376
  %indvars.iv469 = phi i64 [ 1, %.lr.ph400.split.preheader ], [ %indvars.iv.next470, %.loopexit376 ]
  %381 = mul nsw i64 %indvars.iv469, %314
  %gep = getelementptr double, ptr %invariant.gep405, i64 %381
  %382 = load double, ptr %gep, align 8, !tbaa !9
  %383 = load double, ptr %5, align 8, !tbaa !9
  %384 = mul nsw i64 %indvars.iv469, %315
  %385 = getelementptr double, ptr %18, i64 %384
  %386 = getelementptr i8, ptr %385, i64 8
  %387 = load double, ptr %386, align 8, !tbaa !9
  %388 = fneg double %383
  %389 = tail call double @llvm.fmuladd.f64(double %388, double %387, double %382)
  %390 = load double, ptr %6, align 8, !tbaa !9
  %391 = getelementptr i8, ptr %385, i64 16
  %392 = load double, ptr %391, align 8, !tbaa !9
  %393 = fneg double %390
  %394 = tail call double @llvm.fmuladd.f64(double %393, double %392, double %389)
  store double %394, ptr %gep, align 8, !tbaa !9
  %gep543 = getelementptr double, ptr %invariant.gep542, i64 %381
  %395 = load double, ptr %gep543, align 8, !tbaa !9
  %396 = load double, ptr %310, align 8, !tbaa !9
  %gep545 = getelementptr double, ptr %invariant.gep544, i64 %384
  %397 = load double, ptr %gep545, align 8, !tbaa !9
  %398 = fneg double %396
  %399 = tail call double @llvm.fmuladd.f64(double %398, double %397, double %395)
  %400 = load double, ptr %312, align 8, !tbaa !9
  %gep547 = getelementptr double, ptr %invariant.gep546, i64 %384
  %401 = load double, ptr %gep547, align 8, !tbaa !9
  %402 = fneg double %400
  %403 = tail call double @llvm.fmuladd.f64(double %402, double %401, double %399)
  store double %403, ptr %gep543, align 8, !tbaa !9
  br i1 %.not364.not390, label %.lr.ph.preheader, label %.loopexit376

.lr.ph.preheader:                                 ; preds = %.lr.ph400.split
  %invariant.gep534 = getelementptr double, ptr %21, i64 %381
  %invariant.gep536 = getelementptr double, ptr %18, i64 %384
  %invariant.gep538 = getelementptr double, ptr %18, i64 %384
  %invariant.gep540 = getelementptr double, ptr %18, i64 %384
  %brmerge956 = select i1 %min.iters.check626, i1 true, i1 %conflict.rdx623
  br i1 %brmerge956, label %.lr.ph.preheader937, label %vector.ph627

vector.ph627:                                     ; preds = %.lr.ph.preheader
  %invariant.gep = getelementptr i8, ptr %invariant.gep540, i64 24
  br label %vector.body632

vector.body632:                                   ; preds = %vector.body632, %vector.ph627
  %index633 = phi i64 [ 0, %vector.ph627 ], [ %index.next642, %vector.body632 ]
  %offset.idx634 = add i64 %index633, 2
  %404 = getelementptr double, ptr %invariant.gep534, i64 %offset.idx634
  %wide.load635 = load <2 x double>, ptr %404, align 8, !tbaa !9, !alias.scope !80, !noalias !83
  %405 = or disjoint i64 %index633, 1
  %406 = getelementptr double, ptr %4, i64 %index633
  %wide.load636 = load <2 x double>, ptr %406, align 8, !tbaa !9, !alias.scope !88
  %407 = getelementptr double, ptr %invariant.gep536, i64 %405
  %wide.load637 = load <2 x double>, ptr %407, align 8, !tbaa !9, !alias.scope !89
  %408 = fneg <2 x double> %wide.load636
  %409 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %408, <2 x double> %wide.load637, <2 x double> %wide.load635)
  %410 = getelementptr inbounds double, ptr %14, i64 %offset.idx634
  %wide.load638 = load <2 x double>, ptr %410, align 8, !tbaa !9, !alias.scope !90
  %411 = getelementptr double, ptr %invariant.gep538, i64 %offset.idx634
  %wide.load639 = load <2 x double>, ptr %411, align 8, !tbaa !9, !alias.scope !89
  %412 = fneg <2 x double> %wide.load638
  %413 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %412, <2 x double> %wide.load639, <2 x double> %409)
  %414 = getelementptr inbounds double, ptr %15, i64 %offset.idx634
  %wide.load640 = load <2 x double>, ptr %414, align 8, !tbaa !9, !alias.scope !91
  %gep948 = getelementptr double, ptr %invariant.gep, i64 %index633
  %wide.load641 = load <2 x double>, ptr %gep948, align 8, !tbaa !9, !alias.scope !89
  %415 = fneg <2 x double> %wide.load640
  %416 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %415, <2 x double> %wide.load641, <2 x double> %413)
  store <2 x double> %416, ptr %404, align 8, !tbaa !9, !alias.scope !80, !noalias !83
  %index.next642 = add nuw i64 %index633, 2
  %417 = icmp eq i64 %index.next642, %n.vec629
  br i1 %417, label %middle.block624, label %vector.body632, !llvm.loop !92

middle.block624:                                  ; preds = %vector.body632
  br i1 %cmp.n643, label %.loopexit376, label %.lr.ph.preheader937

.lr.ph.preheader937:                              ; preds = %.lr.ph.preheader, %middle.block624
  %indvars.iv464.ph = phi i64 [ 2, %.lr.ph.preheader ], [ %ind.end630, %middle.block624 ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader937, %.lr.ph
  %indvars.iv464 = phi i64 [ %indvars.iv.next465, %.lr.ph ], [ %indvars.iv464.ph, %.lr.ph.preheader937 ]
  %gep535 = getelementptr double, ptr %invariant.gep534, i64 %indvars.iv464
  %418 = load double, ptr %gep535, align 8, !tbaa !9
  %419 = add nsw i64 %indvars.iv464, -1
  %420 = getelementptr inbounds double, ptr %13, i64 %419
  %421 = load double, ptr %420, align 8, !tbaa !9
  %gep537 = getelementptr double, ptr %invariant.gep536, i64 %419
  %422 = load double, ptr %gep537, align 8, !tbaa !9
  %423 = fneg double %421
  %424 = tail call double @llvm.fmuladd.f64(double %423, double %422, double %418)
  %425 = getelementptr inbounds double, ptr %14, i64 %indvars.iv464
  %426 = load double, ptr %425, align 8, !tbaa !9
  %gep539 = getelementptr double, ptr %invariant.gep538, i64 %indvars.iv464
  %427 = load double, ptr %gep539, align 8, !tbaa !9
  %428 = fneg double %426
  %429 = tail call double @llvm.fmuladd.f64(double %428, double %427, double %424)
  %430 = getelementptr inbounds double, ptr %15, i64 %indvars.iv464
  %431 = load double, ptr %430, align 8, !tbaa !9
  %indvars.iv.next465 = add nuw nsw i64 %indvars.iv464, 1
  %gep541 = getelementptr double, ptr %invariant.gep540, i64 %indvars.iv.next465
  %432 = load double, ptr %gep541, align 8, !tbaa !9
  %433 = fneg double %431
  %434 = tail call double @llvm.fmuladd.f64(double %433, double %432, double %429)
  store double %434, ptr %gep535, align 8, !tbaa !9
  %exitcond468.not = icmp eq i64 %indvars.iv.next465, %wide.trip.count467
  br i1 %exitcond468.not, label %.loopexit376, label %.lr.ph, !llvm.loop !93

.loopexit376:                                     ; preds = %.lr.ph, %middle.block624, %.lr.ph400.split
  %indvars.iv.next470 = add nuw nsw i64 %indvars.iv469, 1
  %exitcond473.not = icmp eq i64 %indvars.iv.next470, %wide.trip.count477
  br i1 %exitcond473.not, label %.loopexit371, label %.lr.ph400.split, !llvm.loop !94

435:                                              ; preds = %302
  br i1 %.not361411, label %.loopexit371, label %.lr.ph414

.lr.ph414:                                        ; preds = %435
  %436 = load i32, ptr %1, align 4, !tbaa !5
  %437 = icmp eq i32 %436, 1
  %438 = add nsw i32 %436, -1
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds double, ptr %15, i64 %439
  %441 = sext i32 %436 to i64
  %442 = getelementptr inbounds double, ptr %14, i64 %441
  %.not362.not401 = icmp sgt i32 %436, 2
  %443 = add nuw i32 %304, 1
  %wide.trip.count492 = zext i32 %443 to i64
  br i1 %437, label %.lr.ph414.split.us.preheader, label %.lr.ph414.split.preheader

.lr.ph414.split.preheader:                        ; preds = %.lr.ph414
  %444 = sext i32 %19 to i64
  %445 = sext i32 %16 to i64
  %invariant.gep556 = getelementptr double, ptr %21, i64 %441
  %invariant.gep558 = getelementptr double, ptr %18, i64 %439
  %invariant.gep560 = getelementptr double, ptr %18, i64 %441
  %wide.trip.count482 = zext i32 %436 to i64
  %446 = shl nsw i64 %444, 3
  %447 = shl nsw i64 %20, 3
  %448 = getelementptr i8, ptr %10, i64 %446
  %449 = getelementptr i8, ptr %448, i64 %447
  %scevgep676 = getelementptr i8, ptr %449, i64 16
  %450 = shl nuw nsw i64 %wide.trip.count492, 3
  %451 = add nsw i64 %450, -8
  %452 = mul i64 %451, %444
  %453 = shl nuw nsw i64 %wide.trip.count482, 3
  %454 = getelementptr i8, ptr %10, i64 %452
  %455 = getelementptr i8, ptr %454, i64 %447
  %scevgep677 = getelementptr i8, ptr %455, i64 %453
  %456 = getelementptr i8, ptr %6, i64 %453
  %scevgep678 = getelementptr i8, ptr %456, i64 -16
  %457 = shl nsw i64 %445, 3
  %458 = shl nsw i64 %17, 3
  %459 = getelementptr i8, ptr %7, i64 %457
  %460 = getelementptr i8, ptr %459, i64 %458
  %scevgep679 = getelementptr i8, ptr %460, i64 8
  %461 = mul i64 %451, %445
  %462 = getelementptr i8, ptr %7, i64 %461
  %463 = getelementptr i8, ptr %462, i64 %458
  %464 = getelementptr i8, ptr %463, i64 %453
  %scevgep680 = getelementptr i8, ptr %464, i64 8
  %scevgep681 = getelementptr i8, ptr %5, i64 8
  %465 = add nsw i64 %453, -8
  %scevgep682 = getelementptr i8, ptr %5, i64 %465
  %scevgep683 = getelementptr i8, ptr %4, i64 8
  %scevgep684 = getelementptr i8, ptr %4, i64 %465
  %466 = add nsw i64 %wide.trip.count482, -2
  %min.iters.check707 = icmp ult i64 %466, 6
  %bound0685 = icmp ult ptr %scevgep676, %scevgep678
  %bound1686 = icmp ugt ptr %scevgep677, %6
  %found.conflict687 = and i1 %bound0685, %bound1686
  %stride.check688 = icmp slt i32 %19, 0
  %467 = or i1 %found.conflict687, %stride.check688
  %bound0689 = icmp ult ptr %scevgep676, %scevgep680
  %bound1690 = icmp ult ptr %scevgep679, %scevgep677
  %found.conflict691 = and i1 %bound0689, %bound1690
  %468 = or i32 %19, %16
  %469 = icmp slt i32 %468, 0
  %470 = or i1 %found.conflict691, %469
  %conflict.rdx694 = or i1 %467, %470
  %bound0695 = icmp ult ptr %scevgep676, %scevgep682
  %bound1696 = icmp ult ptr %scevgep681, %scevgep677
  %found.conflict697 = and i1 %bound0695, %bound1696
  %conflict.rdx699 = or i1 %found.conflict697, %conflict.rdx694
  %bound0700 = icmp ult ptr %scevgep676, %scevgep684
  %bound1701 = icmp ult ptr %scevgep683, %scevgep677
  %found.conflict702 = and i1 %bound0700, %bound1701
  %conflict.rdx704 = or i1 %found.conflict702, %conflict.rdx699
  %n.vec710 = and i64 %466, -2
  %ind.end711 = add nsw i64 %n.vec710, 2
  %cmp.n724 = icmp eq i64 %466, %n.vec710
  br label %.lr.ph414.split

.lr.ph414.split.us.preheader:                     ; preds = %.lr.ph414
  %471 = sext i32 %16 to i64
  %472 = sext i32 %19 to i64
  %473 = zext nneg i32 %304 to i64
  %min.iters.check741 = icmp ult i32 %304, 12
  br i1 %min.iters.check741, label %.lr.ph414.split.us.preheader931, label %vector.scevcheck725

vector.scevcheck725:                              ; preds = %.lr.ph414.split.us.preheader
  %ident.check726 = icmp ne i32 %19, 1
  %ident.check727 = icmp ne i32 %16, 1
  %474 = or i1 %ident.check726, %ident.check727
  br i1 %474, label %.lr.ph414.split.us.preheader931, label %vector.memcheck728

vector.memcheck728:                               ; preds = %vector.scevcheck725
  %475 = shl nuw nsw i64 %wide.trip.count492, 3
  %476 = add nsw i64 %475, -8
  %scevgep729 = getelementptr i8, ptr %10, i64 %476
  %scevgep730 = getelementptr i8, ptr %5, i64 8
  %scevgep731 = getelementptr i8, ptr %7, i64 %476
  %bound0732 = icmp ugt ptr %scevgep730, %10
  %bound1733 = icmp ugt ptr %scevgep729, %5
  %found.conflict734 = and i1 %bound0732, %bound1733
  %bound0735 = icmp ugt ptr %scevgep731, %10
  %bound1736 = icmp ugt ptr %scevgep729, %7
  %found.conflict737 = and i1 %bound0735, %bound1736
  %conflict.rdx738 = or i1 %found.conflict734, %found.conflict737
  br i1 %conflict.rdx738, label %.lr.ph414.split.us.preheader931, label %vector.ph742

vector.ph742:                                     ; preds = %vector.memcheck728
  %n.vec744 = and i64 %473, 2147483644
  %ind.end745 = or disjoint i64 %n.vec744, 1
  %477 = load double, ptr %5, align 8, !tbaa !9, !alias.scope !95
  %broadcast.splatinsert754 = insertelement <2 x double> poison, double %477, i64 0
  %broadcast.splat755 = shufflevector <2 x double> %broadcast.splatinsert754, <2 x double> poison, <2 x i32> zeroinitializer
  %478 = fneg <2 x double> %broadcast.splat755
  %479 = fneg <2 x double> %broadcast.splat755
  br label %vector.body747

vector.body747:                                   ; preds = %vector.body747, %vector.ph742
  %index748 = phi i64 [ 0, %vector.ph742 ], [ %index.next756, %vector.body747 ]
  %offset.idx749 = or disjoint i64 %index748, 1
  %480 = getelementptr double, ptr %invariant.gep407, i64 %offset.idx749
  %481 = getelementptr i8, ptr %480, i64 16
  %wide.load750 = load <2 x double>, ptr %480, align 8, !tbaa !9, !alias.scope !98
  %wide.load751 = load <2 x double>, ptr %481, align 8, !tbaa !9, !alias.scope !98
  %482 = getelementptr double, ptr %invariant.gep405, i64 %offset.idx749
  %483 = getelementptr i8, ptr %482, i64 16
  %wide.load752 = load <2 x double>, ptr %482, align 8, !tbaa !9, !alias.scope !100, !noalias !102
  %wide.load753 = load <2 x double>, ptr %483, align 8, !tbaa !9, !alias.scope !100, !noalias !102
  %484 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %478, <2 x double> %wide.load750, <2 x double> %wide.load752)
  %485 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %479, <2 x double> %wide.load751, <2 x double> %wide.load753)
  store <2 x double> %484, ptr %482, align 8, !tbaa !9, !alias.scope !100, !noalias !102
  store <2 x double> %485, ptr %483, align 8, !tbaa !9, !alias.scope !100, !noalias !102
  %index.next756 = add nuw i64 %index748, 4
  %486 = icmp eq i64 %index.next756, %n.vec744
  br i1 %486, label %middle.block739, label %vector.body747, !llvm.loop !103

middle.block739:                                  ; preds = %vector.body747
  %cmp.n757 = icmp eq i64 %n.vec744, %473
  br i1 %cmp.n757, label %.loopexit371, label %.lr.ph414.split.us.preheader931

.lr.ph414.split.us.preheader931:                  ; preds = %middle.block739, %vector.memcheck728, %vector.scevcheck725, %.lr.ph414.split.us.preheader
  %indvars.iv489.ph = phi i64 [ 1, %vector.memcheck728 ], [ 1, %vector.scevcheck725 ], [ 1, %.lr.ph414.split.us.preheader ], [ %ind.end745, %middle.block739 ]
  %487 = zext nneg i32 %304 to i64
  %488 = and i32 %304, 1
  %lcmp.mod943.not = icmp eq i32 %488, 0
  br i1 %lcmp.mod943.not, label %.lr.ph414.split.us.prol.loopexit, label %.lr.ph414.split.us.prol

.lr.ph414.split.us.prol:                          ; preds = %.lr.ph414.split.us.preheader931
  %489 = load double, ptr %5, align 8, !tbaa !9
  %490 = mul nsw i64 %indvars.iv489.ph, %471
  %gep408.us.prol = getelementptr double, ptr %invariant.gep407, i64 %490
  %491 = load double, ptr %gep408.us.prol, align 8, !tbaa !9
  %492 = mul nsw i64 %indvars.iv489.ph, %472
  %gep410.us.prol = getelementptr double, ptr %invariant.gep405, i64 %492
  %493 = load double, ptr %gep410.us.prol, align 8, !tbaa !9
  %494 = fneg double %489
  %495 = tail call double @llvm.fmuladd.f64(double %494, double %491, double %493)
  store double %495, ptr %gep410.us.prol, align 8, !tbaa !9
  %indvars.iv.next490.prol = add nuw nsw i64 %indvars.iv489.ph, 1
  br label %.lr.ph414.split.us.prol.loopexit

.lr.ph414.split.us.prol.loopexit:                 ; preds = %.lr.ph414.split.us.prol, %.lr.ph414.split.us.preheader931
  %indvars.iv489.unr = phi i64 [ %indvars.iv489.ph, %.lr.ph414.split.us.preheader931 ], [ %indvars.iv.next490.prol, %.lr.ph414.split.us.prol ]
  %496 = icmp eq i64 %indvars.iv489.ph, %487
  br i1 %496, label %.loopexit371, label %.lr.ph414.split.us

.lr.ph414.split.us:                               ; preds = %.lr.ph414.split.us.prol.loopexit, %.lr.ph414.split.us
  %indvars.iv489 = phi i64 [ %indvars.iv.next490.1, %.lr.ph414.split.us ], [ %indvars.iv489.unr, %.lr.ph414.split.us.prol.loopexit ]
  %497 = load double, ptr %5, align 8, !tbaa !9
  %498 = mul nsw i64 %indvars.iv489, %471
  %gep408.us = getelementptr double, ptr %invariant.gep407, i64 %498
  %499 = load double, ptr %gep408.us, align 8, !tbaa !9
  %500 = mul nsw i64 %indvars.iv489, %472
  %gep410.us = getelementptr double, ptr %invariant.gep405, i64 %500
  %501 = load double, ptr %gep410.us, align 8, !tbaa !9
  %502 = fneg double %497
  %503 = tail call double @llvm.fmuladd.f64(double %502, double %499, double %501)
  store double %503, ptr %gep410.us, align 8, !tbaa !9
  %indvars.iv.next490 = add nuw nsw i64 %indvars.iv489, 1
  %504 = load double, ptr %5, align 8, !tbaa !9
  %505 = mul nsw i64 %indvars.iv.next490, %471
  %gep408.us.1 = getelementptr double, ptr %invariant.gep407, i64 %505
  %506 = load double, ptr %gep408.us.1, align 8, !tbaa !9
  %507 = mul nsw i64 %indvars.iv.next490, %472
  %gep410.us.1 = getelementptr double, ptr %invariant.gep405, i64 %507
  %508 = load double, ptr %gep410.us.1, align 8, !tbaa !9
  %509 = fneg double %504
  %510 = tail call double @llvm.fmuladd.f64(double %509, double %506, double %508)
  store double %510, ptr %gep410.us.1, align 8, !tbaa !9
  %indvars.iv.next490.1 = add nuw nsw i64 %indvars.iv489, 2
  %exitcond493.not.1 = icmp eq i64 %indvars.iv.next490.1, %wide.trip.count492
  br i1 %exitcond493.not.1, label %.loopexit371, label %.lr.ph414.split.us, !llvm.loop !104

.lr.ph414.split:                                  ; preds = %.lr.ph414.split.preheader, %.loopexit374
  %indvars.iv484 = phi i64 [ 1, %.lr.ph414.split.preheader ], [ %indvars.iv.next485, %.loopexit374 ]
  %511 = mul nsw i64 %indvars.iv484, %444
  %gep406 = getelementptr double, ptr %invariant.gep405, i64 %511
  %512 = load double, ptr %gep406, align 8, !tbaa !9
  %513 = load double, ptr %5, align 8, !tbaa !9
  %514 = mul nsw i64 %indvars.iv484, %445
  %515 = getelementptr double, ptr %18, i64 %514
  %516 = getelementptr i8, ptr %515, i64 8
  %517 = load double, ptr %516, align 8, !tbaa !9
  %518 = fneg double %513
  %519 = tail call double @llvm.fmuladd.f64(double %518, double %517, double %512)
  %520 = load double, ptr %4, align 8, !tbaa !9
  %521 = getelementptr i8, ptr %515, i64 16
  %522 = load double, ptr %521, align 8, !tbaa !9
  %523 = fneg double %520
  %524 = tail call double @llvm.fmuladd.f64(double %523, double %522, double %519)
  store double %524, ptr %gep406, align 8, !tbaa !9
  %gep557 = getelementptr double, ptr %invariant.gep556, i64 %511
  %525 = load double, ptr %gep557, align 8, !tbaa !9
  %526 = load double, ptr %440, align 8, !tbaa !9
  %gep559 = getelementptr double, ptr %invariant.gep558, i64 %514
  %527 = load double, ptr %gep559, align 8, !tbaa !9
  %528 = fneg double %526
  %529 = tail call double @llvm.fmuladd.f64(double %528, double %527, double %525)
  %530 = load double, ptr %442, align 8, !tbaa !9
  %gep561 = getelementptr double, ptr %invariant.gep560, i64 %514
  %531 = load double, ptr %gep561, align 8, !tbaa !9
  %532 = fneg double %530
  %533 = tail call double @llvm.fmuladd.f64(double %532, double %531, double %529)
  store double %533, ptr %gep557, align 8, !tbaa !9
  br i1 %.not362.not401, label %.lr.ph404.preheader, label %.loopexit374

.lr.ph404.preheader:                              ; preds = %.lr.ph414.split
  %invariant.gep548 = getelementptr double, ptr %21, i64 %511
  %invariant.gep550 = getelementptr double, ptr %18, i64 %514
  %invariant.gep552 = getelementptr double, ptr %18, i64 %514
  %invariant.gep554 = getelementptr double, ptr %18, i64 %514
  %brmerge957 = select i1 %min.iters.check707, i1 true, i1 %conflict.rdx704
  br i1 %brmerge957, label %.lr.ph404.preheader933, label %vector.ph708

vector.ph708:                                     ; preds = %.lr.ph404.preheader
  %invariant.gep949 = getelementptr i8, ptr %invariant.gep554, i64 24
  br label %vector.body713

vector.body713:                                   ; preds = %vector.body713, %vector.ph708
  %index714 = phi i64 [ 0, %vector.ph708 ], [ %index.next723, %vector.body713 ]
  %offset.idx715 = add i64 %index714, 2
  %534 = getelementptr double, ptr %invariant.gep548, i64 %offset.idx715
  %wide.load716 = load <2 x double>, ptr %534, align 8, !tbaa !9, !alias.scope !105, !noalias !108
  %535 = or disjoint i64 %index714, 1
  %536 = getelementptr double, ptr %6, i64 %index714
  %wide.load717 = load <2 x double>, ptr %536, align 8, !tbaa !9, !alias.scope !113
  %537 = getelementptr double, ptr %invariant.gep550, i64 %535
  %wide.load718 = load <2 x double>, ptr %537, align 8, !tbaa !9, !alias.scope !114
  %538 = fneg <2 x double> %wide.load717
  %539 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %538, <2 x double> %wide.load718, <2 x double> %wide.load716)
  %540 = getelementptr inbounds double, ptr %14, i64 %offset.idx715
  %wide.load719 = load <2 x double>, ptr %540, align 8, !tbaa !9, !alias.scope !115
  %541 = getelementptr double, ptr %invariant.gep552, i64 %offset.idx715
  %wide.load720 = load <2 x double>, ptr %541, align 8, !tbaa !9, !alias.scope !114
  %542 = fneg <2 x double> %wide.load719
  %543 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %542, <2 x double> %wide.load720, <2 x double> %539)
  %544 = getelementptr inbounds double, ptr %13, i64 %offset.idx715
  %wide.load721 = load <2 x double>, ptr %544, align 8, !tbaa !9, !alias.scope !116
  %gep950 = getelementptr double, ptr %invariant.gep949, i64 %index714
  %wide.load722 = load <2 x double>, ptr %gep950, align 8, !tbaa !9, !alias.scope !114
  %545 = fneg <2 x double> %wide.load721
  %546 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %545, <2 x double> %wide.load722, <2 x double> %543)
  store <2 x double> %546, ptr %534, align 8, !tbaa !9, !alias.scope !105, !noalias !108
  %index.next723 = add nuw i64 %index714, 2
  %547 = icmp eq i64 %index.next723, %n.vec710
  br i1 %547, label %middle.block705, label %vector.body713, !llvm.loop !117

middle.block705:                                  ; preds = %vector.body713
  br i1 %cmp.n724, label %.loopexit374, label %.lr.ph404.preheader933

.lr.ph404.preheader933:                           ; preds = %.lr.ph404.preheader, %middle.block705
  %indvars.iv479.ph = phi i64 [ 2, %.lr.ph404.preheader ], [ %ind.end711, %middle.block705 ]
  br label %.lr.ph404

.lr.ph404:                                        ; preds = %.lr.ph404.preheader933, %.lr.ph404
  %indvars.iv479 = phi i64 [ %indvars.iv.next480, %.lr.ph404 ], [ %indvars.iv479.ph, %.lr.ph404.preheader933 ]
  %gep549 = getelementptr double, ptr %invariant.gep548, i64 %indvars.iv479
  %548 = load double, ptr %gep549, align 8, !tbaa !9
  %549 = add nsw i64 %indvars.iv479, -1
  %550 = getelementptr inbounds double, ptr %15, i64 %549
  %551 = load double, ptr %550, align 8, !tbaa !9
  %gep551 = getelementptr double, ptr %invariant.gep550, i64 %549
  %552 = load double, ptr %gep551, align 8, !tbaa !9
  %553 = fneg double %551
  %554 = tail call double @llvm.fmuladd.f64(double %553, double %552, double %548)
  %555 = getelementptr inbounds double, ptr %14, i64 %indvars.iv479
  %556 = load double, ptr %555, align 8, !tbaa !9
  %gep553 = getelementptr double, ptr %invariant.gep552, i64 %indvars.iv479
  %557 = load double, ptr %gep553, align 8, !tbaa !9
  %558 = fneg double %556
  %559 = tail call double @llvm.fmuladd.f64(double %558, double %557, double %554)
  %560 = getelementptr inbounds double, ptr %13, i64 %indvars.iv479
  %561 = load double, ptr %560, align 8, !tbaa !9
  %indvars.iv.next480 = add nuw nsw i64 %indvars.iv479, 1
  %gep555 = getelementptr double, ptr %invariant.gep554, i64 %indvars.iv.next480
  %562 = load double, ptr %gep555, align 8, !tbaa !9
  %563 = fneg double %561
  %564 = tail call double @llvm.fmuladd.f64(double %563, double %562, double %559)
  store double %564, ptr %gep549, align 8, !tbaa !9
  %exitcond483.not = icmp eq i64 %indvars.iv.next480, %wide.trip.count482
  br i1 %exitcond483.not, label %.loopexit374, label %.lr.ph404, !llvm.loop !118

.loopexit374:                                     ; preds = %.lr.ph404, %middle.block705, %.lr.ph414.split
  %indvars.iv.next485 = add nuw nsw i64 %indvars.iv484, 1
  %exitcond488.not = icmp eq i64 %indvars.iv.next485, %wide.trip.count492
  br i1 %exitcond488.not, label %.loopexit371, label %.lr.ph414.split, !llvm.loop !119

.loopexit371:                                     ; preds = %.loopexit376, %.lr.ph400.split.us.prol.loopexit, %.lr.ph400.split.us, %.loopexit374, %.lr.ph414.split.us.prol.loopexit, %.lr.ph414.split.us, %.loopexit372, %.lr.ph428.split.us.prol.loopexit, %.lr.ph428.split.us, %.loopexit, %.lr.ph442.split.us.prol.loopexit, %.lr.ph442.split.us, %middle.block656, %middle.block739, %middle.block822, %middle.block905, %305, %435, %70, %185, %300, %12
  ret void
}

declare i32 @lsame_(ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

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

attributes #0 = { 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 = { "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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12, !14, !15}
!14 = !{!"llvm.loop.isvectorized", i32 1}
!15 = !{!"llvm.loop.unroll.runtime.disable"}
!16 = distinct !{!16, !12, !15, !14}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.unroll.disable"}
!20 = !{!21}
!21 = distinct !{!21, !22}
!22 = distinct !{!22, !"LVerDomain"}
!23 = !{!24}
!24 = distinct !{!24, !22}
!25 = !{!26}
!26 = distinct !{!26, !22}
!27 = !{!21, !24}
!28 = distinct !{!28, !12, !14, !15}
!29 = distinct !{!29, !12, !14}
!30 = !{!31}
!31 = distinct !{!31, !32}
!32 = distinct !{!32, !"LVerDomain"}
!33 = !{!34, !35, !36, !37}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}
!38 = !{!34}
!39 = !{!35}
!40 = !{!36}
!41 = !{!37}
!42 = distinct !{!42, !12, !14, !15}
!43 = distinct !{!43, !12, !14}
!44 = distinct !{!44, !12}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = !{!49}
!49 = distinct !{!49, !47}
!50 = !{!51}
!51 = distinct !{!51, !47}
!52 = !{!46, !49}
!53 = distinct !{!53, !12, !14, !15}
!54 = distinct !{!54, !12, !14}
!55 = !{!56}
!56 = distinct !{!56, !57}
!57 = distinct !{!57, !"LVerDomain"}
!58 = !{!59, !60, !61, !62}
!59 = distinct !{!59, !57}
!60 = distinct !{!60, !57}
!61 = distinct !{!61, !57}
!62 = distinct !{!62, !57}
!63 = !{!59}
!64 = !{!60}
!65 = !{!61}
!66 = !{!62}
!67 = distinct !{!67, !12, !14, !15}
!68 = distinct !{!68, !12, !14}
!69 = distinct !{!69, !12}
!70 = !{!71}
!71 = distinct !{!71, !72}
!72 = distinct !{!72, !"LVerDomain"}
!73 = !{!74}
!74 = distinct !{!74, !72}
!75 = !{!76}
!76 = distinct !{!76, !72}
!77 = !{!71, !74}
!78 = distinct !{!78, !12, !14, !15}
!79 = distinct !{!79, !12, !14}
!80 = !{!81}
!81 = distinct !{!81, !82}
!82 = distinct !{!82, !"LVerDomain"}
!83 = !{!84, !85, !86, !87}
!84 = distinct !{!84, !82}
!85 = distinct !{!85, !82}
!86 = distinct !{!86, !82}
!87 = distinct !{!87, !82}
!88 = !{!84}
!89 = !{!85}
!90 = !{!86}
!91 = !{!87}
!92 = distinct !{!92, !12, !14, !15}
!93 = distinct !{!93, !12, !14}
!94 = distinct !{!94, !12}
!95 = !{!96}
!96 = distinct !{!96, !97}
!97 = distinct !{!97, !"LVerDomain"}
!98 = !{!99}
!99 = distinct !{!99, !97}
!100 = !{!101}
!101 = distinct !{!101, !97}
!102 = !{!96, !99}
!103 = distinct !{!103, !12, !14, !15}
!104 = distinct !{!104, !12, !14}
!105 = !{!106}
!106 = distinct !{!106, !107}
!107 = distinct !{!107, !"LVerDomain"}
!108 = !{!109, !110, !111, !112}
!109 = distinct !{!109, !107}
!110 = distinct !{!110, !107}
!111 = distinct !{!111, !107}
!112 = distinct !{!112, !107}
!113 = !{!109}
!114 = !{!110}
!115 = !{!111}
!116 = !{!112}
!117 = distinct !{!117, !12, !14, !15}
!118 = distinct !{!118, !12, !14}
!119 = distinct !{!119, !12}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass