; LLVM IR from sourceryinstitute/MORFEUS-Source :: src/FV/src/mesh_optimize/OptMS (SMuntangle)

; 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.__SMlp = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

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

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

declare i32 @SMerror(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #1

; 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 @SMphaseOneLP(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #2 {
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca ptr, align 8
  %34 = alloca double, align 8
  %35 = alloca [150 x double], align 16
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca [3 x double], align 16
  %45 = alloca [3 x double], align 16
  %46 = alloca [3 x double], align 16
  %47 = alloca i32, align 4
  store i32 %0, ptr %8, align 4, !tbaa !5
  store i32 %1, ptr %9, align 4, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !9
  store ptr %3, ptr %11, align 8, !tbaa !9
  store ptr %4, ptr %12, align 8, !tbaa !9
  store ptr %5, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 1, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 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 1200, 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 8, 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 8, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %46) #4
  %48 = load i32, ptr %8, align 4, !tbaa !5
  %49 = load i32, ptr %9, align 4, !tbaa !5
  %50 = sub nsw i32 %48, %49
  store i32 %50, ptr %24, align 4, !tbaa !5
  %51 = load ptr, ptr %13, align 8, !tbaa !9
  store i32 1, ptr %51, align 4, !tbaa !5
  %52 = load ptr, ptr %12, align 8, !tbaa !9
  %53 = getelementptr inbounds %struct.__SMlp, ptr %52, i32 0, i32 5
  %54 = load ptr, ptr %53, align 8, !tbaa !11
  store ptr %54, ptr %20, align 8, !tbaa !9
  %55 = load ptr, ptr %12, align 8, !tbaa !9
  %56 = getelementptr inbounds %struct.__SMlp, ptr %55, i32 0, i32 7
  %57 = load ptr, ptr %56, align 8, !tbaa !13
  store ptr %57, ptr %26, align 8, !tbaa !9
  %58 = load ptr, ptr %12, align 8, !tbaa !9
  %59 = getelementptr inbounds %struct.__SMlp, ptr %58, i32 0, i32 6
  %60 = load ptr, ptr %59, align 8, !tbaa !14
  store ptr %60, ptr %25, align 8, !tbaa !9
  %61 = load ptr, ptr %12, align 8, !tbaa !9
  %62 = getelementptr inbounds %struct.__SMlp, ptr %61, i32 0, i32 4
  %63 = load ptr, ptr %62, align 8, !tbaa !15
  store ptr %63, ptr %36, align 8, !tbaa !9
  %64 = load ptr, ptr %12, align 8, !tbaa !9
  %65 = getelementptr inbounds %struct.__SMlp, ptr %64, i32 0, i32 9
  %66 = load ptr, ptr %65, align 8, !tbaa !16
  store ptr %66, ptr %37, align 8, !tbaa !9
  %67 = load ptr, ptr %12, align 8, !tbaa !9
  %68 = getelementptr inbounds %struct.__SMlp, ptr %67, i32 0, i32 10
  %69 = load ptr, ptr %68, align 8, !tbaa !17
  store ptr %69, ptr %38, align 8, !tbaa !9
  %70 = load ptr, ptr %12, align 8, !tbaa !9
  %71 = getelementptr inbounds %struct.__SMlp, ptr %70, i32 0, i32 11
  %72 = load ptr, ptr %71, align 8, !tbaa !18
  store ptr %72, ptr %33, align 8, !tbaa !9
  %73 = load ptr, ptr %12, align 8, !tbaa !9
  %74 = getelementptr inbounds %struct.__SMlp, ptr %73, i32 0, i32 12
  %75 = load ptr, ptr %74, align 8, !tbaa !19
  store ptr %75, ptr %39, align 8, !tbaa !9
  %76 = load ptr, ptr %12, align 8, !tbaa !9
  %77 = getelementptr inbounds %struct.__SMlp, ptr %76, i32 0, i32 13
  %78 = load ptr, ptr %77, align 8, !tbaa !20
  store ptr %78, ptr %40, align 8, !tbaa !9
  %79 = load ptr, ptr %12, align 8, !tbaa !9
  %80 = getelementptr inbounds %struct.__SMlp, ptr %79, i32 0, i32 14
  %81 = load ptr, ptr %80, align 8, !tbaa !21
  store ptr %81, ptr %41, align 8, !tbaa !9
  %82 = load ptr, ptr %12, align 8, !tbaa !9
  %83 = getelementptr inbounds %struct.__SMlp, ptr %82, i32 0, i32 15
  %84 = load ptr, ptr %83, align 8, !tbaa !22
  store ptr %84, ptr %42, align 8, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %85

85:                                               ; preds = %123, %6
  %86 = load i32, ptr %15, align 4, !tbaa !5
  %87 = load i32, ptr %9, align 4, !tbaa !5
  %88 = icmp slt i32 %86, %87
  br i1 %88, label %89, label %126

89:                                               ; preds = %85
  %90 = load ptr, ptr %25, align 8, !tbaa !9
  %91 = load i32, ptr %15, align 4, !tbaa !5
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds i32, ptr %90, i64 %92
  store i32 0, ptr %93, align 4, !tbaa !5
  %94 = load ptr, ptr %20, align 8, !tbaa !9
  %95 = load i32, ptr %15, align 4, !tbaa !5
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds i32, ptr %94, i64 %96
  store i32 0, ptr %97, align 4, !tbaa !5
  %98 = load ptr, ptr %33, align 8, !tbaa !9
  %99 = load i32, ptr %15, align 4, !tbaa !5
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds double, ptr %98, i64 %100
  store double 0.000000e+00, ptr %101, align 8, !tbaa !23
  %102 = load ptr, ptr %37, align 8, !tbaa !9
  %103 = load i32, ptr %15, align 4, !tbaa !5
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds double, ptr %102, i64 %104
  store double 0.000000e+00, ptr %105, align 8, !tbaa !23
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %106

106:                                              ; preds = %119, %89
  %107 = load i32, ptr %16, align 4, !tbaa !5
  %108 = load i32, ptr %8, align 4, !tbaa !5
  %109 = icmp slt i32 %107, %108
  br i1 %109, label %110, label %122

110:                                              ; preds = %106
  %111 = load ptr, ptr %42, align 8, !tbaa !9
  %112 = load i32, ptr %15, align 4, !tbaa !5
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds ptr, ptr %111, i64 %113
  %115 = load ptr, ptr %114, align 8, !tbaa !9
  %116 = load i32, ptr %16, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds double, ptr %115, i64 %117
  store double 0.000000e+00, ptr %118, align 8, !tbaa !23
  br label %119

119:                                              ; preds = %110
  %120 = load i32, ptr %16, align 4, !tbaa !5
  %121 = add nsw i32 %120, 1
  store i32 %121, ptr %16, align 4, !tbaa !5
  br label %106, !llvm.loop !25

122:                                              ; preds = %106
  br label %123

123:                                              ; preds = %122
  %124 = load i32, ptr %15, align 4, !tbaa !5
  %125 = add nsw i32 %124, 1
  store i32 %125, ptr %15, align 4, !tbaa !5
  br label %85, !llvm.loop !27

126:                                              ; preds = %85
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %127

127:                                              ; preds = %142, %126
  %128 = load i32, ptr %15, align 4, !tbaa !5
  %129 = load i32, ptr %9, align 4, !tbaa !5
  %130 = load i32, ptr %9, align 4, !tbaa !5
  %131 = mul nsw i32 %129, %130
  %132 = icmp slt i32 %128, %131
  br i1 %132, label %133, label %145

133:                                              ; preds = %127
  %134 = load ptr, ptr %40, align 8, !tbaa !9
  %135 = load i32, ptr %15, align 4, !tbaa !5
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds double, ptr %134, i64 %136
  store double 0.000000e+00, ptr %137, align 8, !tbaa !23
  %138 = load ptr, ptr %41, align 8, !tbaa !9
  %139 = load i32, ptr %15, align 4, !tbaa !5
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds double, ptr %138, i64 %140
  store double 0.000000e+00, ptr %141, align 8, !tbaa !23
  br label %142

142:                                              ; preds = %133
  %143 = load i32, ptr %15, align 4, !tbaa !5
  %144 = add nsw i32 %143, 1
  store i32 %144, ptr %15, align 4, !tbaa !5
  br label %127, !llvm.loop !28

145:                                              ; preds = %127
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %146

146:                                              ; preds = %167, %145
  %147 = load i32, ptr %15, align 4, !tbaa !5
  %148 = load i32, ptr %8, align 4, !tbaa !5
  %149 = icmp slt i32 %147, %148
  br i1 %149, label %150, label %170

150:                                              ; preds = %146
  %151 = load ptr, ptr %26, align 8, !tbaa !9
  %152 = load i32, ptr %15, align 4, !tbaa !5
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i32, ptr %151, i64 %153
  store i32 0, ptr %154, align 4, !tbaa !5
  %155 = load ptr, ptr %36, align 8, !tbaa !9
  %156 = load i32, ptr %15, align 4, !tbaa !5
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds double, ptr %155, i64 %157
  store double 0.000000e+00, ptr %158, align 8, !tbaa !23
  %159 = load ptr, ptr %38, align 8, !tbaa !9
  %160 = load i32, ptr %15, align 4, !tbaa !5
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds double, ptr %159, i64 %161
  store double 0.000000e+00, ptr %162, align 8, !tbaa !23
  %163 = load ptr, ptr %39, align 8, !tbaa !9
  %164 = load i32, ptr %15, align 4, !tbaa !5
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds double, ptr %163, i64 %165
  store double 0.000000e+00, ptr %166, align 8, !tbaa !23
  br label %167

167:                                              ; preds = %150
  %168 = load i32, ptr %15, align 4, !tbaa !5
  %169 = add nsw i32 %168, 1
  store i32 %169, ptr %15, align 4, !tbaa !5
  br label %146, !llvm.loop !29

170:                                              ; preds = %146
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %171

171:                                              ; preds = %202, %170
  %172 = load i32, ptr %15, align 4, !tbaa !5
  %173 = load i32, ptr %9, align 4, !tbaa !5
  %174 = icmp slt i32 %172, %173
  br i1 %174, label %175, label %205

175:                                              ; preds = %171
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %176

176:                                              ; preds = %198, %175
  %177 = load i32, ptr %16, align 4, !tbaa !5
  %178 = load i32, ptr %8, align 4, !tbaa !5
  %179 = icmp slt i32 %177, %178
  br i1 %179, label %180, label %201

180:                                              ; preds = %176
  %181 = load ptr, ptr %10, align 8, !tbaa !9
  %182 = load i32, ptr %15, align 4, !tbaa !5
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds ptr, ptr %181, i64 %183
  %185 = load ptr, ptr %184, align 8, !tbaa !9
  %186 = load i32, ptr %16, align 4, !tbaa !5
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds double, ptr %185, i64 %187
  %189 = load double, ptr %188, align 8, !tbaa !23
  %190 = load ptr, ptr %42, align 8, !tbaa !9
  %191 = load i32, ptr %15, align 4, !tbaa !5
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds ptr, ptr %190, i64 %192
  %194 = load ptr, ptr %193, align 8, !tbaa !9
  %195 = load i32, ptr %16, align 4, !tbaa !5
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds double, ptr %194, i64 %196
  store double %189, ptr %197, align 8, !tbaa !23
  br label %198

198:                                              ; preds = %180
  %199 = load i32, ptr %16, align 4, !tbaa !5
  %200 = add nsw i32 %199, 1
  store i32 %200, ptr %16, align 4, !tbaa !5
  br label %176, !llvm.loop !30

201:                                              ; preds = %176
  br label %202

202:                                              ; preds = %201
  %203 = load i32, ptr %15, align 4, !tbaa !5
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %15, align 4, !tbaa !5
  br label %171, !llvm.loop !31

205:                                              ; preds = %171
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %206

206:                                              ; preds = %217, %205
  %207 = load i32, ptr %15, align 4, !tbaa !5
  %208 = load i32, ptr %9, align 4, !tbaa !5
  %209 = sub nsw i32 %208, 1
  %210 = icmp slt i32 %207, %209
  br i1 %210, label %211, label %220

211:                                              ; preds = %206
  %212 = load i32, ptr %15, align 4, !tbaa !5
  %213 = load ptr, ptr %25, align 8, !tbaa !9
  %214 = load i32, ptr %15, align 4, !tbaa !5
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds i32, ptr %213, i64 %215
  store i32 %212, ptr %216, align 4, !tbaa !5
  br label %217

217:                                              ; preds = %211
  %218 = load i32, ptr %15, align 4, !tbaa !5
  %219 = add nsw i32 %218, 1
  store i32 %219, ptr %15, align 4, !tbaa !5
  br label %206, !llvm.loop !32

220:                                              ; preds = %206
  %221 = load i32, ptr %8, align 4, !tbaa !5
  %222 = sub nsw i32 %221, 1
  %223 = load ptr, ptr %25, align 8, !tbaa !9
  %224 = load i32, ptr %9, align 4, !tbaa !5
  %225 = sub nsw i32 %224, 1
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds i32, ptr %223, i64 %226
  store i32 %222, ptr %227, align 4, !tbaa !5
  %228 = load i32, ptr %9, align 4, !tbaa !5
  %229 = icmp eq i32 %228, 3
  br i1 %229, label %230, label %385

230:                                              ; preds = %220
  store i32 0, ptr %43, align 4, !tbaa !5
  %231 = load ptr, ptr %42, align 8, !tbaa !9
  %232 = getelementptr inbounds ptr, ptr %231, i64 0
  %233 = load ptr, ptr %232, align 8, !tbaa !9
  %234 = load ptr, ptr %25, align 8, !tbaa !9
  %235 = getelementptr inbounds i32, ptr %234, i64 0
  %236 = load i32, ptr %235, align 4, !tbaa !5
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds double, ptr %233, i64 %237
  %239 = load double, ptr %238, align 8, !tbaa !23
  %240 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 0
  store double %239, ptr %240, align 16, !tbaa !23
  %241 = load ptr, ptr %42, align 8, !tbaa !9
  %242 = getelementptr inbounds ptr, ptr %241, i64 0
  %243 = load ptr, ptr %242, align 8, !tbaa !9
  %244 = load ptr, ptr %25, align 8, !tbaa !9
  %245 = getelementptr inbounds i32, ptr %244, i64 1
  %246 = load i32, ptr %245, align 4, !tbaa !5
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds double, ptr %243, i64 %247
  %249 = load double, ptr %248, align 8, !tbaa !23
  %250 = getelementptr inbounds [3 x double], ptr %45, i64 0, i64 0
  store double %249, ptr %250, align 16, !tbaa !23
  %251 = load ptr, ptr %42, align 8, !tbaa !9
  %252 = getelementptr inbounds ptr, ptr %251, i64 1
  %253 = load ptr, ptr %252, align 8, !tbaa !9
  %254 = load ptr, ptr %25, align 8, !tbaa !9
  %255 = getelementptr inbounds i32, ptr %254, i64 0
  %256 = load i32, ptr %255, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds double, ptr %253, i64 %257
  %259 = load double, ptr %258, align 8, !tbaa !23
  %260 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 1
  store double %259, ptr %260, align 8, !tbaa !23
  %261 = load ptr, ptr %42, align 8, !tbaa !9
  %262 = getelementptr inbounds ptr, ptr %261, i64 1
  %263 = load ptr, ptr %262, align 8, !tbaa !9
  %264 = load ptr, ptr %25, align 8, !tbaa !9
  %265 = getelementptr inbounds i32, ptr %264, i64 1
  %266 = load i32, ptr %265, align 4, !tbaa !5
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds double, ptr %263, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !23
  %270 = getelementptr inbounds [3 x double], ptr %45, i64 0, i64 1
  store double %269, ptr %270, align 8, !tbaa !23
  %271 = load ptr, ptr %42, align 8, !tbaa !9
  %272 = getelementptr inbounds ptr, ptr %271, i64 2
  %273 = load ptr, ptr %272, align 8, !tbaa !9
  %274 = load ptr, ptr %25, align 8, !tbaa !9
  %275 = getelementptr inbounds i32, ptr %274, i64 0
  %276 = load i32, ptr %275, align 4, !tbaa !5
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %273, i64 %277
  %279 = load double, ptr %278, align 8, !tbaa !23
  %280 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 2
  store double %279, ptr %280, align 16, !tbaa !23
  %281 = load ptr, ptr %42, align 8, !tbaa !9
  %282 = getelementptr inbounds ptr, ptr %281, i64 2
  %283 = load ptr, ptr %282, align 8, !tbaa !9
  %284 = load ptr, ptr %25, align 8, !tbaa !9
  %285 = getelementptr inbounds i32, ptr %284, i64 1
  %286 = load i32, ptr %285, align 4, !tbaa !5
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds double, ptr %283, i64 %287
  %289 = load double, ptr %288, align 8, !tbaa !23
  %290 = getelementptr inbounds [3 x double], ptr %45, i64 0, i64 2
  store double %289, ptr %290, align 16, !tbaa !23
  %291 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 0
  %292 = getelementptr inbounds [3 x double], ptr %45, i64 0, i64 0
  %293 = getelementptr inbounds [3 x double], ptr %46, i64 0, i64 0
  call void @vCross(ptr noundef %291, ptr noundef %292, ptr noundef %293)
  %294 = getelementptr inbounds [3 x double], ptr %46, i64 0, i64 0
  %295 = call double @dMagnitude(ptr noundef %294)
  %296 = fcmp olt double %295, 1.000000e-13
  br i1 %296, label %297, label %298

297:                                              ; preds = %230
  store i32 1, ptr %43, align 4, !tbaa !5
  br label %298

298:                                              ; preds = %297, %230
  br label %299

299:                                              ; preds = %383, %298
  %300 = load i32, ptr %43, align 4, !tbaa !5
  %301 = icmp ne i32 %300, 0
  br i1 %301, label %302, label %309

302:                                              ; preds = %299
  %303 = load ptr, ptr %25, align 8, !tbaa !9
  %304 = getelementptr inbounds i32, ptr %303, i64 1
  %305 = load i32, ptr %304, align 4, !tbaa !5
  %306 = load i32, ptr %8, align 4, !tbaa !5
  %307 = sub nsw i32 %306, 1
  %308 = icmp slt i32 %305, %307
  br label %309

309:                                              ; preds = %302, %299
  %310 = phi i1 [ false, %299 ], [ %308, %302 ]
  br i1 %310, label %311, label %384

311:                                              ; preds = %309
  store i32 0, ptr %43, align 4, !tbaa !5
  %312 = load ptr, ptr %25, align 8, !tbaa !9
  %313 = getelementptr inbounds i32, ptr %312, i64 1
  %314 = load i32, ptr %313, align 4, !tbaa !5
  %315 = add nsw i32 %314, 1
  store i32 %315, ptr %313, align 4, !tbaa !5
  %316 = load ptr, ptr %42, align 8, !tbaa !9
  %317 = getelementptr inbounds ptr, ptr %316, i64 0
  %318 = load ptr, ptr %317, align 8, !tbaa !9
  %319 = load ptr, ptr %25, align 8, !tbaa !9
  %320 = getelementptr inbounds i32, ptr %319, i64 0
  %321 = load i32, ptr %320, align 4, !tbaa !5
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds double, ptr %318, i64 %322
  %324 = load double, ptr %323, align 8, !tbaa !23
  %325 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 0
  store double %324, ptr %325, align 16, !tbaa !23
  %326 = load ptr, ptr %42, align 8, !tbaa !9
  %327 = getelementptr inbounds ptr, ptr %326, i64 0
  %328 = load ptr, ptr %327, align 8, !tbaa !9
  %329 = load ptr, ptr %25, align 8, !tbaa !9
  %330 = getelementptr inbounds i32, ptr %329, i64 1
  %331 = load i32, ptr %330, align 4, !tbaa !5
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds double, ptr %328, i64 %332
  %334 = load double, ptr %333, align 8, !tbaa !23
  %335 = getelementptr inbounds [3 x double], ptr %45, i64 0, i64 0
  store double %334, ptr %335, align 16, !tbaa !23
  %336 = load ptr, ptr %42, align 8, !tbaa !9
  %337 = getelementptr inbounds ptr, ptr %336, i64 1
  %338 = load ptr, ptr %337, align 8, !tbaa !9
  %339 = load ptr, ptr %25, align 8, !tbaa !9
  %340 = getelementptr inbounds i32, ptr %339, i64 0
  %341 = load i32, ptr %340, align 4, !tbaa !5
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds double, ptr %338, i64 %342
  %344 = load double, ptr %343, align 8, !tbaa !23
  %345 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 1
  store double %344, ptr %345, align 8, !tbaa !23
  %346 = load ptr, ptr %42, align 8, !tbaa !9
  %347 = getelementptr inbounds ptr, ptr %346, i64 1
  %348 = load ptr, ptr %347, align 8, !tbaa !9
  %349 = load ptr, ptr %25, align 8, !tbaa !9
  %350 = getelementptr inbounds i32, ptr %349, i64 1
  %351 = load i32, ptr %350, align 4, !tbaa !5
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds double, ptr %348, i64 %352
  %354 = load double, ptr %353, align 8, !tbaa !23
  %355 = getelementptr inbounds [3 x double], ptr %45, i64 0, i64 1
  store double %354, ptr %355, align 8, !tbaa !23
  %356 = load ptr, ptr %42, align 8, !tbaa !9
  %357 = getelementptr inbounds ptr, ptr %356, i64 2
  %358 = load ptr, ptr %357, align 8, !tbaa !9
  %359 = load ptr, ptr %25, align 8, !tbaa !9
  %360 = getelementptr inbounds i32, ptr %359, i64 0
  %361 = load i32, ptr %360, align 4, !tbaa !5
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds double, ptr %358, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !23
  %365 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 2
  store double %364, ptr %365, align 16, !tbaa !23
  %366 = load ptr, ptr %42, align 8, !tbaa !9
  %367 = getelementptr inbounds ptr, ptr %366, i64 2
  %368 = load ptr, ptr %367, align 8, !tbaa !9
  %369 = load ptr, ptr %25, align 8, !tbaa !9
  %370 = getelementptr inbounds i32, ptr %369, i64 1
  %371 = load i32, ptr %370, align 4, !tbaa !5
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %368, i64 %372
  %374 = load double, ptr %373, align 8, !tbaa !23
  %375 = getelementptr inbounds [3 x double], ptr %45, i64 0, i64 2
  store double %374, ptr %375, align 16, !tbaa !23
  %376 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 0
  %377 = getelementptr inbounds [3 x double], ptr %45, i64 0, i64 0
  %378 = getelementptr inbounds [3 x double], ptr %46, i64 0, i64 0
  call void @vCross(ptr noundef %376, ptr noundef %377, ptr noundef %378)
  %379 = getelementptr inbounds [3 x double], ptr %46, i64 0, i64 0
  %380 = call double @dMagnitude(ptr noundef %379)
  %381 = fcmp olt double %380, 1.000000e-13
  br i1 %381, label %382, label %383

382:                                              ; preds = %311
  store i32 1, ptr %43, align 4, !tbaa !5
  br label %383

383:                                              ; preds = %382, %311
  br label %299, !llvm.loop !33

384:                                              ; preds = %309
  br label %385

385:                                              ; preds = %384, %220
  store i32 0, ptr %22, align 4, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %386

386:                                              ; preds = %419, %385
  %387 = load i32, ptr %15, align 4, !tbaa !5
  %388 = load i32, ptr %8, align 4, !tbaa !5
  %389 = icmp slt i32 %387, %388
  br i1 %389, label %390, label %422

390:                                              ; preds = %386
  store i32 0, ptr %23, align 4, !tbaa !5
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %391

391:                                              ; preds = %405, %390
  %392 = load i32, ptr %16, align 4, !tbaa !5
  %393 = load i32, ptr %9, align 4, !tbaa !5
  %394 = icmp slt i32 %392, %393
  br i1 %394, label %395, label %408

395:                                              ; preds = %391
  %396 = load i32, ptr %15, align 4, !tbaa !5
  %397 = load ptr, ptr %25, align 8, !tbaa !9
  %398 = load i32, ptr %16, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %397, i64 %399
  %401 = load i32, ptr %400, align 4, !tbaa !5
  %402 = icmp eq i32 %396, %401
  br i1 %402, label %403, label %404

403:                                              ; preds = %395
  store i32 1, ptr %23, align 4, !tbaa !5
  br label %404

404:                                              ; preds = %403, %395
  br label %405

405:                                              ; preds = %404
  %406 = load i32, ptr %16, align 4, !tbaa !5
  %407 = add nsw i32 %406, 1
  store i32 %407, ptr %16, align 4, !tbaa !5
  br label %391, !llvm.loop !34

408:                                              ; preds = %391
  %409 = load i32, ptr %23, align 4, !tbaa !5
  %410 = icmp ne i32 %409, 0
  br i1 %410, label %418, label %411

411:                                              ; preds = %408
  %412 = load i32, ptr %15, align 4, !tbaa !5
  %413 = load ptr, ptr %26, align 8, !tbaa !9
  %414 = load i32, ptr %22, align 4, !tbaa !5
  %415 = add nsw i32 %414, 1
  store i32 %415, ptr %22, align 4, !tbaa !5
  %416 = sext i32 %414 to i64
  %417 = getelementptr inbounds i32, ptr %413, i64 %416
  store i32 %412, ptr %417, align 4, !tbaa !5
  br label %418

418:                                              ; preds = %411, %408
  br label %419

419:                                              ; preds = %418
  %420 = load i32, ptr %15, align 4, !tbaa !5
  %421 = add nsw i32 %420, 1
  store i32 %421, ptr %15, align 4, !tbaa !5
  br label %386, !llvm.loop !35

422:                                              ; preds = %386
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %423

423:                                              ; preds = %436, %422
  %424 = load i32, ptr %15, align 4, !tbaa !5
  %425 = load i32, ptr %8, align 4, !tbaa !5
  %426 = icmp slt i32 %424, %425
  br i1 %426, label %427, label %439

427:                                              ; preds = %423
  %428 = load ptr, ptr %11, align 8, !tbaa !9
  %429 = load i32, ptr %15, align 4, !tbaa !5
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds double, ptr %428, i64 %430
  store double 0.000000e+00, ptr %431, align 8, !tbaa !23
  %432 = load ptr, ptr %36, align 8, !tbaa !9
  %433 = load i32, ptr %15, align 4, !tbaa !5
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds double, ptr %432, i64 %434
  store double 0.000000e+00, ptr %435, align 8, !tbaa !23
  br label %436

436:                                              ; preds = %427
  %437 = load i32, ptr %15, align 4, !tbaa !5
  %438 = add nsw i32 %437, 1
  store i32 %438, ptr %15, align 4, !tbaa !5
  br label %423, !llvm.loop !36

439:                                              ; preds = %423
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %440

440:                                              ; preds = %467, %439
  %441 = load i32, ptr %15, align 4, !tbaa !5
  %442 = load i32, ptr %9, align 4, !tbaa !5
  %443 = icmp slt i32 %441, %442
  br i1 %443, label %444, label %470

444:                                              ; preds = %440
  %445 = load ptr, ptr %10, align 8, !tbaa !9
  %446 = load i32, ptr %15, align 4, !tbaa !5
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds ptr, ptr %445, i64 %447
  %449 = load ptr, ptr %448, align 8, !tbaa !9
  %450 = load i32, ptr %8, align 4, !tbaa !5
  %451 = sub nsw i32 %450, 1
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds double, ptr %449, i64 %452
  %454 = load double, ptr %453, align 8, !tbaa !23
  %455 = fneg double %454
  %456 = load i32, ptr %15, align 4, !tbaa !5
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds [150 x double], ptr %35, i64 0, i64 %457
  store double %455, ptr %458, align 8, !tbaa !23
  %459 = load ptr, ptr %11, align 8, !tbaa !9
  %460 = load ptr, ptr %25, align 8, !tbaa !9
  %461 = load i32, ptr %15, align 4, !tbaa !5
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i32, ptr %460, i64 %462
  %464 = load i32, ptr %463, align 4, !tbaa !5
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds double, ptr %459, i64 %465
  store double 1.000000e+00, ptr %466, align 8, !tbaa !23
  br label %467

467:                                              ; preds = %444
  %468 = load i32, ptr %15, align 4, !tbaa !5
  %469 = add nsw i32 %468, 1
  store i32 %469, ptr %15, align 4, !tbaa !5
  br label %440, !llvm.loop !37

470:                                              ; preds = %440
  %471 = load ptr, ptr %36, align 8, !tbaa !9
  %472 = load i32, ptr %8, align 4, !tbaa !5
  %473 = sub nsw i32 %472, 1
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds double, ptr %471, i64 %474
  store double 1.000000e+00, ptr %475, align 8, !tbaa !23
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %476

476:                                              ; preds = %530, %470
  %477 = load i32, ptr %15, align 4, !tbaa !5
  %478 = load i32, ptr %9, align 4, !tbaa !5
  %479 = icmp slt i32 %477, %478
  br i1 %479, label %480, label %533

480:                                              ; preds = %476
  %481 = load i32, ptr %15, align 4, !tbaa !5
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds [150 x double], ptr %35, i64 0, i64 %482
  %484 = load double, ptr %483, align 8, !tbaa !23
  %485 = load ptr, ptr %42, align 8, !tbaa !9
  %486 = load i32, ptr %15, align 4, !tbaa !5
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds ptr, ptr %485, i64 %487
  %489 = load ptr, ptr %488, align 8, !tbaa !9
  %490 = load i32, ptr %8, align 4, !tbaa !5
  %491 = sub nsw i32 %490, 1
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds double, ptr %489, i64 %492
  store double %484, ptr %493, align 8, !tbaa !23
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %494

494:                                              ; preds = %526, %480
  %495 = load i32, ptr %16, align 4, !tbaa !5
  %496 = load i32, ptr %8, align 4, !tbaa !5
  %497 = sub nsw i32 %496, 1
  %498 = icmp slt i32 %495, %497
  br i1 %498, label %499, label %529

499:                                              ; preds = %494
  %500 = load ptr, ptr %42, align 8, !tbaa !9
  %501 = load i32, ptr %15, align 4, !tbaa !5
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds ptr, ptr %500, i64 %502
  %504 = load ptr, ptr %503, align 8, !tbaa !9
  %505 = load i32, ptr %16, align 4, !tbaa !5
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds double, ptr %504, i64 %506
  %508 = load double, ptr %507, align 8, !tbaa !23
  %509 = fneg double %508
  %510 = load ptr, ptr %11, align 8, !tbaa !9
  %511 = load i32, ptr %16, align 4, !tbaa !5
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds double, ptr %510, i64 %512
  %514 = load double, ptr %513, align 8, !tbaa !23
  %515 = load ptr, ptr %42, align 8, !tbaa !9
  %516 = load i32, ptr %15, align 4, !tbaa !5
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds ptr, ptr %515, i64 %517
  %519 = load ptr, ptr %518, align 8, !tbaa !9
  %520 = load i32, ptr %8, align 4, !tbaa !5
  %521 = sub nsw i32 %520, 1
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds double, ptr %519, i64 %522
  %524 = load double, ptr %523, align 8, !tbaa !23
  %525 = call double @llvm.fmuladd.f64(double %509, double %514, double %524)
  store double %525, ptr %523, align 8, !tbaa !23
  br label %526

526:                                              ; preds = %499
  %527 = load i32, ptr %16, align 4, !tbaa !5
  %528 = add nsw i32 %527, 1
  store i32 %528, ptr %16, align 4, !tbaa !5
  br label %494, !llvm.loop !38

529:                                              ; preds = %494
  br label %530

530:                                              ; preds = %529
  %531 = load i32, ptr %15, align 4, !tbaa !5
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %15, align 4, !tbaa !5
  br label %476, !llvm.loop !39

533:                                              ; preds = %476
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %534

534:                                              ; preds = %593, %533
  %535 = load i32, ptr %15, align 4, !tbaa !5
  %536 = load i32, ptr %9, align 4, !tbaa !5
  %537 = icmp slt i32 %535, %536
  br i1 %537, label %538, label %596

538:                                              ; preds = %534
  %539 = load ptr, ptr %39, align 8, !tbaa !9
  %540 = load i32, ptr %15, align 4, !tbaa !5
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds double, ptr %539, i64 %541
  store double 0.000000e+00, ptr %542, align 8, !tbaa !23
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %543

543:                                              ; preds = %568, %538
  %544 = load i32, ptr %16, align 4, !tbaa !5
  %545 = load i32, ptr %8, align 4, !tbaa !5
  %546 = icmp slt i32 %544, %545
  br i1 %546, label %547, label %571

547:                                              ; preds = %543
  %548 = load ptr, ptr %42, align 8, !tbaa !9
  %549 = load i32, ptr %15, align 4, !tbaa !5
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds ptr, ptr %548, i64 %550
  %552 = load ptr, ptr %551, align 8, !tbaa !9
  %553 = load i32, ptr %16, align 4, !tbaa !5
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds double, ptr %552, i64 %554
  %556 = load double, ptr %555, align 8, !tbaa !23
  %557 = load ptr, ptr %11, align 8, !tbaa !9
  %558 = load i32, ptr %16, align 4, !tbaa !5
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds double, ptr %557, i64 %559
  %561 = load double, ptr %560, align 8, !tbaa !23
  %562 = load ptr, ptr %39, align 8, !tbaa !9
  %563 = load i32, ptr %15, align 4, !tbaa !5
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds double, ptr %562, i64 %564
  %566 = load double, ptr %565, align 8, !tbaa !23
  %567 = call double @llvm.fmuladd.f64(double %556, double %561, double %566)
  store double %567, ptr %565, align 8, !tbaa !23
  br label %568

568:                                              ; preds = %547
  %569 = load i32, ptr %16, align 4, !tbaa !5
  %570 = add nsw i32 %569, 1
  store i32 %570, ptr %16, align 4, !tbaa !5
  br label %543, !llvm.loop !40

571:                                              ; preds = %543
  %572 = load ptr, ptr %39, align 8, !tbaa !9
  %573 = load i32, ptr %15, align 4, !tbaa !5
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds double, ptr %572, i64 %574
  %576 = load double, ptr %575, align 8, !tbaa !23
  %577 = load ptr, ptr %10, align 8, !tbaa !9
  %578 = load i32, ptr %15, align 4, !tbaa !5
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds ptr, ptr %577, i64 %579
  %581 = load ptr, ptr %580, align 8, !tbaa !9
  %582 = load i32, ptr %8, align 4, !tbaa !5
  %583 = sub nsw i32 %582, 1
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds double, ptr %581, i64 %584
  %586 = load double, ptr %585, align 8, !tbaa !23
  %587 = fadd double %576, %586
  %588 = call double @llvm.fabs.f64(double %587)
  %589 = fcmp ogt double %588, 0x3D06849B86A12B9C
  br i1 %589, label %590, label %592

590:                                              ; preds = %571
  %591 = load ptr, ptr %13, align 8, !tbaa !9
  store i32 0, ptr %591, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  store i32 0, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

592:                                              ; preds = %571
  br label %593

593:                                              ; preds = %592
  %594 = load i32, ptr %15, align 4, !tbaa !5
  %595 = add nsw i32 %594, 1
  store i32 %595, ptr %15, align 4, !tbaa !5
  br label %534, !llvm.loop !41

596:                                              ; preds = %534
  store i32 0, ptr %21, align 4, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !5
  br label %597

597:                                              ; preds = %947, %596
  %598 = load i32, ptr %21, align 4, !tbaa !5
  %599 = icmp ne i32 %598, 0
  %600 = xor i1 %599, true
  br i1 %600, label %601, label %948

601:                                              ; preds = %597
  %602 = load i32, ptr %17, align 4, !tbaa !5
  %603 = add nsw i32 %602, 1
  store i32 %603, ptr %17, align 4, !tbaa !5
  %604 = load i32, ptr %17, align 4, !tbaa !5
  %605 = icmp eq i32 %604, 100
  br i1 %605, label %606, label %608

606:                                              ; preds = %601
  store i32 1, ptr %21, align 4, !tbaa !5
  %607 = load ptr, ptr %13, align 8, !tbaa !9
  store i32 0, ptr %607, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  store i32 0, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

608:                                              ; preds = %601
  %609 = load ptr, ptr %42, align 8, !tbaa !9
  %610 = load i32, ptr %9, align 4, !tbaa !5
  %611 = load ptr, ptr %25, align 8, !tbaa !9
  %612 = load ptr, ptr %40, align 8, !tbaa !9
  %613 = call i32 @SMgetActiveMatrix(ptr noundef %609, i32 noundef %610, ptr noundef %611, ptr noundef %612)
  store i32 %613, ptr %14, align 4, !tbaa !5
  %614 = load i32, ptr %14, align 4, !tbaa !5
  %615 = icmp ne i32 %614, 0
  br i1 %615, label %616, label %619

616:                                              ; preds = %608
  %617 = load i32, ptr %14, align 4, !tbaa !5
  %618 = call i32 @SMerror(i32 noundef 581, ptr noundef @.str.6, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %617, i32 noundef 0, ptr noundef null)
  store i32 %618, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

619:                                              ; preds = %608
  %620 = load ptr, ptr %36, align 8, !tbaa !9
  %621 = load i32, ptr %9, align 4, !tbaa !5
  %622 = load ptr, ptr %25, align 8, !tbaa !9
  %623 = load ptr, ptr %37, align 8, !tbaa !9
  %624 = call i32 @SMgetActiveRHS(ptr noundef %620, i32 noundef %621, ptr noundef %622, ptr noundef %623)
  store i32 %624, ptr %14, align 4, !tbaa !5
  %625 = load i32, ptr %14, align 4, !tbaa !5
  %626 = icmp ne i32 %625, 0
  br i1 %626, label %627, label %630

627:                                              ; preds = %619
  %628 = load i32, ptr %14, align 4, !tbaa !5
  %629 = call i32 @SMerror(i32 noundef 582, ptr noundef @.str.6, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %628, i32 noundef 0, ptr noundef null)
  store i32 %629, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

630:                                              ; preds = %619
  %631 = load ptr, ptr %40, align 8, !tbaa !9
  %632 = load i32, ptr %9, align 4, !tbaa !5
  %633 = load i32, ptr %9, align 4, !tbaa !5
  %634 = load ptr, ptr %41, align 8, !tbaa !9
  %635 = call i32 @SMtransposeMatrix(ptr noundef %631, i32 noundef %632, i32 noundef %633, ptr noundef %634)
  store i32 %635, ptr %14, align 4, !tbaa !5
  %636 = load i32, ptr %14, align 4, !tbaa !5
  %637 = icmp ne i32 %636, 0
  br i1 %637, label %638, label %641

638:                                              ; preds = %630
  %639 = load i32, ptr %14, align 4, !tbaa !5
  %640 = call i32 @SMerror(i32 noundef 585, ptr noundef @.str.6, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %639, i32 noundef 0, ptr noundef null)
  store i32 %640, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

641:                                              ; preds = %630
  %642 = load ptr, ptr %41, align 8, !tbaa !9
  %643 = load ptr, ptr %20, align 8, !tbaa !9
  %644 = load ptr, ptr %37, align 8, !tbaa !9
  call void @dgesv_(ptr noundef %9, ptr noundef %19, ptr noundef %642, ptr noundef %9, ptr noundef %643, ptr noundef %644, ptr noundef %9, ptr noundef %18)
  %645 = load i32, ptr %18, align 4, !tbaa !5
  %646 = icmp ne i32 %645, 0
  br i1 %646, label %647, label %649

647:                                              ; preds = %641
  %648 = load ptr, ptr %13, align 8, !tbaa !9
  store i32 0, ptr %648, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  store i32 0, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

649:                                              ; preds = %641
  store double 1.000000e+300, ptr %31, align 8, !tbaa !23
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %650

650:                                              ; preds = %717, %649
  %651 = load i32, ptr %15, align 4, !tbaa !5
  %652 = load i32, ptr %24, align 4, !tbaa !5
  %653 = icmp slt i32 %651, %652
  br i1 %653, label %654, label %720

654:                                              ; preds = %650
  %655 = load ptr, ptr %36, align 8, !tbaa !9
  %656 = load ptr, ptr %26, align 8, !tbaa !9
  %657 = load i32, ptr %15, align 4, !tbaa !5
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds i32, ptr %656, i64 %658
  %660 = load i32, ptr %659, align 4, !tbaa !5
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds double, ptr %655, i64 %661
  %663 = load double, ptr %662, align 8, !tbaa !23
  %664 = load ptr, ptr %38, align 8, !tbaa !9
  %665 = load i32, ptr %15, align 4, !tbaa !5
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds double, ptr %664, i64 %666
  store double %663, ptr %667, align 8, !tbaa !23
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %668

668:                                              ; preds = %698, %654
  %669 = load i32, ptr %16, align 4, !tbaa !5
  %670 = load i32, ptr %9, align 4, !tbaa !5
  %671 = icmp slt i32 %669, %670
  br i1 %671, label %672, label %701

672:                                              ; preds = %668
  %673 = load ptr, ptr %42, align 8, !tbaa !9
  %674 = load i32, ptr %16, align 4, !tbaa !5
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds ptr, ptr %673, i64 %675
  %677 = load ptr, ptr %676, align 8, !tbaa !9
  %678 = load ptr, ptr %26, align 8, !tbaa !9
  %679 = load i32, ptr %15, align 4, !tbaa !5
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds i32, ptr %678, i64 %680
  %682 = load i32, ptr %681, align 4, !tbaa !5
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds double, ptr %677, i64 %683
  %685 = load double, ptr %684, align 8, !tbaa !23
  %686 = load ptr, ptr %37, align 8, !tbaa !9
  %687 = load i32, ptr %16, align 4, !tbaa !5
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds double, ptr %686, i64 %688
  %690 = load double, ptr %689, align 8, !tbaa !23
  %691 = load ptr, ptr %38, align 8, !tbaa !9
  %692 = load i32, ptr %15, align 4, !tbaa !5
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds double, ptr %691, i64 %693
  %695 = load double, ptr %694, align 8, !tbaa !23
  %696 = fneg double %685
  %697 = call double @llvm.fmuladd.f64(double %696, double %690, double %695)
  store double %697, ptr %694, align 8, !tbaa !23
  br label %698

698:                                              ; preds = %672
  %699 = load i32, ptr %16, align 4, !tbaa !5
  %700 = add nsw i32 %699, 1
  store i32 %700, ptr %16, align 4, !tbaa !5
  br label %668, !llvm.loop !42

701:                                              ; preds = %668
  %702 = load ptr, ptr %38, align 8, !tbaa !9
  %703 = load i32, ptr %15, align 4, !tbaa !5
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds double, ptr %702, i64 %704
  %706 = load double, ptr %705, align 8, !tbaa !23
  %707 = load double, ptr %31, align 8, !tbaa !23
  %708 = fcmp olt double %706, %707
  br i1 %708, label %709, label %716

709:                                              ; preds = %701
  %710 = load ptr, ptr %38, align 8, !tbaa !9
  %711 = load i32, ptr %15, align 4, !tbaa !5
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds double, ptr %710, i64 %712
  %714 = load double, ptr %713, align 8, !tbaa !23
  store double %714, ptr %31, align 8, !tbaa !23
  %715 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %715, ptr %27, align 4, !tbaa !5
  br label %716

716:                                              ; preds = %709, %701
  br label %717

717:                                              ; preds = %716
  %718 = load i32, ptr %15, align 4, !tbaa !5
  %719 = add nsw i32 %718, 1
  store i32 %719, ptr %15, align 4, !tbaa !5
  br label %650, !llvm.loop !43

720:                                              ; preds = %650
  %721 = load double, ptr %31, align 8, !tbaa !23
  %722 = fcmp ogt double %721, 0xBD06849B86A12B9C
  br i1 %722, label %723, label %725

723:                                              ; preds = %720
  store i32 1, ptr %21, align 4, !tbaa !5
  %724 = load ptr, ptr %13, align 8, !tbaa !9
  store i32 1, ptr %724, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  store i32 0, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

725:                                              ; preds = %720
  %726 = load ptr, ptr %26, align 8, !tbaa !9
  %727 = load i32, ptr %27, align 4, !tbaa !5
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds i32, ptr %726, i64 %728
  %730 = load i32, ptr %729, align 4, !tbaa !5
  store i32 %730, ptr %29, align 4, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %731

731:                                              ; preds = %749, %725
  %732 = load i32, ptr %15, align 4, !tbaa !5
  %733 = load i32, ptr %9, align 4, !tbaa !5
  %734 = icmp slt i32 %732, %733
  br i1 %734, label %735, label %752

735:                                              ; preds = %731
  %736 = load ptr, ptr %10, align 8, !tbaa !9
  %737 = load i32, ptr %15, align 4, !tbaa !5
  %738 = sext i32 %737 to i64
  %739 = getelementptr inbounds ptr, ptr %736, i64 %738
  %740 = load ptr, ptr %739, align 8, !tbaa !9
  %741 = load i32, ptr %29, align 4, !tbaa !5
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds double, ptr %740, i64 %742
  %744 = load double, ptr %743, align 8, !tbaa !23
  %745 = load ptr, ptr %39, align 8, !tbaa !9
  %746 = load i32, ptr %15, align 4, !tbaa !5
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds double, ptr %745, i64 %747
  store double %744, ptr %748, align 8, !tbaa !23
  br label %749

749:                                              ; preds = %735
  %750 = load i32, ptr %15, align 4, !tbaa !5
  %751 = add nsw i32 %750, 1
  store i32 %751, ptr %15, align 4, !tbaa !5
  br label %731, !llvm.loop !44

752:                                              ; preds = %731
  %753 = load ptr, ptr %40, align 8, !tbaa !9
  %754 = load ptr, ptr %20, align 8, !tbaa !9
  %755 = load ptr, ptr %39, align 8, !tbaa !9
  call void @dgesv_(ptr noundef %9, ptr noundef %19, ptr noundef %753, ptr noundef %9, ptr noundef %754, ptr noundef %755, ptr noundef %9, ptr noundef %18)
  %756 = load i32, ptr %18, align 4, !tbaa !5
  %757 = icmp ne i32 %756, 0
  br i1 %757, label %758, label %760

758:                                              ; preds = %752
  %759 = load ptr, ptr %13, align 8, !tbaa !9
  store i32 0, ptr %759, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  store i32 0, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

760:                                              ; preds = %752
  store double 1.000000e+300, ptr %32, align 8, !tbaa !23
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %761

761:                                              ; preds = %812, %760
  %762 = load i32, ptr %15, align 4, !tbaa !5
  %763 = load i32, ptr %9, align 4, !tbaa !5
  %764 = icmp slt i32 %762, %763
  br i1 %764, label %765, label %815

765:                                              ; preds = %761
  %766 = load ptr, ptr %11, align 8, !tbaa !9
  %767 = load ptr, ptr %25, align 8, !tbaa !9
  %768 = load i32, ptr %15, align 4, !tbaa !5
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds i32, ptr %767, i64 %769
  %771 = load i32, ptr %770, align 4, !tbaa !5
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds double, ptr %766, i64 %772
  %774 = load double, ptr %773, align 8, !tbaa !23
  %775 = load ptr, ptr %39, align 8, !tbaa !9
  %776 = load i32, ptr %15, align 4, !tbaa !5
  %777 = sext i32 %776 to i64
  %778 = getelementptr inbounds double, ptr %775, i64 %777
  %779 = load double, ptr %778, align 8, !tbaa !23
  %780 = fdiv double %774, %779
  %781 = load ptr, ptr %33, align 8, !tbaa !9
  %782 = load i32, ptr %15, align 4, !tbaa !5
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds double, ptr %781, i64 %783
  store double %780, ptr %784, align 8, !tbaa !23
  %785 = load ptr, ptr %33, align 8, !tbaa !9
  %786 = load i32, ptr %15, align 4, !tbaa !5
  %787 = sext i32 %786 to i64
  %788 = getelementptr inbounds double, ptr %785, i64 %787
  %789 = load double, ptr %788, align 8, !tbaa !23
  %790 = load double, ptr %32, align 8, !tbaa !23
  %791 = fcmp olt double %789, %790
  br i1 %791, label %792, label %811

792:                                              ; preds = %765
  %793 = load ptr, ptr %33, align 8, !tbaa !9
  %794 = load i32, ptr %15, align 4, !tbaa !5
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds double, ptr %793, i64 %795
  %797 = load double, ptr %796, align 8, !tbaa !23
  %798 = fcmp ogt double %797, 0.000000e+00
  br i1 %798, label %799, label %811

799:                                              ; preds = %792
  %800 = load ptr, ptr %33, align 8, !tbaa !9
  %801 = load i32, ptr %15, align 4, !tbaa !5
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds double, ptr %800, i64 %802
  %804 = load double, ptr %803, align 8, !tbaa !23
  store double %804, ptr %32, align 8, !tbaa !23
  %805 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %805, ptr %28, align 4, !tbaa !5
  %806 = load ptr, ptr %25, align 8, !tbaa !9
  %807 = load i32, ptr %15, align 4, !tbaa !5
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds i32, ptr %806, i64 %808
  %810 = load i32, ptr %809, align 4, !tbaa !5
  store i32 %810, ptr %30, align 4, !tbaa !5
  br label %811

811:                                              ; preds = %799, %792, %765
  br label %812

812:                                              ; preds = %811
  %813 = load i32, ptr %15, align 4, !tbaa !5
  %814 = add nsw i32 %813, 1
  store i32 %814, ptr %15, align 4, !tbaa !5
  br label %761, !llvm.loop !45

815:                                              ; preds = %761
  %816 = load double, ptr %32, align 8, !tbaa !23
  %817 = load ptr, ptr %39, align 8, !tbaa !9
  %818 = load i32, ptr %9, align 4, !tbaa !5
  %819 = sub nsw i32 %818, 1
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds double, ptr %817, i64 %820
  %822 = load double, ptr %821, align 8, !tbaa !23
  %823 = fmul double %816, %822
  %824 = load ptr, ptr %11, align 8, !tbaa !9
  %825 = load i32, ptr %8, align 4, !tbaa !5
  %826 = sub nsw i32 %825, 1
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds double, ptr %824, i64 %827
  %829 = load double, ptr %828, align 8, !tbaa !23
  %830 = fsub double %829, 0x3D06849B86A12B9C
  %831 = fcmp oge double %823, %830
  br i1 %831, label %832, label %905

832:                                              ; preds = %815
  store i32 0, ptr %21, align 4, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %833

833:                                              ; preds = %881, %832
  %834 = load i32, ptr %15, align 4, !tbaa !5
  %835 = load i32, ptr %9, align 4, !tbaa !5
  %836 = icmp slt i32 %834, %835
  br i1 %836, label %837, label %884

837:                                              ; preds = %833
  store double 0.000000e+00, ptr %34, align 8, !tbaa !23
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %838

838:                                              ; preds = %859, %837
  %839 = load i32, ptr %16, align 4, !tbaa !5
  %840 = load i32, ptr %8, align 4, !tbaa !5
  %841 = icmp slt i32 %839, %840
  br i1 %841, label %842, label %862

842:                                              ; preds = %838
  %843 = load ptr, ptr %42, align 8, !tbaa !9
  %844 = load i32, ptr %15, align 4, !tbaa !5
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds ptr, ptr %843, i64 %845
  %847 = load ptr, ptr %846, align 8, !tbaa !9
  %848 = load i32, ptr %16, align 4, !tbaa !5
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds double, ptr %847, i64 %849
  %851 = load double, ptr %850, align 8, !tbaa !23
  %852 = load ptr, ptr %11, align 8, !tbaa !9
  %853 = load i32, ptr %16, align 4, !tbaa !5
  %854 = sext i32 %853 to i64
  %855 = getelementptr inbounds double, ptr %852, i64 %854
  %856 = load double, ptr %855, align 8, !tbaa !23
  %857 = load double, ptr %34, align 8, !tbaa !23
  %858 = call double @llvm.fmuladd.f64(double %851, double %856, double %857)
  store double %858, ptr %34, align 8, !tbaa !23
  br label %859

859:                                              ; preds = %842
  %860 = load i32, ptr %16, align 4, !tbaa !5
  %861 = add nsw i32 %860, 1
  store i32 %861, ptr %16, align 4, !tbaa !5
  br label %838, !llvm.loop !46

862:                                              ; preds = %838
  %863 = load double, ptr %34, align 8, !tbaa !23
  %864 = load ptr, ptr %10, align 8, !tbaa !9
  %865 = load i32, ptr %15, align 4, !tbaa !5
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds ptr, ptr %864, i64 %866
  %868 = load ptr, ptr %867, align 8, !tbaa !9
  %869 = load i32, ptr %8, align 4, !tbaa !5
  %870 = sub nsw i32 %869, 1
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds double, ptr %868, i64 %871
  %873 = load double, ptr %872, align 8, !tbaa !23
  %874 = fadd double %863, %873
  %875 = call double @llvm.fabs.f64(double %874)
  %876 = fcmp olt double %875, 0x3D06849B86A12B9C
  br i1 %876, label %877, label %880

877:                                              ; preds = %862
  %878 = load i32, ptr %21, align 4, !tbaa !5
  %879 = add nsw i32 %878, 1
  store i32 %879, ptr %21, align 4, !tbaa !5
  br label %880

880:                                              ; preds = %877, %862
  br label %881

881:                                              ; preds = %880
  %882 = load i32, ptr %15, align 4, !tbaa !5
  %883 = add nsw i32 %882, 1
  store i32 %883, ptr %15, align 4, !tbaa !5
  br label %833, !llvm.loop !47

884:                                              ; preds = %833
  %885 = load i32, ptr %21, align 4, !tbaa !5
  %886 = load i32, ptr %9, align 4, !tbaa !5
  %887 = icmp eq i32 %885, %886
  br i1 %887, label %888, label %904

888:                                              ; preds = %884
  store i32 1, ptr %21, align 4, !tbaa !5
  %889 = load ptr, ptr %11, align 8, !tbaa !9
  %890 = load i32, ptr %8, align 4, !tbaa !5
  %891 = sub nsw i32 %890, 1
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds double, ptr %889, i64 %892
  %894 = load double, ptr %893, align 8, !tbaa !23
  %895 = load ptr, ptr %39, align 8, !tbaa !9
  %896 = load i32, ptr %9, align 4, !tbaa !5
  %897 = sub nsw i32 %896, 1
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds double, ptr %895, i64 %898
  %900 = load double, ptr %899, align 8, !tbaa !23
  %901 = fdiv double %894, %900
  store double %901, ptr %32, align 8, !tbaa !23
  %902 = load i32, ptr %9, align 4, !tbaa !5
  %903 = sub nsw i32 %902, 1
  store i32 %903, ptr %30, align 4, !tbaa !5
  br label %904

904:                                              ; preds = %888, %884
  br label %905

905:                                              ; preds = %904, %815
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %906

906:                                              ; preds = %928, %905
  %907 = load i32, ptr %15, align 4, !tbaa !5
  %908 = load i32, ptr %9, align 4, !tbaa !5
  %909 = icmp slt i32 %907, %908
  br i1 %909, label %910, label %931

910:                                              ; preds = %906
  %911 = load double, ptr %32, align 8, !tbaa !23
  %912 = load ptr, ptr %39, align 8, !tbaa !9
  %913 = load i32, ptr %15, align 4, !tbaa !5
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds double, ptr %912, i64 %914
  %916 = load double, ptr %915, align 8, !tbaa !23
  %917 = load ptr, ptr %11, align 8, !tbaa !9
  %918 = load ptr, ptr %25, align 8, !tbaa !9
  %919 = load i32, ptr %15, align 4, !tbaa !5
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds i32, ptr %918, i64 %920
  %922 = load i32, ptr %921, align 4, !tbaa !5
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds double, ptr %917, i64 %923
  %925 = load double, ptr %924, align 8, !tbaa !23
  %926 = fneg double %911
  %927 = call double @llvm.fmuladd.f64(double %926, double %916, double %925)
  store double %927, ptr %924, align 8, !tbaa !23
  br label %928

928:                                              ; preds = %910
  %929 = load i32, ptr %15, align 4, !tbaa !5
  %930 = add nsw i32 %929, 1
  store i32 %930, ptr %15, align 4, !tbaa !5
  br label %906, !llvm.loop !48

931:                                              ; preds = %906
  %932 = load double, ptr %32, align 8, !tbaa !23
  %933 = load ptr, ptr %11, align 8, !tbaa !9
  %934 = load i32, ptr %29, align 4, !tbaa !5
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds double, ptr %933, i64 %935
  store double %932, ptr %936, align 8, !tbaa !23
  %937 = load i32, ptr %30, align 4, !tbaa !5
  %938 = load ptr, ptr %26, align 8, !tbaa !9
  %939 = load i32, ptr %27, align 4, !tbaa !5
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds i32, ptr %938, i64 %940
  store i32 %937, ptr %941, align 4, !tbaa !5
  %942 = load i32, ptr %29, align 4, !tbaa !5
  %943 = load ptr, ptr %25, align 8, !tbaa !9
  %944 = load i32, ptr %28, align 4, !tbaa !5
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds i32, ptr %943, i64 %945
  store i32 %942, ptr %946, align 4, !tbaa !5
  br label %947

947:                                              ; preds = %931
  br label %597, !llvm.loop !49

948:                                              ; preds = %597
  store i32 0, ptr %14, align 4, !tbaa !5
  store i32 0, ptr %7, align 4
  store i32 1, ptr %47, align 4
  br label %949

949:                                              ; preds = %948, %758, %723, %647, %638, %627, %616, %606, %590
  call void @llvm.lifetime.end.p0(i64 24, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, 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 8, 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 1200, 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 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  %950 = load i32, ptr %7, align 4
  ret i32 %950
}

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @SMgetActiveMatrix(ptr noundef, i32 noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @SMgetActiveRHS(ptr noundef, i32 noundef, ptr noundef, ptr noundef) #2

declare i32 @SMtransposeMatrix(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #1

declare void @dgesv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare void @vCross(ptr noundef, ptr noundef, ptr noundef) #1

declare double @dMagnitude(ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { 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 #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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 40}
!12 = !{!"__SMlp", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120}
!13 = !{!12, !10, i64 56}
!14 = !{!12, !10, i64 48}
!15 = !{!12, !10, i64 32}
!16 = !{!12, !10, i64 72}
!17 = !{!12, !10, i64 80}
!18 = !{!12, !10, i64 88}
!19 = !{!12, !10, i64 96}
!20 = !{!12, !10, i64 104}
!21 = !{!12, !10, i64 112}
!22 = !{!12, !10, i64 120}
!23 = !{!24, !24, i64 0}
!24 = !{!"double", !7, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = distinct !{!28, !26}
!29 = distinct !{!29, !26}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = distinct !{!32, !26}
!33 = distinct !{!33, !26}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = distinct !{!38, !26}
!39 = distinct !{!39, !26}
!40 = distinct !{!40, !26}
!41 = distinct !{!41, !26}
!42 = distinct !{!42, !26}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !26}
!45 = distinct !{!45, !26}
!46 = distinct !{!46, !26}
!47 = distinct !{!47, !26}
!48 = distinct !{!48, !26}
!49 = distinct !{!49, !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"

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

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

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

; Function Attrs: mustprogress 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 @SMphaseOneLP(i32 noundef %0, i32 noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef writeonly %5) local_unnamed_addr #2 {
  %7 = ptrtoint ptr %3 to i64
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca [150 x double], align 16
  %12 = alloca [3 x double], align 16
  %13 = alloca [3 x double], align 16
  %14 = alloca [3 x double], align 16
  store i32 %1, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #6
  store i32 1, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1200, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #6
  %15 = sub i32 %0, %1
  store i32 1, ptr %5, align 4, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %4, i64 40
  %17 = load ptr, ptr %16, align 8, !tbaa !9
  %18 = getelementptr inbounds i8, ptr %4, i64 56
  %19 = load ptr, ptr %18, align 8, !tbaa !12
  %20 = getelementptr inbounds i8, ptr %4, i64 48
  %21 = load ptr, ptr %20, align 8, !tbaa !13
  %22 = getelementptr inbounds i8, ptr %4, i64 32
  %23 = load ptr, ptr %22, align 8, !tbaa !14
  %24 = ptrtoint ptr %23 to i64
  %25 = getelementptr inbounds i8, ptr %4, i64 72
  %26 = load ptr, ptr %25, align 8, !tbaa !15
  %27 = getelementptr inbounds i8, ptr %4, i64 80
  %28 = load ptr, ptr %27, align 8, !tbaa !16
  %29 = ptrtoint ptr %28 to i64
  %30 = getelementptr inbounds i8, ptr %4, i64 88
  %31 = load ptr, ptr %30, align 8, !tbaa !17
  %32 = getelementptr inbounds i8, ptr %4, i64 96
  %33 = load ptr, ptr %32, align 8, !tbaa !18
  %34 = ptrtoint ptr %33 to i64
  %35 = getelementptr inbounds i8, ptr %4, i64 104
  %36 = load ptr, ptr %35, align 8, !tbaa !19
  %37 = ptrtoint ptr %36 to i64
  %38 = getelementptr inbounds i8, ptr %4, i64 112
  %39 = load ptr, ptr %38, align 8, !tbaa !20
  %40 = ptrtoint ptr %39 to i64
  %41 = getelementptr inbounds i8, ptr %4, i64 120
  %42 = load ptr, ptr %41, align 8, !tbaa !21
  %43 = icmp sgt i32 %1, 0
  br i1 %43, label %.lr.ph370, label %.preheader348

.lr.ph370:                                        ; preds = %6
  %44 = icmp sgt i32 %0, 0
  %45 = zext i32 %0 to i64
  %46 = shl nuw nsw i64 %45, 3
  %47 = zext nneg i32 %1 to i64
  %xtraiter = and i64 %47, 1
  %48 = icmp eq i32 %1, 1
  br i1 %48, label %.preheader348.loopexit.unr-lcssa, label %.lr.ph370.new

.lr.ph370.new:                                    ; preds = %.lr.ph370
  %unroll_iter = and i64 %47, 2147483646
  br label %66

.preheader348.loopexit.unr-lcssa:                 ; preds = %._crit_edge.1, %.lr.ph370
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph370 ], [ %indvars.iv.next.1, %._crit_edge.1 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader348, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader348.loopexit.unr-lcssa
  %49 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv.unr
  store i32 0, ptr %49, align 4, !tbaa !5
  %50 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv.unr
  store i32 0, ptr %50, align 4, !tbaa !5
  %51 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.unr
  store double 0.000000e+00, ptr %51, align 8, !tbaa !22
  %52 = getelementptr inbounds double, ptr %26, i64 %indvars.iv.unr
  store double 0.000000e+00, ptr %52, align 8, !tbaa !22
  br i1 %44, label %.lr.ph.epil, label %.preheader348

.lr.ph.epil:                                      ; preds = %.epil.preheader
  %53 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv.unr
  %54 = load ptr, ptr %53, align 8, !tbaa !24
  tail call void @llvm.memset.p0.i64(ptr align 8 %54, i8 0, i64 %46, i1 false), !tbaa !22
  br label %.preheader348

.preheader348:                                    ; preds = %.preheader348.loopexit.unr-lcssa, %.lr.ph.epil, %.epil.preheader, %6
  %.not = icmp eq i32 %1, 0
  br i1 %.not, label %.preheader347, label %.lr.ph372.preheader

.lr.ph372.preheader:                              ; preds = %.preheader348
  %55 = mul i32 %1, %1
  %umax = tail call i32 @llvm.umax.i32(i32 %55, i32 1)
  %wide.trip.count = zext i32 %umax to i64
  %min.iters.check = icmp ult i32 %55, 4
  %56 = sub i64 %40, %37
  %diff.check = icmp ult i64 %56, 32
  %or.cond721 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond721, label %.lr.ph372.preheader754, label %vector.ph

.lr.ph372.preheader754:                           ; preds = %middle.block, %.lr.ph372.preheader
  %indvars.iv477.ph = phi i64 [ 0, %.lr.ph372.preheader ], [ %n.vec, %middle.block ]
  %xtraiter755 = and i64 %wide.trip.count, 1
  %lcmp.mod756.not = icmp eq i64 %xtraiter755, 0
  br i1 %lcmp.mod756.not, label %.lr.ph372.prol.loopexit, label %.lr.ph372.prol

.lr.ph372.prol:                                   ; preds = %.lr.ph372.preheader754, %.lr.ph372.prol
  %indvars.iv477.prol = phi i64 [ %indvars.iv.next478.prol, %.lr.ph372.prol ], [ %indvars.iv477.ph, %.lr.ph372.preheader754 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph372.prol ], [ 0, %.lr.ph372.preheader754 ]
  %57 = getelementptr inbounds double, ptr %36, i64 %indvars.iv477.prol
  store double 0.000000e+00, ptr %57, align 8, !tbaa !22
  %58 = getelementptr inbounds double, ptr %39, i64 %indvars.iv477.prol
  store double 0.000000e+00, ptr %58, align 8, !tbaa !22
  %indvars.iv.next478.prol = add nuw nsw i64 %indvars.iv477.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter755
  br i1 %prol.iter.cmp.not, label %.lr.ph372.prol.loopexit, label %.lr.ph372.prol, !llvm.loop !25

.lr.ph372.prol.loopexit:                          ; preds = %.lr.ph372.prol, %.lr.ph372.preheader754
  %indvars.iv477.unr = phi i64 [ %indvars.iv477.ph, %.lr.ph372.preheader754 ], [ %indvars.iv.next478.prol, %.lr.ph372.prol ]
  %59 = sub nsw i64 %indvars.iv477.ph, %wide.trip.count
  %60 = icmp ugt i64 %59, -4
  br i1 %60, label %.preheader347, label %.lr.ph372

vector.ph:                                        ; preds = %.lr.ph372.preheader
  %n.vec = and i64 %wide.trip.count, 4294967292
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %61 = getelementptr inbounds double, ptr %36, i64 %index
  %62 = getelementptr inbounds i8, ptr %61, i64 16
  store <2 x double> zeroinitializer, ptr %61, align 8, !tbaa !22
  store <2 x double> zeroinitializer, ptr %62, align 8, !tbaa !22
  %63 = getelementptr inbounds double, ptr %39, i64 %index
  %64 = getelementptr inbounds i8, ptr %63, i64 16
  store <2 x double> zeroinitializer, ptr %63, align 8, !tbaa !22
  store <2 x double> zeroinitializer, ptr %64, align 8, !tbaa !22
  %index.next = add nuw i64 %index, 4
  %65 = icmp eq i64 %index.next, %n.vec
  br i1 %65, label %middle.block, label %vector.body, !llvm.loop !27

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.preheader347, label %.lr.ph372.preheader754

66:                                               ; preds = %._crit_edge.1, %.lr.ph370.new
  %indvars.iv = phi i64 [ 0, %.lr.ph370.new ], [ %indvars.iv.next.1, %._crit_edge.1 ]
  %niter = phi i64 [ 0, %.lr.ph370.new ], [ %niter.next.1, %._crit_edge.1 ]
  %67 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv
  store i32 0, ptr %67, align 4, !tbaa !5
  %68 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv
  store i32 0, ptr %68, align 4, !tbaa !5
  %69 = getelementptr inbounds double, ptr %31, i64 %indvars.iv
  store double 0.000000e+00, ptr %69, align 8, !tbaa !22
  %70 = getelementptr inbounds double, ptr %26, i64 %indvars.iv
  store double 0.000000e+00, ptr %70, align 8, !tbaa !22
  br i1 %44, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %66
  %71 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv
  %72 = load ptr, ptr %71, align 8, !tbaa !24
  tail call void @llvm.memset.p0.i64(ptr align 8 %72, i8 0, i64 %46, i1 false), !tbaa !22
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph, %66
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %73 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv.next
  store i32 0, ptr %73, align 4, !tbaa !5
  %74 = getelementptr inbounds i32, ptr %17, i64 %indvars.iv.next
  store i32 0, ptr %74, align 4, !tbaa !5
  %75 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next
  store double 0.000000e+00, ptr %75, align 8, !tbaa !22
  %76 = getelementptr inbounds double, ptr %26, i64 %indvars.iv.next
  store double 0.000000e+00, ptr %76, align 8, !tbaa !22
  br i1 %44, label %.lr.ph.1, label %._crit_edge.1

.lr.ph.1:                                         ; preds = %._crit_edge
  %77 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv.next
  %78 = load ptr, ptr %77, align 8, !tbaa !24
  tail call void @llvm.memset.p0.i64(ptr align 8 %78, i8 0, i64 %46, i1 false), !tbaa !22
  br label %._crit_edge.1

._crit_edge.1:                                    ; preds = %.lr.ph.1, %._crit_edge
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1.not = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1.not, label %.preheader348.loopexit.unr-lcssa, label %66, !llvm.loop !31

.preheader347:                                    ; preds = %.lr.ph372.prol.loopexit, %.lr.ph372, %middle.block, %.preheader348
  %79 = icmp sgt i32 %0, 0
  br i1 %79, label %.lr.ph374.preheader, label %.preheader346.thread

.lr.ph374.preheader:                              ; preds = %.preheader347
  %wide.trip.count483 = zext nneg i32 %0 to i64
  %min.iters.check658 = icmp ult i32 %0, 10
  br i1 %min.iters.check658, label %.lr.ph374.preheader753, label %vector.memcheck651

.lr.ph374.preheader753:                           ; preds = %middle.block656, %vector.memcheck651, %.lr.ph374.preheader
  %indvars.iv480.ph = phi i64 [ 0, %vector.memcheck651 ], [ 0, %.lr.ph374.preheader ], [ %n.vec661, %middle.block656 ]
  %xtraiter757 = and i64 %wide.trip.count483, 1
  %lcmp.mod758.not = icmp eq i64 %xtraiter757, 0
  br i1 %lcmp.mod758.not, label %.lr.ph374.prol.loopexit, label %.lr.ph374.prol

.lr.ph374.prol:                                   ; preds = %.lr.ph374.preheader753
  %80 = getelementptr inbounds i32, ptr %19, i64 %indvars.iv480.ph
  store i32 0, ptr %80, align 4, !tbaa !5
  %81 = getelementptr inbounds double, ptr %23, i64 %indvars.iv480.ph
  store double 0.000000e+00, ptr %81, align 8, !tbaa !22
  %82 = getelementptr inbounds double, ptr %28, i64 %indvars.iv480.ph
  store double 0.000000e+00, ptr %82, align 8, !tbaa !22
  %83 = getelementptr inbounds double, ptr %33, i64 %indvars.iv480.ph
  store double 0.000000e+00, ptr %83, align 8, !tbaa !22
  %indvars.iv.next481.prol = or disjoint i64 %indvars.iv480.ph, 1
  br label %.lr.ph374.prol.loopexit

.lr.ph374.prol.loopexit:                          ; preds = %.lr.ph374.prol, %.lr.ph374.preheader753
  %indvars.iv480.unr = phi i64 [ %indvars.iv480.ph, %.lr.ph374.preheader753 ], [ %indvars.iv.next481.prol, %.lr.ph374.prol ]
  %84 = add nsw i64 %wide.trip.count483, -1
  %85 = icmp eq i64 %indvars.iv480.ph, %84
  br i1 %85, label %.preheader346, label %.lr.ph374

vector.memcheck651:                               ; preds = %.lr.ph374.preheader
  %86 = sub i64 %29, %24
  %diff.check652 = icmp ult i64 %86, 32
  %87 = sub i64 %34, %24
  %diff.check653 = icmp ult i64 %87, 32
  %conflict.rdx = or i1 %diff.check652, %diff.check653
  %88 = sub i64 %34, %29
  %diff.check654 = icmp ult i64 %88, 32
  %conflict.rdx655 = or i1 %conflict.rdx, %diff.check654
  br i1 %conflict.rdx655, label %.lr.ph374.preheader753, label %vector.ph659

vector.ph659:                                     ; preds = %vector.memcheck651
  %n.vec661 = and i64 %wide.trip.count483, 2147483644
  br label %vector.body663

vector.body663:                                   ; preds = %vector.body663, %vector.ph659
  %index664 = phi i64 [ 0, %vector.ph659 ], [ %index.next665, %vector.body663 ]
  %89 = getelementptr inbounds i32, ptr %19, i64 %index664
  %90 = getelementptr inbounds i8, ptr %89, i64 8
  store <2 x i32> zeroinitializer, ptr %89, align 4, !tbaa !5
  store <2 x i32> zeroinitializer, ptr %90, align 4, !tbaa !5
  %91 = getelementptr inbounds double, ptr %23, i64 %index664
  %92 = getelementptr inbounds i8, ptr %91, i64 16
  store <2 x double> zeroinitializer, ptr %91, align 8, !tbaa !22
  store <2 x double> zeroinitializer, ptr %92, align 8, !tbaa !22
  %93 = getelementptr inbounds double, ptr %28, i64 %index664
  %94 = getelementptr inbounds i8, ptr %93, i64 16
  store <2 x double> zeroinitializer, ptr %93, align 8, !tbaa !22
  store <2 x double> zeroinitializer, ptr %94, align 8, !tbaa !22
  %95 = getelementptr inbounds double, ptr %33, i64 %index664
  %96 = getelementptr inbounds i8, ptr %95, i64 16
  store <2 x double> zeroinitializer, ptr %95, align 8, !tbaa !22
  store <2 x double> zeroinitializer, ptr %96, align 8, !tbaa !22
  %index.next665 = add nuw i64 %index664, 4
  %97 = icmp eq i64 %index.next665, %n.vec661
  br i1 %97, label %middle.block656, label %vector.body663, !llvm.loop !32

middle.block656:                                  ; preds = %vector.body663
  %cmp.n666 = icmp eq i64 %n.vec661, %wide.trip.count483
  br i1 %cmp.n666, label %.preheader346, label %.lr.ph374.preheader753

.lr.ph372:                                        ; preds = %.lr.ph372.prol.loopexit, %.lr.ph372
  %indvars.iv477 = phi i64 [ %indvars.iv.next478.3, %.lr.ph372 ], [ %indvars.iv477.unr, %.lr.ph372.prol.loopexit ]
  %98 = getelementptr inbounds double, ptr %36, i64 %indvars.iv477
  store double 0.000000e+00, ptr %98, align 8, !tbaa !22
  %99 = getelementptr inbounds double, ptr %39, i64 %indvars.iv477
  store double 0.000000e+00, ptr %99, align 8, !tbaa !22
  %indvars.iv.next478 = add nuw nsw i64 %indvars.iv477, 1
  %100 = getelementptr inbounds double, ptr %36, i64 %indvars.iv.next478
  store double 0.000000e+00, ptr %100, align 8, !tbaa !22
  %101 = getelementptr inbounds double, ptr %39, i64 %indvars.iv.next478
  store double 0.000000e+00, ptr %101, align 8, !tbaa !22
  %indvars.iv.next478.1 = add nuw nsw i64 %indvars.iv477, 2
  %102 = getelementptr inbounds double, ptr %36, i64 %indvars.iv.next478.1
  store double 0.000000e+00, ptr %102, align 8, !tbaa !22
  %103 = getelementptr inbounds double, ptr %39, i64 %indvars.iv.next478.1
  store double 0.000000e+00, ptr %103, align 8, !tbaa !22
  %indvars.iv.next478.2 = add nuw nsw i64 %indvars.iv477, 3
  %104 = getelementptr inbounds double, ptr %36, i64 %indvars.iv.next478.2
  store double 0.000000e+00, ptr %104, align 8, !tbaa !22
  %105 = getelementptr inbounds double, ptr %39, i64 %indvars.iv.next478.2
  store double 0.000000e+00, ptr %105, align 8, !tbaa !22
  %indvars.iv.next478.3 = add nuw nsw i64 %indvars.iv477, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next478.3, %wide.trip.count
  br i1 %exitcond.not.3, label %.preheader347, label %.lr.ph372, !llvm.loop !33

.preheader346:                                    ; preds = %.lr.ph374.prol.loopexit, %.lr.ph374, %middle.block656
  br i1 %43, label %.preheader345.lr.ph, label %.preheader344.thread

.preheader346.thread:                             ; preds = %.preheader347
  br i1 %43, label %.preheader344, label %.preheader344.thread

.preheader345.lr.ph:                              ; preds = %.preheader346
  br i1 %79, label %.preheader345.us.preheader, label %.preheader344

.preheader345.us.preheader:                       ; preds = %.preheader345.lr.ph
  %wide.trip.count493 = zext nneg i32 %1 to i64
  %wide.trip.count488 = zext nneg i32 %0 to i64
  %min.iters.check671 = icmp ult i32 %0, 4
  %n.vec674 = and i64 %wide.trip.count483, 2147483644
  %cmp.n680 = icmp eq i64 %n.vec674, %wide.trip.count483
  %xtraiter760 = and i64 %wide.trip.count483, 3
  %lcmp.mod761.not = icmp eq i64 %xtraiter760, 0
  br label %.preheader345.us

.preheader345.us:                                 ; preds = %.preheader345.us.preheader, %._crit_edge377.us
  %indvars.iv490 = phi i64 [ 0, %.preheader345.us.preheader ], [ %indvars.iv.next491, %._crit_edge377.us ]
  %106 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv490
  %107 = load ptr, ptr %106, align 8, !tbaa !24
  %108 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv490
  %109 = load ptr, ptr %108, align 8, !tbaa !24
  %110 = ptrtoint ptr %109 to i64
  %111 = ptrtoint ptr %107 to i64
  %112 = sub i64 %110, %111
  %diff.check668 = icmp ult i64 %112, 32
  %or.cond724 = select i1 %min.iters.check671, i1 true, i1 %diff.check668
  br i1 %or.cond724, label %scalar.ph670.preheader, label %vector.body676

vector.body676:                                   ; preds = %.preheader345.us, %vector.body676
  %index677 = phi i64 [ %index.next679, %vector.body676 ], [ 0, %.preheader345.us ]
  %113 = getelementptr inbounds double, ptr %107, i64 %index677
  %114 = getelementptr inbounds i8, ptr %113, i64 16
  %wide.load = load <2 x double>, ptr %113, align 8, !tbaa !22
  %wide.load678 = load <2 x double>, ptr %114, align 8, !tbaa !22
  %115 = getelementptr inbounds double, ptr %109, i64 %index677
  %116 = getelementptr inbounds i8, ptr %115, i64 16
  store <2 x double> %wide.load, ptr %115, align 8, !tbaa !22
  store <2 x double> %wide.load678, ptr %116, align 8, !tbaa !22
  %index.next679 = add nuw i64 %index677, 4
  %117 = icmp eq i64 %index.next679, %n.vec674
  br i1 %117, label %middle.block669, label %vector.body676, !llvm.loop !34

middle.block669:                                  ; preds = %vector.body676
  br i1 %cmp.n680, label %._crit_edge377.us, label %scalar.ph670.preheader

scalar.ph670.preheader:                           ; preds = %middle.block669, %.preheader345.us
  %indvars.iv485.ph = phi i64 [ 0, %.preheader345.us ], [ %n.vec674, %middle.block669 ]
  br i1 %lcmp.mod761.not, label %scalar.ph670.prol.loopexit, label %scalar.ph670.prol

scalar.ph670.prol:                                ; preds = %scalar.ph670.preheader, %scalar.ph670.prol
  %indvars.iv485.prol = phi i64 [ %indvars.iv.next486.prol, %scalar.ph670.prol ], [ %indvars.iv485.ph, %scalar.ph670.preheader ]
  %prol.iter762 = phi i64 [ %prol.iter762.next, %scalar.ph670.prol ], [ 0, %scalar.ph670.preheader ]
  %118 = getelementptr inbounds double, ptr %107, i64 %indvars.iv485.prol
  %119 = load double, ptr %118, align 8, !tbaa !22
  %120 = getelementptr inbounds double, ptr %109, i64 %indvars.iv485.prol
  store double %119, ptr %120, align 8, !tbaa !22
  %indvars.iv.next486.prol = add nuw nsw i64 %indvars.iv485.prol, 1
  %prol.iter762.next = add i64 %prol.iter762, 1
  %prol.iter762.cmp.not = icmp eq i64 %prol.iter762.next, %xtraiter760
  br i1 %prol.iter762.cmp.not, label %scalar.ph670.prol.loopexit, label %scalar.ph670.prol, !llvm.loop !35

scalar.ph670.prol.loopexit:                       ; preds = %scalar.ph670.prol, %scalar.ph670.preheader
  %indvars.iv485.unr = phi i64 [ %indvars.iv485.ph, %scalar.ph670.preheader ], [ %indvars.iv.next486.prol, %scalar.ph670.prol ]
  %121 = sub nsw i64 %indvars.iv485.ph, %wide.trip.count483
  %122 = icmp ugt i64 %121, -4
  br i1 %122, label %._crit_edge377.us, label %scalar.ph670

scalar.ph670:                                     ; preds = %scalar.ph670.prol.loopexit, %scalar.ph670
  %indvars.iv485 = phi i64 [ %indvars.iv.next486.3, %scalar.ph670 ], [ %indvars.iv485.unr, %scalar.ph670.prol.loopexit ]
  %123 = getelementptr inbounds double, ptr %107, i64 %indvars.iv485
  %124 = load double, ptr %123, align 8, !tbaa !22
  %125 = getelementptr inbounds double, ptr %109, i64 %indvars.iv485
  store double %124, ptr %125, align 8, !tbaa !22
  %indvars.iv.next486 = add nuw nsw i64 %indvars.iv485, 1
  %126 = getelementptr inbounds double, ptr %107, i64 %indvars.iv.next486
  %127 = load double, ptr %126, align 8, !tbaa !22
  %128 = getelementptr inbounds double, ptr %109, i64 %indvars.iv.next486
  store double %127, ptr %128, align 8, !tbaa !22
  %indvars.iv.next486.1 = add nuw nsw i64 %indvars.iv485, 2
  %129 = getelementptr inbounds double, ptr %107, i64 %indvars.iv.next486.1
  %130 = load double, ptr %129, align 8, !tbaa !22
  %131 = getelementptr inbounds double, ptr %109, i64 %indvars.iv.next486.1
  store double %130, ptr %131, align 8, !tbaa !22
  %indvars.iv.next486.2 = add nuw nsw i64 %indvars.iv485, 3
  %132 = getelementptr inbounds double, ptr %107, i64 %indvars.iv.next486.2
  %133 = load double, ptr %132, align 8, !tbaa !22
  %134 = getelementptr inbounds double, ptr %109, i64 %indvars.iv.next486.2
  store double %133, ptr %134, align 8, !tbaa !22
  %indvars.iv.next486.3 = add nuw nsw i64 %indvars.iv485, 4
  %exitcond489.not.3 = icmp eq i64 %indvars.iv.next486.3, %wide.trip.count488
  br i1 %exitcond489.not.3, label %._crit_edge377.us, label %scalar.ph670, !llvm.loop !36

._crit_edge377.us:                                ; preds = %scalar.ph670.prol.loopexit, %scalar.ph670, %middle.block669
  %indvars.iv.next491 = add nuw nsw i64 %indvars.iv490, 1
  %exitcond494.not = icmp eq i64 %indvars.iv.next491, %wide.trip.count493
  br i1 %exitcond494.not, label %.preheader344, label %.preheader345.us, !llvm.loop !37

.lr.ph374:                                        ; preds = %.lr.ph374.prol.loopexit, %.lr.ph374
  %indvars.iv480 = phi i64 [ %indvars.iv.next481.1, %.lr.ph374 ], [ %indvars.iv480.unr, %.lr.ph374.prol.loopexit ]
  %135 = getelementptr inbounds i32, ptr %19, i64 %indvars.iv480
  store i32 0, ptr %135, align 4, !tbaa !5
  %136 = getelementptr inbounds double, ptr %23, i64 %indvars.iv480
  store double 0.000000e+00, ptr %136, align 8, !tbaa !22
  %137 = getelementptr inbounds double, ptr %28, i64 %indvars.iv480
  store double 0.000000e+00, ptr %137, align 8, !tbaa !22
  %138 = getelementptr inbounds double, ptr %33, i64 %indvars.iv480
  store double 0.000000e+00, ptr %138, align 8, !tbaa !22
  %indvars.iv.next481 = add nuw nsw i64 %indvars.iv480, 1
  %139 = getelementptr inbounds i32, ptr %19, i64 %indvars.iv.next481
  store i32 0, ptr %139, align 4, !tbaa !5
  %140 = getelementptr inbounds double, ptr %23, i64 %indvars.iv.next481
  store double 0.000000e+00, ptr %140, align 8, !tbaa !22
  %141 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.next481
  store double 0.000000e+00, ptr %141, align 8, !tbaa !22
  %142 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next481
  store double 0.000000e+00, ptr %142, align 8, !tbaa !22
  %indvars.iv.next481.1 = add nuw nsw i64 %indvars.iv480, 2
  %exitcond484.not.1 = icmp eq i64 %indvars.iv.next481.1, %wide.trip.count483
  br i1 %exitcond484.not.1, label %.preheader346, label %.lr.ph374, !llvm.loop !38

.preheader344.thread:                             ; preds = %.preheader346.thread, %.preheader346
  %143 = add nsw i32 %1, -1
  br label %._crit_edge381.thread

.preheader344:                                    ; preds = %._crit_edge377.us, %.preheader346.thread, %.preheader345.lr.ph
  %144 = add nsw i32 %1, -1
  %145 = icmp sgt i32 %1, 1
  br i1 %145, label %.lr.ph380.preheader, label %._crit_edge381.thread

._crit_edge381.thread:                            ; preds = %.preheader344, %.preheader344.thread
  %146 = phi i32 [ %143, %.preheader344.thread ], [ %144, %.preheader344 ]
  %.pre574 = sext i32 %146 to i64
  %147 = add i32 %0, -1
  %148 = getelementptr inbounds i32, ptr %21, i64 %.pre574
  store i32 %147, ptr %148, align 4, !tbaa !5
  br label %.critedge

.lr.ph380.preheader:                              ; preds = %.preheader344
  %149 = sext i32 %144 to i64
  %min.iters.check683 = icmp ult i32 %1, 9
  br i1 %min.iters.check683, label %.lr.ph380.preheader752, label %vector.ph684

vector.ph684:                                     ; preds = %.lr.ph380.preheader
  %n.vec686 = and i64 %149, -8
  br label %vector.body688

vector.body688:                                   ; preds = %vector.body688, %vector.ph684
  %index689 = phi i64 [ 0, %vector.ph684 ], [ %index.next691, %vector.body688 ]
  %vec.ind = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph684 ], [ %vec.ind.next, %vector.body688 ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %150 = getelementptr inbounds i32, ptr %21, i64 %index689
  %151 = getelementptr inbounds i8, ptr %150, i64 16
  store <4 x i32> %vec.ind, ptr %150, align 4, !tbaa !5
  store <4 x i32> %step.add, ptr %151, align 4, !tbaa !5
  %index.next691 = add nuw i64 %index689, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %152 = icmp eq i64 %index.next691, %n.vec686
  br i1 %152, label %middle.block681, label %vector.body688, !llvm.loop !39

middle.block681:                                  ; preds = %vector.body688
  %cmp.n692 = icmp eq i64 %n.vec686, %149
  br i1 %cmp.n692, label %._crit_edge381, label %.lr.ph380.preheader752

.lr.ph380.preheader752:                           ; preds = %middle.block681, %.lr.ph380.preheader
  %indvars.iv495.ph = phi i64 [ 0, %.lr.ph380.preheader ], [ %n.vec686, %middle.block681 ]
  br label %.lr.ph380

.lr.ph380:                                        ; preds = %.lr.ph380.preheader752, %.lr.ph380
  %indvars.iv495 = phi i64 [ %indvars.iv.next496, %.lr.ph380 ], [ %indvars.iv495.ph, %.lr.ph380.preheader752 ]
  %153 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv495
  %154 = trunc nuw nsw i64 %indvars.iv495 to i32
  store i32 %154, ptr %153, align 4, !tbaa !5
  %indvars.iv.next496 = add nuw nsw i64 %indvars.iv495, 1
  %155 = icmp slt i64 %indvars.iv.next496, %149
  br i1 %155, label %.lr.ph380, label %._crit_edge381, !llvm.loop !40

._crit_edge381:                                   ; preds = %.lr.ph380, %middle.block681
  %156 = add i32 %0, -1
  %157 = getelementptr inbounds i32, ptr %21, i64 %149
  store i32 %156, ptr %157, align 4, !tbaa !5
  %158 = icmp eq i32 %1, 3
  br i1 %158, label %159, label %.critedge

159:                                              ; preds = %._crit_edge381
  %160 = load ptr, ptr %42, align 8, !tbaa !24
  %161 = load i32, ptr %21, align 4, !tbaa !5
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds double, ptr %160, i64 %162
  %164 = load double, ptr %163, align 8, !tbaa !22
  store double %164, ptr %12, align 16, !tbaa !22
  %165 = getelementptr inbounds i8, ptr %21, i64 4
  %166 = load i32, ptr %165, align 4, !tbaa !5
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds double, ptr %160, i64 %167
  %169 = load double, ptr %168, align 8, !tbaa !22
  store double %169, ptr %13, align 16, !tbaa !22
  %170 = getelementptr inbounds i8, ptr %42, i64 8
  %171 = load ptr, ptr %170, align 8, !tbaa !24
  %172 = getelementptr inbounds double, ptr %171, i64 %162
  %173 = load double, ptr %172, align 8, !tbaa !22
  %174 = getelementptr inbounds i8, ptr %12, i64 8
  store double %173, ptr %174, align 8, !tbaa !22
  %175 = getelementptr inbounds double, ptr %171, i64 %167
  %176 = load double, ptr %175, align 8, !tbaa !22
  %177 = getelementptr inbounds i8, ptr %13, i64 8
  store double %176, ptr %177, align 8, !tbaa !22
  %178 = getelementptr inbounds i8, ptr %42, i64 16
  %179 = load ptr, ptr %178, align 8, !tbaa !24
  %180 = getelementptr inbounds double, ptr %179, i64 %162
  %181 = load double, ptr %180, align 8, !tbaa !22
  %182 = getelementptr inbounds i8, ptr %12, i64 16
  store double %181, ptr %182, align 16, !tbaa !22
  %183 = getelementptr inbounds double, ptr %179, i64 %167
  %184 = load double, ptr %183, align 8, !tbaa !22
  %185 = getelementptr inbounds i8, ptr %13, i64 16
  store double %184, ptr %185, align 16, !tbaa !22
  call void @vCross(ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14) #6
  %186 = call double @dMagnitude(ptr noundef nonnull %14) #6
  %187 = fcmp olt double %186, 1.000000e-13
  br i1 %187, label %select.unfold, label %.critedge

select.unfold:                                    ; preds = %159, %190
  %188 = load i32, ptr %165, align 4, !tbaa !5
  %189 = icmp slt i32 %188, %156
  br i1 %189, label %190, label %.critedge

190:                                              ; preds = %select.unfold
  %191 = add nsw i32 %188, 1
  store i32 %191, ptr %165, align 4, !tbaa !5
  %192 = load ptr, ptr %42, align 8, !tbaa !24
  %193 = load i32, ptr %21, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds double, ptr %192, i64 %194
  %196 = load double, ptr %195, align 8, !tbaa !22
  store double %196, ptr %12, align 16, !tbaa !22
  %197 = sext i32 %191 to i64
  %198 = getelementptr inbounds double, ptr %192, i64 %197
  %199 = load double, ptr %198, align 8, !tbaa !22
  store double %199, ptr %13, align 16, !tbaa !22
  %200 = load ptr, ptr %170, align 8, !tbaa !24
  %201 = getelementptr inbounds double, ptr %200, i64 %194
  %202 = load double, ptr %201, align 8, !tbaa !22
  store double %202, ptr %174, align 8, !tbaa !22
  %203 = getelementptr inbounds double, ptr %200, i64 %197
  %204 = load double, ptr %203, align 8, !tbaa !22
  store double %204, ptr %177, align 8, !tbaa !22
  %205 = load ptr, ptr %178, align 8, !tbaa !24
  %206 = getelementptr inbounds double, ptr %205, i64 %194
  %207 = load double, ptr %206, align 8, !tbaa !22
  store double %207, ptr %182, align 16, !tbaa !22
  %208 = getelementptr inbounds double, ptr %205, i64 %197
  %209 = load double, ptr %208, align 8, !tbaa !22
  store double %209, ptr %185, align 16, !tbaa !22
  call void @vCross(ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14) #6
  %210 = call double @dMagnitude(ptr noundef nonnull %14) #6
  %211 = fcmp olt double %210, 1.000000e-13
  br i1 %211, label %select.unfold, label %.critedge, !llvm.loop !41

.critedge:                                        ; preds = %190, %select.unfold, %._crit_edge381.thread, %159, %._crit_edge381
  %212 = phi i32 [ %147, %._crit_edge381.thread ], [ %156, %159 ], [ %156, %._crit_edge381 ], [ %156, %select.unfold ], [ %156, %190 ]
  br i1 %79, label %.preheader343.preheader, label %.preheader341

.preheader343.preheader:                          ; preds = %.critedge
  %.pre = load i32, ptr %8, align 4, !tbaa !5
  %213 = icmp sgt i32 %.pre, 0
  %wide.trip.count501 = zext i32 %.pre to i64
  %min.iters.check695 = icmp ult i32 %.pre, 8
  %n.vec698 = and i64 %wide.trip.count501, 2147483640
  %cmp.n706 = icmp eq i64 %n.vec698, %wide.trip.count501
  br label %.preheader343

.preheader343:                                    ; preds = %.preheader343.preheader, %238
  %.5389 = phi i32 [ %239, %238 ], [ 0, %.preheader343.preheader ]
  %.0296388 = phi i32 [ %.1297, %238 ], [ 0, %.preheader343.preheader ]
  br i1 %213, label %.lr.ph385.preheader, label %._crit_edge386.thread

.lr.ph385.preheader:                              ; preds = %.preheader343
  br i1 %min.iters.check695, label %.lr.ph385.preheader748, label %vector.ph696

.lr.ph385.preheader748:                           ; preds = %middle.block693, %.lr.ph385.preheader
  %indvars.iv498.ph = phi i64 [ 0, %.lr.ph385.preheader ], [ %n.vec698, %middle.block693 ]
  %.0299383.ph = phi i32 [ 0, %.lr.ph385.preheader ], [ %rdx.select, %middle.block693 ]
  br label %.lr.ph385

vector.ph696:                                     ; preds = %.lr.ph385.preheader
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %.5389, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body700

vector.body700:                                   ; preds = %vector.body700, %vector.ph696
  %index701 = phi i64 [ 0, %vector.ph696 ], [ %index.next705, %vector.body700 ]
  %vec.phi = phi <4 x i1> [ zeroinitializer, %vector.ph696 ], [ %218, %vector.body700 ]
  %vec.phi702 = phi <4 x i1> [ zeroinitializer, %vector.ph696 ], [ %219, %vector.body700 ]
  %214 = getelementptr inbounds i32, ptr %21, i64 %index701
  %215 = getelementptr inbounds i8, ptr %214, i64 16
  %wide.load703 = load <4 x i32>, ptr %214, align 4, !tbaa !5
  %wide.load704 = load <4 x i32>, ptr %215, align 4, !tbaa !5
  %216 = icmp eq <4 x i32> %broadcast.splat, %wide.load703
  %217 = icmp eq <4 x i32> %broadcast.splat, %wide.load704
  %218 = or <4 x i1> %vec.phi, %216
  %219 = or <4 x i1> %vec.phi702, %217
  %index.next705 = add nuw i64 %index701, 8
  %220 = icmp eq i64 %index.next705, %n.vec698
  br i1 %220, label %middle.block693, label %vector.body700, !llvm.loop !42

middle.block693:                                  ; preds = %vector.body700
  %bin.rdx = or <4 x i1> %219, %218
  %bin.rdx.fr = freeze <4 x i1> %bin.rdx
  %221 = bitcast <4 x i1> %bin.rdx.fr to i4
  %.not720 = icmp ne i4 %221, 0
  %rdx.select = zext i1 %.not720 to i32
  br i1 %cmp.n706, label %._crit_edge386, label %.lr.ph385.preheader748

.preheader342:                                    ; preds = %238
  br i1 %79, label %.lr.ph391.preheader, label %.preheader341

.lr.ph391.preheader:                              ; preds = %.preheader342
  %wide.trip.count507 = zext nneg i32 %0 to i64
  %min.iters.check711 = icmp ult i32 %0, 4
  %222 = sub i64 %24, %7
  %diff.check708 = icmp ult i64 %222, 32
  %or.cond725 = select i1 %min.iters.check711, i1 true, i1 %diff.check708
  br i1 %or.cond725, label %.lr.ph391.preheader747, label %vector.ph712

.lr.ph391.preheader747:                           ; preds = %middle.block709, %.lr.ph391.preheader
  %indvars.iv504.ph = phi i64 [ 0, %.lr.ph391.preheader ], [ %n.vec714, %middle.block709 ]
  %xtraiter763 = and i64 %wide.trip.count507, 3
  %lcmp.mod764.not = icmp eq i64 %xtraiter763, 0
  br i1 %lcmp.mod764.not, label %.lr.ph391.prol.loopexit, label %.lr.ph391.prol

.lr.ph391.prol:                                   ; preds = %.lr.ph391.preheader747, %.lr.ph391.prol
  %indvars.iv504.prol = phi i64 [ %indvars.iv.next505.prol, %.lr.ph391.prol ], [ %indvars.iv504.ph, %.lr.ph391.preheader747 ]
  %prol.iter765 = phi i64 [ %prol.iter765.next, %.lr.ph391.prol ], [ 0, %.lr.ph391.preheader747 ]
  %223 = getelementptr inbounds double, ptr %3, i64 %indvars.iv504.prol
  store double 0.000000e+00, ptr %223, align 8, !tbaa !22
  %224 = getelementptr inbounds double, ptr %23, i64 %indvars.iv504.prol
  store double 0.000000e+00, ptr %224, align 8, !tbaa !22
  %indvars.iv.next505.prol = add nuw nsw i64 %indvars.iv504.prol, 1
  %prol.iter765.next = add i64 %prol.iter765, 1
  %prol.iter765.cmp.not = icmp eq i64 %prol.iter765.next, %xtraiter763
  br i1 %prol.iter765.cmp.not, label %.lr.ph391.prol.loopexit, label %.lr.ph391.prol, !llvm.loop !43

.lr.ph391.prol.loopexit:                          ; preds = %.lr.ph391.prol, %.lr.ph391.preheader747
  %indvars.iv504.unr = phi i64 [ %indvars.iv504.ph, %.lr.ph391.preheader747 ], [ %indvars.iv.next505.prol, %.lr.ph391.prol ]
  %225 = sub nsw i64 %indvars.iv504.ph, %wide.trip.count507
  %226 = icmp ugt i64 %225, -4
  br i1 %226, label %.preheader341, label %.lr.ph391

vector.ph712:                                     ; preds = %.lr.ph391.preheader
  %n.vec714 = and i64 %wide.trip.count507, 2147483644
  br label %vector.body716

vector.body716:                                   ; preds = %vector.body716, %vector.ph712
  %index717 = phi i64 [ 0, %vector.ph712 ], [ %index.next718, %vector.body716 ]
  %227 = getelementptr inbounds double, ptr %3, i64 %index717
  %228 = getelementptr inbounds i8, ptr %227, i64 16
  store <2 x double> zeroinitializer, ptr %227, align 8, !tbaa !22
  store <2 x double> zeroinitializer, ptr %228, align 8, !tbaa !22
  %229 = getelementptr inbounds double, ptr %23, i64 %index717
  %230 = getelementptr inbounds i8, ptr %229, i64 16
  store <2 x double> zeroinitializer, ptr %229, align 8, !tbaa !22
  store <2 x double> zeroinitializer, ptr %230, align 8, !tbaa !22
  %index.next718 = add nuw i64 %index717, 4
  %231 = icmp eq i64 %index.next718, %n.vec714
  br i1 %231, label %middle.block709, label %vector.body716, !llvm.loop !44

middle.block709:                                  ; preds = %vector.body716
  %cmp.n719 = icmp eq i64 %n.vec714, %wide.trip.count507
  br i1 %cmp.n719, label %.preheader341, label %.lr.ph391.preheader747

.lr.ph385:                                        ; preds = %.lr.ph385.preheader748, %.lr.ph385
  %indvars.iv498 = phi i64 [ %indvars.iv.next499, %.lr.ph385 ], [ %indvars.iv498.ph, %.lr.ph385.preheader748 ]
  %.0299383 = phi i32 [ %spec.select, %.lr.ph385 ], [ %.0299383.ph, %.lr.ph385.preheader748 ]
  %232 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv498
  %233 = load i32, ptr %232, align 4, !tbaa !5
  %234 = icmp eq i32 %.5389, %233
  %spec.select = select i1 %234, i32 1, i32 %.0299383
  %indvars.iv.next499 = add nuw nsw i64 %indvars.iv498, 1
  %exitcond502.not = icmp eq i64 %indvars.iv.next499, %wide.trip.count501
  br i1 %exitcond502.not, label %._crit_edge386, label %.lr.ph385, !llvm.loop !45

._crit_edge386:                                   ; preds = %.lr.ph385, %middle.block693
  %spec.select.lcssa = phi i32 [ %rdx.select, %middle.block693 ], [ %spec.select, %.lr.ph385 ]
  %.not333 = icmp eq i32 %spec.select.lcssa, 0
  br i1 %.not333, label %._crit_edge386.thread, label %238

._crit_edge386.thread:                            ; preds = %.preheader343, %._crit_edge386
  %235 = add nsw i32 %.0296388, 1
  %236 = sext i32 %.0296388 to i64
  %237 = getelementptr inbounds i32, ptr %19, i64 %236
  store i32 %.5389, ptr %237, align 4, !tbaa !5
  br label %238

238:                                              ; preds = %._crit_edge386, %._crit_edge386.thread
  %.1297 = phi i32 [ %.0296388, %._crit_edge386 ], [ %235, %._crit_edge386.thread ]
  %239 = add nuw nsw i32 %.5389, 1
  %exitcond503.not = icmp eq i32 %239, %0
  br i1 %exitcond503.not, label %.preheader342, label %.preheader343, !llvm.loop !46

.preheader341:                                    ; preds = %.lr.ph391.prol.loopexit, %.lr.ph391, %middle.block709, %.critedge, %.preheader342
  %240 = load i32, ptr %8, align 4, !tbaa !5
  %241 = icmp sgt i32 %240, 0
  %242 = sext i32 %212 to i64
  br i1 %241, label %.lr.ph393, label %._crit_edge394.thread

._crit_edge394.thread:                            ; preds = %.preheader341
  %243 = getelementptr inbounds double, ptr %23, i64 %242
  store double 1.000000e+00, ptr %243, align 8, !tbaa !22
  br label %.preheader339

.lr.ph393:                                        ; preds = %.preheader341
  %wide.trip.count512 = zext nneg i32 %240 to i64
  %xtraiter767 = and i64 %wide.trip.count512, 1
  %244 = icmp eq i32 %240, 1
  br i1 %244, label %._crit_edge394.unr-lcssa, label %.lr.ph393.new

.lr.ph393.new:                                    ; preds = %.lr.ph393
  %unroll_iter769 = and i64 %wide.trip.count512, 2147483646
  br label %253

.lr.ph391:                                        ; preds = %.lr.ph391.prol.loopexit, %.lr.ph391
  %indvars.iv504 = phi i64 [ %indvars.iv.next505.3, %.lr.ph391 ], [ %indvars.iv504.unr, %.lr.ph391.prol.loopexit ]
  %245 = getelementptr inbounds double, ptr %3, i64 %indvars.iv504
  store double 0.000000e+00, ptr %245, align 8, !tbaa !22
  %246 = getelementptr inbounds double, ptr %23, i64 %indvars.iv504
  store double 0.000000e+00, ptr %246, align 8, !tbaa !22
  %indvars.iv.next505 = add nuw nsw i64 %indvars.iv504, 1
  %247 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next505
  store double 0.000000e+00, ptr %247, align 8, !tbaa !22
  %248 = getelementptr inbounds double, ptr %23, i64 %indvars.iv.next505
  store double 0.000000e+00, ptr %248, align 8, !tbaa !22
  %indvars.iv.next505.1 = add nuw nsw i64 %indvars.iv504, 2
  %249 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next505.1
  store double 0.000000e+00, ptr %249, align 8, !tbaa !22
  %250 = getelementptr inbounds double, ptr %23, i64 %indvars.iv.next505.1
  store double 0.000000e+00, ptr %250, align 8, !tbaa !22
  %indvars.iv.next505.2 = add nuw nsw i64 %indvars.iv504, 3
  %251 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next505.2
  store double 0.000000e+00, ptr %251, align 8, !tbaa !22
  %252 = getelementptr inbounds double, ptr %23, i64 %indvars.iv.next505.2
  store double 0.000000e+00, ptr %252, align 8, !tbaa !22
  %indvars.iv.next505.3 = add nuw nsw i64 %indvars.iv504, 4
  %exitcond508.not.3 = icmp eq i64 %indvars.iv.next505.3, %wide.trip.count507
  br i1 %exitcond508.not.3, label %.preheader341, label %.lr.ph391, !llvm.loop !47

253:                                              ; preds = %253, %.lr.ph393.new
  %indvars.iv509 = phi i64 [ 0, %.lr.ph393.new ], [ %indvars.iv.next510.1, %253 ]
  %niter770 = phi i64 [ 0, %.lr.ph393.new ], [ %niter770.next.1, %253 ]
  %254 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv509
  %255 = load ptr, ptr %254, align 8, !tbaa !24
  %256 = getelementptr inbounds double, ptr %255, i64 %242
  %257 = load double, ptr %256, align 8, !tbaa !22
  %258 = fneg double %257
  %259 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv509
  store double %258, ptr %259, align 16, !tbaa !22
  %260 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv509
  %261 = load i32, ptr %260, align 4, !tbaa !5
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds double, ptr %3, i64 %262
  store double 1.000000e+00, ptr %263, align 8, !tbaa !22
  %indvars.iv.next510 = or disjoint i64 %indvars.iv509, 1
  %264 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next510
  %265 = load ptr, ptr %264, align 8, !tbaa !24
  %266 = getelementptr inbounds double, ptr %265, i64 %242
  %267 = load double, ptr %266, align 8, !tbaa !22
  %268 = fneg double %267
  %269 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv.next510
  store double %268, ptr %269, align 8, !tbaa !22
  %270 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv.next510
  %271 = load i32, ptr %270, align 4, !tbaa !5
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds double, ptr %3, i64 %272
  store double 1.000000e+00, ptr %273, align 8, !tbaa !22
  %indvars.iv.next510.1 = add nuw nsw i64 %indvars.iv509, 2
  %niter770.next.1 = add i64 %niter770, 2
  %niter770.ncmp.1 = icmp eq i64 %niter770.next.1, %unroll_iter769
  br i1 %niter770.ncmp.1, label %._crit_edge394.unr-lcssa, label %253, !llvm.loop !48

._crit_edge394.unr-lcssa:                         ; preds = %253, %.lr.ph393
  %indvars.iv509.unr = phi i64 [ 0, %.lr.ph393 ], [ %indvars.iv.next510.1, %253 ]
  %lcmp.mod768.not = icmp eq i64 %xtraiter767, 0
  br i1 %lcmp.mod768.not, label %._crit_edge394, label %._crit_edge394.epilog-lcssa

._crit_edge394.epilog-lcssa:                      ; preds = %._crit_edge394.unr-lcssa
  %274 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv509.unr
  %275 = load ptr, ptr %274, align 8, !tbaa !24
  %276 = getelementptr inbounds double, ptr %275, i64 %242
  %277 = load double, ptr %276, align 8, !tbaa !22
  %278 = fneg double %277
  %279 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv509.unr
  store double %278, ptr %279, align 8, !tbaa !22
  %280 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv509.unr
  %281 = load i32, ptr %280, align 4, !tbaa !5
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds double, ptr %3, i64 %282
  store double 1.000000e+00, ptr %283, align 8, !tbaa !22
  br label %._crit_edge394

._crit_edge394:                                   ; preds = %._crit_edge394.unr-lcssa, %._crit_edge394.epilog-lcssa
  %284 = getelementptr inbounds double, ptr %23, i64 %242
  store double 1.000000e+00, ptr %284, align 8, !tbaa !22
  br i1 %241, label %.lr.ph402, label %.preheader339

.lr.ph402:                                        ; preds = %._crit_edge394
  %285 = icmp sgt i32 %0, 1
  %wide.trip.count527 = zext nneg i32 %240 to i64
  br i1 %285, label %.lr.ph398.us.preheader, label %.lr.ph402.split.preheader

.lr.ph402.split.preheader:                        ; preds = %.lr.ph402
  %xtraiter771 = and i64 %wide.trip.count512, 3
  %286 = icmp ult i32 %240, 4
  br i1 %286, label %.preheader340.loopexit746.unr-lcssa, label %.lr.ph402.split.preheader.new

.lr.ph402.split.preheader.new:                    ; preds = %.lr.ph402.split.preheader
  %unroll_iter773 = and i64 %wide.trip.count512, 2147483644
  br label %.lr.ph402.split

.lr.ph398.us.preheader:                           ; preds = %.lr.ph402
  %wide.trip.count522 = zext i32 %212 to i64
  %xtraiter776 = and i64 %wide.trip.count522, 1
  %287 = icmp eq i32 %212, 1
  %unroll_iter779 = and i64 %wide.trip.count522, 4294967294
  %lcmp.mod778.not = icmp eq i64 %xtraiter776, 0
  br label %.lr.ph398.us

.lr.ph398.us:                                     ; preds = %.lr.ph398.us.preheader, %._crit_edge399.us
  %indvars.iv524 = phi i64 [ 0, %.lr.ph398.us.preheader ], [ %indvars.iv.next525, %._crit_edge399.us ]
  %288 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv524
  %289 = load double, ptr %288, align 8, !tbaa !22
  %290 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv524
  %291 = load ptr, ptr %290, align 8, !tbaa !24
  %292 = getelementptr inbounds double, ptr %291, i64 %242
  store double %289, ptr %292, align 8, !tbaa !22
  br i1 %287, label %._crit_edge399.us.unr-lcssa, label %.lr.ph398.us.new

.lr.ph398.us.new:                                 ; preds = %.lr.ph398.us, %.lr.ph398.us.new
  %indvars.iv519 = phi i64 [ %indvars.iv.next520.1, %.lr.ph398.us.new ], [ 0, %.lr.ph398.us ]
  %293 = phi double [ %305, %.lr.ph398.us.new ], [ %289, %.lr.ph398.us ]
  %niter780 = phi i64 [ %niter780.next.1, %.lr.ph398.us.new ], [ 0, %.lr.ph398.us ]
  %294 = getelementptr inbounds double, ptr %291, i64 %indvars.iv519
  %295 = load double, ptr %294, align 8, !tbaa !22
  %296 = fneg double %295
  %297 = getelementptr inbounds double, ptr %3, i64 %indvars.iv519
  %298 = load double, ptr %297, align 8, !tbaa !22
  %299 = call double @llvm.fmuladd.f64(double %296, double %298, double %293)
  store double %299, ptr %292, align 8, !tbaa !22
  %indvars.iv.next520 = or disjoint i64 %indvars.iv519, 1
  %300 = getelementptr inbounds double, ptr %291, i64 %indvars.iv.next520
  %301 = load double, ptr %300, align 8, !tbaa !22
  %302 = fneg double %301
  %303 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next520
  %304 = load double, ptr %303, align 8, !tbaa !22
  %305 = call double @llvm.fmuladd.f64(double %302, double %304, double %299)
  store double %305, ptr %292, align 8, !tbaa !22
  %indvars.iv.next520.1 = add nuw nsw i64 %indvars.iv519, 2
  %niter780.next.1 = add i64 %niter780, 2
  %niter780.ncmp.1 = icmp eq i64 %niter780.next.1, %unroll_iter779
  br i1 %niter780.ncmp.1, label %._crit_edge399.us.unr-lcssa, label %.lr.ph398.us.new, !llvm.loop !49

._crit_edge399.us.unr-lcssa:                      ; preds = %.lr.ph398.us.new, %.lr.ph398.us
  %indvars.iv519.unr = phi i64 [ 0, %.lr.ph398.us ], [ %indvars.iv.next520.1, %.lr.ph398.us.new ]
  %.unr = phi double [ %289, %.lr.ph398.us ], [ %305, %.lr.ph398.us.new ]
  br i1 %lcmp.mod778.not, label %._crit_edge399.us, label %._crit_edge399.us.epilog-lcssa

._crit_edge399.us.epilog-lcssa:                   ; preds = %._crit_edge399.us.unr-lcssa
  %306 = getelementptr inbounds double, ptr %291, i64 %indvars.iv519.unr
  %307 = load double, ptr %306, align 8, !tbaa !22
  %308 = fneg double %307
  %309 = getelementptr inbounds double, ptr %3, i64 %indvars.iv519.unr
  %310 = load double, ptr %309, align 8, !tbaa !22
  %311 = call double @llvm.fmuladd.f64(double %308, double %310, double %.unr)
  store double %311, ptr %292, align 8, !tbaa !22
  br label %._crit_edge399.us

._crit_edge399.us:                                ; preds = %._crit_edge399.us.unr-lcssa, %._crit_edge399.us.epilog-lcssa
  %indvars.iv.next525 = add nuw nsw i64 %indvars.iv524, 1
  %exitcond528.not = icmp eq i64 %indvars.iv.next525, %wide.trip.count527
  br i1 %exitcond528.not, label %.preheader340, label %.lr.ph398.us, !llvm.loop !50

.preheader340.loopexit746.unr-lcssa:              ; preds = %.lr.ph402.split, %.lr.ph402.split.preheader
  %indvars.iv514.unr = phi i64 [ 0, %.lr.ph402.split.preheader ], [ %indvars.iv.next515.3, %.lr.ph402.split ]
  %lcmp.mod772.not = icmp eq i64 %xtraiter771, 0
  br i1 %lcmp.mod772.not, label %.preheader340, label %.lr.ph402.split.epil

.lr.ph402.split.epil:                             ; preds = %.preheader340.loopexit746.unr-lcssa, %.lr.ph402.split.epil
  %indvars.iv514.epil = phi i64 [ %indvars.iv.next515.epil, %.lr.ph402.split.epil ], [ %indvars.iv514.unr, %.preheader340.loopexit746.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph402.split.epil ], [ 0, %.preheader340.loopexit746.unr-lcssa ]
  %312 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv514.epil
  %313 = load double, ptr %312, align 8, !tbaa !22
  %314 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv514.epil
  %315 = load ptr, ptr %314, align 8, !tbaa !24
  %316 = getelementptr inbounds double, ptr %315, i64 %242
  store double %313, ptr %316, align 8, !tbaa !22
  %indvars.iv.next515.epil = add nuw nsw i64 %indvars.iv514.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter771
  br i1 %epil.iter.cmp.not, label %.preheader340, label %.lr.ph402.split.epil, !llvm.loop !51

.preheader340:                                    ; preds = %.preheader340.loopexit746.unr-lcssa, %.lr.ph402.split.epil, %._crit_edge399.us
  br i1 %241, label %.lr.ph408, label %.preheader339

.lr.ph408:                                        ; preds = %.preheader340
  %wide.trip.count537 = zext nneg i32 %240 to i64
  %wide.trip.count532 = zext i32 %0 to i64
  %xtraiter782 = and i64 %wide.trip.count532, 1
  %317 = icmp eq i32 %0, 1
  %unroll_iter787 = and i64 %wide.trip.count532, 2147483646
  %lcmp.mod785.not = icmp eq i64 %xtraiter782, 0
  br label %342

.lr.ph402.split:                                  ; preds = %.lr.ph402.split, %.lr.ph402.split.preheader.new
  %indvars.iv514 = phi i64 [ 0, %.lr.ph402.split.preheader.new ], [ %indvars.iv.next515.3, %.lr.ph402.split ]
  %niter774 = phi i64 [ 0, %.lr.ph402.split.preheader.new ], [ %niter774.next.3, %.lr.ph402.split ]
  %318 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv514
  %319 = load double, ptr %318, align 16, !tbaa !22
  %320 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv514
  %321 = load ptr, ptr %320, align 8, !tbaa !24
  %322 = getelementptr inbounds double, ptr %321, i64 %242
  store double %319, ptr %322, align 8, !tbaa !22
  %indvars.iv.next515 = or disjoint i64 %indvars.iv514, 1
  %323 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv.next515
  %324 = load double, ptr %323, align 8, !tbaa !22
  %325 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv.next515
  %326 = load ptr, ptr %325, align 8, !tbaa !24
  %327 = getelementptr inbounds double, ptr %326, i64 %242
  store double %324, ptr %327, align 8, !tbaa !22
  %indvars.iv.next515.1 = or disjoint i64 %indvars.iv514, 2
  %328 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv.next515.1
  %329 = load double, ptr %328, align 16, !tbaa !22
  %330 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv.next515.1
  %331 = load ptr, ptr %330, align 8, !tbaa !24
  %332 = getelementptr inbounds double, ptr %331, i64 %242
  store double %329, ptr %332, align 8, !tbaa !22
  %indvars.iv.next515.2 = or disjoint i64 %indvars.iv514, 3
  %333 = getelementptr inbounds [150 x double], ptr %11, i64 0, i64 %indvars.iv.next515.2
  %334 = load double, ptr %333, align 8, !tbaa !22
  %335 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv.next515.2
  %336 = load ptr, ptr %335, align 8, !tbaa !24
  %337 = getelementptr inbounds double, ptr %336, i64 %242
  store double %334, ptr %337, align 8, !tbaa !22
  %indvars.iv.next515.3 = add nuw nsw i64 %indvars.iv514, 4
  %niter774.next.3 = add i64 %niter774, 4
  %niter774.ncmp.3 = icmp eq i64 %niter774.next.3, %unroll_iter773
  br i1 %niter774.ncmp.3, label %.preheader340.loopexit746.unr-lcssa, label %.lr.ph402.split, !llvm.loop !50

338:                                              ; preds = %._crit_edge406
  %indvars.iv.next535 = add nuw nsw i64 %indvars.iv534, 1
  %exitcond538.not = icmp eq i64 %indvars.iv.next535, %wide.trip.count537
  br i1 %exitcond538.not, label %.preheader339, label %342, !llvm.loop !52

.preheader339:                                    ; preds = %338, %._crit_edge394, %._crit_edge394.thread, %.preheader340
  %invariant.gep = getelementptr i8, ptr %33, i64 -8
  %339 = icmp sgt i32 %15, 0
  %340 = getelementptr inbounds double, ptr %3, i64 %242
  %wide.trip.count547 = zext nneg i32 %15 to i64
  %wide.trip.count562 = zext i32 %0 to i64
  %xtraiter803 = and i64 %wide.trip.count562, 3
  %341 = icmp ult i32 %0, 4
  %unroll_iter807 = and i64 %wide.trip.count562, 2147483644
  %lcmp.mod805.not = icmp eq i64 %xtraiter803, 0
  br label %371

342:                                              ; preds = %.lr.ph408, %338
  %indvars.iv534 = phi i64 [ 0, %.lr.ph408 ], [ %indvars.iv.next535, %338 ]
  %343 = getelementptr inbounds double, ptr %33, i64 %indvars.iv534
  store double 0.000000e+00, ptr %343, align 8, !tbaa !22
  br i1 %79, label %.lr.ph405, label %._crit_edge406

.lr.ph405:                                        ; preds = %342
  %344 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv534
  %345 = load ptr, ptr %344, align 8, !tbaa !24
  br i1 %317, label %._crit_edge406.loopexit.unr-lcssa, label %.lr.ph405.new

.lr.ph405.new:                                    ; preds = %.lr.ph405, %.lr.ph405.new
  %indvars.iv529 = phi i64 [ %indvars.iv.next530.1, %.lr.ph405.new ], [ 0, %.lr.ph405 ]
  %346 = phi double [ %356, %.lr.ph405.new ], [ 0.000000e+00, %.lr.ph405 ]
  %niter788 = phi i64 [ %niter788.next.1, %.lr.ph405.new ], [ 0, %.lr.ph405 ]
  %347 = getelementptr inbounds double, ptr %345, i64 %indvars.iv529
  %348 = load double, ptr %347, align 8, !tbaa !22
  %349 = getelementptr inbounds double, ptr %3, i64 %indvars.iv529
  %350 = load double, ptr %349, align 8, !tbaa !22
  %351 = call double @llvm.fmuladd.f64(double %348, double %350, double %346)
  store double %351, ptr %343, align 8, !tbaa !22
  %indvars.iv.next530 = or disjoint i64 %indvars.iv529, 1
  %352 = getelementptr inbounds double, ptr %345, i64 %indvars.iv.next530
  %353 = load double, ptr %352, align 8, !tbaa !22
  %354 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next530
  %355 = load double, ptr %354, align 8, !tbaa !22
  %356 = call double @llvm.fmuladd.f64(double %353, double %355, double %351)
  store double %356, ptr %343, align 8, !tbaa !22
  %indvars.iv.next530.1 = add nuw nsw i64 %indvars.iv529, 2
  %niter788.next.1 = add i64 %niter788, 2
  %niter788.ncmp.1 = icmp eq i64 %niter788.next.1, %unroll_iter787
  br i1 %niter788.ncmp.1, label %._crit_edge406.loopexit.unr-lcssa, label %.lr.ph405.new, !llvm.loop !53

._crit_edge406.loopexit.unr-lcssa:                ; preds = %.lr.ph405.new, %.lr.ph405
  %.lcssa745.ph = phi double [ poison, %.lr.ph405 ], [ %356, %.lr.ph405.new ]
  %indvars.iv529.unr = phi i64 [ 0, %.lr.ph405 ], [ %indvars.iv.next530.1, %.lr.ph405.new ]
  %.unr784 = phi double [ 0.000000e+00, %.lr.ph405 ], [ %356, %.lr.ph405.new ]
  br i1 %lcmp.mod785.not, label %._crit_edge406, label %._crit_edge406.loopexit.epilog-lcssa

._crit_edge406.loopexit.epilog-lcssa:             ; preds = %._crit_edge406.loopexit.unr-lcssa
  %357 = getelementptr inbounds double, ptr %345, i64 %indvars.iv529.unr
  %358 = load double, ptr %357, align 8, !tbaa !22
  %359 = getelementptr inbounds double, ptr %3, i64 %indvars.iv529.unr
  %360 = load double, ptr %359, align 8, !tbaa !22
  %361 = call double @llvm.fmuladd.f64(double %358, double %360, double %.unr784)
  store double %361, ptr %343, align 8, !tbaa !22
  br label %._crit_edge406

._crit_edge406:                                   ; preds = %._crit_edge406.loopexit.epilog-lcssa, %._crit_edge406.loopexit.unr-lcssa, %342
  %362 = phi double [ 0.000000e+00, %342 ], [ %.lcssa745.ph, %._crit_edge406.loopexit.unr-lcssa ], [ %361, %._crit_edge406.loopexit.epilog-lcssa ]
  %363 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv534
  %364 = load ptr, ptr %363, align 8, !tbaa !24
  %365 = getelementptr inbounds double, ptr %364, i64 %242
  %366 = load double, ptr %365, align 8, !tbaa !22
  %367 = fadd double %362, %366
  %368 = call double @llvm.fabs.f64(double %367)
  %369 = fcmp ogt double %368, 0x3D06849B86A12B9C
  br i1 %369, label %370, label %338

370:                                              ; preds = %._crit_edge406
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %.loopexit

371:                                              ; preds = %.preheader339, %._crit_edge447
  %372 = phi i32 [ %240, %.preheader339 ], [ %467, %._crit_edge447 ]
  %.0291452 = phi i32 [ 0, %.preheader339 ], [ %373, %._crit_edge447 ]
  %.0306450 = phi i32 [ undef, %.preheader339 ], [ %.3309605, %._crit_edge447 ]
  %.0310449 = phi i32 [ undef, %.preheader339 ], [ %.2312, %._crit_edge447 ]
  %.0313448 = phi i32 [ undef, %.preheader339 ], [ %.1314.lcssa591604, %._crit_edge447 ]
  %373 = add nuw nsw i32 %.0291452, 1
  %374 = icmp eq i32 %373, 100
  br i1 %374, label %375, label %376

375:                                              ; preds = %371
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %.loopexit

376:                                              ; preds = %371
  %377 = call i32 @SMgetActiveMatrix(ptr noundef %42, i32 noundef %372, ptr noundef %21, ptr noundef %36)
  %.not328 = icmp eq i32 %377, 0
  br i1 %.not328, label %380, label %378

378:                                              ; preds = %376
  %379 = call i32 @SMerror(i32 noundef 581, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %377, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit

380:                                              ; preds = %376
  %381 = load i32, ptr %8, align 4, !tbaa !5
  %382 = call i32 @SMgetActiveRHS(ptr noundef %23, i32 noundef %381, ptr noundef %21, ptr noundef %26)
  %.not329 = icmp eq i32 %382, 0
  br i1 %.not329, label %385, label %383

383:                                              ; preds = %380
  %384 = call i32 @SMerror(i32 noundef 582, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %382, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit

385:                                              ; preds = %380
  %386 = load i32, ptr %8, align 4, !tbaa !5
  %387 = call i32 @SMtransposeMatrix(ptr noundef %36, i32 noundef %386, i32 noundef %386, ptr noundef %39) #6
  %.not330 = icmp eq i32 %387, 0
  br i1 %.not330, label %390, label %388

388:                                              ; preds = %385
  %389 = call i32 @SMerror(i32 noundef 585, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %387, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit

390:                                              ; preds = %385
  call void @dgesv_(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef %39, ptr noundef nonnull %8, ptr noundef %17, ptr noundef %26, ptr noundef nonnull %8, ptr noundef nonnull %9) #6
  %391 = load i32, ptr %9, align 4, !tbaa !5
  %.not331 = icmp eq i32 %391, 0
  br i1 %.not331, label %.preheader338, label %395

.preheader338:                                    ; preds = %390
  br i1 %339, label %.lr.ph417, label %._crit_edge418.thread

.lr.ph417:                                        ; preds = %.preheader338
  %392 = load i32, ptr %8, align 4, !tbaa !5
  %393 = icmp sgt i32 %392, 0
  %wide.trip.count542 = zext i32 %392 to i64
  %xtraiter789 = and i64 %wide.trip.count542, 1
  %394 = icmp eq i32 %392, 1
  %unroll_iter794 = and i64 %wide.trip.count542, 2147483646
  %lcmp.mod792.not = icmp eq i64 %xtraiter789, 0
  br label %396

395:                                              ; preds = %390
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %.loopexit

396:                                              ; preds = %.lr.ph417, %._crit_edge412
  %indvars.iv544 = phi i64 [ 0, %.lr.ph417 ], [ %indvars.iv.next545, %._crit_edge412 ]
  %.0304415 = phi double [ 1.000000e+300, %.lr.ph417 ], [ %.1305, %._crit_edge412 ]
  %.1311414 = phi i32 [ %.0310449, %.lr.ph417 ], [ %.2312, %._crit_edge412 ]
  %397 = getelementptr inbounds i32, ptr %19, i64 %indvars.iv544
  %398 = load i32, ptr %397, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds double, ptr %23, i64 %399
  %401 = load double, ptr %400, align 8, !tbaa !22
  %402 = getelementptr inbounds double, ptr %28, i64 %indvars.iv544
  store double %401, ptr %402, align 8, !tbaa !22
  br i1 %393, label %.lr.ph411.preheader, label %._crit_edge412

.lr.ph411.preheader:                              ; preds = %396
  br i1 %394, label %._crit_edge412.loopexit.unr-lcssa, label %.lr.ph411

.lr.ph411:                                        ; preds = %.lr.ph411.preheader, %.lr.ph411
  %indvars.iv539 = phi i64 [ %indvars.iv.next540.1, %.lr.ph411 ], [ 0, %.lr.ph411.preheader ]
  %403 = phi double [ %419, %.lr.ph411 ], [ %401, %.lr.ph411.preheader ]
  %niter795 = phi i64 [ %niter795.next.1, %.lr.ph411 ], [ 0, %.lr.ph411.preheader ]
  %404 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv539
  %405 = load ptr, ptr %404, align 8, !tbaa !24
  %406 = getelementptr inbounds double, ptr %405, i64 %399
  %407 = load double, ptr %406, align 8, !tbaa !22
  %408 = getelementptr inbounds double, ptr %26, i64 %indvars.iv539
  %409 = load double, ptr %408, align 8, !tbaa !22
  %410 = fneg double %407
  %411 = call double @llvm.fmuladd.f64(double %410, double %409, double %403)
  store double %411, ptr %402, align 8, !tbaa !22
  %indvars.iv.next540 = or disjoint i64 %indvars.iv539, 1
  %412 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv.next540
  %413 = load ptr, ptr %412, align 8, !tbaa !24
  %414 = getelementptr inbounds double, ptr %413, i64 %399
  %415 = load double, ptr %414, align 8, !tbaa !22
  %416 = getelementptr inbounds double, ptr %26, i64 %indvars.iv.next540
  %417 = load double, ptr %416, align 8, !tbaa !22
  %418 = fneg double %415
  %419 = call double @llvm.fmuladd.f64(double %418, double %417, double %411)
  store double %419, ptr %402, align 8, !tbaa !22
  %indvars.iv.next540.1 = add nuw nsw i64 %indvars.iv539, 2
  %niter795.next.1 = add i64 %niter795, 2
  %niter795.ncmp.1 = icmp eq i64 %niter795.next.1, %unroll_iter794
  br i1 %niter795.ncmp.1, label %._crit_edge412.loopexit.unr-lcssa, label %.lr.ph411, !llvm.loop !54

._crit_edge412.loopexit.unr-lcssa:                ; preds = %.lr.ph411, %.lr.ph411.preheader
  %.lcssa.ph = phi double [ poison, %.lr.ph411.preheader ], [ %419, %.lr.ph411 ]
  %indvars.iv539.unr = phi i64 [ 0, %.lr.ph411.preheader ], [ %indvars.iv.next540.1, %.lr.ph411 ]
  %.unr791 = phi double [ %401, %.lr.ph411.preheader ], [ %419, %.lr.ph411 ]
  br i1 %lcmp.mod792.not, label %._crit_edge412, label %.lr.ph411.epil

.lr.ph411.epil:                                   ; preds = %._crit_edge412.loopexit.unr-lcssa
  %420 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv539.unr
  %421 = load ptr, ptr %420, align 8, !tbaa !24
  %422 = getelementptr inbounds double, ptr %421, i64 %399
  %423 = load double, ptr %422, align 8, !tbaa !22
  %424 = getelementptr inbounds double, ptr %26, i64 %indvars.iv539.unr
  %425 = load double, ptr %424, align 8, !tbaa !22
  %426 = fneg double %423
  %427 = call double @llvm.fmuladd.f64(double %426, double %425, double %.unr791)
  store double %427, ptr %402, align 8, !tbaa !22
  br label %._crit_edge412

._crit_edge412:                                   ; preds = %.lr.ph411.epil, %._crit_edge412.loopexit.unr-lcssa, %396
  %428 = phi double [ %401, %396 ], [ %.lcssa.ph, %._crit_edge412.loopexit.unr-lcssa ], [ %427, %.lr.ph411.epil ]
  %429 = fcmp olt double %428, %.0304415
  %430 = trunc nuw nsw i64 %indvars.iv544 to i32
  %.2312 = select i1 %429, i32 %430, i32 %.1311414
  %.1305 = select i1 %429, double %428, double %.0304415
  %indvars.iv.next545 = add nuw nsw i64 %indvars.iv544, 1
  %exitcond548.not = icmp eq i64 %indvars.iv.next545, %wide.trip.count547
  br i1 %exitcond548.not, label %._crit_edge418, label %396, !llvm.loop !55

._crit_edge418:                                   ; preds = %._crit_edge412
  %431 = fcmp ogt double %.1305, 0xBD06849B86A12B9C
  br i1 %431, label %._crit_edge418.thread, label %432

._crit_edge418.thread:                            ; preds = %.preheader338, %._crit_edge418
  store i32 1, ptr %5, align 4, !tbaa !5
  br label %.loopexit

432:                                              ; preds = %._crit_edge418
  %433 = sext i32 %.2312 to i64
  %434 = getelementptr inbounds i32, ptr %19, i64 %433
  %435 = load i32, ptr %434, align 4, !tbaa !5
  %436 = load i32, ptr %8, align 4, !tbaa !5
  %437 = icmp sgt i32 %436, 0
  br i1 %437, label %.lr.ph423, label %._crit_edge424

.lr.ph423:                                        ; preds = %432
  %438 = sext i32 %435 to i64
  %wide.trip.count552 = zext nneg i32 %436 to i64
  %xtraiter797 = and i64 %wide.trip.count552, 3
  %439 = icmp ult i32 %436, 4
  br i1 %439, label %._crit_edge424.loopexit.unr-lcssa, label %.lr.ph423.new

.lr.ph423.new:                                    ; preds = %.lr.ph423
  %unroll_iter800 = and i64 %wide.trip.count552, 2147483644
  br label %440

440:                                              ; preds = %440, %.lr.ph423.new
  %indvars.iv549 = phi i64 [ 0, %.lr.ph423.new ], [ %indvars.iv.next550.3, %440 ]
  %niter801 = phi i64 [ 0, %.lr.ph423.new ], [ %niter801.next.3, %440 ]
  %441 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv549
  %442 = load ptr, ptr %441, align 8, !tbaa !24
  %443 = getelementptr inbounds double, ptr %442, i64 %438
  %444 = load double, ptr %443, align 8, !tbaa !22
  %445 = getelementptr inbounds double, ptr %33, i64 %indvars.iv549
  store double %444, ptr %445, align 8, !tbaa !22
  %indvars.iv.next550 = or disjoint i64 %indvars.iv549, 1
  %446 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next550
  %447 = load ptr, ptr %446, align 8, !tbaa !24
  %448 = getelementptr inbounds double, ptr %447, i64 %438
  %449 = load double, ptr %448, align 8, !tbaa !22
  %450 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next550
  store double %449, ptr %450, align 8, !tbaa !22
  %indvars.iv.next550.1 = or disjoint i64 %indvars.iv549, 2
  %451 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next550.1
  %452 = load ptr, ptr %451, align 8, !tbaa !24
  %453 = getelementptr inbounds double, ptr %452, i64 %438
  %454 = load double, ptr %453, align 8, !tbaa !22
  %455 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next550.1
  store double %454, ptr %455, align 8, !tbaa !22
  %indvars.iv.next550.2 = or disjoint i64 %indvars.iv549, 3
  %456 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next550.2
  %457 = load ptr, ptr %456, align 8, !tbaa !24
  %458 = getelementptr inbounds double, ptr %457, i64 %438
  %459 = load double, ptr %458, align 8, !tbaa !22
  %460 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next550.2
  store double %459, ptr %460, align 8, !tbaa !22
  %indvars.iv.next550.3 = add nuw nsw i64 %indvars.iv549, 4
  %niter801.next.3 = add i64 %niter801, 4
  %niter801.ncmp.3 = icmp eq i64 %niter801.next.3, %unroll_iter800
  br i1 %niter801.ncmp.3, label %._crit_edge424.loopexit.unr-lcssa, label %440, !llvm.loop !56

._crit_edge424.loopexit.unr-lcssa:                ; preds = %440, %.lr.ph423
  %indvars.iv549.unr = phi i64 [ 0, %.lr.ph423 ], [ %indvars.iv.next550.3, %440 ]
  %lcmp.mod799.not = icmp eq i64 %xtraiter797, 0
  br i1 %lcmp.mod799.not, label %._crit_edge424, label %.epil.preheader796

.epil.preheader796:                               ; preds = %._crit_edge424.loopexit.unr-lcssa, %.epil.preheader796
  %indvars.iv549.epil = phi i64 [ %indvars.iv.next550.epil, %.epil.preheader796 ], [ %indvars.iv549.unr, %._crit_edge424.loopexit.unr-lcssa ]
  %epil.iter798 = phi i64 [ %epil.iter798.next, %.epil.preheader796 ], [ 0, %._crit_edge424.loopexit.unr-lcssa ]
  %461 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv549.epil
  %462 = load ptr, ptr %461, align 8, !tbaa !24
  %463 = getelementptr inbounds double, ptr %462, i64 %438
  %464 = load double, ptr %463, align 8, !tbaa !22
  %465 = getelementptr inbounds double, ptr %33, i64 %indvars.iv549.epil
  store double %464, ptr %465, align 8, !tbaa !22
  %indvars.iv.next550.epil = add nuw nsw i64 %indvars.iv549.epil, 1
  %epil.iter798.next = add i64 %epil.iter798, 1
  %epil.iter798.cmp.not = icmp eq i64 %epil.iter798.next, %xtraiter797
  br i1 %epil.iter798.cmp.not, label %._crit_edge424, label %.epil.preheader796, !llvm.loop !57

._crit_edge424:                                   ; preds = %._crit_edge424.loopexit.unr-lcssa, %.epil.preheader796, %432
  call void @dgesv_(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef %36, ptr noundef nonnull %8, ptr noundef %17, ptr noundef %33, ptr noundef nonnull %8, ptr noundef nonnull %9) #6
  %466 = load i32, ptr %9, align 4, !tbaa !5
  %.not332 = icmp eq i32 %466, 0
  br i1 %.not332, label %.preheader337, label %469

.preheader337:                                    ; preds = %._crit_edge424
  %467 = load i32, ptr %8, align 4, !tbaa !5
  %468 = icmp sgt i32 %467, 0
  br i1 %468, label %.lr.ph429.preheader, label %._crit_edge430.thread

.lr.ph429.preheader:                              ; preds = %.preheader337
  %wide.trip.count557 = zext nneg i32 %467 to i64
  br label %.lr.ph429

469:                                              ; preds = %._crit_edge424
  store i32 0, ptr %5, align 4, !tbaa !5
  br label %.loopexit

.lr.ph429:                                        ; preds = %.lr.ph429.preheader, %.lr.ph429
  %indvars.iv554 = phi i64 [ 0, %.lr.ph429.preheader ], [ %indvars.iv.next555, %.lr.ph429 ]
  %.0301427 = phi double [ 1.000000e+300, %.lr.ph429.preheader ], [ %.1302, %.lr.ph429 ]
  %.1307426 = phi i32 [ %.0306450, %.lr.ph429.preheader ], [ %.2308, %.lr.ph429 ]
  %.1314425 = phi i32 [ %.0313448, %.lr.ph429.preheader ], [ %.2315, %.lr.ph429 ]
  %470 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv554
  %471 = load i32, ptr %470, align 4, !tbaa !5
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds double, ptr %3, i64 %472
  %474 = load double, ptr %473, align 8, !tbaa !22
  %475 = getelementptr inbounds double, ptr %33, i64 %indvars.iv554
  %476 = load double, ptr %475, align 8, !tbaa !22
  %477 = fdiv double %474, %476
  %478 = getelementptr inbounds double, ptr %31, i64 %indvars.iv554
  store double %477, ptr %478, align 8, !tbaa !22
  %479 = fcmp olt double %477, %.0301427
  %480 = fcmp ogt double %477, 0.000000e+00
  %or.cond = and i1 %479, %480
  %481 = trunc nuw nsw i64 %indvars.iv554 to i32
  %.2315 = select i1 %or.cond, i32 %481, i32 %.1314425
  %.2308 = select i1 %or.cond, i32 %471, i32 %.1307426
  %.1302 = select i1 %or.cond, double %477, double %.0301427
  %indvars.iv.next555 = add nuw nsw i64 %indvars.iv554, 1
  %exitcond558.not = icmp eq i64 %indvars.iv.next555, %wide.trip.count557
  br i1 %exitcond558.not, label %._crit_edge430, label %.lr.ph429, !llvm.loop !58

._crit_edge430:                                   ; preds = %.lr.ph429
  %482 = zext nneg i32 %467 to i64
  %gep = getelementptr double, ptr %invariant.gep, i64 %482
  %483 = load double, ptr %gep, align 8, !tbaa !22
  %484 = fmul double %.1302, %483
  %485 = load double, ptr %340, align 8, !tbaa !22
  %486 = fadd double %485, 0xBD06849B86A12B9C
  %487 = fcmp ult double %484, %486
  br i1 %487, label %535, label %.preheader336

._crit_edge430.thread:                            ; preds = %.preheader337
  %488 = sext i32 %467 to i64
  %gep589 = getelementptr double, ptr %invariant.gep, i64 %488
  %489 = load double, ptr %gep589, align 8, !tbaa !22
  %490 = fmul double %489, 1.000000e+300
  %491 = load double, ptr %340, align 8, !tbaa !22
  %492 = fadd double %491, 0xBD06849B86A12B9C
  %493 = fcmp ult double %490, %492
  br i1 %493, label %._crit_edge447, label %._crit_edge442

.preheader336:                                    ; preds = %._crit_edge430
  br i1 %468, label %.preheader.preheader, label %._crit_edge442

.preheader.preheader:                             ; preds = %.preheader336
  %wide.trip.count567 = zext nneg i32 %467 to i64
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge438
  %indvars.iv564 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next565, %._crit_edge438 ]
  %.1293440 = phi i32 [ 0, %.preheader.preheader ], [ %.2294, %._crit_edge438 ]
  br i1 %79, label %.lr.ph437, label %._crit_edge438

.lr.ph437:                                        ; preds = %.preheader
  %494 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv564
  %495 = load ptr, ptr %494, align 8, !tbaa !24
  br i1 %341, label %._crit_edge438.loopexit.unr-lcssa, label %.lr.ph437.new

.lr.ph437.new:                                    ; preds = %.lr.ph437, %.lr.ph437.new
  %indvars.iv559 = phi i64 [ %indvars.iv.next560.3, %.lr.ph437.new ], [ 0, %.lr.ph437 ]
  %.0298435 = phi double [ %515, %.lr.ph437.new ], [ 0.000000e+00, %.lr.ph437 ]
  %niter808 = phi i64 [ %niter808.next.3, %.lr.ph437.new ], [ 0, %.lr.ph437 ]
  %496 = getelementptr inbounds double, ptr %495, i64 %indvars.iv559
  %497 = load double, ptr %496, align 8, !tbaa !22
  %498 = getelementptr inbounds double, ptr %3, i64 %indvars.iv559
  %499 = load double, ptr %498, align 8, !tbaa !22
  %500 = call double @llvm.fmuladd.f64(double %497, double %499, double %.0298435)
  %indvars.iv.next560 = or disjoint i64 %indvars.iv559, 1
  %501 = getelementptr inbounds double, ptr %495, i64 %indvars.iv.next560
  %502 = load double, ptr %501, align 8, !tbaa !22
  %503 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next560
  %504 = load double, ptr %503, align 8, !tbaa !22
  %505 = call double @llvm.fmuladd.f64(double %502, double %504, double %500)
  %indvars.iv.next560.1 = or disjoint i64 %indvars.iv559, 2
  %506 = getelementptr inbounds double, ptr %495, i64 %indvars.iv.next560.1
  %507 = load double, ptr %506, align 8, !tbaa !22
  %508 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next560.1
  %509 = load double, ptr %508, align 8, !tbaa !22
  %510 = call double @llvm.fmuladd.f64(double %507, double %509, double %505)
  %indvars.iv.next560.2 = or disjoint i64 %indvars.iv559, 3
  %511 = getelementptr inbounds double, ptr %495, i64 %indvars.iv.next560.2
  %512 = load double, ptr %511, align 8, !tbaa !22
  %513 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next560.2
  %514 = load double, ptr %513, align 8, !tbaa !22
  %515 = call double @llvm.fmuladd.f64(double %512, double %514, double %510)
  %indvars.iv.next560.3 = add nuw nsw i64 %indvars.iv559, 4
  %niter808.next.3 = add i64 %niter808, 4
  %niter808.ncmp.3 = icmp eq i64 %niter808.next.3, %unroll_iter807
  br i1 %niter808.ncmp.3, label %._crit_edge438.loopexit.unr-lcssa, label %.lr.ph437.new, !llvm.loop !59

._crit_edge438.loopexit.unr-lcssa:                ; preds = %.lr.ph437.new, %.lr.ph437
  %.lcssa726.ph = phi double [ poison, %.lr.ph437 ], [ %515, %.lr.ph437.new ]
  %indvars.iv559.unr = phi i64 [ 0, %.lr.ph437 ], [ %indvars.iv.next560.3, %.lr.ph437.new ]
  %.0298435.unr = phi double [ 0.000000e+00, %.lr.ph437 ], [ %515, %.lr.ph437.new ]
  br i1 %lcmp.mod805.not, label %._crit_edge438, label %.epil.preheader802

.epil.preheader802:                               ; preds = %._crit_edge438.loopexit.unr-lcssa, %.epil.preheader802
  %indvars.iv559.epil = phi i64 [ %indvars.iv.next560.epil, %.epil.preheader802 ], [ %indvars.iv559.unr, %._crit_edge438.loopexit.unr-lcssa ]
  %.0298435.epil = phi double [ %520, %.epil.preheader802 ], [ %.0298435.unr, %._crit_edge438.loopexit.unr-lcssa ]
  %epil.iter804 = phi i64 [ %epil.iter804.next, %.epil.preheader802 ], [ 0, %._crit_edge438.loopexit.unr-lcssa ]
  %516 = getelementptr inbounds double, ptr %495, i64 %indvars.iv559.epil
  %517 = load double, ptr %516, align 8, !tbaa !22
  %518 = getelementptr inbounds double, ptr %3, i64 %indvars.iv559.epil
  %519 = load double, ptr %518, align 8, !tbaa !22
  %520 = call double @llvm.fmuladd.f64(double %517, double %519, double %.0298435.epil)
  %indvars.iv.next560.epil = add nuw nsw i64 %indvars.iv559.epil, 1
  %epil.iter804.next = add i64 %epil.iter804, 1
  %epil.iter804.cmp.not = icmp eq i64 %epil.iter804.next, %xtraiter803
  br i1 %epil.iter804.cmp.not, label %._crit_edge438, label %.epil.preheader802, !llvm.loop !60

._crit_edge438:                                   ; preds = %._crit_edge438.loopexit.unr-lcssa, %.epil.preheader802, %.preheader
  %.0298.lcssa = phi double [ 0.000000e+00, %.preheader ], [ %.lcssa726.ph, %._crit_edge438.loopexit.unr-lcssa ], [ %520, %.epil.preheader802 ]
  %521 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv564
  %522 = load ptr, ptr %521, align 8, !tbaa !24
  %523 = getelementptr inbounds double, ptr %522, i64 %242
  %524 = load double, ptr %523, align 8, !tbaa !22
  %525 = fadd double %.0298.lcssa, %524
  %526 = call double @llvm.fabs.f64(double %525)
  %527 = fcmp olt double %526, 0x3D06849B86A12B9C
  %528 = zext i1 %527 to i32
  %.2294 = add nuw nsw i32 %.1293440, %528
  %indvars.iv.next565 = add nuw nsw i64 %indvars.iv564, 1
  %exitcond568.not = icmp eq i64 %indvars.iv.next565, %wide.trip.count567
  br i1 %exitcond568.not, label %._crit_edge442, label %.preheader, !llvm.loop !61

._crit_edge442:                                   ; preds = %._crit_edge438, %._crit_edge430.thread, %.preheader336
  %.1314.lcssa590599 = phi i32 [ %.2315, %.preheader336 ], [ %.0313448, %._crit_edge430.thread ], [ %.2315, %._crit_edge438 ]
  %.1307.lcssa592598 = phi i32 [ %.2308, %.preheader336 ], [ %.0306450, %._crit_edge430.thread ], [ %.2308, %._crit_edge438 ]
  %.0301.lcssa593597 = phi double [ %.1302, %.preheader336 ], [ 1.000000e+300, %._crit_edge430.thread ], [ %.1302, %._crit_edge438 ]
  %529 = phi double [ %483, %.preheader336 ], [ %489, %._crit_edge430.thread ], [ %483, %._crit_edge438 ]
  %530 = phi double [ %485, %.preheader336 ], [ %491, %._crit_edge430.thread ], [ %485, %._crit_edge438 ]
  %.1293.lcssa = phi i32 [ 0, %.preheader336 ], [ 0, %._crit_edge430.thread ], [ %.2294, %._crit_edge438 ]
  %531 = icmp eq i32 %.1293.lcssa, %467
  br i1 %531, label %532, label %535

532:                                              ; preds = %._crit_edge442
  %533 = add nsw i32 %467, -1
  %534 = fdiv double %530, %529
  br label %535

535:                                              ; preds = %._crit_edge442, %532, %._crit_edge430
  %.1314.lcssa591 = phi i32 [ %.1314.lcssa590599, %532 ], [ %.1314.lcssa590599, %._crit_edge442 ], [ %.2315, %._crit_edge430 ]
  %.3309 = phi i32 [ %533, %532 ], [ %.1307.lcssa592598, %._crit_edge442 ], [ %.2308, %._crit_edge430 ]
  %.2303 = phi double [ %534, %532 ], [ %.0301.lcssa593597, %._crit_edge442 ], [ %.1302, %._crit_edge430 ]
  %.3295 = phi i32 [ 1, %532 ], [ %.1293.lcssa, %._crit_edge442 ], [ 0, %._crit_edge430 ]
  br i1 %468, label %.lr.ph446, label %._crit_edge447

.lr.ph446:                                        ; preds = %535
  %536 = fneg double %.2303
  %wide.trip.count572 = zext nneg i32 %467 to i64
  %xtraiter810 = and i64 %wide.trip.count572, 1
  %537 = icmp eq i32 %467, 1
  br i1 %537, label %._crit_edge447.loopexit.unr-lcssa, label %.lr.ph446.new

.lr.ph446.new:                                    ; preds = %.lr.ph446
  %unroll_iter813 = and i64 %wide.trip.count572, 2147483646
  br label %538

538:                                              ; preds = %538, %.lr.ph446.new
  %indvars.iv569 = phi i64 [ 0, %.lr.ph446.new ], [ %indvars.iv.next570.1, %538 ]
  %niter814 = phi i64 [ 0, %.lr.ph446.new ], [ %niter814.next.1, %538 ]
  %539 = getelementptr inbounds double, ptr %33, i64 %indvars.iv569
  %540 = load double, ptr %539, align 8, !tbaa !22
  %541 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv569
  %542 = load i32, ptr %541, align 4, !tbaa !5
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds double, ptr %3, i64 %543
  %545 = load double, ptr %544, align 8, !tbaa !22
  %546 = call double @llvm.fmuladd.f64(double %536, double %540, double %545)
  store double %546, ptr %544, align 8, !tbaa !22
  %indvars.iv.next570 = or disjoint i64 %indvars.iv569, 1
  %547 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next570
  %548 = load double, ptr %547, align 8, !tbaa !22
  %549 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv.next570
  %550 = load i32, ptr %549, align 4, !tbaa !5
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds double, ptr %3, i64 %551
  %553 = load double, ptr %552, align 8, !tbaa !22
  %554 = call double @llvm.fmuladd.f64(double %536, double %548, double %553)
  store double %554, ptr %552, align 8, !tbaa !22
  %indvars.iv.next570.1 = add nuw nsw i64 %indvars.iv569, 2
  %niter814.next.1 = add i64 %niter814, 2
  %niter814.ncmp.1 = icmp eq i64 %niter814.next.1, %unroll_iter813
  br i1 %niter814.ncmp.1, label %._crit_edge447.loopexit.unr-lcssa, label %538, !llvm.loop !62

._crit_edge447.loopexit.unr-lcssa:                ; preds = %538, %.lr.ph446
  %indvars.iv569.unr = phi i64 [ 0, %.lr.ph446 ], [ %indvars.iv.next570.1, %538 ]
  %lcmp.mod812.not = icmp eq i64 %xtraiter810, 0
  br i1 %lcmp.mod812.not, label %._crit_edge447, label %._crit_edge447.loopexit.epilog-lcssa

._crit_edge447.loopexit.epilog-lcssa:             ; preds = %._crit_edge447.loopexit.unr-lcssa
  %555 = getelementptr inbounds double, ptr %33, i64 %indvars.iv569.unr
  %556 = load double, ptr %555, align 8, !tbaa !22
  %557 = getelementptr inbounds i32, ptr %21, i64 %indvars.iv569.unr
  %558 = load i32, ptr %557, align 4, !tbaa !5
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds double, ptr %3, i64 %559
  %561 = load double, ptr %560, align 8, !tbaa !22
  %562 = call double @llvm.fmuladd.f64(double %536, double %556, double %561)
  store double %562, ptr %560, align 8, !tbaa !22
  br label %._crit_edge447

._crit_edge447:                                   ; preds = %._crit_edge447.loopexit.epilog-lcssa, %._crit_edge447.loopexit.unr-lcssa, %._crit_edge430.thread, %535
  %.3295607 = phi i32 [ %.3295, %535 ], [ 0, %._crit_edge430.thread ], [ %.3295, %._crit_edge447.loopexit.unr-lcssa ], [ %.3295, %._crit_edge447.loopexit.epilog-lcssa ]
  %.2303606 = phi double [ %.2303, %535 ], [ 1.000000e+300, %._crit_edge430.thread ], [ %.2303, %._crit_edge447.loopexit.unr-lcssa ], [ %.2303, %._crit_edge447.loopexit.epilog-lcssa ]
  %.3309605 = phi i32 [ %.3309, %535 ], [ %.0306450, %._crit_edge430.thread ], [ %.3309, %._crit_edge447.loopexit.unr-lcssa ], [ %.3309, %._crit_edge447.loopexit.epilog-lcssa ]
  %.1314.lcssa591604 = phi i32 [ %.1314.lcssa591, %535 ], [ %.0313448, %._crit_edge430.thread ], [ %.1314.lcssa591, %._crit_edge447.loopexit.unr-lcssa ], [ %.1314.lcssa591, %._crit_edge447.loopexit.epilog-lcssa ]
  %563 = sext i32 %435 to i64
  %564 = getelementptr inbounds double, ptr %3, i64 %563
  store double %.2303606, ptr %564, align 8, !tbaa !22
  store i32 %.3309605, ptr %434, align 4, !tbaa !5
  %565 = sext i32 %.1314.lcssa591604 to i64
  %566 = getelementptr inbounds i32, ptr %21, i64 %565
  store i32 %435, ptr %566, align 4, !tbaa !5
  %.not327 = icmp eq i32 %.3295607, 0
  br i1 %.not327, label %371, label %.loopexit, !llvm.loop !63

.loopexit:                                        ; preds = %._crit_edge447, %469, %._crit_edge418.thread, %395, %388, %383, %378, %375, %370
  %.0280 = phi i32 [ 0, %370 ], [ 0, %375 ], [ %379, %378 ], [ %384, %383 ], [ %389, %388 ], [ 0, %395 ], [ 0, %._crit_edge418.thread ], [ 0, %469 ], [ 0, %._crit_edge447 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 1200, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  ret i32 %.0280
}

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @SMgetActiveMatrix(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @SMgetActiveRHS(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare double @dMagnitude(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #5

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 40}
!10 = !{!"__SMlp", !11, 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, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!10, !11, i64 56}
!13 = !{!10, !11, i64 48}
!14 = !{!10, !11, i64 32}
!15 = !{!10, !11, i64 72}
!16 = !{!10, !11, i64 80}
!17 = !{!10, !11, i64 88}
!18 = !{!10, !11, i64 96}
!19 = !{!10, !11, i64 104}
!20 = !{!10, !11, i64 112}
!21 = !{!10, !11, i64 120}
!22 = !{!23, !23, i64 0}
!23 = !{!"double", !7, i64 0}
!24 = !{!11, !11, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.unroll.disable"}
!27 = distinct !{!27, !28, !29, !30}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!"llvm.loop.isvectorized", i32 1}
!30 = !{!"llvm.loop.unroll.runtime.disable"}
!31 = distinct !{!31, !28}
!32 = distinct !{!32, !28, !29, !30}
!33 = distinct !{!33, !28, !29}
!34 = distinct !{!34, !28, !29, !30}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !28, !29}
!37 = distinct !{!37, !28}
!38 = distinct !{!38, !28, !29}
!39 = distinct !{!39, !28, !29, !30}
!40 = distinct !{!40, !28, !30, !29}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28, !29, !30}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !28, !29, !30}
!45 = distinct !{!45, !28, !30, !29}
!46 = distinct !{!46, !28}
!47 = distinct !{!47, !28, !29}
!48 = distinct !{!48, !28}
!49 = distinct !{!49, !28}
!50 = distinct !{!50, !28}
!51 = distinct !{!51, !26}
!52 = distinct !{!52, !28}
!53 = distinct !{!53, !28}
!54 = distinct !{!54, !28}
!55 = distinct !{!55, !28}
!56 = distinct !{!56, !28}
!57 = distinct !{!57, !26}
!58 = distinct !{!58, !28}
!59 = distinct !{!59, !28}
!60 = distinct !{!60, !26}
!61 = distinct !{!61, !28}
!62 = distinct !{!62, !28}
!63 = distinct !{!63, !28}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass