; LLVM IR from simbody/simbody :: SimTKmath/Integrators/src/CPodes/sundials/src/sundials (sundials_sptfqmr)

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

%struct.SptfqmrMemRec = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @SptfqmrSolve(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, double noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13) #1 {
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca double, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca [2 x double], align 16
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  store ptr %0, ptr %16, align 8, !tbaa !5
  store ptr %1, ptr %17, align 8, !tbaa !5
  store ptr %2, ptr %18, align 8, !tbaa !5
  store ptr %3, ptr %19, align 8, !tbaa !5
  store i32 %4, ptr %20, align 4, !tbaa !9
  store double %5, ptr %21, align 8, !tbaa !11
  store ptr %6, ptr %22, align 8, !tbaa !5
  store ptr %7, ptr %23, align 8, !tbaa !5
  store ptr %8, ptr %24, align 8, !tbaa !5
  store ptr %9, ptr %25, align 8, !tbaa !5
  store ptr %10, ptr %26, align 8, !tbaa !5
  store ptr %11, ptr %27, align 8, !tbaa !5
  store ptr %12, ptr %28, align 8, !tbaa !5
  store ptr %13, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  %52 = load ptr, ptr %16, align 8, !tbaa !5
  %53 = icmp eq ptr %52, null
  br i1 %53, label %54, label %55

54:                                               ; preds = %14
  store i32 -1, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

55:                                               ; preds = %14
  store double -1.000000e+00, ptr %40, align 8, !tbaa !11
  store double -1.000000e+00, ptr %41, align 8, !tbaa !11
  %56 = load ptr, ptr %29, align 8, !tbaa !5
  store i32 0, ptr %56, align 4, !tbaa !9
  %57 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 0, ptr %57, align 4, !tbaa !9
  store i32 0, ptr %46, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  %58 = load i32, ptr %20, align 4, !tbaa !9
  %59 = icmp ne i32 %58, 1
  br i1 %59, label %60, label %67

60:                                               ; preds = %55
  %61 = load i32, ptr %20, align 4, !tbaa !9
  %62 = icmp ne i32 %61, 2
  br i1 %62, label %63, label %67

63:                                               ; preds = %60
  %64 = load i32, ptr %20, align 4, !tbaa !9
  %65 = icmp ne i32 %64, 3
  br i1 %65, label %66, label %67

66:                                               ; preds = %63
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %67

67:                                               ; preds = %66, %63, %60, %55
  %68 = load i32, ptr %20, align 4, !tbaa !9
  %69 = icmp eq i32 %68, 3
  br i1 %69, label %73, label %70

70:                                               ; preds = %67
  %71 = load i32, ptr %20, align 4, !tbaa !9
  %72 = icmp eq i32 %71, 1
  br label %73

73:                                               ; preds = %70, %67
  %74 = phi i1 [ true, %67 ], [ %72, %70 ]
  %75 = zext i1 %74 to i32
  store i32 %75, ptr %42, align 4, !tbaa !9
  %76 = load i32, ptr %20, align 4, !tbaa !9
  %77 = icmp eq i32 %76, 3
  br i1 %77, label %81, label %78

78:                                               ; preds = %73
  %79 = load i32, ptr %20, align 4, !tbaa !9
  %80 = icmp eq i32 %79, 2
  br label %81

81:                                               ; preds = %78, %73
  %82 = phi i1 [ true, %73 ], [ %80, %78 ]
  %83 = zext i1 %82 to i32
  store i32 %83, ptr %43, align 4, !tbaa !9
  %84 = load ptr, ptr %23, align 8, !tbaa !5
  %85 = icmp ne ptr %84, null
  %86 = zext i1 %85 to i32
  store i32 %86, ptr %44, align 4, !tbaa !9
  %87 = load ptr, ptr %24, align 8, !tbaa !5
  %88 = icmp ne ptr %87, null
  %89 = zext i1 %88 to i32
  store i32 %89, ptr %45, align 4, !tbaa !9
  %90 = load ptr, ptr %18, align 8, !tbaa !5
  %91 = load ptr, ptr %18, align 8, !tbaa !5
  %92 = call double @N_VDotProd(ptr noundef %90, ptr noundef %91)
  %93 = fcmp oeq double %92, 0.000000e+00
  br i1 %93, label %94, label %99

94:                                               ; preds = %81
  %95 = load ptr, ptr %19, align 8, !tbaa !5
  %96 = load ptr, ptr %16, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %96, i32 0, i32 1
  %98 = load ptr, ptr %97, align 8, !tbaa !13
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %95, ptr noundef %98)
  br label %122

99:                                               ; preds = %81
  %100 = load ptr, ptr %25, align 8, !tbaa !5
  %101 = load ptr, ptr %17, align 8, !tbaa !5
  %102 = load ptr, ptr %18, align 8, !tbaa !5
  %103 = load ptr, ptr %16, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %103, i32 0, i32 1
  %105 = load ptr, ptr %104, align 8, !tbaa !13
  %106 = call i32 %100(ptr noundef %101, ptr noundef %102, ptr noundef %105)
  store i32 %106, ptr %50, align 4, !tbaa !9
  %107 = load i32, ptr %50, align 4, !tbaa !9
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %109, label %114

109:                                              ; preds = %99
  %110 = load i32, ptr %50, align 4, !tbaa !9
  %111 = icmp slt i32 %110, 0
  %112 = zext i1 %111 to i64
  %113 = select i1 %111, i32 -2, i32 4
  store i32 %113, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

114:                                              ; preds = %99
  %115 = load ptr, ptr %19, align 8, !tbaa !5
  %116 = load ptr, ptr %16, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %116, i32 0, i32 1
  %118 = load ptr, ptr %117, align 8, !tbaa !13
  %119 = load ptr, ptr %16, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %119, i32 0, i32 1
  %121 = load ptr, ptr %120, align 8, !tbaa !13
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %115, double noundef -1.000000e+00, ptr noundef %118, ptr noundef %121)
  br label %122

122:                                              ; preds = %114, %94
  %123 = load i32, ptr %42, align 4, !tbaa !9
  %124 = icmp ne i32 %123, 0
  br i1 %124, label %125, label %146

125:                                              ; preds = %122
  %126 = load ptr, ptr %26, align 8, !tbaa !5
  %127 = load ptr, ptr %22, align 8, !tbaa !5
  %128 = load ptr, ptr %16, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %128, i32 0, i32 1
  %130 = load ptr, ptr %129, align 8, !tbaa !13
  %131 = load ptr, ptr %16, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %131, i32 0, i32 8
  %133 = load ptr, ptr %132, align 8, !tbaa !15
  %134 = call i32 %126(ptr noundef %127, ptr noundef %130, ptr noundef %133, i32 noundef 1)
  store i32 %134, ptr %50, align 4, !tbaa !9
  %135 = load ptr, ptr %29, align 8, !tbaa !5
  %136 = load i32, ptr %135, align 4, !tbaa !9
  %137 = add nsw i32 %136, 1
  store i32 %137, ptr %135, align 4, !tbaa !9
  %138 = load i32, ptr %50, align 4, !tbaa !9
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %145

140:                                              ; preds = %125
  %141 = load i32, ptr %50, align 4, !tbaa !9
  %142 = icmp slt i32 %141, 0
  %143 = zext i1 %142 to i64
  %144 = select i1 %142, i32 -3, i32 3
  store i32 %144, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

145:                                              ; preds = %125
  br label %153

146:                                              ; preds = %122
  %147 = load ptr, ptr %16, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %147, i32 0, i32 1
  %149 = load ptr, ptr %148, align 8, !tbaa !13
  %150 = load ptr, ptr %16, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %150, i32 0, i32 8
  %152 = load ptr, ptr %151, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %149, ptr noundef %152)
  br label %153

153:                                              ; preds = %146, %145
  %154 = load i32, ptr %45, align 4, !tbaa !9
  %155 = icmp ne i32 %154, 0
  br i1 %155, label %156, label %164

156:                                              ; preds = %153
  %157 = load ptr, ptr %24, align 8, !tbaa !5
  %158 = load ptr, ptr %16, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %158, i32 0, i32 8
  %160 = load ptr, ptr %159, align 8, !tbaa !15
  %161 = load ptr, ptr %16, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %161, i32 0, i32 1
  %163 = load ptr, ptr %162, align 8, !tbaa !13
  call void @N_VProd(ptr noundef %157, ptr noundef %160, ptr noundef %163)
  br label %171

164:                                              ; preds = %153
  %165 = load ptr, ptr %16, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %165, i32 0, i32 8
  %167 = load ptr, ptr %166, align 8, !tbaa !15
  %168 = load ptr, ptr %16, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %168, i32 0, i32 1
  %170 = load ptr, ptr %169, align 8, !tbaa !13
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %167, ptr noundef %170)
  br label %171

171:                                              ; preds = %164, %156
  %172 = load ptr, ptr %16, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %172, i32 0, i32 1
  %174 = load ptr, ptr %173, align 8, !tbaa !13
  %175 = load ptr, ptr %16, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %175, i32 0, i32 1
  %177 = load ptr, ptr %176, align 8, !tbaa !13
  %178 = call double @N_VDotProd(ptr noundef %174, ptr noundef %177)
  %179 = getelementptr inbounds [2 x double], ptr %38, i64 0, i64 0
  store double %178, ptr %179, align 16, !tbaa !11
  %180 = getelementptr inbounds [2 x double], ptr %38, i64 0, i64 0
  %181 = load double, ptr %180, align 16, !tbaa !11
  %182 = call double @RSqrt(double noundef %181)
  store double %182, ptr %39, align 8, !tbaa !11
  %183 = load ptr, ptr %27, align 8, !tbaa !5
  store double %182, ptr %183, align 8, !tbaa !11
  %184 = load double, ptr %39, align 8, !tbaa !11
  %185 = load double, ptr %21, align 8, !tbaa !11
  %186 = fcmp ole double %184, %185
  br i1 %186, label %187, label %188

187:                                              ; preds = %171
  store i32 0, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

188:                                              ; preds = %171
  %189 = load i32, ptr %44, align 4, !tbaa !9
  %190 = icmp ne i32 %189, 0
  br i1 %190, label %191, label %199

191:                                              ; preds = %188
  %192 = load ptr, ptr %16, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %192, i32 0, i32 1
  %194 = load ptr, ptr %193, align 8, !tbaa !13
  %195 = load ptr, ptr %23, align 8, !tbaa !5
  %196 = load ptr, ptr %16, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %196, i32 0, i32 8
  %198 = load ptr, ptr %197, align 8, !tbaa !15
  call void @N_VDiv(ptr noundef %194, ptr noundef %195, ptr noundef %198)
  br label %206

199:                                              ; preds = %188
  %200 = load ptr, ptr %16, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %200, i32 0, i32 1
  %202 = load ptr, ptr %201, align 8, !tbaa !13
  %203 = load ptr, ptr %16, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %203, i32 0, i32 8
  %205 = load ptr, ptr %204, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %202, ptr noundef %205)
  br label %206

206:                                              ; preds = %199, %191
  %207 = load i32, ptr %43, align 4, !tbaa !9
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %236

209:                                              ; preds = %206
  %210 = load ptr, ptr %16, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %210, i32 0, i32 8
  %212 = load ptr, ptr %211, align 8, !tbaa !15
  %213 = load ptr, ptr %16, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %213, i32 0, i32 4
  %215 = load ptr, ptr %214, align 8, !tbaa !16
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %212, ptr noundef %215)
  %216 = load ptr, ptr %26, align 8, !tbaa !5
  %217 = load ptr, ptr %22, align 8, !tbaa !5
  %218 = load ptr, ptr %16, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %218, i32 0, i32 4
  %220 = load ptr, ptr %219, align 8, !tbaa !16
  %221 = load ptr, ptr %16, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %221, i32 0, i32 8
  %223 = load ptr, ptr %222, align 8, !tbaa !15
  %224 = call i32 %216(ptr noundef %217, ptr noundef %220, ptr noundef %223, i32 noundef 2)
  store i32 %224, ptr %50, align 4, !tbaa !9
  %225 = load ptr, ptr %29, align 8, !tbaa !5
  %226 = load i32, ptr %225, align 4, !tbaa !9
  %227 = add nsw i32 %226, 1
  store i32 %227, ptr %225, align 4, !tbaa !9
  %228 = load i32, ptr %50, align 4, !tbaa !9
  %229 = icmp ne i32 %228, 0
  br i1 %229, label %230, label %235

230:                                              ; preds = %209
  %231 = load i32, ptr %50, align 4, !tbaa !9
  %232 = icmp slt i32 %231, 0
  %233 = zext i1 %232 to i64
  %234 = select i1 %232, i32 -3, i32 3
  store i32 %234, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

235:                                              ; preds = %209
  br label %236

236:                                              ; preds = %235, %206
  %237 = load ptr, ptr %25, align 8, !tbaa !5
  %238 = load ptr, ptr %17, align 8, !tbaa !5
  %239 = load ptr, ptr %16, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %239, i32 0, i32 8
  %241 = load ptr, ptr %240, align 8, !tbaa !15
  %242 = load ptr, ptr %16, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %242, i32 0, i32 4
  %244 = load ptr, ptr %243, align 8, !tbaa !16
  %245 = call i32 %237(ptr noundef %238, ptr noundef %241, ptr noundef %244)
  store i32 %245, ptr %50, align 4, !tbaa !9
  %246 = load i32, ptr %50, align 4, !tbaa !9
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %248, label %253

248:                                              ; preds = %236
  %249 = load i32, ptr %50, align 4, !tbaa !9
  %250 = icmp slt i32 %249, 0
  %251 = zext i1 %250 to i64
  %252 = select i1 %250, i32 -2, i32 4
  store i32 %252, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

253:                                              ; preds = %236
  %254 = load i32, ptr %42, align 4, !tbaa !9
  %255 = icmp ne i32 %254, 0
  br i1 %255, label %256, label %277

256:                                              ; preds = %253
  %257 = load ptr, ptr %26, align 8, !tbaa !5
  %258 = load ptr, ptr %22, align 8, !tbaa !5
  %259 = load ptr, ptr %16, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %259, i32 0, i32 4
  %261 = load ptr, ptr %260, align 8, !tbaa !16
  %262 = load ptr, ptr %16, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %262, i32 0, i32 8
  %264 = load ptr, ptr %263, align 8, !tbaa !15
  %265 = call i32 %257(ptr noundef %258, ptr noundef %261, ptr noundef %264, i32 noundef 1)
  store i32 %265, ptr %50, align 4, !tbaa !9
  %266 = load ptr, ptr %29, align 8, !tbaa !5
  %267 = load i32, ptr %266, align 4, !tbaa !9
  %268 = add nsw i32 %267, 1
  store i32 %268, ptr %266, align 4, !tbaa !9
  %269 = load i32, ptr %50, align 4, !tbaa !9
  %270 = icmp ne i32 %269, 0
  br i1 %270, label %271, label %276

271:                                              ; preds = %256
  %272 = load i32, ptr %50, align 4, !tbaa !9
  %273 = icmp slt i32 %272, 0
  %274 = zext i1 %273 to i64
  %275 = select i1 %273, i32 -3, i32 3
  store i32 %275, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

276:                                              ; preds = %256
  br label %284

277:                                              ; preds = %253
  %278 = load ptr, ptr %16, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %278, i32 0, i32 4
  %280 = load ptr, ptr %279, align 8, !tbaa !16
  %281 = load ptr, ptr %16, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %281, i32 0, i32 8
  %283 = load ptr, ptr %282, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %280, ptr noundef %283)
  br label %284

284:                                              ; preds = %277, %276
  %285 = load i32, ptr %45, align 4, !tbaa !9
  %286 = icmp ne i32 %285, 0
  br i1 %286, label %287, label %295

287:                                              ; preds = %284
  %288 = load ptr, ptr %24, align 8, !tbaa !5
  %289 = load ptr, ptr %16, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %289, i32 0, i32 8
  %291 = load ptr, ptr %290, align 8, !tbaa !15
  %292 = load ptr, ptr %16, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %292, i32 0, i32 4
  %294 = load ptr, ptr %293, align 8, !tbaa !16
  call void @N_VProd(ptr noundef %288, ptr noundef %291, ptr noundef %294)
  br label %302

295:                                              ; preds = %284
  %296 = load ptr, ptr %16, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %296, i32 0, i32 8
  %298 = load ptr, ptr %297, align 8, !tbaa !15
  %299 = load ptr, ptr %16, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %299, i32 0, i32 4
  %301 = load ptr, ptr %300, align 8, !tbaa !16
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %298, ptr noundef %301)
  br label %302

302:                                              ; preds = %295, %287
  %303 = load ptr, ptr %16, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %303, i32 0, i32 1
  %305 = load ptr, ptr %304, align 8, !tbaa !13
  %306 = load ptr, ptr %16, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %306, i32 0, i32 6
  %308 = load ptr, ptr %307, align 8, !tbaa !17
  %309 = getelementptr inbounds ptr, ptr %308, i64 0
  %310 = load ptr, ptr %309, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %305, ptr noundef %310)
  %311 = load ptr, ptr %16, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %311, i32 0, i32 1
  %313 = load ptr, ptr %312, align 8, !tbaa !13
  %314 = load ptr, ptr %16, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %314, i32 0, i32 7
  %316 = load ptr, ptr %315, align 8, !tbaa !18
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %313, ptr noundef %316)
  %317 = load ptr, ptr %16, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %317, i32 0, i32 1
  %319 = load ptr, ptr %318, align 8, !tbaa !13
  %320 = load ptr, ptr %16, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %320, i32 0, i32 5
  %322 = load ptr, ptr %321, align 8, !tbaa !19
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %319, ptr noundef %322)
  %323 = load ptr, ptr %16, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %323, i32 0, i32 3
  %325 = load ptr, ptr %324, align 8, !tbaa !20
  call void @N_VConst(double noundef 0.000000e+00, ptr noundef %325)
  %326 = load double, ptr %39, align 8, !tbaa !11
  store double %326, ptr %31, align 8, !tbaa !11
  store double 0.000000e+00, ptr %32, align 8, !tbaa !11
  store double 0.000000e+00, ptr %36, align 8, !tbaa !11
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %327

327:                                              ; preds = %992, %302
  %328 = load i32, ptr %48, align 4, !tbaa !9
  %329 = load ptr, ptr %16, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %329, i32 0, i32 0
  %331 = load i32, ptr %330, align 8, !tbaa !21
  %332 = icmp slt i32 %328, %331
  br i1 %332, label %333, label %995

333:                                              ; preds = %327
  %334 = load ptr, ptr %28, align 8, !tbaa !5
  %335 = load i32, ptr %334, align 4, !tbaa !9
  %336 = add nsw i32 %335, 1
  store i32 %336, ptr %334, align 4, !tbaa !9
  %337 = load ptr, ptr %16, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %337, i32 0, i32 1
  %339 = load ptr, ptr %338, align 8, !tbaa !13
  %340 = load ptr, ptr %16, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %340, i32 0, i32 4
  %342 = load ptr, ptr %341, align 8, !tbaa !16
  %343 = call double @N_VDotProd(ptr noundef %339, ptr noundef %342)
  store double %343, ptr %35, align 8, !tbaa !11
  %344 = getelementptr inbounds [2 x double], ptr %38, i64 0, i64 0
  %345 = load double, ptr %344, align 16, !tbaa !11
  %346 = load double, ptr %35, align 8, !tbaa !11
  %347 = fdiv double %345, %346
  store double %347, ptr %30, align 8, !tbaa !11
  %348 = load ptr, ptr %16, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %348, i32 0, i32 7
  %350 = load ptr, ptr %349, align 8, !tbaa !18
  %351 = load double, ptr %30, align 8, !tbaa !11
  %352 = fneg double %351
  %353 = load ptr, ptr %16, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %353, i32 0, i32 4
  %355 = load ptr, ptr %354, align 8, !tbaa !16
  %356 = load ptr, ptr %16, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %356, i32 0, i32 2
  %358 = load ptr, ptr %357, align 8, !tbaa !22
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %350, double noundef %352, ptr noundef %355, ptr noundef %358)
  %359 = load ptr, ptr %16, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %359, i32 0, i32 7
  %361 = load ptr, ptr %360, align 8, !tbaa !18
  %362 = load ptr, ptr %16, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %362, i32 0, i32 2
  %364 = load ptr, ptr %363, align 8, !tbaa !22
  %365 = load ptr, ptr %16, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %365, i32 0, i32 6
  %367 = load ptr, ptr %366, align 8, !tbaa !17
  %368 = getelementptr inbounds ptr, ptr %367, i64 1
  %369 = load ptr, ptr %368, align 8, !tbaa !5
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %361, double noundef 1.000000e+00, ptr noundef %364, ptr noundef %369)
  %370 = load i32, ptr %44, align 4, !tbaa !9
  %371 = icmp ne i32 %370, 0
  br i1 %371, label %372, label %384

372:                                              ; preds = %333
  %373 = load ptr, ptr %16, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %373, i32 0, i32 6
  %375 = load ptr, ptr %374, align 8, !tbaa !17
  %376 = getelementptr inbounds ptr, ptr %375, i64 1
  %377 = load ptr, ptr %376, align 8, !tbaa !5
  %378 = load ptr, ptr %23, align 8, !tbaa !5
  %379 = load ptr, ptr %16, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %379, i32 0, i32 6
  %381 = load ptr, ptr %380, align 8, !tbaa !17
  %382 = getelementptr inbounds ptr, ptr %381, i64 1
  %383 = load ptr, ptr %382, align 8, !tbaa !5
  call void @N_VDiv(ptr noundef %377, ptr noundef %378, ptr noundef %383)
  br label %384

384:                                              ; preds = %372, %333
  %385 = load i32, ptr %43, align 4, !tbaa !9
  %386 = icmp ne i32 %385, 0
  br i1 %386, label %387, label %418

387:                                              ; preds = %384
  %388 = load ptr, ptr %16, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %388, i32 0, i32 6
  %390 = load ptr, ptr %389, align 8, !tbaa !17
  %391 = getelementptr inbounds ptr, ptr %390, i64 1
  %392 = load ptr, ptr %391, align 8, !tbaa !5
  %393 = load ptr, ptr %16, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %393, i32 0, i32 8
  %395 = load ptr, ptr %394, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %392, ptr noundef %395)
  %396 = load ptr, ptr %26, align 8, !tbaa !5
  %397 = load ptr, ptr %22, align 8, !tbaa !5
  %398 = load ptr, ptr %16, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %398, i32 0, i32 8
  %400 = load ptr, ptr %399, align 8, !tbaa !15
  %401 = load ptr, ptr %16, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %401, i32 0, i32 6
  %403 = load ptr, ptr %402, align 8, !tbaa !17
  %404 = getelementptr inbounds ptr, ptr %403, i64 1
  %405 = load ptr, ptr %404, align 8, !tbaa !5
  %406 = call i32 %396(ptr noundef %397, ptr noundef %400, ptr noundef %405, i32 noundef 2)
  store i32 %406, ptr %50, align 4, !tbaa !9
  %407 = load ptr, ptr %29, align 8, !tbaa !5
  %408 = load i32, ptr %407, align 4, !tbaa !9
  %409 = add nsw i32 %408, 1
  store i32 %409, ptr %407, align 4, !tbaa !9
  %410 = load i32, ptr %50, align 4, !tbaa !9
  %411 = icmp ne i32 %410, 0
  br i1 %411, label %412, label %417

412:                                              ; preds = %387
  %413 = load i32, ptr %50, align 4, !tbaa !9
  %414 = icmp slt i32 %413, 0
  %415 = zext i1 %414 to i64
  %416 = select i1 %414, i32 -3, i32 3
  store i32 %416, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

417:                                              ; preds = %387
  br label %418

418:                                              ; preds = %417, %384
  %419 = load ptr, ptr %25, align 8, !tbaa !5
  %420 = load ptr, ptr %17, align 8, !tbaa !5
  %421 = load ptr, ptr %16, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %421, i32 0, i32 6
  %423 = load ptr, ptr %422, align 8, !tbaa !17
  %424 = getelementptr inbounds ptr, ptr %423, i64 1
  %425 = load ptr, ptr %424, align 8, !tbaa !5
  %426 = load ptr, ptr %16, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %426, i32 0, i32 8
  %428 = load ptr, ptr %427, align 8, !tbaa !15
  %429 = call i32 %419(ptr noundef %420, ptr noundef %425, ptr noundef %428)
  store i32 %429, ptr %50, align 4, !tbaa !9
  %430 = load i32, ptr %50, align 4, !tbaa !9
  %431 = icmp ne i32 %430, 0
  br i1 %431, label %432, label %437

432:                                              ; preds = %418
  %433 = load i32, ptr %50, align 4, !tbaa !9
  %434 = icmp slt i32 %433, 0
  %435 = zext i1 %434 to i64
  %436 = select i1 %434, i32 -2, i32 4
  store i32 %436, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

437:                                              ; preds = %418
  %438 = load i32, ptr %42, align 4, !tbaa !9
  %439 = icmp ne i32 %438, 0
  br i1 %439, label %440, label %463

440:                                              ; preds = %437
  %441 = load ptr, ptr %26, align 8, !tbaa !5
  %442 = load ptr, ptr %22, align 8, !tbaa !5
  %443 = load ptr, ptr %16, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %443, i32 0, i32 8
  %445 = load ptr, ptr %444, align 8, !tbaa !15
  %446 = load ptr, ptr %16, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %446, i32 0, i32 6
  %448 = load ptr, ptr %447, align 8, !tbaa !17
  %449 = getelementptr inbounds ptr, ptr %448, i64 1
  %450 = load ptr, ptr %449, align 8, !tbaa !5
  %451 = call i32 %441(ptr noundef %442, ptr noundef %445, ptr noundef %450, i32 noundef 1)
  store i32 %451, ptr %50, align 4, !tbaa !9
  %452 = load ptr, ptr %29, align 8, !tbaa !5
  %453 = load i32, ptr %452, align 4, !tbaa !9
  %454 = add nsw i32 %453, 1
  store i32 %454, ptr %452, align 4, !tbaa !9
  %455 = load i32, ptr %50, align 4, !tbaa !9
  %456 = icmp ne i32 %455, 0
  br i1 %456, label %457, label %462

457:                                              ; preds = %440
  %458 = load i32, ptr %50, align 4, !tbaa !9
  %459 = icmp slt i32 %458, 0
  %460 = zext i1 %459 to i64
  %461 = select i1 %459, i32 -3, i32 3
  store i32 %461, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

462:                                              ; preds = %440
  br label %472

463:                                              ; preds = %437
  %464 = load ptr, ptr %16, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %464, i32 0, i32 8
  %466 = load ptr, ptr %465, align 8, !tbaa !15
  %467 = load ptr, ptr %16, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %467, i32 0, i32 6
  %469 = load ptr, ptr %468, align 8, !tbaa !17
  %470 = getelementptr inbounds ptr, ptr %469, i64 1
  %471 = load ptr, ptr %470, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %466, ptr noundef %471)
  br label %472

472:                                              ; preds = %463, %462
  %473 = load i32, ptr %45, align 4, !tbaa !9
  %474 = icmp ne i32 %473, 0
  br i1 %474, label %475, label %485

475:                                              ; preds = %472
  %476 = load ptr, ptr %24, align 8, !tbaa !5
  %477 = load ptr, ptr %16, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %477, i32 0, i32 6
  %479 = load ptr, ptr %478, align 8, !tbaa !17
  %480 = getelementptr inbounds ptr, ptr %479, i64 1
  %481 = load ptr, ptr %480, align 8, !tbaa !5
  %482 = load ptr, ptr %16, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %482, i32 0, i32 8
  %484 = load ptr, ptr %483, align 8, !tbaa !15
  call void @N_VProd(ptr noundef %476, ptr noundef %481, ptr noundef %484)
  br label %494

485:                                              ; preds = %472
  %486 = load ptr, ptr %16, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %486, i32 0, i32 6
  %488 = load ptr, ptr %487, align 8, !tbaa !17
  %489 = getelementptr inbounds ptr, ptr %488, i64 1
  %490 = load ptr, ptr %489, align 8, !tbaa !5
  %491 = load ptr, ptr %16, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %491, i32 0, i32 8
  %493 = load ptr, ptr %492, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %490, ptr noundef %493)
  br label %494

494:                                              ; preds = %485, %475
  %495 = load ptr, ptr %16, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %495, i32 0, i32 6
  %497 = load ptr, ptr %496, align 8, !tbaa !17
  %498 = getelementptr inbounds ptr, ptr %497, i64 0
  %499 = load ptr, ptr %498, align 8, !tbaa !5
  %500 = load double, ptr %30, align 8, !tbaa !11
  %501 = fneg double %500
  %502 = load ptr, ptr %16, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %502, i32 0, i32 8
  %504 = load ptr, ptr %503, align 8, !tbaa !15
  %505 = load ptr, ptr %16, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %505, i32 0, i32 6
  %507 = load ptr, ptr %506, align 8, !tbaa !17
  %508 = getelementptr inbounds ptr, ptr %507, i64 1
  %509 = load ptr, ptr %508, align 8, !tbaa !5
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %499, double noundef %501, ptr noundef %504, ptr noundef %509)
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %510

510:                                              ; preds = %808, %494
  %511 = load i32, ptr %49, align 4, !tbaa !9
  %512 = icmp slt i32 %511, 2
  br i1 %512, label %513, label %811

513:                                              ; preds = %510
  %514 = load i32, ptr %49, align 4, !tbaa !9
  %515 = icmp eq i32 %514, 0
  br i1 %515, label %516, label %560

516:                                              ; preds = %513
  %517 = load ptr, ptr %16, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %517, i32 0, i32 6
  %519 = load ptr, ptr %518, align 8, !tbaa !17
  %520 = getelementptr inbounds ptr, ptr %519, i64 1
  %521 = load ptr, ptr %520, align 8, !tbaa !5
  %522 = load ptr, ptr %16, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %522, i32 0, i32 6
  %524 = load ptr, ptr %523, align 8, !tbaa !17
  %525 = getelementptr inbounds ptr, ptr %524, i64 1
  %526 = load ptr, ptr %525, align 8, !tbaa !5
  %527 = call double @N_VDotProd(ptr noundef %521, ptr noundef %526)
  %528 = call double @RSqrt(double noundef %527)
  store double %528, ptr %41, align 8, !tbaa !11
  %529 = load ptr, ptr %16, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %529, i32 0, i32 6
  %531 = load ptr, ptr %530, align 8, !tbaa !17
  %532 = getelementptr inbounds ptr, ptr %531, i64 0
  %533 = load ptr, ptr %532, align 8, !tbaa !5
  %534 = load ptr, ptr %16, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %534, i32 0, i32 6
  %536 = load ptr, ptr %535, align 8, !tbaa !17
  %537 = getelementptr inbounds ptr, ptr %536, i64 0
  %538 = load ptr, ptr %537, align 8, !tbaa !5
  %539 = call double @N_VDotProd(ptr noundef %533, ptr noundef %538)
  %540 = call double @RSqrt(double noundef %539)
  %541 = load double, ptr %41, align 8, !tbaa !11
  %542 = fmul double %540, %541
  %543 = call double @RSqrt(double noundef %542)
  store double %543, ptr %37, align 8, !tbaa !11
  %544 = load ptr, ptr %16, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %544, i32 0, i32 7
  %546 = load ptr, ptr %545, align 8, !tbaa !18
  %547 = load double, ptr %36, align 8, !tbaa !11
  %548 = load double, ptr %36, align 8, !tbaa !11
  %549 = fmul double %547, %548
  %550 = load double, ptr %32, align 8, !tbaa !11
  %551 = fmul double %549, %550
  %552 = load double, ptr %30, align 8, !tbaa !11
  %553 = fdiv double %551, %552
  %554 = load ptr, ptr %16, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %554, i32 0, i32 3
  %556 = load ptr, ptr %555, align 8, !tbaa !20
  %557 = load ptr, ptr %16, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %557, i32 0, i32 3
  %559 = load ptr, ptr %558, align 8, !tbaa !20
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %546, double noundef %553, ptr noundef %556, ptr noundef %559)
  br label %578

560:                                              ; preds = %513
  %561 = load double, ptr %41, align 8, !tbaa !11
  store double %561, ptr %37, align 8, !tbaa !11
  %562 = load ptr, ptr %16, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %562, i32 0, i32 2
  %564 = load ptr, ptr %563, align 8, !tbaa !22
  %565 = load double, ptr %36, align 8, !tbaa !11
  %566 = load double, ptr %36, align 8, !tbaa !11
  %567 = fmul double %565, %566
  %568 = load double, ptr %32, align 8, !tbaa !11
  %569 = fmul double %567, %568
  %570 = load double, ptr %30, align 8, !tbaa !11
  %571 = fdiv double %569, %570
  %572 = load ptr, ptr %16, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %572, i32 0, i32 3
  %574 = load ptr, ptr %573, align 8, !tbaa !20
  %575 = load ptr, ptr %16, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %575, i32 0, i32 3
  %577 = load ptr, ptr %576, align 8, !tbaa !20
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %564, double noundef %571, ptr noundef %574, ptr noundef %577)
  br label %578

578:                                              ; preds = %560, %516
  %579 = load double, ptr %37, align 8, !tbaa !11
  %580 = load double, ptr %31, align 8, !tbaa !11
  %581 = fdiv double %579, %580
  store double %581, ptr %36, align 8, !tbaa !11
  %582 = load double, ptr %36, align 8, !tbaa !11
  %583 = load double, ptr %36, align 8, !tbaa !11
  %584 = call double @llvm.fmuladd.f64(double %582, double %583, double 1.000000e+00)
  %585 = call double @RSqrt(double noundef %584)
  %586 = fdiv double 1.000000e+00, %585
  store double %586, ptr %34, align 8, !tbaa !11
  %587 = load double, ptr %31, align 8, !tbaa !11
  %588 = load double, ptr %36, align 8, !tbaa !11
  %589 = fmul double %587, %588
  %590 = load double, ptr %34, align 8, !tbaa !11
  %591 = fmul double %589, %590
  store double %591, ptr %31, align 8, !tbaa !11
  %592 = load double, ptr %34, align 8, !tbaa !11
  %593 = load double, ptr %34, align 8, !tbaa !11
  %594 = fmul double %592, %593
  %595 = load double, ptr %30, align 8, !tbaa !11
  %596 = fmul double %594, %595
  store double %596, ptr %32, align 8, !tbaa !11
  %597 = load ptr, ptr %18, align 8, !tbaa !5
  %598 = load double, ptr %32, align 8, !tbaa !11
  %599 = load ptr, ptr %16, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %599, i32 0, i32 3
  %601 = load ptr, ptr %600, align 8, !tbaa !20
  %602 = load ptr, ptr %18, align 8, !tbaa !5
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %597, double noundef %598, ptr noundef %601, ptr noundef %602)
  %603 = load double, ptr %31, align 8, !tbaa !11
  %604 = load i32, ptr %49, align 4, !tbaa !9
  %605 = sitofp i32 %604 to double
  %606 = fadd double %605, 1.000000e+00
  %607 = call double @RSqrt(double noundef %606)
  %608 = fmul double %603, %607
  store double %608, ptr %40, align 8, !tbaa !11
  %609 = load ptr, ptr %27, align 8, !tbaa !5
  store double %608, ptr %609, align 8, !tbaa !11
  %610 = load double, ptr %40, align 8, !tbaa !11
  %611 = load double, ptr %21, align 8, !tbaa !11
  %612 = fcmp ole double %610, %611
  br i1 %612, label %613, label %614

613:                                              ; preds = %578
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %811

614:                                              ; preds = %578
  %615 = load double, ptr %40, align 8, !tbaa !11
  %616 = load double, ptr %21, align 8, !tbaa !11
  %617 = fcmp ogt double %615, %616
  br i1 %617, label %631, label %618

618:                                              ; preds = %614
  %619 = load double, ptr %40, align 8, !tbaa !11
  %620 = load double, ptr %39, align 8, !tbaa !11
  %621 = fcmp oge double %619, %620
  br i1 %621, label %622, label %807

622:                                              ; preds = %618
  %623 = load i32, ptr %49, align 4, !tbaa !9
  %624 = icmp eq i32 %623, 1
  br i1 %624, label %625, label %807

625:                                              ; preds = %622
  %626 = load i32, ptr %48, align 4, !tbaa !9
  %627 = load ptr, ptr %16, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %627, i32 0, i32 0
  %629 = load i32, ptr %628, align 8, !tbaa !21
  %630 = icmp eq i32 %626, %629
  br i1 %630, label %631, label %807

631:                                              ; preds = %625, %614
  %632 = load i32, ptr %44, align 4, !tbaa !9
  %633 = icmp ne i32 %632, 0
  br i1 %633, label %634, label %640

634:                                              ; preds = %631
  %635 = load ptr, ptr %18, align 8, !tbaa !5
  %636 = load ptr, ptr %23, align 8, !tbaa !5
  %637 = load ptr, ptr %16, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %637, i32 0, i32 8
  %639 = load ptr, ptr %638, align 8, !tbaa !15
  call void @N_VDiv(ptr noundef %635, ptr noundef %636, ptr noundef %639)
  br label %645

640:                                              ; preds = %631
  %641 = load ptr, ptr %18, align 8, !tbaa !5
  %642 = load ptr, ptr %16, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %642, i32 0, i32 8
  %644 = load ptr, ptr %643, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %641, ptr noundef %644)
  br label %645

645:                                              ; preds = %640, %634
  %646 = load i32, ptr %43, align 4, !tbaa !9
  %647 = icmp ne i32 %646, 0
  br i1 %647, label %648, label %675

648:                                              ; preds = %645
  %649 = load ptr, ptr %26, align 8, !tbaa !5
  %650 = load ptr, ptr %22, align 8, !tbaa !5
  %651 = load ptr, ptr %16, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %651, i32 0, i32 8
  %653 = load ptr, ptr %652, align 8, !tbaa !15
  %654 = load ptr, ptr %16, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %654, i32 0, i32 9
  %656 = load ptr, ptr %655, align 8, !tbaa !23
  %657 = call i32 %649(ptr noundef %650, ptr noundef %653, ptr noundef %656, i32 noundef 2)
  store i32 %657, ptr %50, align 4, !tbaa !9
  %658 = load ptr, ptr %29, align 8, !tbaa !5
  %659 = load i32, ptr %658, align 4, !tbaa !9
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %658, align 4, !tbaa !9
  %661 = load i32, ptr %50, align 4, !tbaa !9
  %662 = icmp ne i32 %661, 0
  br i1 %662, label %663, label %668

663:                                              ; preds = %648
  %664 = load i32, ptr %50, align 4, !tbaa !9
  %665 = icmp slt i32 %664, 0
  %666 = zext i1 %665 to i64
  %667 = select i1 %665, i32 -3, i32 -3
  store i32 %667, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

668:                                              ; preds = %648
  %669 = load ptr, ptr %16, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %669, i32 0, i32 9
  %671 = load ptr, ptr %670, align 8, !tbaa !23
  %672 = load ptr, ptr %16, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %672, i32 0, i32 8
  %674 = load ptr, ptr %673, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %671, ptr noundef %674)
  br label %675

675:                                              ; preds = %668, %645
  %676 = load ptr, ptr %25, align 8, !tbaa !5
  %677 = load ptr, ptr %17, align 8, !tbaa !5
  %678 = load ptr, ptr %16, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %678, i32 0, i32 8
  %680 = load ptr, ptr %679, align 8, !tbaa !15
  %681 = load ptr, ptr %16, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %681, i32 0, i32 9
  %683 = load ptr, ptr %682, align 8, !tbaa !23
  %684 = call i32 %676(ptr noundef %677, ptr noundef %680, ptr noundef %683)
  store i32 %684, ptr %50, align 4, !tbaa !9
  %685 = load i32, ptr %50, align 4, !tbaa !9
  %686 = icmp ne i32 %685, 0
  br i1 %686, label %687, label %692

687:                                              ; preds = %675
  %688 = load i32, ptr %50, align 4, !tbaa !9
  %689 = icmp slt i32 %688, 0
  %690 = zext i1 %689 to i64
  %691 = select i1 %689, i32 -2, i32 4
  store i32 %691, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

692:                                              ; preds = %675
  %693 = load i32, ptr %42, align 4, !tbaa !9
  %694 = icmp ne i32 %693, 0
  br i1 %694, label %695, label %716

695:                                              ; preds = %692
  %696 = load ptr, ptr %26, align 8, !tbaa !5
  %697 = load ptr, ptr %22, align 8, !tbaa !5
  %698 = load ptr, ptr %16, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %698, i32 0, i32 9
  %700 = load ptr, ptr %699, align 8, !tbaa !23
  %701 = load ptr, ptr %16, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %701, i32 0, i32 8
  %703 = load ptr, ptr %702, align 8, !tbaa !15
  %704 = call i32 %696(ptr noundef %697, ptr noundef %700, ptr noundef %703, i32 noundef 1)
  store i32 %704, ptr %50, align 4, !tbaa !9
  %705 = load ptr, ptr %29, align 8, !tbaa !5
  %706 = load i32, ptr %705, align 4, !tbaa !9
  %707 = add nsw i32 %706, 1
  store i32 %707, ptr %705, align 4, !tbaa !9
  %708 = load i32, ptr %50, align 4, !tbaa !9
  %709 = icmp ne i32 %708, 0
  br i1 %709, label %710, label %715

710:                                              ; preds = %695
  %711 = load i32, ptr %50, align 4, !tbaa !9
  %712 = icmp slt i32 %711, 0
  %713 = zext i1 %712 to i64
  %714 = select i1 %712, i32 -3, i32 3
  store i32 %714, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

715:                                              ; preds = %695
  br label %723

716:                                              ; preds = %692
  %717 = load ptr, ptr %16, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %717, i32 0, i32 9
  %719 = load ptr, ptr %718, align 8, !tbaa !23
  %720 = load ptr, ptr %16, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %720, i32 0, i32 8
  %722 = load ptr, ptr %721, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %719, ptr noundef %722)
  br label %723

723:                                              ; preds = %716, %715
  %724 = load i32, ptr %45, align 4, !tbaa !9
  %725 = icmp ne i32 %724, 0
  br i1 %725, label %726, label %734

726:                                              ; preds = %723
  %727 = load ptr, ptr %24, align 8, !tbaa !5
  %728 = load ptr, ptr %16, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %728, i32 0, i32 8
  %730 = load ptr, ptr %729, align 8, !tbaa !15
  %731 = load ptr, ptr %16, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %731, i32 0, i32 9
  %733 = load ptr, ptr %732, align 8, !tbaa !23
  call void @N_VProd(ptr noundef %727, ptr noundef %730, ptr noundef %733)
  br label %741

734:                                              ; preds = %723
  %735 = load ptr, ptr %16, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %735, i32 0, i32 8
  %737 = load ptr, ptr %736, align 8, !tbaa !15
  %738 = load ptr, ptr %16, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %738, i32 0, i32 9
  %740 = load ptr, ptr %739, align 8, !tbaa !23
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %737, ptr noundef %740)
  br label %741

741:                                              ; preds = %734, %726
  %742 = load i32, ptr %47, align 4, !tbaa !9
  %743 = icmp ne i32 %742, 0
  br i1 %743, label %783, label %744

744:                                              ; preds = %741
  store i32 1, ptr %47, align 4, !tbaa !9
  %745 = load i32, ptr %42, align 4, !tbaa !9
  %746 = icmp ne i32 %745, 0
  br i1 %746, label %747, label %766

747:                                              ; preds = %744
  %748 = load ptr, ptr %26, align 8, !tbaa !5
  %749 = load ptr, ptr %22, align 8, !tbaa !5
  %750 = load ptr, ptr %19, align 8, !tbaa !5
  %751 = load ptr, ptr %16, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %751, i32 0, i32 10
  %753 = load ptr, ptr %752, align 8, !tbaa !24
  %754 = call i32 %748(ptr noundef %749, ptr noundef %750, ptr noundef %753, i32 noundef 1)
  store i32 %754, ptr %50, align 4, !tbaa !9
  %755 = load ptr, ptr %29, align 8, !tbaa !5
  %756 = load i32, ptr %755, align 4, !tbaa !9
  %757 = add nsw i32 %756, 1
  store i32 %757, ptr %755, align 4, !tbaa !9
  %758 = load i32, ptr %50, align 4, !tbaa !9
  %759 = icmp ne i32 %758, 0
  br i1 %759, label %760, label %765

760:                                              ; preds = %747
  %761 = load i32, ptr %50, align 4, !tbaa !9
  %762 = icmp slt i32 %761, 0
  %763 = zext i1 %762 to i64
  %764 = select i1 %762, i32 -3, i32 3
  store i32 %764, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

765:                                              ; preds = %747
  br label %771

766:                                              ; preds = %744
  %767 = load ptr, ptr %19, align 8, !tbaa !5
  %768 = load ptr, ptr %16, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %768, i32 0, i32 10
  %770 = load ptr, ptr %769, align 8, !tbaa !24
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %767, ptr noundef %770)
  br label %771

771:                                              ; preds = %766, %765
  %772 = load i32, ptr %45, align 4, !tbaa !9
  %773 = icmp ne i32 %772, 0
  br i1 %773, label %774, label %782

774:                                              ; preds = %771
  %775 = load ptr, ptr %24, align 8, !tbaa !5
  %776 = load ptr, ptr %16, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %776, i32 0, i32 10
  %778 = load ptr, ptr %777, align 8, !tbaa !24
  %779 = load ptr, ptr %16, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %779, i32 0, i32 10
  %781 = load ptr, ptr %780, align 8, !tbaa !24
  call void @N_VProd(ptr noundef %775, ptr noundef %778, ptr noundef %781)
  br label %782

782:                                              ; preds = %774, %771
  br label %783

783:                                              ; preds = %782, %741
  %784 = load ptr, ptr %16, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %784, i32 0, i32 10
  %786 = load ptr, ptr %785, align 8, !tbaa !24
  %787 = load ptr, ptr %16, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %787, i32 0, i32 9
  %789 = load ptr, ptr %788, align 8, !tbaa !23
  %790 = load ptr, ptr %16, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %790, i32 0, i32 8
  %792 = load ptr, ptr %791, align 8, !tbaa !15
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %786, double noundef -1.000000e+00, ptr noundef %789, ptr noundef %792)
  %793 = load ptr, ptr %16, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %793, i32 0, i32 8
  %795 = load ptr, ptr %794, align 8, !tbaa !15
  %796 = load ptr, ptr %16, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %796, i32 0, i32 8
  %798 = load ptr, ptr %797, align 8, !tbaa !15
  %799 = call double @N_VDotProd(ptr noundef %795, ptr noundef %798)
  %800 = call double @RSqrt(double noundef %799)
  store double %800, ptr %40, align 8, !tbaa !11
  %801 = load ptr, ptr %27, align 8, !tbaa !5
  store double %800, ptr %801, align 8, !tbaa !11
  %802 = load double, ptr %40, align 8, !tbaa !11
  %803 = load double, ptr %21, align 8, !tbaa !11
  %804 = fcmp ole double %802, %803
  br i1 %804, label %805, label %806

805:                                              ; preds = %783
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %811

806:                                              ; preds = %783
  br label %807

807:                                              ; preds = %806, %625, %622, %618
  br label %808

808:                                              ; preds = %807
  %809 = load i32, ptr %49, align 4, !tbaa !9
  %810 = add nsw i32 %809, 1
  store i32 %810, ptr %49, align 4, !tbaa !9
  br label %510, !llvm.loop !25

811:                                              ; preds = %805, %613, %510
  %812 = load i32, ptr %46, align 4, !tbaa !9
  %813 = icmp eq i32 %812, 1
  br i1 %813, label %814, label %815

814:                                              ; preds = %811
  br label %995

815:                                              ; preds = %811
  %816 = load ptr, ptr %16, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %816, i32 0, i32 1
  %818 = load ptr, ptr %817, align 8, !tbaa !13
  %819 = load ptr, ptr %16, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %819, i32 0, i32 6
  %821 = load ptr, ptr %820, align 8, !tbaa !17
  %822 = getelementptr inbounds ptr, ptr %821, i64 1
  %823 = load ptr, ptr %822, align 8, !tbaa !5
  %824 = call double @N_VDotProd(ptr noundef %818, ptr noundef %823)
  %825 = getelementptr inbounds [2 x double], ptr %38, i64 0, i64 1
  store double %824, ptr %825, align 8, !tbaa !11
  %826 = getelementptr inbounds [2 x double], ptr %38, i64 0, i64 1
  %827 = load double, ptr %826, align 8, !tbaa !11
  %828 = getelementptr inbounds [2 x double], ptr %38, i64 0, i64 0
  %829 = load double, ptr %828, align 16, !tbaa !11
  %830 = fdiv double %827, %829
  store double %830, ptr %33, align 8, !tbaa !11
  %831 = load ptr, ptr %16, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %831, i32 0, i32 6
  %833 = load ptr, ptr %832, align 8, !tbaa !17
  %834 = getelementptr inbounds ptr, ptr %833, i64 1
  %835 = load ptr, ptr %834, align 8, !tbaa !5
  %836 = load double, ptr %33, align 8, !tbaa !11
  %837 = load ptr, ptr %16, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %837, i32 0, i32 2
  %839 = load ptr, ptr %838, align 8, !tbaa !22
  %840 = load ptr, ptr %16, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %840, i32 0, i32 7
  %842 = load ptr, ptr %841, align 8, !tbaa !18
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %835, double noundef %836, ptr noundef %839, ptr noundef %842)
  %843 = load double, ptr %33, align 8, !tbaa !11
  %844 = load ptr, ptr %16, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %844, i32 0, i32 2
  %846 = load ptr, ptr %845, align 8, !tbaa !22
  %847 = load double, ptr %33, align 8, !tbaa !11
  %848 = load double, ptr %33, align 8, !tbaa !11
  %849 = fmul double %847, %848
  %850 = load ptr, ptr %16, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %850, i32 0, i32 5
  %852 = load ptr, ptr %851, align 8, !tbaa !19
  %853 = load ptr, ptr %16, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %853, i32 0, i32 5
  %855 = load ptr, ptr %854, align 8, !tbaa !19
  call void @N_VLinearSum(double noundef %843, ptr noundef %846, double noundef %849, ptr noundef %852, ptr noundef %855)
  %856 = load ptr, ptr %16, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %856, i32 0, i32 7
  %858 = load ptr, ptr %857, align 8, !tbaa !18
  %859 = load ptr, ptr %16, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %859, i32 0, i32 5
  %861 = load ptr, ptr %860, align 8, !tbaa !19
  %862 = load ptr, ptr %16, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %862, i32 0, i32 5
  %864 = load ptr, ptr %863, align 8, !tbaa !19
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %858, double noundef 1.000000e+00, ptr noundef %861, ptr noundef %864)
  %865 = load i32, ptr %44, align 4, !tbaa !9
  %866 = icmp ne i32 %865, 0
  br i1 %866, label %867, label %875

867:                                              ; preds = %815
  %868 = load ptr, ptr %16, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %868, i32 0, i32 5
  %870 = load ptr, ptr %869, align 8, !tbaa !19
  %871 = load ptr, ptr %23, align 8, !tbaa !5
  %872 = load ptr, ptr %16, align 8, !tbaa !5
  %873 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %872, i32 0, i32 8
  %874 = load ptr, ptr %873, align 8, !tbaa !15
  call void @N_VDiv(ptr noundef %870, ptr noundef %871, ptr noundef %874)
  br label %882

875:                                              ; preds = %815
  %876 = load ptr, ptr %16, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %876, i32 0, i32 5
  %878 = load ptr, ptr %877, align 8, !tbaa !19
  %879 = load ptr, ptr %16, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %879, i32 0, i32 8
  %881 = load ptr, ptr %880, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %878, ptr noundef %881)
  br label %882

882:                                              ; preds = %875, %867
  %883 = load i32, ptr %43, align 4, !tbaa !9
  %884 = icmp ne i32 %883, 0
  br i1 %884, label %885, label %912

885:                                              ; preds = %882
  %886 = load ptr, ptr %16, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %886, i32 0, i32 8
  %888 = load ptr, ptr %887, align 8, !tbaa !15
  %889 = load ptr, ptr %16, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %889, i32 0, i32 4
  %891 = load ptr, ptr %890, align 8, !tbaa !16
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %888, ptr noundef %891)
  %892 = load ptr, ptr %26, align 8, !tbaa !5
  %893 = load ptr, ptr %22, align 8, !tbaa !5
  %894 = load ptr, ptr %16, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %894, i32 0, i32 4
  %896 = load ptr, ptr %895, align 8, !tbaa !16
  %897 = load ptr, ptr %16, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %897, i32 0, i32 8
  %899 = load ptr, ptr %898, align 8, !tbaa !15
  %900 = call i32 %892(ptr noundef %893, ptr noundef %896, ptr noundef %899, i32 noundef 2)
  store i32 %900, ptr %50, align 4, !tbaa !9
  %901 = load ptr, ptr %29, align 8, !tbaa !5
  %902 = load i32, ptr %901, align 4, !tbaa !9
  %903 = add nsw i32 %902, 1
  store i32 %903, ptr %901, align 4, !tbaa !9
  %904 = load i32, ptr %50, align 4, !tbaa !9
  %905 = icmp ne i32 %904, 0
  br i1 %905, label %906, label %911

906:                                              ; preds = %885
  %907 = load i32, ptr %50, align 4, !tbaa !9
  %908 = icmp slt i32 %907, 0
  %909 = zext i1 %908 to i64
  %910 = select i1 %908, i32 -3, i32 3
  store i32 %910, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

911:                                              ; preds = %885
  br label %912

912:                                              ; preds = %911, %882
  %913 = load ptr, ptr %25, align 8, !tbaa !5
  %914 = load ptr, ptr %17, align 8, !tbaa !5
  %915 = load ptr, ptr %16, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %915, i32 0, i32 8
  %917 = load ptr, ptr %916, align 8, !tbaa !15
  %918 = load ptr, ptr %16, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %918, i32 0, i32 4
  %920 = load ptr, ptr %919, align 8, !tbaa !16
  %921 = call i32 %913(ptr noundef %914, ptr noundef %917, ptr noundef %920)
  store i32 %921, ptr %50, align 4, !tbaa !9
  %922 = load i32, ptr %50, align 4, !tbaa !9
  %923 = icmp ne i32 %922, 0
  br i1 %923, label %924, label %929

924:                                              ; preds = %912
  %925 = load i32, ptr %50, align 4, !tbaa !9
  %926 = icmp slt i32 %925, 0
  %927 = zext i1 %926 to i64
  %928 = select i1 %926, i32 -2, i32 4
  store i32 %928, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

929:                                              ; preds = %912
  %930 = load i32, ptr %42, align 4, !tbaa !9
  %931 = icmp ne i32 %930, 0
  br i1 %931, label %932, label %953

932:                                              ; preds = %929
  %933 = load ptr, ptr %26, align 8, !tbaa !5
  %934 = load ptr, ptr %22, align 8, !tbaa !5
  %935 = load ptr, ptr %16, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %935, i32 0, i32 4
  %937 = load ptr, ptr %936, align 8, !tbaa !16
  %938 = load ptr, ptr %16, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %938, i32 0, i32 8
  %940 = load ptr, ptr %939, align 8, !tbaa !15
  %941 = call i32 %933(ptr noundef %934, ptr noundef %937, ptr noundef %940, i32 noundef 1)
  store i32 %941, ptr %50, align 4, !tbaa !9
  %942 = load ptr, ptr %29, align 8, !tbaa !5
  %943 = load i32, ptr %942, align 4, !tbaa !9
  %944 = add nsw i32 %943, 1
  store i32 %944, ptr %942, align 4, !tbaa !9
  %945 = load i32, ptr %50, align 4, !tbaa !9
  %946 = icmp ne i32 %945, 0
  br i1 %946, label %947, label %952

947:                                              ; preds = %932
  %948 = load i32, ptr %50, align 4, !tbaa !9
  %949 = icmp slt i32 %948, 0
  %950 = zext i1 %949 to i64
  %951 = select i1 %949, i32 -3, i32 3
  store i32 %951, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

952:                                              ; preds = %932
  br label %960

953:                                              ; preds = %929
  %954 = load ptr, ptr %16, align 8, !tbaa !5
  %955 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %954, i32 0, i32 4
  %956 = load ptr, ptr %955, align 8, !tbaa !16
  %957 = load ptr, ptr %16, align 8, !tbaa !5
  %958 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %957, i32 0, i32 8
  %959 = load ptr, ptr %958, align 8, !tbaa !15
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %956, ptr noundef %959)
  br label %960

960:                                              ; preds = %953, %952
  %961 = load i32, ptr %45, align 4, !tbaa !9
  %962 = icmp ne i32 %961, 0
  br i1 %962, label %963, label %971

963:                                              ; preds = %960
  %964 = load ptr, ptr %24, align 8, !tbaa !5
  %965 = load ptr, ptr %16, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %965, i32 0, i32 8
  %967 = load ptr, ptr %966, align 8, !tbaa !15
  %968 = load ptr, ptr %16, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %968, i32 0, i32 4
  %970 = load ptr, ptr %969, align 8, !tbaa !16
  call void @N_VProd(ptr noundef %964, ptr noundef %967, ptr noundef %970)
  br label %978

971:                                              ; preds = %960
  %972 = load ptr, ptr %16, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %972, i32 0, i32 8
  %974 = load ptr, ptr %973, align 8, !tbaa !15
  %975 = load ptr, ptr %16, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %975, i32 0, i32 4
  %977 = load ptr, ptr %976, align 8, !tbaa !16
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %974, ptr noundef %977)
  br label %978

978:                                              ; preds = %971, %963
  %979 = load ptr, ptr %16, align 8, !tbaa !5
  %980 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %979, i32 0, i32 6
  %981 = load ptr, ptr %980, align 8, !tbaa !17
  %982 = getelementptr inbounds ptr, ptr %981, i64 1
  %983 = load ptr, ptr %982, align 8, !tbaa !5
  %984 = load ptr, ptr %16, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %984, i32 0, i32 6
  %986 = load ptr, ptr %985, align 8, !tbaa !17
  %987 = getelementptr inbounds ptr, ptr %986, i64 0
  %988 = load ptr, ptr %987, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %983, ptr noundef %988)
  %989 = getelementptr inbounds [2 x double], ptr %38, i64 0, i64 1
  %990 = load double, ptr %989, align 8, !tbaa !11
  %991 = getelementptr inbounds [2 x double], ptr %38, i64 0, i64 0
  store double %990, ptr %991, align 16, !tbaa !11
  br label %992

992:                                              ; preds = %978
  %993 = load i32, ptr %48, align 4, !tbaa !9
  %994 = add nsw i32 %993, 1
  store i32 %994, ptr %48, align 4, !tbaa !9
  br label %327, !llvm.loop !27

995:                                              ; preds = %814, %327
  %996 = load i32, ptr %46, align 4, !tbaa !9
  %997 = icmp eq i32 %996, 1
  br i1 %997, label %1002, label %998

998:                                              ; preds = %995
  %999 = load double, ptr %40, align 8, !tbaa !11
  %1000 = load double, ptr %39, align 8, !tbaa !11
  %1001 = fcmp olt double %999, %1000
  br i1 %1001, label %1002, label %1040

1002:                                             ; preds = %998, %995
  %1003 = load i32, ptr %44, align 4, !tbaa !9
  %1004 = icmp ne i32 %1003, 0
  br i1 %1004, label %1005, label %1009

1005:                                             ; preds = %1002
  %1006 = load ptr, ptr %18, align 8, !tbaa !5
  %1007 = load ptr, ptr %23, align 8, !tbaa !5
  %1008 = load ptr, ptr %18, align 8, !tbaa !5
  call void @N_VDiv(ptr noundef %1006, ptr noundef %1007, ptr noundef %1008)
  br label %1009

1009:                                             ; preds = %1005, %1002
  %1010 = load i32, ptr %43, align 4, !tbaa !9
  %1011 = icmp ne i32 %1010, 0
  br i1 %1011, label %1012, label %1035

1012:                                             ; preds = %1009
  %1013 = load ptr, ptr %26, align 8, !tbaa !5
  %1014 = load ptr, ptr %22, align 8, !tbaa !5
  %1015 = load ptr, ptr %18, align 8, !tbaa !5
  %1016 = load ptr, ptr %16, align 8, !tbaa !5
  %1017 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %1016, i32 0, i32 8
  %1018 = load ptr, ptr %1017, align 8, !tbaa !15
  %1019 = call i32 %1013(ptr noundef %1014, ptr noundef %1015, ptr noundef %1018, i32 noundef 2)
  store i32 %1019, ptr %50, align 4, !tbaa !9
  %1020 = load ptr, ptr %29, align 8, !tbaa !5
  %1021 = load i32, ptr %1020, align 4, !tbaa !9
  %1022 = add nsw i32 %1021, 1
  store i32 %1022, ptr %1020, align 4, !tbaa !9
  %1023 = load i32, ptr %50, align 4, !tbaa !9
  %1024 = icmp ne i32 %1023, 0
  br i1 %1024, label %1025, label %1030

1025:                                             ; preds = %1012
  %1026 = load i32, ptr %50, align 4, !tbaa !9
  %1027 = icmp slt i32 %1026, 0
  %1028 = zext i1 %1027 to i64
  %1029 = select i1 %1027, i32 -3, i32 -3
  store i32 %1029, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

1030:                                             ; preds = %1012
  %1031 = load ptr, ptr %16, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.SptfqmrMemRec, ptr %1031, i32 0, i32 8
  %1033 = load ptr, ptr %1032, align 8, !tbaa !15
  %1034 = load ptr, ptr %18, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %1033, ptr noundef %1034)
  br label %1035

1035:                                             ; preds = %1030, %1009
  %1036 = load i32, ptr %46, align 4, !tbaa !9
  %1037 = icmp eq i32 %1036, 1
  br i1 %1037, label %1038, label %1039

1038:                                             ; preds = %1035
  store i32 0, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

1039:                                             ; preds = %1035
  store i32 1, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

1040:                                             ; preds = %998
  store i32 2, ptr %15, align 4
  store i32 1, ptr %51, align 4
  br label %1041

1041:                                             ; preds = %1040, %1039, %1038, %1025, %947, %924, %906, %760, %710, %687, %663, %457, %432, %412, %271, %248, %230, %187, %140, %109, %54
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  %1042 = load i32, ptr %15, align 4
  ret i32 %1042
}

declare double @N_VDotProd(ptr noundef, ptr noundef) #2

declare void @N_VScale(double noundef, ptr noundef, ptr noundef) #2

declare void @N_VLinearSum(double noundef, ptr noundef, double noundef, ptr noundef, ptr noundef) #2

declare void @N_VProd(ptr noundef, ptr noundef, ptr noundef) #2

declare double @RSqrt(double noundef) #2

declare void @N_VDiv(ptr noundef, ptr noundef, ptr noundef) #2

declare void @N_VConst(double noundef, ptr noundef) #2

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = !{!14, !6, i64 8}
!14 = !{!"", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80}
!15 = !{!14, !6, i64 64}
!16 = !{!14, !6, i64 32}
!17 = !{!14, !6, i64 48}
!18 = !{!14, !6, i64 56}
!19 = !{!14, !6, i64 40}
!20 = !{!14, !6, i64 24}
!21 = !{!14, !10, i64 0}
!22 = !{!14, !6, i64 16}
!23 = !{!14, !6, i64 72}
!24 = !{!14, !6, i64 80}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}


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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -3, 5) i32 @SptfqmrSolve(ptr noundef readonly %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, double noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr nocapture noundef readonly %9, ptr nocapture noundef readonly %10, ptr nocapture noundef writeonly %11, ptr nocapture noundef %12, ptr nocapture noundef %13) local_unnamed_addr #0 {
  %15 = icmp eq ptr %0, null
  br i1 %15, label %.loopexit, label %16

16:                                               ; preds = %14
  store i32 0, ptr %13, align 4, !tbaa !5
  store i32 0, ptr %12, align 4, !tbaa !5
  %17 = add i32 %4, -4
  %or.cond3 = icmp ult i32 %17, -3
  %spec.store.select = select i1 %or.cond3, i32 0, i32 %4
  %18 = and i32 %spec.store.select, 1
  %.not396 = icmp eq i32 %18, 0
  %.not = icmp ult i32 %spec.store.select, 2
  %.not397 = icmp eq ptr %7, null
  %.not398 = icmp eq ptr %8, null
  %19 = tail call double @N_VDotProd(ptr noundef %2, ptr noundef %2) #3
  %20 = fcmp oeq double %19, 0.000000e+00
  %21 = getelementptr inbounds i8, ptr %0, i64 8
  %22 = load ptr, ptr %21, align 8, !tbaa !9
  br i1 %20, label %23, label %24

23:                                               ; preds = %16
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %3, ptr noundef %22) #3
  br label %31

24:                                               ; preds = %16
  %25 = tail call i32 %9(ptr noundef %1, ptr noundef %2, ptr noundef %22) #3
  %.not399 = icmp eq i32 %25, 0
  br i1 %.not399, label %29, label %26

26:                                               ; preds = %24
  %27 = icmp slt i32 %25, 0
  %28 = select i1 %27, i32 -2, i32 4
  br label %.loopexit

29:                                               ; preds = %24
  %30 = load ptr, ptr %21, align 8, !tbaa !9
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %3, double noundef -1.000000e+00, ptr noundef %30, ptr noundef %30) #3
  br label %31

31:                                               ; preds = %29, %23
  %32 = getelementptr inbounds i8, ptr %0, i64 8
  %33 = load ptr, ptr %32, align 8, !tbaa !9
  %34 = getelementptr inbounds i8, ptr %0, i64 64
  %35 = load ptr, ptr %34, align 8, !tbaa !12
  br i1 %.not396, label %43, label %36

36:                                               ; preds = %31
  %37 = tail call i32 %10(ptr noundef %6, ptr noundef %33, ptr noundef %35, i32 noundef 1) #3
  %38 = load i32, ptr %13, align 4, !tbaa !5
  %39 = add nsw i32 %38, 1
  store i32 %39, ptr %13, align 4, !tbaa !5
  %.not400 = icmp eq i32 %37, 0
  br i1 %.not400, label %44, label %40

40:                                               ; preds = %36
  %41 = icmp slt i32 %37, 0
  %42 = select i1 %41, i32 -3, i32 3
  br label %.loopexit

43:                                               ; preds = %31
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %33, ptr noundef %35) #3
  br label %44

44:                                               ; preds = %36, %43
  %45 = getelementptr inbounds i8, ptr %0, i64 64
  %46 = load ptr, ptr %45, align 8, !tbaa !12
  %47 = getelementptr inbounds i8, ptr %0, i64 8
  %48 = load ptr, ptr %47, align 8, !tbaa !9
  br i1 %.not398, label %50, label %49

49:                                               ; preds = %44
  tail call void @N_VProd(ptr noundef nonnull %8, ptr noundef %46, ptr noundef %48) #3
  br label %51

50:                                               ; preds = %44
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %46, ptr noundef %48) #3
  br label %51

51:                                               ; preds = %50, %49
  %52 = getelementptr inbounds i8, ptr %0, i64 8
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  %54 = tail call double @N_VDotProd(ptr noundef %53, ptr noundef %53) #3
  %55 = tail call double @RSqrt(double noundef %54) #3
  store double %55, ptr %11, align 8, !tbaa !13
  %56 = fcmp ugt double %55, %5
  br i1 %56, label %57, label %.loopexit

57:                                               ; preds = %51
  %58 = load ptr, ptr %52, align 8, !tbaa !9
  %59 = getelementptr inbounds i8, ptr %0, i64 64
  %60 = load ptr, ptr %59, align 8, !tbaa !12
  br i1 %.not397, label %62, label %61

61:                                               ; preds = %57
  tail call void @N_VDiv(ptr noundef %58, ptr noundef nonnull %7, ptr noundef %60) #3
  br label %63

62:                                               ; preds = %57
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %58, ptr noundef %60) #3
  br label %63

63:                                               ; preds = %62, %61
  br i1 %.not, label %77, label %64

64:                                               ; preds = %63
  %65 = getelementptr inbounds i8, ptr %0, i64 64
  %66 = load ptr, ptr %65, align 8, !tbaa !12
  %67 = getelementptr inbounds i8, ptr %0, i64 32
  %68 = load ptr, ptr %67, align 8, !tbaa !15
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %66, ptr noundef %68) #3
  %69 = load ptr, ptr %67, align 8, !tbaa !15
  %70 = load ptr, ptr %65, align 8, !tbaa !12
  %71 = tail call i32 %10(ptr noundef %6, ptr noundef %69, ptr noundef %70, i32 noundef 2) #3
  %72 = load i32, ptr %13, align 4, !tbaa !5
  %73 = add nsw i32 %72, 1
  store i32 %73, ptr %13, align 4, !tbaa !5
  %.not401 = icmp eq i32 %71, 0
  br i1 %.not401, label %77, label %74

74:                                               ; preds = %64
  %75 = icmp slt i32 %71, 0
  %76 = select i1 %75, i32 -3, i32 3
  br label %.loopexit

77:                                               ; preds = %64, %63
  %78 = getelementptr inbounds i8, ptr %0, i64 64
  %79 = load ptr, ptr %78, align 8, !tbaa !12
  %80 = getelementptr inbounds i8, ptr %0, i64 32
  %81 = load ptr, ptr %80, align 8, !tbaa !15
  %82 = tail call i32 %9(ptr noundef %1, ptr noundef %79, ptr noundef %81) #3
  %.not402 = icmp eq i32 %82, 0
  br i1 %.not402, label %86, label %83

83:                                               ; preds = %77
  %84 = icmp slt i32 %82, 0
  %85 = select i1 %84, i32 -2, i32 4
  br label %.loopexit

86:                                               ; preds = %77
  %87 = load ptr, ptr %80, align 8, !tbaa !15
  %88 = load ptr, ptr %78, align 8, !tbaa !12
  br i1 %.not396, label %96, label %89

89:                                               ; preds = %86
  %90 = tail call i32 %10(ptr noundef %6, ptr noundef %87, ptr noundef %88, i32 noundef 1) #3
  %91 = load i32, ptr %13, align 4, !tbaa !5
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr %13, align 4, !tbaa !5
  %.not403 = icmp eq i32 %90, 0
  br i1 %.not403, label %97, label %93

93:                                               ; preds = %89
  %94 = icmp slt i32 %90, 0
  %95 = select i1 %94, i32 -3, i32 3
  br label %.loopexit

96:                                               ; preds = %86
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %87, ptr noundef %88) #3
  br label %97

97:                                               ; preds = %89, %96
  %98 = load ptr, ptr %78, align 8, !tbaa !12
  %99 = load ptr, ptr %80, align 8, !tbaa !15
  br i1 %.not398, label %101, label %100

100:                                              ; preds = %97
  tail call void @N_VProd(ptr noundef nonnull %8, ptr noundef %98, ptr noundef %99) #3
  br label %102

101:                                              ; preds = %97
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %98, ptr noundef %99) #3
  br label %102

102:                                              ; preds = %101, %100
  %103 = load ptr, ptr %52, align 8, !tbaa !9
  %104 = getelementptr inbounds i8, ptr %0, i64 48
  %105 = load ptr, ptr %104, align 8, !tbaa !16
  %106 = load ptr, ptr %105, align 8, !tbaa !17
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %103, ptr noundef %106) #3
  %107 = load ptr, ptr %52, align 8, !tbaa !9
  %108 = getelementptr inbounds i8, ptr %0, i64 56
  %109 = load ptr, ptr %108, align 8, !tbaa !18
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %107, ptr noundef %109) #3
  %110 = load ptr, ptr %52, align 8, !tbaa !9
  %111 = getelementptr inbounds i8, ptr %0, i64 40
  %112 = load ptr, ptr %111, align 8, !tbaa !19
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %110, ptr noundef %112) #3
  %113 = getelementptr inbounds i8, ptr %0, i64 24
  %114 = load ptr, ptr %113, align 8, !tbaa !20
  tail call void @N_VConst(double noundef 0.000000e+00, ptr noundef %114) #3
  %115 = load i32, ptr %0, align 8, !tbaa !21
  %116 = icmp sgt i32 %115, 0
  br i1 %116, label %.lr.ph, label %.thread

.lr.ph:                                           ; preds = %102
  %117 = getelementptr inbounds i8, ptr %0, i64 16
  %118 = getelementptr inbounds i8, ptr %0, i64 72
  %119 = getelementptr inbounds i8, ptr %0, i64 80
  br label %120

120:                                              ; preds = %.lr.ph, %346
  %.0338508 = phi i32 [ 0, %.lr.ph ], [ %351, %346 ]
  %.0339507 = phi i32 [ 0, %.lr.ph ], [ %.3576, %346 ]
  %.0344506 = phi double [ %55, %.lr.ph ], [ %217, %346 ]
  %.0347505 = phi double [ 0.000000e+00, %.lr.ph ], [ %219, %346 ]
  %.0350504 = phi double [ -1.000000e+00, %.lr.ph ], [ %.2352, %346 ]
  %.0359503 = phi double [ 0.000000e+00, %.lr.ph ], [ %212, %346 ]
  %.sroa.0.0502 = phi double [ %54, %.lr.ph ], [ %295, %346 ]
  %121 = load i32, ptr %12, align 4, !tbaa !5
  %122 = add nsw i32 %121, 1
  store i32 %122, ptr %12, align 4, !tbaa !5
  %123 = load ptr, ptr %52, align 8, !tbaa !9
  %124 = load ptr, ptr %80, align 8, !tbaa !15
  %125 = tail call double @N_VDotProd(ptr noundef %123, ptr noundef %124) #3
  %126 = fdiv double %.sroa.0.0502, %125
  %127 = load ptr, ptr %108, align 8, !tbaa !18
  %128 = fneg double %126
  %129 = load ptr, ptr %80, align 8, !tbaa !15
  %130 = load ptr, ptr %117, align 8, !tbaa !22
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %127, double noundef %128, ptr noundef %129, ptr noundef %130) #3
  %131 = load ptr, ptr %108, align 8, !tbaa !18
  %132 = load ptr, ptr %117, align 8, !tbaa !22
  %133 = load ptr, ptr %104, align 8, !tbaa !16
  %134 = getelementptr inbounds i8, ptr %133, i64 8
  %135 = load ptr, ptr %134, align 8, !tbaa !17
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %131, double noundef 1.000000e+00, ptr noundef %132, ptr noundef %135) #3
  br i1 %.not397, label %140, label %136

136:                                              ; preds = %120
  %137 = load ptr, ptr %104, align 8, !tbaa !16
  %138 = getelementptr inbounds i8, ptr %137, i64 8
  %139 = load ptr, ptr %138, align 8, !tbaa !17
  tail call void @N_VDiv(ptr noundef %139, ptr noundef nonnull %7, ptr noundef %139) #3
  br label %140

140:                                              ; preds = %136, %120
  br i1 %.not, label %156, label %141

141:                                              ; preds = %140
  %142 = load ptr, ptr %104, align 8, !tbaa !16
  %143 = getelementptr inbounds i8, ptr %142, i64 8
  %144 = load ptr, ptr %143, align 8, !tbaa !17
  %145 = load ptr, ptr %78, align 8, !tbaa !12
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %144, ptr noundef %145) #3
  %146 = load ptr, ptr %78, align 8, !tbaa !12
  %147 = load ptr, ptr %104, align 8, !tbaa !16
  %148 = getelementptr inbounds i8, ptr %147, i64 8
  %149 = load ptr, ptr %148, align 8, !tbaa !17
  %150 = tail call i32 %10(ptr noundef %6, ptr noundef %146, ptr noundef %149, i32 noundef 2) #3
  %151 = load i32, ptr %13, align 4, !tbaa !5
  %152 = add nsw i32 %151, 1
  store i32 %152, ptr %13, align 4, !tbaa !5
  %.not404 = icmp eq i32 %150, 0
  br i1 %.not404, label %156, label %153

153:                                              ; preds = %141
  %154 = icmp slt i32 %150, 0
  %155 = select i1 %154, i32 -3, i32 3
  br label %.loopexit

156:                                              ; preds = %141, %140
  %157 = load ptr, ptr %104, align 8, !tbaa !16
  %158 = getelementptr inbounds i8, ptr %157, i64 8
  %159 = load ptr, ptr %158, align 8, !tbaa !17
  %160 = load ptr, ptr %78, align 8, !tbaa !12
  %161 = tail call i32 %9(ptr noundef %1, ptr noundef %159, ptr noundef %160) #3
  %.not405 = icmp eq i32 %161, 0
  br i1 %.not405, label %165, label %162

162:                                              ; preds = %156
  %163 = icmp slt i32 %161, 0
  %164 = select i1 %163, i32 -2, i32 4
  br label %.loopexit

165:                                              ; preds = %156
  %166 = load ptr, ptr %78, align 8, !tbaa !12
  %167 = load ptr, ptr %104, align 8, !tbaa !16
  %168 = getelementptr inbounds i8, ptr %167, i64 8
  %169 = load ptr, ptr %168, align 8, !tbaa !17
  br i1 %.not396, label %177, label %170

170:                                              ; preds = %165
  %171 = tail call i32 %10(ptr noundef %6, ptr noundef %166, ptr noundef %169, i32 noundef 1) #3
  %172 = load i32, ptr %13, align 4, !tbaa !5
  %173 = add nsw i32 %172, 1
  store i32 %173, ptr %13, align 4, !tbaa !5
  %.not406 = icmp eq i32 %171, 0
  br i1 %.not406, label %178, label %174

174:                                              ; preds = %170
  %175 = icmp slt i32 %171, 0
  %176 = select i1 %175, i32 -3, i32 3
  br label %.loopexit

177:                                              ; preds = %165
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %166, ptr noundef %169) #3
  br label %178

178:                                              ; preds = %170, %177
  %179 = load ptr, ptr %104, align 8, !tbaa !16
  %180 = getelementptr inbounds i8, ptr %179, i64 8
  %181 = load ptr, ptr %180, align 8, !tbaa !17
  %182 = load ptr, ptr %78, align 8, !tbaa !12
  br i1 %.not398, label %184, label %183

183:                                              ; preds = %178
  tail call void @N_VProd(ptr noundef nonnull %8, ptr noundef %181, ptr noundef %182) #3
  br label %185

184:                                              ; preds = %178
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %181, ptr noundef %182) #3
  br label %185

185:                                              ; preds = %184, %183
  %186 = load ptr, ptr %104, align 8, !tbaa !16
  %187 = load ptr, ptr %186, align 8, !tbaa !17
  %188 = load ptr, ptr %78, align 8, !tbaa !12
  %189 = getelementptr inbounds i8, ptr %186, i64 8
  %190 = load ptr, ptr %189, align 8, !tbaa !17
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %187, double noundef %128, ptr noundef %188, ptr noundef %190) #3
  br label %191

191:                                              ; preds = %185, %290
  %192 = phi i1 [ true, %185 ], [ false, %290 ]
  %193 = phi i1 [ false, %185 ], [ true, %290 ]
  %.0501 = phi double [ 1.000000e+00, %185 ], [ 2.000000e+00, %290 ]
  %.1500 = phi i32 [ %.0339507, %185 ], [ %.3, %290 ]
  %.1345499 = phi double [ %.0344506, %185 ], [ %217, %290 ]
  %.1348498 = phi double [ %.0347505, %185 ], [ %219, %290 ]
  %.1351497 = phi double [ %.0350504, %185 ], [ %.2352, %290 ]
  %.1360496 = phi double [ %.0359503, %185 ], [ %212, %290 ]
  br i1 %192, label %194, label %206

194:                                              ; preds = %191
  %195 = load ptr, ptr %104, align 8, !tbaa !16
  %196 = getelementptr inbounds i8, ptr %195, i64 8
  %197 = load ptr, ptr %196, align 8, !tbaa !17
  %198 = tail call double @N_VDotProd(ptr noundef %197, ptr noundef %197) #3
  %199 = tail call double @RSqrt(double noundef %198) #3
  %200 = load ptr, ptr %104, align 8, !tbaa !16
  %201 = load ptr, ptr %200, align 8, !tbaa !17
  %202 = tail call double @N_VDotProd(ptr noundef %201, ptr noundef %201) #3
  %203 = tail call double @RSqrt(double noundef %202) #3
  %204 = fmul double %199, %203
  %205 = tail call double @RSqrt(double noundef %204) #3
  br label %206

206:                                              ; preds = %191, %194
  %.sink632 = phi ptr [ %108, %194 ], [ %117, %191 ]
  %.0362 = phi double [ %205, %194 ], [ %.1351497, %191 ]
  %.2352 = phi double [ %199, %194 ], [ %.1351497, %191 ]
  %207 = load ptr, ptr %.sink632, align 8, !tbaa !17
  %208 = fmul double %.1360496, %.1360496
  %209 = fmul double %208, %.1348498
  %210 = fdiv double %209, %126
  %211 = load ptr, ptr %113, align 8, !tbaa !20
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %207, double noundef %210, ptr noundef %211, ptr noundef %211) #3
  %212 = fdiv double %.0362, %.1345499
  %213 = tail call double @llvm.fmuladd.f64(double %212, double %212, double 1.000000e+00)
  %214 = tail call double @RSqrt(double noundef %213) #3
  %215 = fdiv double 1.000000e+00, %214
  %216 = fmul double %.1345499, %212
  %217 = fmul double %216, %215
  %218 = fmul double %215, %215
  %219 = fmul double %126, %218
  %220 = load ptr, ptr %113, align 8, !tbaa !20
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %2, double noundef %219, ptr noundef %220, ptr noundef %2) #3
  %221 = tail call double @RSqrt(double noundef %.0501) #3
  %222 = fmul double %217, %221
  store double %222, ptr %11, align 8, !tbaa !13
  %223 = fcmp ugt double %222, %5
  br i1 %223, label %224, label %.thread.thread

224:                                              ; preds = %206
  %225 = fcmp ogt double %222, %5
  br i1 %225, label %231, label %226

226:                                              ; preds = %224
  %227 = fcmp oge double %222, %55
  %or.cond5 = and i1 %193, %227
  br i1 %or.cond5, label %228, label %290

228:                                              ; preds = %226
  %229 = load i32, ptr %0, align 8, !tbaa !21
  %230 = icmp eq i32 %.0338508, %229
  br i1 %230, label %231, label %.thread572

231:                                              ; preds = %228, %224
  %232 = load ptr, ptr %78, align 8, !tbaa !12
  br i1 %.not397, label %234, label %233

233:                                              ; preds = %231
  tail call void @N_VDiv(ptr noundef %2, ptr noundef nonnull %7, ptr noundef %232) #3
  br label %235

234:                                              ; preds = %231
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %2, ptr noundef %232) #3
  br label %235

235:                                              ; preds = %234, %233
  br i1 %.not, label %245, label %236

236:                                              ; preds = %235
  %237 = load ptr, ptr %78, align 8, !tbaa !12
  %238 = load ptr, ptr %118, align 8, !tbaa !23
  %239 = tail call i32 %10(ptr noundef %6, ptr noundef %237, ptr noundef %238, i32 noundef 2) #3
  %240 = load i32, ptr %13, align 4, !tbaa !5
  %241 = add nsw i32 %240, 1
  store i32 %241, ptr %13, align 4, !tbaa !5
  %.not407 = icmp eq i32 %239, 0
  br i1 %.not407, label %242, label %.loopexit

242:                                              ; preds = %236
  %243 = load ptr, ptr %118, align 8, !tbaa !23
  %244 = load ptr, ptr %78, align 8, !tbaa !12
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %243, ptr noundef %244) #3
  br label %245

245:                                              ; preds = %242, %235
  %246 = load ptr, ptr %78, align 8, !tbaa !12
  %247 = load ptr, ptr %118, align 8, !tbaa !23
  %248 = tail call i32 %9(ptr noundef %1, ptr noundef %246, ptr noundef %247) #3
  %.not408 = icmp eq i32 %248, 0
  br i1 %.not408, label %252, label %249

249:                                              ; preds = %245
  %250 = icmp slt i32 %248, 0
  %251 = select i1 %250, i32 -2, i32 4
  br label %.loopexit

252:                                              ; preds = %245
  %253 = load ptr, ptr %118, align 8, !tbaa !23
  %254 = load ptr, ptr %78, align 8, !tbaa !12
  br i1 %.not396, label %262, label %255

255:                                              ; preds = %252
  %256 = tail call i32 %10(ptr noundef %6, ptr noundef %253, ptr noundef %254, i32 noundef 1) #3
  %257 = load i32, ptr %13, align 4, !tbaa !5
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr %13, align 4, !tbaa !5
  %.not409 = icmp eq i32 %256, 0
  br i1 %.not409, label %263, label %259

259:                                              ; preds = %255
  %260 = icmp slt i32 %256, 0
  %261 = select i1 %260, i32 -3, i32 3
  br label %.loopexit

262:                                              ; preds = %252
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %253, ptr noundef %254) #3
  br label %263

263:                                              ; preds = %255, %262
  %264 = load ptr, ptr %78, align 8, !tbaa !12
  %265 = load ptr, ptr %118, align 8, !tbaa !23
  br i1 %.not398, label %267, label %266

266:                                              ; preds = %263
  tail call void @N_VProd(ptr noundef nonnull %8, ptr noundef %264, ptr noundef %265) #3
  br label %268

267:                                              ; preds = %263
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %264, ptr noundef %265) #3
  br label %268

268:                                              ; preds = %267, %266
  %.not410 = icmp eq i32 %.1500, 0
  br i1 %.not410, label %269, label %282

269:                                              ; preds = %268
  %270 = load ptr, ptr %119, align 8, !tbaa !24
  br i1 %.not396, label %278, label %271

271:                                              ; preds = %269
  %272 = tail call i32 %10(ptr noundef %6, ptr noundef %3, ptr noundef %270, i32 noundef 1) #3
  %273 = load i32, ptr %13, align 4, !tbaa !5
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %13, align 4, !tbaa !5
  %.not411 = icmp eq i32 %272, 0
  br i1 %.not411, label %279, label %275

275:                                              ; preds = %271
  %276 = icmp slt i32 %272, 0
  %277 = select i1 %276, i32 -3, i32 3
  br label %.loopexit

278:                                              ; preds = %269
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %3, ptr noundef %270) #3
  br label %279

279:                                              ; preds = %271, %278
  br i1 %.not398, label %282, label %280

280:                                              ; preds = %279
  %281 = load ptr, ptr %119, align 8, !tbaa !24
  tail call void @N_VProd(ptr noundef nonnull %8, ptr noundef %281, ptr noundef %281) #3
  br label %282

282:                                              ; preds = %279, %280, %268
  %283 = load ptr, ptr %119, align 8, !tbaa !24
  %284 = load ptr, ptr %118, align 8, !tbaa !23
  %285 = load ptr, ptr %78, align 8, !tbaa !12
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %283, double noundef -1.000000e+00, ptr noundef %284, ptr noundef %285) #3
  %286 = load ptr, ptr %78, align 8, !tbaa !12
  %287 = tail call double @N_VDotProd(ptr noundef %286, ptr noundef %286) #3
  %288 = tail call double @RSqrt(double noundef %287) #3
  store double %288, ptr %11, align 8, !tbaa !13
  %289 = fcmp ugt double %288, %5
  br i1 %289, label %290, label %.thread.thread

290:                                              ; preds = %226, %282
  %.2356 = phi double [ %288, %282 ], [ %222, %226 ]
  %.3 = phi i32 [ 1, %282 ], [ %.1500, %226 ]
  br i1 %192, label %191, label %.thread572, !llvm.loop !25

.thread572:                                       ; preds = %228, %290
  %.3576 = phi i32 [ %.3, %290 ], [ %.1500, %228 ]
  %.2356575 = phi double [ %.2356, %290 ], [ %222, %228 ]
  %291 = load ptr, ptr %52, align 8, !tbaa !9
  %292 = load ptr, ptr %104, align 8, !tbaa !16
  %293 = getelementptr inbounds i8, ptr %292, i64 8
  %294 = load ptr, ptr %293, align 8, !tbaa !17
  %295 = tail call double @N_VDotProd(ptr noundef %291, ptr noundef %294) #3
  %296 = fdiv double %295, %.sroa.0.0502
  %297 = load ptr, ptr %104, align 8, !tbaa !16
  %298 = getelementptr inbounds i8, ptr %297, i64 8
  %299 = load ptr, ptr %298, align 8, !tbaa !17
  %300 = load ptr, ptr %117, align 8, !tbaa !22
  %301 = load ptr, ptr %108, align 8, !tbaa !18
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %299, double noundef %296, ptr noundef %300, ptr noundef %301) #3
  %302 = load ptr, ptr %117, align 8, !tbaa !22
  %303 = fmul double %296, %296
  %304 = load ptr, ptr %111, align 8, !tbaa !19
  tail call void @N_VLinearSum(double noundef %296, ptr noundef %302, double noundef %303, ptr noundef %304, ptr noundef %304) #3
  %305 = load ptr, ptr %108, align 8, !tbaa !18
  %306 = load ptr, ptr %111, align 8, !tbaa !19
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %305, double noundef 1.000000e+00, ptr noundef %306, ptr noundef %306) #3
  %307 = load ptr, ptr %111, align 8, !tbaa !19
  %308 = load ptr, ptr %78, align 8, !tbaa !12
  br i1 %.not397, label %310, label %309

309:                                              ; preds = %.thread572
  tail call void @N_VDiv(ptr noundef %307, ptr noundef nonnull %7, ptr noundef %308) #3
  br label %311

310:                                              ; preds = %.thread572
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %307, ptr noundef %308) #3
  br label %311

311:                                              ; preds = %310, %309
  br i1 %.not, label %323, label %312

312:                                              ; preds = %311
  %313 = load ptr, ptr %78, align 8, !tbaa !12
  %314 = load ptr, ptr %80, align 8, !tbaa !15
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %313, ptr noundef %314) #3
  %315 = load ptr, ptr %80, align 8, !tbaa !15
  %316 = load ptr, ptr %78, align 8, !tbaa !12
  %317 = tail call i32 %10(ptr noundef %6, ptr noundef %315, ptr noundef %316, i32 noundef 2) #3
  %318 = load i32, ptr %13, align 4, !tbaa !5
  %319 = add nsw i32 %318, 1
  store i32 %319, ptr %13, align 4, !tbaa !5
  %.not412 = icmp eq i32 %317, 0
  br i1 %.not412, label %323, label %320

320:                                              ; preds = %312
  %321 = icmp slt i32 %317, 0
  %322 = select i1 %321, i32 -3, i32 3
  br label %.loopexit

323:                                              ; preds = %312, %311
  %324 = load ptr, ptr %78, align 8, !tbaa !12
  %325 = load ptr, ptr %80, align 8, !tbaa !15
  %326 = tail call i32 %9(ptr noundef %1, ptr noundef %324, ptr noundef %325) #3
  %.not413 = icmp eq i32 %326, 0
  br i1 %.not413, label %330, label %327

327:                                              ; preds = %323
  %328 = icmp slt i32 %326, 0
  %329 = select i1 %328, i32 -2, i32 4
  br label %.loopexit

330:                                              ; preds = %323
  %331 = load ptr, ptr %80, align 8, !tbaa !15
  %332 = load ptr, ptr %78, align 8, !tbaa !12
  br i1 %.not396, label %340, label %333

333:                                              ; preds = %330
  %334 = tail call i32 %10(ptr noundef %6, ptr noundef %331, ptr noundef %332, i32 noundef 1) #3
  %335 = load i32, ptr %13, align 4, !tbaa !5
  %336 = add nsw i32 %335, 1
  store i32 %336, ptr %13, align 4, !tbaa !5
  %.not414 = icmp eq i32 %334, 0
  br i1 %.not414, label %341, label %337

337:                                              ; preds = %333
  %338 = icmp slt i32 %334, 0
  %339 = select i1 %338, i32 -3, i32 3
  br label %.loopexit

340:                                              ; preds = %330
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %331, ptr noundef %332) #3
  br label %341

341:                                              ; preds = %333, %340
  %342 = load ptr, ptr %78, align 8, !tbaa !12
  %343 = load ptr, ptr %80, align 8, !tbaa !15
  br i1 %.not398, label %345, label %344

344:                                              ; preds = %341
  tail call void @N_VProd(ptr noundef nonnull %8, ptr noundef %342, ptr noundef %343) #3
  br label %346

345:                                              ; preds = %341
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %342, ptr noundef %343) #3
  br label %346

346:                                              ; preds = %345, %344
  %347 = load ptr, ptr %104, align 8, !tbaa !16
  %348 = getelementptr inbounds i8, ptr %347, i64 8
  %349 = load ptr, ptr %348, align 8, !tbaa !17
  %350 = load ptr, ptr %347, align 8, !tbaa !17
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %349, ptr noundef %350) #3
  %351 = add nuw nsw i32 %.0338508, 1
  %352 = load i32, ptr %0, align 8, !tbaa !21
  %353 = icmp slt i32 %351, %352
  br i1 %353, label %120, label %.thread, !llvm.loop !27

.thread:                                          ; preds = %346, %102
  %.4358 = phi double [ -1.000000e+00, %102 ], [ %.2356575, %346 ]
  %354 = fcmp olt double %.4358, %55
  br i1 %354, label %.thread.thread, label %.loopexit

.thread.thread:                                   ; preds = %206, %282, %.thread
  %not. = phi i32 [ 1, %.thread ], [ 0, %282 ], [ 0, %206 ]
  br i1 %.not397, label %356, label %355

355:                                              ; preds = %.thread.thread
  tail call void @N_VDiv(ptr noundef %2, ptr noundef nonnull %7, ptr noundef %2) #3
  br label %356

356:                                              ; preds = %355, %.thread.thread
  br i1 %.not, label %.loopexit, label %357

357:                                              ; preds = %356
  %358 = load ptr, ptr %78, align 8, !tbaa !12
  %359 = tail call i32 %10(ptr noundef %6, ptr noundef %2, ptr noundef %358, i32 noundef 2) #3
  %360 = load i32, ptr %13, align 4, !tbaa !5
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %13, align 4, !tbaa !5
  %.not415 = icmp eq i32 %359, 0
  br i1 %.not415, label %362, label %.loopexit

362:                                              ; preds = %357
  %363 = load ptr, ptr %78, align 8, !tbaa !12
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %363, ptr noundef %2) #3
  br label %.loopexit

.loopexit:                                        ; preds = %236, %356, %362, %.thread, %357, %51, %14, %337, %327, %320, %275, %259, %249, %174, %162, %153, %93, %83, %74, %40, %26
  %.0343 = phi i32 [ %42, %40 ], [ %76, %74 ], [ %85, %83 ], [ %95, %93 ], [ %155, %153 ], [ %164, %162 ], [ %176, %174 ], [ %322, %320 ], [ %329, %327 ], [ %339, %337 ], [ %251, %249 ], [ %261, %259 ], [ %277, %275 ], [ %28, %26 ], [ -1, %14 ], [ 0, %51 ], [ -3, %357 ], [ 2, %.thread ], [ %not., %362 ], [ %not., %356 ], [ -3, %236 ]
  ret i32 %.0343
}

declare double @N_VDotProd(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @N_VScale(double noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @N_VLinearSum(double noundef, ptr noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @N_VProd(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare double @RSqrt(double noundef) local_unnamed_addr #1

declare void @N_VDiv(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @N_VConst(double 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

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 = { 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, !11, i64 8}
!10 = !{!"", !6, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!10, !11, i64 64}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!10, !11, i64 32}
!16 = !{!10, !11, i64 48}
!17 = !{!11, !11, i64 0}
!18 = !{!10, !11, i64 56}
!19 = !{!10, !11, i64 40}
!20 = !{!10, !11, i64 24}
!21 = !{!10, !6, i64 0}
!22 = !{!10, !11, i64 16}
!23 = !{!10, !11, i64 72}
!24 = !{!10, !11, i64 80}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass