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

75:                                               ; preds = %92, %8
  %76 = load i32, ptr %19, align 4, !tbaa !5
  %77 = load i32, ptr %11, align 4, !tbaa !5
  %78 = icmp slt i32 %76, %77
  br i1 %78, label %79, label %95

79:                                               ; preds = %75
  %80 = load ptr, ptr %27, align 8, !tbaa !9
  %81 = load i32, ptr %19, align 4, !tbaa !5
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds i32, ptr %80, i64 %82
  store i32 0, ptr %83, align 4, !tbaa !5
  %84 = load ptr, ptr %34, align 8, !tbaa !9
  %85 = load i32, ptr %19, align 4, !tbaa !5
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds i32, ptr %84, i64 %86
  store i32 0, ptr %87, align 4, !tbaa !5
  %88 = load ptr, ptr %39, align 8, !tbaa !9
  %89 = load i32, ptr %19, align 4, !tbaa !5
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds double, ptr %88, i64 %90
  store double 0.000000e+00, ptr %91, align 8, !tbaa !21
  br label %92

92:                                               ; preds = %79
  %93 = load i32, ptr %19, align 4, !tbaa !5
  %94 = add nsw i32 %93, 1
  store i32 %94, ptr %19, align 4, !tbaa !5
  br label %75, !llvm.loop !23

95:                                               ; preds = %75
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %96

96:                                               ; preds = %117, %95
  %97 = load i32, ptr %19, align 4, !tbaa !5
  %98 = load i32, ptr %10, align 4, !tbaa !5
  %99 = icmp slt i32 %97, %98
  br i1 %99, label %100, label %120

100:                                              ; preds = %96
  %101 = load ptr, ptr %28, align 8, !tbaa !9
  %102 = load i32, ptr %19, align 4, !tbaa !5
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds i32, ptr %101, i64 %103
  store i32 0, ptr %104, align 4, !tbaa !5
  %105 = load ptr, ptr %40, align 8, !tbaa !9
  %106 = load i32, ptr %19, align 4, !tbaa !5
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds double, ptr %105, i64 %107
  store double 0.000000e+00, ptr %108, align 8, !tbaa !21
  %109 = load ptr, ptr %41, align 8, !tbaa !9
  %110 = load i32, ptr %19, align 4, !tbaa !5
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds double, ptr %109, i64 %111
  store double 0.000000e+00, ptr %112, align 8, !tbaa !21
  %113 = load ptr, ptr %42, align 8, !tbaa !9
  %114 = load i32, ptr %19, align 4, !tbaa !5
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds double, ptr %113, i64 %115
  store double 0.000000e+00, ptr %116, align 8, !tbaa !21
  br label %117

117:                                              ; preds = %100
  %118 = load i32, ptr %19, align 4, !tbaa !5
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %19, align 4, !tbaa !5
  br label %96, !llvm.loop !25

120:                                              ; preds = %96
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %121

121:                                              ; preds = %136, %120
  %122 = load i32, ptr %19, align 4, !tbaa !5
  %123 = load i32, ptr %11, align 4, !tbaa !5
  %124 = load i32, ptr %11, align 4, !tbaa !5
  %125 = mul nsw i32 %123, %124
  %126 = icmp slt i32 %122, %125
  br i1 %126, label %127, label %139

127:                                              ; preds = %121
  %128 = load ptr, ptr %35, align 8, !tbaa !9
  %129 = load i32, ptr %19, align 4, !tbaa !5
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds double, ptr %128, i64 %130
  store double 0.000000e+00, ptr %131, align 8, !tbaa !21
  %132 = load ptr, ptr %36, align 8, !tbaa !9
  %133 = load i32, ptr %19, align 4, !tbaa !5
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds double, ptr %132, i64 %134
  store double 0.000000e+00, ptr %135, align 8, !tbaa !21
  br label %136

136:                                              ; preds = %127
  %137 = load i32, ptr %19, align 4, !tbaa !5
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr %19, align 4, !tbaa !5
  br label %121, !llvm.loop !26

139:                                              ; preds = %121
  store i32 0, ptr %25, align 4, !tbaa !5
  store i32 0, ptr %26, align 4, !tbaa !5
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %140

140:                                              ; preds = %167, %139
  %141 = load i32, ptr %19, align 4, !tbaa !5
  %142 = load i32, ptr %10, align 4, !tbaa !5
  %143 = icmp slt i32 %141, %142
  br i1 %143, label %144, label %170

144:                                              ; preds = %140
  %145 = load ptr, ptr %13, align 8, !tbaa !9
  %146 = load i32, ptr %19, align 4, !tbaa !5
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds double, ptr %145, i64 %147
  %149 = load double, ptr %148, align 8, !tbaa !21
  %150 = call double @llvm.fabs.f64(double %149)
  %151 = fcmp olt double %150, 1.000000e-15
  br i1 %151, label %152, label %159

152:                                              ; preds = %144
  %153 = load i32, ptr %19, align 4, !tbaa !5
  %154 = load ptr, ptr %28, align 8, !tbaa !9
  %155 = load i32, ptr %25, align 4, !tbaa !5
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %25, align 4, !tbaa !5
  %157 = sext i32 %155 to i64
  %158 = getelementptr inbounds i32, ptr %154, i64 %157
  store i32 %153, ptr %158, align 4, !tbaa !5
  br label %166

159:                                              ; preds = %144
  %160 = load i32, ptr %19, align 4, !tbaa !5
  %161 = load ptr, ptr %27, align 8, !tbaa !9
  %162 = load i32, ptr %26, align 4, !tbaa !5
  %163 = add nsw i32 %162, 1
  store i32 %163, ptr %26, align 4, !tbaa !5
  %164 = sext i32 %162 to i64
  %165 = getelementptr inbounds i32, ptr %161, i64 %164
  store i32 %160, ptr %165, align 4, !tbaa !5
  br label %166

166:                                              ; preds = %159, %152
  br label %167

167:                                              ; preds = %166
  %168 = load i32, ptr %19, align 4, !tbaa !5
  %169 = add nsw i32 %168, 1
  store i32 %169, ptr %19, align 4, !tbaa !5
  br label %140, !llvm.loop !27

170:                                              ; preds = %140
  %171 = load i32, ptr %26, align 4, !tbaa !5
  store i32 %171, ptr %11, align 4, !tbaa !5
  %172 = load i32, ptr %25, align 4, !tbaa !5
  store i32 %172, ptr %24, align 4, !tbaa !5
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %173

173:                                              ; preds = %183, %170
  %174 = load i32, ptr %19, align 4, !tbaa !5
  %175 = load i32, ptr %11, align 4, !tbaa !5
  %176 = sub nsw i32 %175, 1
  %177 = icmp slt i32 %174, %176
  br i1 %177, label %178, label %186

178:                                              ; preds = %173
  %179 = load ptr, ptr %40, align 8, !tbaa !9
  %180 = load i32, ptr %19, align 4, !tbaa !5
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds double, ptr %179, i64 %181
  store double 0.000000e+00, ptr %182, align 8, !tbaa !21
  br label %183

183:                                              ; preds = %178
  %184 = load i32, ptr %19, align 4, !tbaa !5
  %185 = add nsw i32 %184, 1
  store i32 %185, ptr %19, align 4, !tbaa !5
  br label %173, !llvm.loop !28

186:                                              ; preds = %173
  %187 = load ptr, ptr %40, align 8, !tbaa !9
  %188 = load i32, ptr %11, align 4, !tbaa !5
  %189 = sub nsw i32 %188, 1
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds double, ptr %187, i64 %190
  store double 1.000000e+00, ptr %191, align 8, !tbaa !21
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %192

192:                                              ; preds = %241, %186
  %193 = load i32, ptr %19, align 4, !tbaa !5
  %194 = load i32, ptr %11, align 4, !tbaa !5
  %195 = sub nsw i32 %194, 1
  %196 = icmp slt i32 %193, %195
  br i1 %196, label %197, label %244

197:                                              ; preds = %192
  %198 = load ptr, ptr %42, align 8, !tbaa !9
  %199 = load i32, ptr %19, align 4, !tbaa !5
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds double, ptr %198, i64 %200
  store double 0.000000e+00, ptr %201, align 8, !tbaa !21
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %202

202:                                              ; preds = %227, %197
  %203 = load i32, ptr %20, align 4, !tbaa !5
  %204 = load i32, ptr %10, align 4, !tbaa !5
  %205 = icmp slt i32 %203, %204
  br i1 %205, label %206, label %230

206:                                              ; preds = %202
  %207 = load ptr, ptr %12, align 8, !tbaa !9
  %208 = load i32, ptr %19, align 4, !tbaa !5
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds ptr, ptr %207, i64 %209
  %211 = load ptr, ptr %210, align 8, !tbaa !9
  %212 = load i32, ptr %20, align 4, !tbaa !5
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds double, ptr %211, i64 %213
  %215 = load double, ptr %214, align 8, !tbaa !21
  %216 = load ptr, ptr %13, align 8, !tbaa !9
  %217 = load i32, ptr %20, align 4, !tbaa !5
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds double, ptr %216, i64 %218
  %220 = load double, ptr %219, align 8, !tbaa !21
  %221 = load ptr, ptr %42, align 8, !tbaa !9
  %222 = load i32, ptr %19, align 4, !tbaa !5
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds double, ptr %221, i64 %223
  %225 = load double, ptr %224, align 8, !tbaa !21
  %226 = call double @llvm.fmuladd.f64(double %215, double %220, double %225)
  store double %226, ptr %224, align 8, !tbaa !21
  br label %227

227:                                              ; preds = %206
  %228 = load i32, ptr %20, align 4, !tbaa !5
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr %20, align 4, !tbaa !5
  br label %202, !llvm.loop !29

230:                                              ; preds = %202
  %231 = load ptr, ptr %42, align 8, !tbaa !9
  %232 = load i32, ptr %19, align 4, !tbaa !5
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds double, ptr %231, i64 %233
  %235 = load double, ptr %234, align 8, !tbaa !21
  %236 = call double @llvm.fabs.f64(double %235)
  %237 = fcmp ogt double %236, 0x3D06849B86A12B9C
  br i1 %237, label %238, label %240

238:                                              ; preds = %230
  %239 = load ptr, ptr %17, align 8, !tbaa !9
  store i32 0, ptr %239, align 4, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !5
  store i32 0, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

240:                                              ; preds = %230
  br label %241

241:                                              ; preds = %240
  %242 = load i32, ptr %19, align 4, !tbaa !5
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %19, align 4, !tbaa !5
  br label %192, !llvm.loop !30

244:                                              ; preds = %192
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %245

245:                                              ; preds = %267, %244
  %246 = load i32, ptr %20, align 4, !tbaa !5
  %247 = load i32, ptr %10, align 4, !tbaa !5
  %248 = icmp slt i32 %246, %247
  br i1 %248, label %249, label %270

249:                                              ; preds = %245
  %250 = load ptr, ptr %13, align 8, !tbaa !9
  %251 = load i32, ptr %20, align 4, !tbaa !5
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds double, ptr %250, i64 %252
  %254 = load double, ptr %253, align 8, !tbaa !21
  %255 = fcmp olt double %254, 0.000000e+00
  br i1 %255, label %256, label %266

256:                                              ; preds = %249
  %257 = load ptr, ptr %13, align 8, !tbaa !9
  %258 = load i32, ptr %20, align 4, !tbaa !5
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds double, ptr %257, i64 %259
  %261 = load double, ptr %260, align 8, !tbaa !21
  %262 = call double @llvm.fabs.f64(double %261)
  %263 = fcmp ogt double %262, 0x3D06849B86A12B9C
  br i1 %263, label %264, label %266

264:                                              ; preds = %256
  %265 = load ptr, ptr %17, align 8, !tbaa !9
  store i32 0, ptr %265, align 4, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !5
  store i32 0, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

266:                                              ; preds = %256, %249
  br label %267

267:                                              ; preds = %266
  %268 = load i32, ptr %20, align 4, !tbaa !5
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %20, align 4, !tbaa !5
  br label %245, !llvm.loop !31

270:                                              ; preds = %245
  store i32 0, ptr %22, align 4, !tbaa !5
  store i32 -1, ptr %21, align 4, !tbaa !5
  br label %271

271:                                              ; preds = %530, %270
  %272 = load i32, ptr %22, align 4, !tbaa !5
  %273 = icmp ne i32 %272, 0
  %274 = xor i1 %273, true
  br i1 %274, label %275, label %531

275:                                              ; preds = %271
  %276 = load i32, ptr %21, align 4, !tbaa !5
  %277 = add nsw i32 %276, 1
  store i32 %277, ptr %21, align 4, !tbaa !5
  %278 = load i32, ptr %21, align 4, !tbaa !5
  %279 = icmp eq i32 %278, 100
  br i1 %279, label %280, label %282

280:                                              ; preds = %275
  store i32 1, ptr %22, align 4, !tbaa !5
  %281 = load ptr, ptr %17, align 8, !tbaa !9
  store i32 0, ptr %281, align 4, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !5
  store i32 0, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

282:                                              ; preds = %275
  %283 = load ptr, ptr %12, align 8, !tbaa !9
  %284 = load i32, ptr %11, align 4, !tbaa !5
  %285 = load ptr, ptr %27, align 8, !tbaa !9
  %286 = load ptr, ptr %35, align 8, !tbaa !9
  %287 = call i32 @SMgetActiveMatrix(ptr noundef %283, i32 noundef %284, ptr noundef %285, ptr noundef %286)
  store i32 %287, ptr %18, align 4, !tbaa !5
  %288 = load i32, ptr %18, align 4, !tbaa !5
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %290, label %293

290:                                              ; preds = %282
  %291 = load i32, ptr %18, align 4, !tbaa !5
  %292 = call i32 @SMerror(i32 noundef 373, ptr noundef @.str.5, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %291, i32 noundef 0, ptr noundef null)
  store i32 %292, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

293:                                              ; preds = %282
  %294 = load ptr, ptr %14, align 8, !tbaa !9
  %295 = load i32, ptr %11, align 4, !tbaa !5
  %296 = load ptr, ptr %27, align 8, !tbaa !9
  %297 = load ptr, ptr %15, align 8, !tbaa !9
  %298 = call i32 @SMgetActiveRHS(ptr noundef %294, i32 noundef %295, ptr noundef %296, ptr noundef %297)
  store i32 %298, ptr %18, align 4, !tbaa !5
  %299 = load i32, ptr %18, align 4, !tbaa !5
  %300 = icmp ne i32 %299, 0
  br i1 %300, label %301, label %304

301:                                              ; preds = %293
  %302 = load i32, ptr %18, align 4, !tbaa !5
  %303 = call i32 @SMerror(i32 noundef 374, ptr noundef @.str.5, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %302, i32 noundef 0, ptr noundef null)
  store i32 %303, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

304:                                              ; preds = %293
  %305 = load ptr, ptr %35, align 8, !tbaa !9
  %306 = load i32, ptr %11, align 4, !tbaa !5
  %307 = load i32, ptr %11, align 4, !tbaa !5
  %308 = load ptr, ptr %36, align 8, !tbaa !9
  %309 = call i32 @SMtransposeMatrix(ptr noundef %305, i32 noundef %306, i32 noundef %307, ptr noundef %308)
  store i32 %309, ptr %18, align 4, !tbaa !5
  %310 = load i32, ptr %18, align 4, !tbaa !5
  %311 = icmp ne i32 %310, 0
  br i1 %311, label %312, label %315

312:                                              ; preds = %304
  %313 = load i32, ptr %18, align 4, !tbaa !5
  %314 = call i32 @SMerror(i32 noundef 377, ptr noundef @.str.5, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %313, i32 noundef 0, ptr noundef null)
  store i32 %314, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

315:                                              ; preds = %304
  %316 = load ptr, ptr %36, align 8, !tbaa !9
  %317 = load ptr, ptr %34, align 8, !tbaa !9
  %318 = load ptr, ptr %15, align 8, !tbaa !9
  call void @dgesv_(ptr noundef %11, ptr noundef %23, ptr noundef %316, ptr noundef %11, ptr noundef %317, ptr noundef %318, ptr noundef %11, ptr noundef %29)
  %319 = load i32, ptr %29, align 4, !tbaa !5
  %320 = icmp ne i32 %319, 0
  br i1 %320, label %321, label %323

321:                                              ; preds = %315
  %322 = load ptr, ptr %17, align 8, !tbaa !9
  store i32 0, ptr %322, align 4, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !5
  store i32 0, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

323:                                              ; preds = %315
  store double 1.000000e+300, ptr %37, align 8, !tbaa !21
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %324

324:                                              ; preds = %391, %323
  %325 = load i32, ptr %19, align 4, !tbaa !5
  %326 = load i32, ptr %24, align 4, !tbaa !5
  %327 = icmp slt i32 %325, %326
  br i1 %327, label %328, label %394

328:                                              ; preds = %324
  %329 = load ptr, ptr %14, align 8, !tbaa !9
  %330 = load ptr, ptr %28, align 8, !tbaa !9
  %331 = load i32, ptr %19, align 4, !tbaa !5
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds i32, ptr %330, i64 %332
  %334 = load i32, ptr %333, align 4, !tbaa !5
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds double, ptr %329, i64 %335
  %337 = load double, ptr %336, align 8, !tbaa !21
  %338 = load ptr, ptr %41, align 8, !tbaa !9
  %339 = load i32, ptr %19, align 4, !tbaa !5
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds double, ptr %338, i64 %340
  store double %337, ptr %341, align 8, !tbaa !21
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %342

342:                                              ; preds = %372, %328
  %343 = load i32, ptr %20, align 4, !tbaa !5
  %344 = load i32, ptr %11, align 4, !tbaa !5
  %345 = icmp slt i32 %343, %344
  br i1 %345, label %346, label %375

346:                                              ; preds = %342
  %347 = load ptr, ptr %12, align 8, !tbaa !9
  %348 = load i32, ptr %20, align 4, !tbaa !5
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds ptr, ptr %347, i64 %349
  %351 = load ptr, ptr %350, align 8, !tbaa !9
  %352 = load ptr, ptr %28, align 8, !tbaa !9
  %353 = load i32, ptr %19, align 4, !tbaa !5
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i32, ptr %352, i64 %354
  %356 = load i32, ptr %355, align 4, !tbaa !5
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds double, ptr %351, i64 %357
  %359 = load double, ptr %358, align 8, !tbaa !21
  %360 = load ptr, ptr %15, align 8, !tbaa !9
  %361 = load i32, ptr %20, align 4, !tbaa !5
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds double, ptr %360, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !21
  %365 = load ptr, ptr %41, align 8, !tbaa !9
  %366 = load i32, ptr %19, align 4, !tbaa !5
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds double, ptr %365, i64 %367
  %369 = load double, ptr %368, align 8, !tbaa !21
  %370 = fneg double %359
  %371 = call double @llvm.fmuladd.f64(double %370, double %364, double %369)
  store double %371, ptr %368, align 8, !tbaa !21
  br label %372

372:                                              ; preds = %346
  %373 = load i32, ptr %20, align 4, !tbaa !5
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %20, align 4, !tbaa !5
  br label %342, !llvm.loop !32

375:                                              ; preds = %342
  %376 = load ptr, ptr %41, align 8, !tbaa !9
  %377 = load i32, ptr %19, align 4, !tbaa !5
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds double, ptr %376, i64 %378
  %380 = load double, ptr %379, align 8, !tbaa !21
  %381 = load double, ptr %37, align 8, !tbaa !21
  %382 = fcmp olt double %380, %381
  br i1 %382, label %383, label %390

383:                                              ; preds = %375
  %384 = load ptr, ptr %41, align 8, !tbaa !9
  %385 = load i32, ptr %19, align 4, !tbaa !5
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds double, ptr %384, i64 %386
  %388 = load double, ptr %387, align 8, !tbaa !21
  store double %388, ptr %37, align 8, !tbaa !21
  %389 = load i32, ptr %19, align 4, !tbaa !5
  store i32 %389, ptr %30, align 4, !tbaa !5
  br label %390

390:                                              ; preds = %383, %375
  br label %391

391:                                              ; preds = %390
  %392 = load i32, ptr %19, align 4, !tbaa !5
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %19, align 4, !tbaa !5
  br label %324, !llvm.loop !33

394:                                              ; preds = %324
  %395 = load double, ptr %37, align 8, !tbaa !21
  %396 = fcmp ogt double %395, 0xBD06849B86A12B9C
  br i1 %396, label %397, label %398

397:                                              ; preds = %394
  store i32 1, ptr %22, align 4, !tbaa !5
  br label %530

398:                                              ; preds = %394
  %399 = load ptr, ptr %28, align 8, !tbaa !9
  %400 = load i32, ptr %30, align 4, !tbaa !5
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds i32, ptr %399, i64 %401
  %403 = load i32, ptr %402, align 4, !tbaa !5
  store i32 %403, ptr %32, align 4, !tbaa !5
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %404

404:                                              ; preds = %422, %398
  %405 = load i32, ptr %19, align 4, !tbaa !5
  %406 = load i32, ptr %11, align 4, !tbaa !5
  %407 = icmp slt i32 %405, %406
  br i1 %407, label %408, label %425

408:                                              ; preds = %404
  %409 = load ptr, ptr %12, align 8, !tbaa !9
  %410 = load i32, ptr %19, align 4, !tbaa !5
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds ptr, ptr %409, i64 %411
  %413 = load ptr, ptr %412, align 8, !tbaa !9
  %414 = load i32, ptr %32, align 4, !tbaa !5
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds double, ptr %413, i64 %415
  %417 = load double, ptr %416, align 8, !tbaa !21
  %418 = load ptr, ptr %42, align 8, !tbaa !9
  %419 = load i32, ptr %19, align 4, !tbaa !5
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds double, ptr %418, i64 %420
  store double %417, ptr %421, align 8, !tbaa !21
  br label %422

422:                                              ; preds = %408
  %423 = load i32, ptr %19, align 4, !tbaa !5
  %424 = add nsw i32 %423, 1
  store i32 %424, ptr %19, align 4, !tbaa !5
  br label %404, !llvm.loop !34

425:                                              ; preds = %404
  %426 = load ptr, ptr %35, align 8, !tbaa !9
  %427 = load ptr, ptr %34, align 8, !tbaa !9
  %428 = load ptr, ptr %42, align 8, !tbaa !9
  call void @dgesv_(ptr noundef %11, ptr noundef %23, ptr noundef %426, ptr noundef %11, ptr noundef %427, ptr noundef %428, ptr noundef %11, ptr noundef %29)
  %429 = load i32, ptr %29, align 4, !tbaa !5
  %430 = icmp ne i32 %429, 0
  br i1 %430, label %431, label %433

431:                                              ; preds = %425
  %432 = load ptr, ptr %17, align 8, !tbaa !9
  store i32 0, ptr %432, align 4, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !5
  store i32 0, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

433:                                              ; preds = %425
  store double 1.000000e+300, ptr %38, align 8, !tbaa !21
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %434

434:                                              ; preds = %485, %433
  %435 = load i32, ptr %19, align 4, !tbaa !5
  %436 = load i32, ptr %11, align 4, !tbaa !5
  %437 = icmp slt i32 %435, %436
  br i1 %437, label %438, label %488

438:                                              ; preds = %434
  %439 = load ptr, ptr %13, align 8, !tbaa !9
  %440 = load ptr, ptr %27, align 8, !tbaa !9
  %441 = load i32, ptr %19, align 4, !tbaa !5
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i32, ptr %440, i64 %442
  %444 = load i32, ptr %443, align 4, !tbaa !5
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds double, ptr %439, i64 %445
  %447 = load double, ptr %446, align 8, !tbaa !21
  %448 = load ptr, ptr %42, align 8, !tbaa !9
  %449 = load i32, ptr %19, align 4, !tbaa !5
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds double, ptr %448, i64 %450
  %452 = load double, ptr %451, align 8, !tbaa !21
  %453 = fdiv double %447, %452
  %454 = load ptr, ptr %39, align 8, !tbaa !9
  %455 = load i32, ptr %19, align 4, !tbaa !5
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds double, ptr %454, i64 %456
  store double %453, ptr %457, align 8, !tbaa !21
  %458 = load ptr, ptr %39, align 8, !tbaa !9
  %459 = load i32, ptr %19, align 4, !tbaa !5
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds double, ptr %458, i64 %460
  %462 = load double, ptr %461, align 8, !tbaa !21
  %463 = load double, ptr %38, align 8, !tbaa !21
  %464 = fcmp olt double %462, %463
  br i1 %464, label %465, label %484

465:                                              ; preds = %438
  %466 = load ptr, ptr %39, align 8, !tbaa !9
  %467 = load i32, ptr %19, align 4, !tbaa !5
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds double, ptr %466, i64 %468
  %470 = load double, ptr %469, align 8, !tbaa !21
  %471 = fcmp ogt double %470, 0.000000e+00
  br i1 %471, label %472, label %484

472:                                              ; preds = %465
  %473 = load ptr, ptr %39, align 8, !tbaa !9
  %474 = load i32, ptr %19, align 4, !tbaa !5
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds double, ptr %473, i64 %475
  %477 = load double, ptr %476, align 8, !tbaa !21
  store double %477, ptr %38, align 8, !tbaa !21
  %478 = load ptr, ptr %27, align 8, !tbaa !9
  %479 = load i32, ptr %19, align 4, !tbaa !5
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds i32, ptr %478, i64 %480
  %482 = load i32, ptr %481, align 4, !tbaa !5
  store i32 %482, ptr %33, align 4, !tbaa !5
  %483 = load i32, ptr %19, align 4, !tbaa !5
  store i32 %483, ptr %31, align 4, !tbaa !5
  br label %484

484:                                              ; preds = %472, %465, %438
  br label %485

485:                                              ; preds = %484
  %486 = load i32, ptr %19, align 4, !tbaa !5
  %487 = add nsw i32 %486, 1
  store i32 %487, ptr %19, align 4, !tbaa !5
  br label %434, !llvm.loop !35

488:                                              ; preds = %434
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %489

489:                                              ; preds = %511, %488
  %490 = load i32, ptr %19, align 4, !tbaa !5
  %491 = load i32, ptr %11, align 4, !tbaa !5
  %492 = icmp slt i32 %490, %491
  br i1 %492, label %493, label %514

493:                                              ; preds = %489
  %494 = load double, ptr %38, align 8, !tbaa !21
  %495 = load ptr, ptr %42, align 8, !tbaa !9
  %496 = load i32, ptr %19, align 4, !tbaa !5
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds double, ptr %495, i64 %497
  %499 = load double, ptr %498, align 8, !tbaa !21
  %500 = load ptr, ptr %13, align 8, !tbaa !9
  %501 = load ptr, ptr %27, align 8, !tbaa !9
  %502 = load i32, ptr %19, align 4, !tbaa !5
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds i32, ptr %501, i64 %503
  %505 = load i32, ptr %504, align 4, !tbaa !5
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds double, ptr %500, i64 %506
  %508 = load double, ptr %507, align 8, !tbaa !21
  %509 = fneg double %494
  %510 = call double @llvm.fmuladd.f64(double %509, double %499, double %508)
  store double %510, ptr %507, align 8, !tbaa !21
  br label %511

511:                                              ; preds = %493
  %512 = load i32, ptr %19, align 4, !tbaa !5
  %513 = add nsw i32 %512, 1
  store i32 %513, ptr %19, align 4, !tbaa !5
  br label %489, !llvm.loop !36

514:                                              ; preds = %489
  %515 = load double, ptr %38, align 8, !tbaa !21
  %516 = load ptr, ptr %13, align 8, !tbaa !9
  %517 = load i32, ptr %32, align 4, !tbaa !5
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds double, ptr %516, i64 %518
  store double %515, ptr %519, align 8, !tbaa !21
  %520 = load i32, ptr %33, align 4, !tbaa !5
  %521 = load ptr, ptr %28, align 8, !tbaa !9
  %522 = load i32, ptr %30, align 4, !tbaa !5
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds i32, ptr %521, i64 %523
  store i32 %520, ptr %524, align 4, !tbaa !5
  %525 = load i32, ptr %32, align 4, !tbaa !5
  %526 = load ptr, ptr %27, align 8, !tbaa !9
  %527 = load i32, ptr %31, align 4, !tbaa !5
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds i32, ptr %526, i64 %528
  store i32 %525, ptr %529, align 4, !tbaa !5
  br label %530

530:                                              ; preds = %514, %397
  br label %271, !llvm.loop !37

531:                                              ; preds = %271
  store i32 0, ptr %18, align 4, !tbaa !5
  store i32 0, ptr %9, align 4
  store i32 1, ptr %43, align 4
  br label %532

532:                                              ; preds = %531, %431, %321, %312, %301, %290, %280, %264, %238
  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 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  %533 = load i32, ptr %9, align 4
  ret i32 %533
}

; 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

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 80}
!17 = !{!12, !10, i64 88}
!18 = !{!12, !10, i64 96}
!19 = !{!12, !10, i64 104}
!20 = !{!12, !10, i64 112}
!21 = !{!22, !22, i64 0}
!22 = !{!"double", !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = distinct !{!34, !24}
!35 = distinct !{!35, !24}
!36 = distinct !{!36, !24}
!37 = distinct !{!37, !24}


; 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.5 = external hidden unnamed_addr constant [10 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 @SMsolveLP(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr nocapture noundef %3, ptr noundef %4, ptr noundef %5, ptr nocapture noundef readonly %6, ptr nocapture noundef writeonly %7) local_unnamed_addr #2 {
.lr.ph.preheader:
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  store i32 %1, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #5
  store i32 1, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #5
  store i32 1, ptr %7, align 4, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %6, i64 40
  %12 = load ptr, ptr %11, align 8, !tbaa !9
  %13 = getelementptr inbounds i8, ptr %6, i64 56
  %14 = load ptr, ptr %13, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %6, i64 48
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %6, i64 32
  %18 = load ptr, ptr %17, align 8, !tbaa !14
  %19 = ptrtoint ptr %18 to i64
  %20 = getelementptr inbounds i8, ptr %6, i64 80
  %21 = load ptr, ptr %20, align 8, !tbaa !15
  %22 = ptrtoint ptr %21 to i64
  %23 = getelementptr inbounds i8, ptr %6, i64 88
  %24 = load ptr, ptr %23, align 8, !tbaa !16
  %25 = getelementptr inbounds i8, ptr %6, i64 96
  %26 = load ptr, ptr %25, align 8, !tbaa !17
  %27 = ptrtoint ptr %26 to i64
  %28 = getelementptr inbounds i8, ptr %6, i64 104
  %29 = load ptr, ptr %28, align 8, !tbaa !18
  %30 = ptrtoint ptr %29 to i64
  %31 = getelementptr inbounds i8, ptr %6, i64 112
  %32 = load ptr, ptr %31, align 8, !tbaa !19
  %33 = ptrtoint ptr %32 to i64
  store i32 0, ptr %16, align 4, !tbaa !5
  store i32 0, ptr %12, align 4, !tbaa !5
  store double 0.000000e+00, ptr %24, align 8, !tbaa !20
  %34 = getelementptr inbounds i8, ptr %16, i64 4
  store i32 0, ptr %34, align 4, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %12, i64 4
  store i32 0, ptr %35, align 4, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %24, i64 8
  store double 0.000000e+00, ptr %36, align 8, !tbaa !20
  %37 = getelementptr inbounds i8, ptr %16, i64 8
  store i32 0, ptr %37, align 4, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %12, i64 8
  store i32 0, ptr %38, align 4, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %24, i64 16
  store double 0.000000e+00, ptr %39, align 8, !tbaa !20
  %40 = getelementptr inbounds i8, ptr %16, i64 12
  store i32 0, ptr %40, align 4, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %12, i64 12
  store i32 0, ptr %41, align 4, !tbaa !5
  %42 = getelementptr inbounds i8, ptr %24, i64 24
  store double 0.000000e+00, ptr %42, align 8, !tbaa !20
  %43 = getelementptr inbounds i8, ptr %16, i64 16
  store i32 0, ptr %43, align 4, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %12, i64 16
  store i32 0, ptr %44, align 4, !tbaa !5
  %45 = getelementptr inbounds i8, ptr %24, i64 32
  store double 0.000000e+00, ptr %45, align 8, !tbaa !20
  %46 = icmp sgt i32 %0, 0
  br i1 %46, label %.lr.ph239.preheader, label %vector.memcheck429

.lr.ph239.preheader:                              ; preds = %.lr.ph.preheader
  %wide.trip.count = zext nneg i32 %0 to i64
  %min.iters.check = icmp ult i32 %0, 10
  br i1 %min.iters.check, label %.lr.ph239.preheader454, label %vector.memcheck

.lr.ph239.preheader454:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph239.preheader
  %indvars.iv311.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph239.preheader ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %wide.trip.count, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph239.prol.loopexit, label %.lr.ph239.prol

.lr.ph239.prol:                                   ; preds = %.lr.ph239.preheader454
  %47 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv311.ph
  store i32 0, ptr %47, align 4, !tbaa !5
  %48 = getelementptr inbounds double, ptr %18, i64 %indvars.iv311.ph
  store double 0.000000e+00, ptr %48, align 8, !tbaa !20
  %49 = getelementptr inbounds double, ptr %21, i64 %indvars.iv311.ph
  store double 0.000000e+00, ptr %49, align 8, !tbaa !20
  %50 = getelementptr inbounds double, ptr %26, i64 %indvars.iv311.ph
  store double 0.000000e+00, ptr %50, align 8, !tbaa !20
  %indvars.iv.next312.prol = or disjoint i64 %indvars.iv311.ph, 1
  br label %.lr.ph239.prol.loopexit

.lr.ph239.prol.loopexit:                          ; preds = %.lr.ph239.prol, %.lr.ph239.preheader454
  %indvars.iv311.unr = phi i64 [ %indvars.iv311.ph, %.lr.ph239.preheader454 ], [ %indvars.iv.next312.prol, %.lr.ph239.prol ]
  %51 = add nsw i64 %wide.trip.count, -1
  %52 = icmp eq i64 %indvars.iv311.ph, %51
  br i1 %52, label %vector.memcheck429, label %.lr.ph239

vector.memcheck:                                  ; preds = %.lr.ph239.preheader
  %53 = sub i64 %22, %19
  %diff.check = icmp ult i64 %53, 32
  %54 = sub i64 %27, %19
  %diff.check426 = icmp ult i64 %54, 32
  %conflict.rdx = or i1 %diff.check, %diff.check426
  %55 = sub i64 %27, %22
  %diff.check427 = icmp ult i64 %55, 32
  %conflict.rdx428 = or i1 %conflict.rdx, %diff.check427
  br i1 %conflict.rdx428, label %.lr.ph239.preheader454, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count, 2147483644
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %56 = getelementptr inbounds i32, ptr %14, i64 %index
  %57 = getelementptr inbounds i8, ptr %56, i64 8
  store <2 x i32> zeroinitializer, ptr %56, align 4, !tbaa !5
  store <2 x i32> zeroinitializer, ptr %57, align 4, !tbaa !5
  %58 = getelementptr inbounds double, ptr %18, i64 %index
  %59 = getelementptr inbounds i8, ptr %58, i64 16
  store <2 x double> zeroinitializer, ptr %58, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %59, align 8, !tbaa !20
  %60 = getelementptr inbounds double, ptr %21, i64 %index
  %61 = getelementptr inbounds i8, ptr %60, i64 16
  store <2 x double> zeroinitializer, ptr %60, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %61, align 8, !tbaa !20
  %62 = getelementptr inbounds double, ptr %26, i64 %index
  %63 = getelementptr inbounds i8, ptr %62, i64 16
  store <2 x double> zeroinitializer, ptr %62, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %63, align 8, !tbaa !20
  %index.next = add nuw i64 %index, 4
  %64 = icmp eq i64 %index.next, %n.vec
  br i1 %64, label %middle.block, label %vector.body, !llvm.loop !22

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

vector.memcheck429:                               ; preds = %.lr.ph239.prol.loopexit, %.lr.ph239, %.lr.ph.preheader, %middle.block
  %65 = sub i64 %33, %30
  %diff.check430 = icmp ugt i64 %65, 31
  br i1 %diff.check430, label %vector.body435, label %.lr.ph241.prol.preheader

.lr.ph241.prol.preheader:                         ; preds = %vector.memcheck429, %vector.body435
  %indvars.iv314.ph = phi i64 [ 0, %vector.memcheck429 ], [ 24, %vector.body435 ]
  br label %.lr.ph241.prol

.lr.ph241.prol:                                   ; preds = %.lr.ph241.prol, %.lr.ph241.prol.preheader
  %indvars.iv314.prol = phi i64 [ %indvars.iv.next315.prol, %.lr.ph241.prol ], [ %indvars.iv314.ph, %.lr.ph241.prol.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph241.prol ], [ 0, %.lr.ph241.prol.preheader ]
  %66 = getelementptr inbounds double, ptr %29, i64 %indvars.iv314.prol
  store double 0.000000e+00, ptr %66, align 8, !tbaa !20
  %67 = getelementptr inbounds double, ptr %32, i64 %indvars.iv314.prol
  store double 0.000000e+00, ptr %67, align 8, !tbaa !20
  %indvars.iv.next315.prol = add nuw nsw i64 %indvars.iv314.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter, 0
  br i1 %prol.iter.cmp.not, label %.lr.ph241.prol.loopexit, label %.lr.ph241.prol, !llvm.loop !26

.lr.ph241.prol.loopexit:                          ; preds = %.lr.ph241.prol
  br i1 %diff.check430, label %.preheader221, label %.lr.ph241

vector.body435:                                   ; preds = %vector.memcheck429
  %68 = getelementptr inbounds i8, ptr %29, i64 16
  store <2 x double> zeroinitializer, ptr %29, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %68, align 8, !tbaa !20
  %69 = getelementptr inbounds i8, ptr %32, i64 16
  store <2 x double> zeroinitializer, ptr %32, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %69, align 8, !tbaa !20
  %70 = getelementptr inbounds i8, ptr %29, i64 32
  %71 = getelementptr inbounds i8, ptr %29, i64 48
  store <2 x double> zeroinitializer, ptr %70, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %71, align 8, !tbaa !20
  %72 = getelementptr inbounds i8, ptr %32, i64 32
  %73 = getelementptr inbounds i8, ptr %32, i64 48
  store <2 x double> zeroinitializer, ptr %72, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %73, align 8, !tbaa !20
  %74 = getelementptr inbounds i8, ptr %29, i64 64
  %75 = getelementptr inbounds i8, ptr %29, i64 80
  store <2 x double> zeroinitializer, ptr %74, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %75, align 8, !tbaa !20
  %76 = getelementptr inbounds i8, ptr %32, i64 64
  %77 = getelementptr inbounds i8, ptr %32, i64 80
  store <2 x double> zeroinitializer, ptr %76, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %77, align 8, !tbaa !20
  %78 = getelementptr inbounds i8, ptr %29, i64 96
  %79 = getelementptr inbounds i8, ptr %29, i64 112
  store <2 x double> zeroinitializer, ptr %78, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %79, align 8, !tbaa !20
  %80 = getelementptr inbounds i8, ptr %32, i64 96
  %81 = getelementptr inbounds i8, ptr %32, i64 112
  store <2 x double> zeroinitializer, ptr %80, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %81, align 8, !tbaa !20
  %82 = getelementptr inbounds i8, ptr %29, i64 128
  %83 = getelementptr inbounds i8, ptr %29, i64 144
  store <2 x double> zeroinitializer, ptr %82, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %83, align 8, !tbaa !20
  %84 = getelementptr inbounds i8, ptr %32, i64 128
  %85 = getelementptr inbounds i8, ptr %32, i64 144
  store <2 x double> zeroinitializer, ptr %84, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %85, align 8, !tbaa !20
  %86 = getelementptr inbounds i8, ptr %29, i64 160
  %87 = getelementptr inbounds i8, ptr %29, i64 176
  store <2 x double> zeroinitializer, ptr %86, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %87, align 8, !tbaa !20
  %88 = getelementptr inbounds i8, ptr %32, i64 160
  %89 = getelementptr inbounds i8, ptr %32, i64 176
  store <2 x double> zeroinitializer, ptr %88, align 8, !tbaa !20
  store <2 x double> zeroinitializer, ptr %89, align 8, !tbaa !20
  br label %.lr.ph241.prol.preheader

.lr.ph239:                                        ; preds = %.lr.ph239.prol.loopexit, %.lr.ph239
  %indvars.iv311 = phi i64 [ %indvars.iv.next312.1, %.lr.ph239 ], [ %indvars.iv311.unr, %.lr.ph239.prol.loopexit ]
  %90 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv311
  store i32 0, ptr %90, align 4, !tbaa !5
  %91 = getelementptr inbounds double, ptr %18, i64 %indvars.iv311
  store double 0.000000e+00, ptr %91, align 8, !tbaa !20
  %92 = getelementptr inbounds double, ptr %21, i64 %indvars.iv311
  store double 0.000000e+00, ptr %92, align 8, !tbaa !20
  %93 = getelementptr inbounds double, ptr %26, i64 %indvars.iv311
  store double 0.000000e+00, ptr %93, align 8, !tbaa !20
  %indvars.iv.next312 = add nuw nsw i64 %indvars.iv311, 1
  %94 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv.next312
  store i32 0, ptr %94, align 4, !tbaa !5
  %95 = getelementptr inbounds double, ptr %18, i64 %indvars.iv.next312
  store double 0.000000e+00, ptr %95, align 8, !tbaa !20
  %96 = getelementptr inbounds double, ptr %21, i64 %indvars.iv.next312
  store double 0.000000e+00, ptr %96, align 8, !tbaa !20
  %97 = getelementptr inbounds double, ptr %26, i64 %indvars.iv.next312
  store double 0.000000e+00, ptr %97, align 8, !tbaa !20
  %indvars.iv.next312.1 = add nuw nsw i64 %indvars.iv311, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next312.1, %wide.trip.count
  br i1 %exitcond.not.1, label %vector.memcheck429, label %.lr.ph239, !llvm.loop !28

.preheader221:                                    ; preds = %.lr.ph241, %.lr.ph241.prol.loopexit
  br i1 %46, label %.lr.ph245.preheader, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %.preheader221
  store i32 0, ptr %8, align 4, !tbaa !5
  br label %._crit_edge250.thread

.lr.ph245.preheader:                              ; preds = %.preheader221
  %wide.trip.count322 = zext nneg i32 %0 to i64
  %98 = add nsw i64 %wide.trip.count322, -1
  %xtraiter457 = and i64 %wide.trip.count322, 1
  %99 = icmp eq i64 %98, 0
  br i1 %99, label %._crit_edge.unr-lcssa, label %.lr.ph245.preheader.new

.lr.ph245.preheader.new:                          ; preds = %.lr.ph245.preheader
  %unroll_iter = and i64 %wide.trip.count322, 2147483646
  br label %.lr.ph245

.lr.ph241:                                        ; preds = %.lr.ph241.prol.loopexit, %.lr.ph241
  %indvars.iv314 = phi i64 [ %indvars.iv.next315.3, %.lr.ph241 ], [ %indvars.iv.next315.prol, %.lr.ph241.prol.loopexit ]
  %100 = getelementptr inbounds double, ptr %29, i64 %indvars.iv314
  store double 0.000000e+00, ptr %100, align 8, !tbaa !20
  %101 = getelementptr inbounds double, ptr %32, i64 %indvars.iv314
  store double 0.000000e+00, ptr %101, align 8, !tbaa !20
  %indvars.iv.next315 = add nuw nsw i64 %indvars.iv314, 1
  %102 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next315
  store double 0.000000e+00, ptr %102, align 8, !tbaa !20
  %103 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next315
  store double 0.000000e+00, ptr %103, align 8, !tbaa !20
  %indvars.iv.next315.1 = add nuw nsw i64 %indvars.iv314, 2
  %104 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next315.1
  store double 0.000000e+00, ptr %104, align 8, !tbaa !20
  %105 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next315.1
  store double 0.000000e+00, ptr %105, align 8, !tbaa !20
  %indvars.iv.next315.2 = add nuw nsw i64 %indvars.iv314, 3
  %106 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next315.2
  store double 0.000000e+00, ptr %106, align 8, !tbaa !20
  %107 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next315.2
  store double 0.000000e+00, ptr %107, align 8, !tbaa !20
  %indvars.iv.next315.3 = add nuw nsw i64 %indvars.iv314, 4
  %exitcond318.not.3 = icmp eq i64 %indvars.iv.next315.3, 25
  br i1 %exitcond318.not.3, label %.preheader221, label %.lr.ph241, !llvm.loop !29

.lr.ph245:                                        ; preds = %128, %.lr.ph245.preheader.new
  %indvars.iv319 = phi i64 [ 0, %.lr.ph245.preheader.new ], [ %indvars.iv.next320.1, %128 ]
  %.0190243 = phi i32 [ 0, %.lr.ph245.preheader.new ], [ %.1191.1, %128 ]
  %.0199242 = phi i32 [ 0, %.lr.ph245.preheader.new ], [ %.1200.1, %128 ]
  %niter = phi i64 [ 0, %.lr.ph245.preheader.new ], [ %niter.next.1, %128 ]
  %108 = getelementptr inbounds double, ptr %3, i64 %indvars.iv319
  %109 = load double, ptr %108, align 8, !tbaa !20
  %110 = tail call double @llvm.fabs.f64(double %109)
  %111 = fcmp olt double %110, 1.000000e-15
  %112 = trunc nuw nsw i64 %indvars.iv319 to i32
  br i1 %111, label %113, label %115

113:                                              ; preds = %.lr.ph245
  %114 = add nsw i32 %.0190243, 1
  br label %.lr.ph245.1

115:                                              ; preds = %.lr.ph245
  %116 = add nsw i32 %.0199242, 1
  br label %.lr.ph245.1

.lr.ph245.1:                                      ; preds = %113, %115
  %.0190243.sink = phi i32 [ %.0190243, %113 ], [ %.0199242, %115 ]
  %.sink407 = phi ptr [ %14, %113 ], [ %16, %115 ]
  %.1200 = phi i32 [ %.0199242, %113 ], [ %116, %115 ]
  %.1191 = phi i32 [ %114, %113 ], [ %.0190243, %115 ]
  %117 = sext i32 %.0190243.sink to i64
  %118 = getelementptr inbounds i32, ptr %.sink407, i64 %117
  store i32 %112, ptr %118, align 4, !tbaa !5
  %indvars.iv.next320 = or disjoint i64 %indvars.iv319, 1
  %119 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next320
  %120 = load double, ptr %119, align 8, !tbaa !20
  %121 = tail call double @llvm.fabs.f64(double %120)
  %122 = fcmp olt double %121, 1.000000e-15
  %123 = trunc nuw nsw i64 %indvars.iv.next320 to i32
  br i1 %122, label %126, label %124

124:                                              ; preds = %.lr.ph245.1
  %125 = add nsw i32 %.1200, 1
  br label %128

126:                                              ; preds = %.lr.ph245.1
  %127 = add nsw i32 %.1191, 1
  br label %128

128:                                              ; preds = %126, %124
  %.0190243.sink.1 = phi i32 [ %.1191, %126 ], [ %.1200, %124 ]
  %.sink407.1 = phi ptr [ %14, %126 ], [ %16, %124 ]
  %.1200.1 = phi i32 [ %.1200, %126 ], [ %125, %124 ]
  %.1191.1 = phi i32 [ %127, %126 ], [ %.1191, %124 ]
  %129 = sext i32 %.0190243.sink.1 to i64
  %130 = getelementptr inbounds i32, ptr %.sink407.1, i64 %129
  store i32 %123, ptr %130, align 4, !tbaa !5
  %indvars.iv.next320.1 = add nuw nsw i64 %indvars.iv319, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.unr-lcssa, label %.lr.ph245, !llvm.loop !30

._crit_edge.unr-lcssa:                            ; preds = %128, %.lr.ph245.preheader
  %.1200.lcssa.ph = phi i32 [ poison, %.lr.ph245.preheader ], [ %.1200.1, %128 ]
  %.1191.lcssa.ph = phi i32 [ poison, %.lr.ph245.preheader ], [ %.1191.1, %128 ]
  %indvars.iv319.unr = phi i64 [ 0, %.lr.ph245.preheader ], [ %indvars.iv.next320.1, %128 ]
  %.0190243.unr = phi i32 [ 0, %.lr.ph245.preheader ], [ %.1191.1, %128 ]
  %.0199242.unr = phi i32 [ 0, %.lr.ph245.preheader ], [ %.1200.1, %128 ]
  %lcmp.mod458.not = icmp eq i64 %xtraiter457, 0
  br i1 %lcmp.mod458.not, label %._crit_edge, label %.lr.ph245.epil

.lr.ph245.epil:                                   ; preds = %._crit_edge.unr-lcssa
  %131 = getelementptr inbounds double, ptr %3, i64 %indvars.iv319.unr
  %132 = load double, ptr %131, align 8, !tbaa !20
  %133 = tail call double @llvm.fabs.f64(double %132)
  %134 = fcmp olt double %133, 1.000000e-15
  %135 = trunc nuw nsw i64 %indvars.iv319.unr to i32
  br i1 %134, label %138, label %136

136:                                              ; preds = %.lr.ph245.epil
  %137 = add nsw i32 %.0199242.unr, 1
  br label %._crit_edge.epilog-lcssa

138:                                              ; preds = %.lr.ph245.epil
  %139 = add nsw i32 %.0190243.unr, 1
  br label %._crit_edge.epilog-lcssa

._crit_edge.epilog-lcssa:                         ; preds = %138, %136
  %.0190243.sink.epil = phi i32 [ %.0190243.unr, %138 ], [ %.0199242.unr, %136 ]
  %.sink407.epil = phi ptr [ %14, %138 ], [ %16, %136 ]
  %.1200.epil = phi i32 [ %.0199242.unr, %138 ], [ %137, %136 ]
  %.1191.epil = phi i32 [ %139, %138 ], [ %.0190243.unr, %136 ]
  %140 = sext i32 %.0190243.sink.epil to i64
  %141 = getelementptr inbounds i32, ptr %.sink407.epil, i64 %140
  store i32 %135, ptr %141, align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.unr-lcssa, %._crit_edge.epilog-lcssa
  %.1200.lcssa = phi i32 [ %.1200.lcssa.ph, %._crit_edge.unr-lcssa ], [ %.1200.epil, %._crit_edge.epilog-lcssa ]
  %.1191.lcssa = phi i32 [ %.1191.lcssa.ph, %._crit_edge.unr-lcssa ], [ %.1191.epil, %._crit_edge.epilog-lcssa ]
  store i32 %.1200.lcssa, ptr %8, align 4, !tbaa !5
  %142 = add i32 %.1200.lcssa, -1
  %143 = icmp sgt i32 %.1200.lcssa, 1
  br i1 %143, label %.lr.ph258, label %._crit_edge250.thread

._crit_edge250.thread:                            ; preds = %._crit_edge.thread, %._crit_edge
  %.ph375 = phi i32 [ %142, %._crit_edge ], [ -1, %._crit_edge.thread ]
  %.0190.lcssa374.ph = phi i32 [ %.1191.lcssa, %._crit_edge ], [ 0, %._crit_edge.thread ]
  %144 = sext i32 %.ph375 to i64
  %145 = getelementptr inbounds double, ptr %18, i64 %144
  store double 1.000000e+00, ptr %145, align 8, !tbaa !20
  br label %.preheader220

.lr.ph258:                                        ; preds = %._crit_edge
  %146 = zext nneg i32 %142 to i64
  %147 = shl nuw nsw i64 %146, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %18, i8 0, i64 %147, i1 false), !tbaa !20
  %148 = zext nneg i32 %142 to i64
  %149 = getelementptr inbounds double, ptr %18, i64 %148
  store double 1.000000e+00, ptr %149, align 8, !tbaa !20
  %wide.trip.count340 = zext nneg i32 %142 to i64
  br i1 %46, label %.lr.ph254.us.preheader, label %.lr.ph258.split.preheader

.lr.ph258.split.preheader:                        ; preds = %.lr.ph258
  %150 = shl nuw nsw i64 %wide.trip.count340, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %26, i8 0, i64 %150, i1 false), !tbaa !20
  br label %.preheader220

.lr.ph254.us.preheader:                           ; preds = %.lr.ph258
  %xtraiter461 = and i64 %wide.trip.count322, 1
  %151 = icmp eq i64 %98, 0
  %unroll_iter464 = and i64 %wide.trip.count322, 2147483646
  %lcmp.mod462.not = icmp eq i64 %xtraiter461, 0
  br label %.lr.ph254.us

.lr.ph254.us:                                     ; preds = %.lr.ph254.us.preheader, %155
  %indvars.iv337 = phi i64 [ 0, %.lr.ph254.us.preheader ], [ %indvars.iv.next338, %155 ]
  %152 = getelementptr inbounds double, ptr %26, i64 %indvars.iv337
  store double 0.000000e+00, ptr %152, align 8, !tbaa !20
  %153 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv337
  %154 = load ptr, ptr %153, align 8, !tbaa !31
  br i1 %151, label %._crit_edge255.us.unr-lcssa, label %.lr.ph254.us.new

155:                                              ; preds = %._crit_edge255.us
  %indvars.iv.next338 = add nuw nsw i64 %indvars.iv337, 1
  %exitcond341.not = icmp eq i64 %indvars.iv.next338, %wide.trip.count340
  br i1 %exitcond341.not, label %.preheader220, label %.lr.ph254.us, !llvm.loop !32

.lr.ph254.us.new:                                 ; preds = %.lr.ph254.us, %.lr.ph254.us.new
  %indvars.iv332 = phi i64 [ %indvars.iv.next333.1, %.lr.ph254.us.new ], [ 0, %.lr.ph254.us ]
  %156 = phi double [ %166, %.lr.ph254.us.new ], [ 0.000000e+00, %.lr.ph254.us ]
  %niter465 = phi i64 [ %niter465.next.1, %.lr.ph254.us.new ], [ 0, %.lr.ph254.us ]
  %157 = getelementptr inbounds double, ptr %154, i64 %indvars.iv332
  %158 = load double, ptr %157, align 8, !tbaa !20
  %159 = getelementptr inbounds double, ptr %3, i64 %indvars.iv332
  %160 = load double, ptr %159, align 8, !tbaa !20
  %161 = tail call double @llvm.fmuladd.f64(double %158, double %160, double %156)
  store double %161, ptr %152, align 8, !tbaa !20
  %indvars.iv.next333 = or disjoint i64 %indvars.iv332, 1
  %162 = getelementptr inbounds double, ptr %154, i64 %indvars.iv.next333
  %163 = load double, ptr %162, align 8, !tbaa !20
  %164 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next333
  %165 = load double, ptr %164, align 8, !tbaa !20
  %166 = tail call double @llvm.fmuladd.f64(double %163, double %165, double %161)
  store double %166, ptr %152, align 8, !tbaa !20
  %indvars.iv.next333.1 = add nuw nsw i64 %indvars.iv332, 2
  %niter465.next.1 = add i64 %niter465, 2
  %niter465.ncmp.1 = icmp eq i64 %niter465.next.1, %unroll_iter464
  br i1 %niter465.ncmp.1, label %._crit_edge255.us.unr-lcssa, label %.lr.ph254.us.new, !llvm.loop !33

._crit_edge255.us.unr-lcssa:                      ; preds = %.lr.ph254.us.new, %.lr.ph254.us
  %.lcssa453.ph = phi double [ poison, %.lr.ph254.us ], [ %166, %.lr.ph254.us.new ]
  %indvars.iv332.unr = phi i64 [ 0, %.lr.ph254.us ], [ %indvars.iv.next333.1, %.lr.ph254.us.new ]
  %.unr = phi double [ 0.000000e+00, %.lr.ph254.us ], [ %166, %.lr.ph254.us.new ]
  br i1 %lcmp.mod462.not, label %._crit_edge255.us, label %._crit_edge255.us.epilog-lcssa

._crit_edge255.us.epilog-lcssa:                   ; preds = %._crit_edge255.us.unr-lcssa
  %167 = getelementptr inbounds double, ptr %154, i64 %indvars.iv332.unr
  %168 = load double, ptr %167, align 8, !tbaa !20
  %169 = getelementptr inbounds double, ptr %3, i64 %indvars.iv332.unr
  %170 = load double, ptr %169, align 8, !tbaa !20
  %171 = tail call double @llvm.fmuladd.f64(double %168, double %170, double %.unr)
  store double %171, ptr %152, align 8, !tbaa !20
  br label %._crit_edge255.us

._crit_edge255.us:                                ; preds = %._crit_edge255.us.unr-lcssa, %._crit_edge255.us.epilog-lcssa
  %.lcssa453 = phi double [ %.lcssa453.ph, %._crit_edge255.us.unr-lcssa ], [ %171, %._crit_edge255.us.epilog-lcssa ]
  %172 = tail call double @llvm.fabs.f64(double %.lcssa453)
  %173 = fcmp ogt double %172, 0x3D06849B86A12B9C
  br i1 %173, label %.split.us, label %155

.preheader220:                                    ; preds = %155, %.lr.ph258.split.preheader, %._crit_edge250.thread
  %.0190.lcssa374377 = phi i32 [ %.0190.lcssa374.ph, %._crit_edge250.thread ], [ %.1191.lcssa, %.lr.ph258.split.preheader ], [ %.1191.lcssa, %155 ]
  br i1 %46, label %.lr.ph260.preheader, label %.preheader219

.lr.ph260.preheader:                              ; preds = %.preheader220
  %wide.trip.count345 = zext nneg i32 %0 to i64
  br label %.lr.ph260

.split.us:                                        ; preds = %._crit_edge255.us
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %.loopexit

174:                                              ; preds = %.lr.ph260
  %indvars.iv.next343 = add nuw nsw i64 %indvars.iv342, 1
  %exitcond346.not = icmp eq i64 %indvars.iv.next343, %wide.trip.count345
  br i1 %exitcond346.not, label %.preheader219, label %.lr.ph260, !llvm.loop !34

.preheader219:                                    ; preds = %174, %.preheader220
  %175 = icmp sgt i32 %.0190.lcssa374377, 0
  %wide.trip.count355 = zext nneg i32 %.0190.lcssa374377 to i64
  br label %182

.lr.ph260:                                        ; preds = %.lr.ph260.preheader, %174
  %indvars.iv342 = phi i64 [ 0, %.lr.ph260.preheader ], [ %indvars.iv.next343, %174 ]
  %176 = getelementptr inbounds double, ptr %3, i64 %indvars.iv342
  %177 = load double, ptr %176, align 8, !tbaa !20
  %178 = fcmp olt double %177, 0.000000e+00
  %179 = tail call double @llvm.fabs.f64(double %177)
  %180 = fcmp ogt double %179, 0x3D06849B86A12B9C
  %or.cond = and i1 %178, %180
  br i1 %or.cond, label %181, label %174

181:                                              ; preds = %.lr.ph260
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %.loopexit

182:                                              ; preds = %.preheader219, %.preheader.thread
  %.0183292 = phi i32 [ -1, %.preheader219 ], [ %183, %.preheader.thread ]
  %.0186290 = phi i32 [ undef, %.preheader219 ], [ %.1187.lcssa385, %.preheader.thread ]
  %.0192289 = phi i32 [ undef, %.preheader219 ], [ %.1193.lcssa384, %.preheader.thread ]
  %.0196288 = phi i32 [ undef, %.preheader219 ], [ %.2198, %.preheader.thread ]
  %183 = add nsw i32 %.0183292, 1
  %184 = icmp eq i32 %183, 100
  br i1 %184, label %185, label %186

185:                                              ; preds = %182
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %.loopexit

186:                                              ; preds = %182
  %187 = load i32, ptr %8, align 4, !tbaa !5
  %188 = call i32 @SMgetActiveMatrix(ptr noundef %2, i32 noundef %187, ptr noundef nonnull %16, ptr noundef %29)
  %.not210 = icmp eq i32 %188, 0
  br i1 %.not210, label %191, label %189

189:                                              ; preds = %186
  %190 = call i32 @SMerror(i32 noundef 373, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %188, i32 noundef 0, ptr noundef null) #5
  br label %.loopexit

191:                                              ; preds = %186
  %192 = load i32, ptr %8, align 4, !tbaa !5
  %193 = call i32 @SMgetActiveRHS(ptr noundef %4, i32 noundef %192, ptr noundef nonnull %16, ptr noundef %5)
  %.not211 = icmp eq i32 %193, 0
  br i1 %.not211, label %196, label %194

194:                                              ; preds = %191
  %195 = call i32 @SMerror(i32 noundef 374, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %193, i32 noundef 0, ptr noundef null) #5
  br label %.loopexit

196:                                              ; preds = %191
  %197 = load i32, ptr %8, align 4, !tbaa !5
  %198 = call i32 @SMtransposeMatrix(ptr noundef %29, i32 noundef %197, i32 noundef %197, ptr noundef %32) #5
  %.not212 = icmp eq i32 %198, 0
  br i1 %.not212, label %201, label %199

199:                                              ; preds = %196
  %200 = call i32 @SMerror(i32 noundef 377, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %198, i32 noundef 0, ptr noundef null) #5
  br label %.loopexit

201:                                              ; preds = %196
  call void @dgesv_(ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef %32, ptr noundef nonnull %8, ptr noundef nonnull %12, ptr noundef %5, ptr noundef nonnull %8, ptr noundef nonnull %10) #5
  %202 = load i32, ptr %10, align 4, !tbaa !5
  %.not213 = icmp eq i32 %202, 0
  br i1 %.not213, label %.preheader218, label %206

.preheader218:                                    ; preds = %201
  br i1 %175, label %.lr.ph268, label %.loopexit

.lr.ph268:                                        ; preds = %.preheader218
  %203 = load i32, ptr %8, align 4, !tbaa !5
  %204 = icmp sgt i32 %203, 0
  %wide.trip.count350 = zext i32 %203 to i64
  %xtraiter466 = and i64 %wide.trip.count350, 1
  %205 = icmp eq i32 %203, 1
  %unroll_iter470 = and i64 %wide.trip.count350, 2147483646
  %lcmp.mod468.not = icmp eq i64 %xtraiter466, 0
  br label %207

206:                                              ; preds = %201
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %.loopexit

207:                                              ; preds = %.lr.ph268, %._crit_edge264
  %indvars.iv352 = phi i64 [ 0, %.lr.ph268 ], [ %indvars.iv.next353, %._crit_edge264 ]
  %.0181266 = phi double [ 1.000000e+300, %.lr.ph268 ], [ %.1182, %._crit_edge264 ]
  %.1197265 = phi i32 [ %.0196288, %.lr.ph268 ], [ %.2198, %._crit_edge264 ]
  %208 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv352
  %209 = load i32, ptr %208, align 4, !tbaa !5
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds double, ptr %4, i64 %210
  %212 = load double, ptr %211, align 8, !tbaa !20
  %213 = getelementptr inbounds double, ptr %21, i64 %indvars.iv352
  store double %212, ptr %213, align 8, !tbaa !20
  br i1 %204, label %.lr.ph263.preheader, label %._crit_edge264

.lr.ph263.preheader:                              ; preds = %207
  br i1 %205, label %._crit_edge264.loopexit.unr-lcssa, label %.lr.ph263

.lr.ph263:                                        ; preds = %.lr.ph263.preheader, %.lr.ph263
  %indvars.iv347 = phi i64 [ %indvars.iv.next348.1, %.lr.ph263 ], [ 0, %.lr.ph263.preheader ]
  %214 = phi double [ %230, %.lr.ph263 ], [ %212, %.lr.ph263.preheader ]
  %niter471 = phi i64 [ %niter471.next.1, %.lr.ph263 ], [ 0, %.lr.ph263.preheader ]
  %215 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv347
  %216 = load ptr, ptr %215, align 8, !tbaa !31
  %217 = getelementptr inbounds double, ptr %216, i64 %210
  %218 = load double, ptr %217, align 8, !tbaa !20
  %219 = getelementptr inbounds double, ptr %5, i64 %indvars.iv347
  %220 = load double, ptr %219, align 8, !tbaa !20
  %221 = fneg double %218
  %222 = call double @llvm.fmuladd.f64(double %221, double %220, double %214)
  store double %222, ptr %213, align 8, !tbaa !20
  %indvars.iv.next348 = or disjoint i64 %indvars.iv347, 1
  %223 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next348
  %224 = load ptr, ptr %223, align 8, !tbaa !31
  %225 = getelementptr inbounds double, ptr %224, i64 %210
  %226 = load double, ptr %225, align 8, !tbaa !20
  %227 = getelementptr inbounds double, ptr %5, i64 %indvars.iv.next348
  %228 = load double, ptr %227, align 8, !tbaa !20
  %229 = fneg double %226
  %230 = call double @llvm.fmuladd.f64(double %229, double %228, double %222)
  store double %230, ptr %213, align 8, !tbaa !20
  %indvars.iv.next348.1 = add nuw nsw i64 %indvars.iv347, 2
  %niter471.next.1 = add i64 %niter471, 2
  %niter471.ncmp.1 = icmp eq i64 %niter471.next.1, %unroll_iter470
  br i1 %niter471.ncmp.1, label %._crit_edge264.loopexit.unr-lcssa, label %.lr.ph263, !llvm.loop !35

._crit_edge264.loopexit.unr-lcssa:                ; preds = %.lr.ph263, %.lr.ph263.preheader
  %.lcssa.ph = phi double [ poison, %.lr.ph263.preheader ], [ %230, %.lr.ph263 ]
  %indvars.iv347.unr = phi i64 [ 0, %.lr.ph263.preheader ], [ %indvars.iv.next348.1, %.lr.ph263 ]
  %.unr467 = phi double [ %212, %.lr.ph263.preheader ], [ %230, %.lr.ph263 ]
  br i1 %lcmp.mod468.not, label %._crit_edge264, label %.lr.ph263.epil

.lr.ph263.epil:                                   ; preds = %._crit_edge264.loopexit.unr-lcssa
  %231 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv347.unr
  %232 = load ptr, ptr %231, align 8, !tbaa !31
  %233 = getelementptr inbounds double, ptr %232, i64 %210
  %234 = load double, ptr %233, align 8, !tbaa !20
  %235 = getelementptr inbounds double, ptr %5, i64 %indvars.iv347.unr
  %236 = load double, ptr %235, align 8, !tbaa !20
  %237 = fneg double %234
  %238 = call double @llvm.fmuladd.f64(double %237, double %236, double %.unr467)
  store double %238, ptr %213, align 8, !tbaa !20
  br label %._crit_edge264

._crit_edge264:                                   ; preds = %.lr.ph263.epil, %._crit_edge264.loopexit.unr-lcssa, %207
  %239 = phi double [ %212, %207 ], [ %.lcssa.ph, %._crit_edge264.loopexit.unr-lcssa ], [ %238, %.lr.ph263.epil ]
  %240 = fcmp olt double %239, %.0181266
  %241 = trunc nuw nsw i64 %indvars.iv352 to i32
  %.2198 = select i1 %240, i32 %241, i32 %.1197265
  %.1182 = select i1 %240, double %239, double %.0181266
  %indvars.iv.next353 = add nuw nsw i64 %indvars.iv352, 1
  %exitcond356.not = icmp eq i64 %indvars.iv.next353, %wide.trip.count355
  br i1 %exitcond356.not, label %._crit_edge269, label %207, !llvm.loop !36

._crit_edge269:                                   ; preds = %._crit_edge264
  %242 = fcmp ule double %.1182, 0xBD06849B86A12B9C
  br i1 %242, label %243, label %.loopexit

243:                                              ; preds = %._crit_edge269
  %244 = sext i32 %.2198 to i64
  %245 = getelementptr inbounds i32, ptr %14, i64 %244
  %246 = load i32, ptr %245, align 4, !tbaa !5
  %247 = load i32, ptr %8, align 4, !tbaa !5
  %248 = icmp sgt i32 %247, 0
  br i1 %248, label %.lr.ph274, label %._crit_edge275

.lr.ph274:                                        ; preds = %243
  %249 = sext i32 %246 to i64
  %wide.trip.count360 = zext nneg i32 %247 to i64
  %xtraiter473 = and i64 %wide.trip.count360, 3
  %250 = icmp ult i32 %247, 4
  br i1 %250, label %._crit_edge275.loopexit.unr-lcssa, label %.lr.ph274.new

.lr.ph274.new:                                    ; preds = %.lr.ph274
  %unroll_iter475 = and i64 %wide.trip.count360, 2147483644
  br label %251

251:                                              ; preds = %251, %.lr.ph274.new
  %indvars.iv357 = phi i64 [ 0, %.lr.ph274.new ], [ %indvars.iv.next358.3, %251 ]
  %niter476 = phi i64 [ 0, %.lr.ph274.new ], [ %niter476.next.3, %251 ]
  %252 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv357
  %253 = load ptr, ptr %252, align 8, !tbaa !31
  %254 = getelementptr inbounds double, ptr %253, i64 %249
  %255 = load double, ptr %254, align 8, !tbaa !20
  %256 = getelementptr inbounds double, ptr %26, i64 %indvars.iv357
  store double %255, ptr %256, align 8, !tbaa !20
  %indvars.iv.next358 = or disjoint i64 %indvars.iv357, 1
  %257 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next358
  %258 = load ptr, ptr %257, align 8, !tbaa !31
  %259 = getelementptr inbounds double, ptr %258, i64 %249
  %260 = load double, ptr %259, align 8, !tbaa !20
  %261 = getelementptr inbounds double, ptr %26, i64 %indvars.iv.next358
  store double %260, ptr %261, align 8, !tbaa !20
  %indvars.iv.next358.1 = or disjoint i64 %indvars.iv357, 2
  %262 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next358.1
  %263 = load ptr, ptr %262, align 8, !tbaa !31
  %264 = getelementptr inbounds double, ptr %263, i64 %249
  %265 = load double, ptr %264, align 8, !tbaa !20
  %266 = getelementptr inbounds double, ptr %26, i64 %indvars.iv.next358.1
  store double %265, ptr %266, align 8, !tbaa !20
  %indvars.iv.next358.2 = or disjoint i64 %indvars.iv357, 3
  %267 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next358.2
  %268 = load ptr, ptr %267, align 8, !tbaa !31
  %269 = getelementptr inbounds double, ptr %268, i64 %249
  %270 = load double, ptr %269, align 8, !tbaa !20
  %271 = getelementptr inbounds double, ptr %26, i64 %indvars.iv.next358.2
  store double %270, ptr %271, align 8, !tbaa !20
  %indvars.iv.next358.3 = add nuw nsw i64 %indvars.iv357, 4
  %niter476.next.3 = add i64 %niter476, 4
  %niter476.ncmp.3 = icmp eq i64 %niter476.next.3, %unroll_iter475
  br i1 %niter476.ncmp.3, label %._crit_edge275.loopexit.unr-lcssa, label %251, !llvm.loop !37

._crit_edge275.loopexit.unr-lcssa:                ; preds = %251, %.lr.ph274
  %indvars.iv357.unr = phi i64 [ 0, %.lr.ph274 ], [ %indvars.iv.next358.3, %251 ]
  %lcmp.mod474.not = icmp eq i64 %xtraiter473, 0
  br i1 %lcmp.mod474.not, label %._crit_edge275, label %.epil.preheader472

.epil.preheader472:                               ; preds = %._crit_edge275.loopexit.unr-lcssa, %.epil.preheader472
  %indvars.iv357.epil = phi i64 [ %indvars.iv.next358.epil, %.epil.preheader472 ], [ %indvars.iv357.unr, %._crit_edge275.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader472 ], [ 0, %._crit_edge275.loopexit.unr-lcssa ]
  %272 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv357.epil
  %273 = load ptr, ptr %272, align 8, !tbaa !31
  %274 = getelementptr inbounds double, ptr %273, i64 %249
  %275 = load double, ptr %274, align 8, !tbaa !20
  %276 = getelementptr inbounds double, ptr %26, i64 %indvars.iv357.epil
  store double %275, ptr %276, align 8, !tbaa !20
  %indvars.iv.next358.epil = add nuw nsw i64 %indvars.iv357.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter473
  br i1 %epil.iter.cmp.not, label %._crit_edge275, label %.epil.preheader472, !llvm.loop !38

._crit_edge275:                                   ; preds = %._crit_edge275.loopexit.unr-lcssa, %.epil.preheader472, %243
  call void @dgesv_(ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef %29, ptr noundef nonnull %8, ptr noundef nonnull %12, ptr noundef %26, ptr noundef nonnull %8, ptr noundef nonnull %10) #5
  %277 = load i32, ptr %10, align 4, !tbaa !5
  %.not214 = icmp eq i32 %277, 0
  br i1 %.not214, label %.preheader217, label %280

.preheader217:                                    ; preds = %._crit_edge275
  %278 = load i32, ptr %8, align 4, !tbaa !5
  %279 = icmp sgt i32 %278, 0
  br i1 %279, label %.lr.ph280.preheader, label %.preheader.thread

.lr.ph280.preheader:                              ; preds = %.preheader217
  %wide.trip.count365 = zext nneg i32 %278 to i64
  br label %.lr.ph280

280:                                              ; preds = %._crit_edge275
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %.loopexit

.preheader:                                       ; preds = %.lr.ph280
  br i1 %279, label %.lr.ph286, label %.preheader.thread

.lr.ph286:                                        ; preds = %.preheader
  %281 = fneg double %.1180
  %xtraiter478 = and i64 %wide.trip.count365, 1
  %282 = icmp eq i32 %278, 1
  br i1 %282, label %.preheader.thread.loopexit.unr-lcssa, label %.lr.ph286.new

.lr.ph286.new:                                    ; preds = %.lr.ph286
  %unroll_iter481 = and i64 %wide.trip.count365, 2147483646
  br label %295

.lr.ph280:                                        ; preds = %.lr.ph280.preheader, %.lr.ph280
  %indvars.iv362 = phi i64 [ 0, %.lr.ph280.preheader ], [ %indvars.iv.next363, %.lr.ph280 ]
  %.0179278 = phi double [ 1.000000e+300, %.lr.ph280.preheader ], [ %.1180, %.lr.ph280 ]
  %.1187277 = phi i32 [ %.0186290, %.lr.ph280.preheader ], [ %.2188, %.lr.ph280 ]
  %.1193276 = phi i32 [ %.0192289, %.lr.ph280.preheader ], [ %.2194, %.lr.ph280 ]
  %283 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv362
  %284 = load i32, ptr %283, align 4, !tbaa !5
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds double, ptr %3, i64 %285
  %287 = load double, ptr %286, align 8, !tbaa !20
  %288 = getelementptr inbounds double, ptr %26, i64 %indvars.iv362
  %289 = load double, ptr %288, align 8, !tbaa !20
  %290 = fdiv double %287, %289
  %291 = getelementptr inbounds double, ptr %24, i64 %indvars.iv362
  store double %290, ptr %291, align 8, !tbaa !20
  %292 = fcmp olt double %290, %.0179278
  %293 = fcmp ogt double %290, 0.000000e+00
  %or.cond216 = and i1 %292, %293
  %294 = trunc nuw nsw i64 %indvars.iv362 to i32
  %.2194 = select i1 %or.cond216, i32 %294, i32 %.1193276
  %.2188 = select i1 %or.cond216, i32 %284, i32 %.1187277
  %.1180 = select i1 %or.cond216, double %290, double %.0179278
  %indvars.iv.next363 = add nuw nsw i64 %indvars.iv362, 1
  %exitcond366.not = icmp eq i64 %indvars.iv.next363, %wide.trip.count365
  br i1 %exitcond366.not, label %.preheader, label %.lr.ph280, !llvm.loop !39

295:                                              ; preds = %295, %.lr.ph286.new
  %indvars.iv367 = phi i64 [ 0, %.lr.ph286.new ], [ %indvars.iv.next368.1, %295 ]
  %niter482 = phi i64 [ 0, %.lr.ph286.new ], [ %niter482.next.1, %295 ]
  %296 = getelementptr inbounds double, ptr %26, i64 %indvars.iv367
  %297 = load double, ptr %296, align 8, !tbaa !20
  %298 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv367
  %299 = load i32, ptr %298, align 4, !tbaa !5
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds double, ptr %3, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !20
  %303 = call double @llvm.fmuladd.f64(double %281, double %297, double %302)
  store double %303, ptr %301, align 8, !tbaa !20
  %indvars.iv.next368 = or disjoint i64 %indvars.iv367, 1
  %304 = getelementptr inbounds double, ptr %26, i64 %indvars.iv.next368
  %305 = load double, ptr %304, align 8, !tbaa !20
  %306 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv.next368
  %307 = load i32, ptr %306, align 4, !tbaa !5
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds double, ptr %3, i64 %308
  %310 = load double, ptr %309, align 8, !tbaa !20
  %311 = call double @llvm.fmuladd.f64(double %281, double %305, double %310)
  store double %311, ptr %309, align 8, !tbaa !20
  %indvars.iv.next368.1 = add nuw nsw i64 %indvars.iv367, 2
  %niter482.next.1 = add i64 %niter482, 2
  %niter482.ncmp.1 = icmp eq i64 %niter482.next.1, %unroll_iter481
  br i1 %niter482.ncmp.1, label %.preheader.thread.loopexit.unr-lcssa, label %295, !llvm.loop !40

.preheader.thread.loopexit.unr-lcssa:             ; preds = %295, %.lr.ph286
  %indvars.iv367.unr = phi i64 [ 0, %.lr.ph286 ], [ %indvars.iv.next368.1, %295 ]
  %lcmp.mod480.not = icmp eq i64 %xtraiter478, 0
  br i1 %lcmp.mod480.not, label %.preheader.thread, label %.preheader.thread.loopexit.epilog-lcssa

.preheader.thread.loopexit.epilog-lcssa:          ; preds = %.preheader.thread.loopexit.unr-lcssa
  %312 = getelementptr inbounds double, ptr %26, i64 %indvars.iv367.unr
  %313 = load double, ptr %312, align 8, !tbaa !20
  %314 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv367.unr
  %315 = load i32, ptr %314, align 4, !tbaa !5
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds double, ptr %3, i64 %316
  %318 = load double, ptr %317, align 8, !tbaa !20
  %319 = call double @llvm.fmuladd.f64(double %281, double %313, double %318)
  store double %319, ptr %317, align 8, !tbaa !20
  br label %.preheader.thread

.preheader.thread:                                ; preds = %.preheader.thread.loopexit.epilog-lcssa, %.preheader.thread.loopexit.unr-lcssa, %.preheader217, %.preheader
  %.0179.lcssa386 = phi double [ %.1180, %.preheader ], [ 1.000000e+300, %.preheader217 ], [ %.1180, %.preheader.thread.loopexit.unr-lcssa ], [ %.1180, %.preheader.thread.loopexit.epilog-lcssa ]
  %.1187.lcssa385 = phi i32 [ %.2188, %.preheader ], [ %.0186290, %.preheader217 ], [ %.2188, %.preheader.thread.loopexit.unr-lcssa ], [ %.2188, %.preheader.thread.loopexit.epilog-lcssa ]
  %.1193.lcssa384 = phi i32 [ %.2194, %.preheader ], [ %.0192289, %.preheader217 ], [ %.2194, %.preheader.thread.loopexit.unr-lcssa ], [ %.2194, %.preheader.thread.loopexit.epilog-lcssa ]
  %320 = sext i32 %246 to i64
  %321 = getelementptr inbounds double, ptr %3, i64 %320
  store double %.0179.lcssa386, ptr %321, align 8, !tbaa !20
  store i32 %.1187.lcssa385, ptr %245, align 4, !tbaa !5
  %322 = sext i32 %.1193.lcssa384 to i64
  %323 = getelementptr inbounds i32, ptr %16, i64 %322
  store i32 %246, ptr %323, align 4, !tbaa !5
  br i1 %242, label %182, label %.loopexit, !llvm.loop !41

.loopexit:                                        ; preds = %.preheader218, %._crit_edge269, %.preheader.thread, %280, %206, %199, %194, %189, %185, %181, %.split.us
  %.0 = phi i32 [ 0, %.split.us ], [ 0, %181 ], [ 0, %185 ], [ %190, %189 ], [ %195, %194 ], [ %200, %199 ], [ 0, %206 ], [ 0, %280 ], [ 0, %.preheader.thread ], [ 0, %._crit_edge269 ], [ 0, %.preheader218 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #5
  ret i32 %.0
}

; 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

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

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 = { 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 80}
!16 = !{!10, !11, i64 88}
!17 = !{!10, !11, i64 96}
!18 = !{!10, !11, i64 104}
!19 = !{!10, !11, i64 112}
!20 = !{!21, !21, i64 0}
!21 = !{!"double", !7, i64 0}
!22 = distinct !{!22, !23, !24, !25}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!"llvm.loop.isvectorized", i32 1}
!25 = !{!"llvm.loop.unroll.runtime.disable"}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.unroll.disable"}
!28 = distinct !{!28, !23, !24}
!29 = distinct !{!29, !23, !24}
!30 = distinct !{!30, !23}
!31 = !{!11, !11, i64 0}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}
!36 = distinct !{!36, !23}
!37 = distinct !{!37, !23}
!38 = distinct !{!38, !27}
!39 = distinct !{!39, !23}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}


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