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

; 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.__SMlocal_mesh = type { i32, i32, i32, [3 x double], [3 x double], [3 x double], ptr, ptr, ptr, i32, double, ptr, double, i32, i32, i32, ptr, ptr, ptr }
%struct.__SMoptimal = type { i32, i32, i32, i32, i32, i32, i32, double, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, [3 x double], double, double, ptr, ptr, ptr, ptr, [3 x i32], i32 }
%struct.__SMparam = type { i32, i32, i32, double, double, double, double, i32, i32, i32, double, double, ptr, ptr, ptr, ptr }
%struct.__SMactive = type { i32, i32, ptr, double }

@.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.3 = external hidden unnamed_addr constant [17 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

declare i32 @SMfindActiveSet(i32 noundef, ptr noundef, double noundef, ptr noundef) #1

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

36:                                               ; preds = %2
  %37 = call i32 @SMerror(i32 noundef 205, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 56, i32 noundef 0, ptr noundef null)
  store i32 %37, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

38:                                               ; preds = %2
  %39 = load ptr, ptr %5, align 8, !tbaa !5
  %40 = icmp eq ptr %39, null
  br i1 %40, label %41, label %43

41:                                               ; preds = %38
  %42 = call i32 @SMerror(i32 noundef 206, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 56, i32 noundef 0, ptr noundef null)
  store i32 %42, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

43:                                               ; preds = %38
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %44, i32 0, i32 16
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  store ptr %46, ptr %22, align 8, !tbaa !5
  %47 = load ptr, ptr %22, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.__SMoptimal, ptr %47, i32 0, i32 9
  %49 = load i32, ptr %48, align 4, !tbaa !14
  store i32 %49, ptr %9, align 4, !tbaa !16
  %50 = load ptr, ptr %22, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.__SMoptimal, ptr %50, i32 0, i32 14
  %52 = load ptr, ptr %51, align 8, !tbaa !17
  store ptr %52, ptr %21, align 8, !tbaa !5
  %53 = load ptr, ptr %22, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.__SMoptimal, ptr %53, i32 0, i32 19
  %55 = load double, ptr %54, align 8, !tbaa !18
  store double %55, ptr %15, align 8, !tbaa !9
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %56, i32 0, i32 0
  %58 = load i32, ptr %57, align 8, !tbaa !19
  store i32 %58, ptr %14, align 4, !tbaa !16
  store i32 0, ptr %7, align 4, !tbaa !16
  store i32 102, ptr %12, align 4, !tbaa !16
  %59 = load ptr, ptr %22, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.__SMoptimal, ptr %59, i32 0, i32 4
  store i32 0, ptr %60, align 8, !tbaa !20
  store i32 0, ptr %10, align 4, !tbaa !16
  %61 = load double, ptr %15, align 8, !tbaa !9
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.__SMparam, ptr %62, i32 0, i32 6
  %64 = load double, ptr %63, align 8, !tbaa !21
  %65 = fcmp olt double %61, %64
  br i1 %65, label %66, label %69

66:                                               ; preds = %43
  %67 = load ptr, ptr %22, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.__SMoptimal, ptr %67, i32 0, i32 4
  store i32 101, ptr %68, align 8, !tbaa !20
  store i32 101, ptr %12, align 4, !tbaa !16
  br label %69

69:                                               ; preds = %66, %43
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %70 = load i32, ptr %14, align 4, !tbaa !16
  %71 = icmp eq i32 %70, 2
  br i1 %71, label %72, label %83

72:                                               ; preds = %69
  %73 = load ptr, ptr %4, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %73, i32 0, i32 5
  %75 = getelementptr inbounds [3 x double], ptr %74, i64 0, i64 0
  %76 = load double, ptr %75, align 8, !tbaa !9
  %77 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 0
  store double %76, ptr %77, align 16, !tbaa !9
  %78 = load ptr, ptr %4, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %78, i32 0, i32 5
  %80 = getelementptr inbounds [3 x double], ptr %79, i64 0, i64 1
  %81 = load double, ptr %80, align 8, !tbaa !9
  %82 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 1
  store double %81, ptr %82, align 8, !tbaa !9
  br label %122

83:                                               ; preds = %69
  %84 = load i32, ptr %14, align 4, !tbaa !16
  %85 = icmp eq i32 %84, 3
  br i1 %85, label %86, label %102

86:                                               ; preds = %83
  %87 = load ptr, ptr %4, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %87, i32 0, i32 5
  %89 = getelementptr inbounds [3 x double], ptr %88, i64 0, i64 0
  %90 = load double, ptr %89, align 8, !tbaa !9
  %91 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 0
  store double %90, ptr %91, align 16, !tbaa !9
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %92, i32 0, i32 5
  %94 = getelementptr inbounds [3 x double], ptr %93, i64 0, i64 1
  %95 = load double, ptr %94, align 8, !tbaa !9
  %96 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 1
  store double %95, ptr %96, align 8, !tbaa !9
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %97, i32 0, i32 5
  %99 = getelementptr inbounds [3 x double], ptr %98, i64 0, i64 2
  %100 = load double, ptr %99, align 8, !tbaa !9
  %101 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 2
  store double %100, ptr %101, align 16, !tbaa !9
  br label %121

102:                                              ; preds = %83
  store i32 0, ptr %24, align 4, !tbaa !16
  br label %103

103:                                              ; preds = %117, %102
  %104 = load i32, ptr %24, align 4, !tbaa !16
  %105 = load i32, ptr %14, align 4, !tbaa !16
  %106 = icmp slt i32 %104, %105
  br i1 %106, label %107, label %120

107:                                              ; preds = %103
  %108 = load ptr, ptr %4, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %108, i32 0, i32 5
  %110 = load i32, ptr %24, align 4, !tbaa !16
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds [3 x double], ptr %109, i64 0, i64 %111
  %113 = load double, ptr %112, align 8, !tbaa !9
  %114 = load i32, ptr %24, align 4, !tbaa !16
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 %115
  store double %113, ptr %116, align 8, !tbaa !9
  br label %117

117:                                              ; preds = %107
  %118 = load i32, ptr %24, align 4, !tbaa !16
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %24, align 4, !tbaa !16
  br label %103, !llvm.loop !23

120:                                              ; preds = %103
  br label %121

121:                                              ; preds = %120, %86
  br label %122

122:                                              ; preds = %121, %72
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %123 = load i32, ptr %9, align 4, !tbaa !16
  %124 = icmp eq i32 %123, 2
  br i1 %124, label %125, label %144

125:                                              ; preds = %122
  %126 = load ptr, ptr %22, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.__SMoptimal, ptr %126, i32 0, i32 10
  %128 = load ptr, ptr %127, align 8, !tbaa !25
  %129 = getelementptr inbounds double, ptr %128, i64 0
  %130 = load double, ptr %129, align 8, !tbaa !9
  %131 = load ptr, ptr %22, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.__SMoptimal, ptr %131, i32 0, i32 13
  %133 = load ptr, ptr %132, align 8, !tbaa !26
  %134 = getelementptr inbounds double, ptr %133, i64 0
  store double %130, ptr %134, align 8, !tbaa !9
  %135 = load ptr, ptr %22, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.__SMoptimal, ptr %135, i32 0, i32 10
  %137 = load ptr, ptr %136, align 8, !tbaa !25
  %138 = getelementptr inbounds double, ptr %137, i64 1
  %139 = load double, ptr %138, align 8, !tbaa !9
  %140 = load ptr, ptr %22, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.__SMoptimal, ptr %140, i32 0, i32 13
  %142 = load ptr, ptr %141, align 8, !tbaa !26
  %143 = getelementptr inbounds double, ptr %142, i64 1
  store double %139, ptr %143, align 8, !tbaa !9
  br label %199

144:                                              ; preds = %122
  %145 = load i32, ptr %9, align 4, !tbaa !16
  %146 = icmp eq i32 %145, 3
  br i1 %146, label %147, label %175

147:                                              ; preds = %144
  %148 = load ptr, ptr %22, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.__SMoptimal, ptr %148, i32 0, i32 10
  %150 = load ptr, ptr %149, align 8, !tbaa !25
  %151 = getelementptr inbounds double, ptr %150, i64 0
  %152 = load double, ptr %151, align 8, !tbaa !9
  %153 = load ptr, ptr %22, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.__SMoptimal, ptr %153, i32 0, i32 13
  %155 = load ptr, ptr %154, align 8, !tbaa !26
  %156 = getelementptr inbounds double, ptr %155, i64 0
  store double %152, ptr %156, align 8, !tbaa !9
  %157 = load ptr, ptr %22, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.__SMoptimal, ptr %157, i32 0, i32 10
  %159 = load ptr, ptr %158, align 8, !tbaa !25
  %160 = getelementptr inbounds double, ptr %159, i64 1
  %161 = load double, ptr %160, align 8, !tbaa !9
  %162 = load ptr, ptr %22, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.__SMoptimal, ptr %162, i32 0, i32 13
  %164 = load ptr, ptr %163, align 8, !tbaa !26
  %165 = getelementptr inbounds double, ptr %164, i64 1
  store double %161, ptr %165, align 8, !tbaa !9
  %166 = load ptr, ptr %22, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.__SMoptimal, ptr %166, i32 0, i32 10
  %168 = load ptr, ptr %167, align 8, !tbaa !25
  %169 = getelementptr inbounds double, ptr %168, i64 2
  %170 = load double, ptr %169, align 8, !tbaa !9
  %171 = load ptr, ptr %22, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.__SMoptimal, ptr %171, i32 0, i32 13
  %173 = load ptr, ptr %172, align 8, !tbaa !26
  %174 = getelementptr inbounds double, ptr %173, i64 2
  store double %170, ptr %174, align 8, !tbaa !9
  br label %198

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

176:                                              ; preds = %194, %175
  %177 = load i32, ptr %25, align 4, !tbaa !16
  %178 = load i32, ptr %9, align 4, !tbaa !16
  %179 = icmp slt i32 %177, %178
  br i1 %179, label %180, label %197

180:                                              ; preds = %176
  %181 = load ptr, ptr %22, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.__SMoptimal, ptr %181, i32 0, i32 10
  %183 = load ptr, ptr %182, align 8, !tbaa !25
  %184 = load i32, ptr %25, align 4, !tbaa !16
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds double, ptr %183, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !9
  %188 = load ptr, ptr %22, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.__SMoptimal, ptr %188, i32 0, i32 13
  %190 = load ptr, ptr %189, align 8, !tbaa !26
  %191 = load i32, ptr %25, align 4, !tbaa !16
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds double, ptr %190, i64 %192
  store double %187, ptr %193, align 8, !tbaa !9
  br label %194

194:                                              ; preds = %180
  %195 = load i32, ptr %25, align 4, !tbaa !16
  %196 = add nsw i32 %195, 1
  store i32 %196, ptr %25, align 4, !tbaa !16
  br label %176, !llvm.loop !27

197:                                              ; preds = %176
  br label %198

198:                                              ; preds = %197, %147
  br label %199

199:                                              ; preds = %198, %125
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  %200 = load ptr, ptr %22, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.__SMoptimal, ptr %200, i32 0, i32 14
  %202 = load ptr, ptr %201, align 8, !tbaa !17
  %203 = load ptr, ptr %22, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.__SMoptimal, ptr %203, i32 0, i32 16
  %205 = load ptr, ptr %204, align 8, !tbaa !28
  %206 = call i32 @SMcopyActive(ptr noundef %202, ptr noundef %205)
  store i32 %206, ptr %6, align 4, !tbaa !16
  %207 = load i32, ptr %6, align 4, !tbaa !16
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %212

209:                                              ; preds = %199
  %210 = load i32, ptr %6, align 4, !tbaa !16
  %211 = call i32 @SMerror(i32 noundef 229, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %210, i32 noundef 0, ptr noundef null)
  store i32 %211, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

212:                                              ; preds = %199
  br label %213

213:                                              ; preds = %1171, %212
  %214 = load i32, ptr %12, align 4, !tbaa !16
  %215 = icmp eq i32 %214, 102
  br i1 %215, label %216, label %1172

216:                                              ; preds = %213
  %217 = load i32, ptr %10, align 4, !tbaa !16
  %218 = add nsw i32 %217, 1
  store i32 %218, ptr %10, align 4, !tbaa !16
  %219 = load i32, ptr %10, align 4, !tbaa !16
  %220 = icmp sge i32 %219, 100
  br i1 %220, label %221, label %222

221:                                              ; preds = %216
  store i32 101, ptr %12, align 4, !tbaa !16
  br label %222

222:                                              ; preds = %221, %216
  store i32 0, ptr %13, align 4, !tbaa !16
  br label %223

223:                                              ; preds = %455, %222
  %224 = load i32, ptr %13, align 4, !tbaa !16
  %225 = icmp ne i32 %224, 0
  br i1 %225, label %232, label %226

226:                                              ; preds = %223
  %227 = load double, ptr %15, align 8, !tbaa !9
  %228 = load ptr, ptr %5, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.__SMparam, ptr %228, i32 0, i32 6
  %230 = load double, ptr %229, align 8, !tbaa !21
  %231 = fcmp ogt double %227, %230
  br label %232

232:                                              ; preds = %226, %223
  %233 = phi i1 [ false, %223 ], [ %231, %226 ]
  br i1 %233, label %234, label %456

234:                                              ; preds = %232
  store i32 0, ptr %8, align 4, !tbaa !16
  br label %235

235:                                              ; preds = %254, %234
  %236 = load i32, ptr %8, align 4, !tbaa !16
  %237 = load i32, ptr %14, align 4, !tbaa !16
  %238 = icmp slt i32 %236, %237
  br i1 %238, label %239, label %257

239:                                              ; preds = %235
  %240 = load double, ptr %15, align 8, !tbaa !9
  %241 = load ptr, ptr %22, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.__SMoptimal, ptr %241, i32 0, i32 18
  %243 = load i32, ptr %8, align 4, !tbaa !16
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds [3 x double], ptr %242, i64 0, i64 %244
  %246 = load double, ptr %245, align 8, !tbaa !9
  %247 = load ptr, ptr %4, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %247, i32 0, i32 5
  %249 = load i32, ptr %8, align 4, !tbaa !16
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds [3 x double], ptr %248, i64 0, i64 %250
  %252 = load double, ptr %251, align 8, !tbaa !9
  %253 = call double @llvm.fmuladd.f64(double %240, double %246, double %252)
  store double %253, ptr %251, align 8, !tbaa !9
  br label %254

254:                                              ; preds = %239
  %255 = load i32, ptr %8, align 4, !tbaa !16
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %8, align 4, !tbaa !16
  br label %235, !llvm.loop !29

257:                                              ; preds = %235
  store i32 1, ptr %13, align 4, !tbaa !16
  store i32 1, ptr %11, align 4, !tbaa !16
  %258 = load ptr, ptr %4, align 8, !tbaa !5
  %259 = call i32 @SMvalidMesh(ptr noundef %258, ptr noundef %11)
  store i32 %259, ptr %6, align 4, !tbaa !16
  %260 = load i32, ptr %6, align 4, !tbaa !16
  %261 = icmp ne i32 %260, 0
  br i1 %261, label %262, label %265

262:                                              ; preds = %257
  %263 = load i32, ptr %6, align 4, !tbaa !16
  %264 = call i32 @SMerror(i32 noundef 248, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %263, i32 noundef 0, ptr noundef null)
  store i32 %264, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

265:                                              ; preds = %257
  %266 = load i32, ptr %11, align 4, !tbaa !16
  %267 = icmp ne i32 %266, 0
  br i1 %267, label %455, label %268

268:                                              ; preds = %265
  %269 = load ptr, ptr %4, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %269, i32 0, i32 15
  %271 = load i32, ptr %270, align 8, !tbaa !30
  %272 = icmp eq i32 %271, 1
  br i1 %272, label %273, label %455

273:                                              ; preds = %268
  store i32 0, ptr %13, align 4, !tbaa !16
  store i32 0, ptr %8, align 4, !tbaa !16
  br label %274

274:                                              ; preds = %294, %273
  %275 = load i32, ptr %8, align 4, !tbaa !16
  %276 = load i32, ptr %14, align 4, !tbaa !16
  %277 = icmp slt i32 %275, %276
  br i1 %277, label %278, label %297

278:                                              ; preds = %274
  %279 = load double, ptr %15, align 8, !tbaa !9
  %280 = load ptr, ptr %22, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.__SMoptimal, ptr %280, i32 0, i32 18
  %282 = load i32, ptr %8, align 4, !tbaa !16
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds [3 x double], ptr %281, i64 0, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !9
  %286 = load ptr, ptr %4, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %286, i32 0, i32 5
  %288 = load i32, ptr %8, align 4, !tbaa !16
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds [3 x double], ptr %287, i64 0, i64 %289
  %291 = load double, ptr %290, align 8, !tbaa !9
  %292 = fneg double %279
  %293 = call double @llvm.fmuladd.f64(double %292, double %285, double %291)
  store double %293, ptr %290, align 8, !tbaa !9
  br label %294

294:                                              ; preds = %278
  %295 = load i32, ptr %8, align 4, !tbaa !16
  %296 = add nsw i32 %295, 1
  store i32 %296, ptr %8, align 4, !tbaa !16
  br label %274, !llvm.loop !31

297:                                              ; preds = %274
  %298 = load double, ptr %15, align 8, !tbaa !9
  %299 = fdiv double %298, 2.000000e+00
  store double %299, ptr %15, align 8, !tbaa !9
  %300 = load double, ptr %15, align 8, !tbaa !9
  %301 = load ptr, ptr %22, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.__SMoptimal, ptr %301, i32 0, i32 19
  store double %300, ptr %302, align 8, !tbaa !18
  %303 = load double, ptr %15, align 8, !tbaa !9
  %304 = load ptr, ptr %5, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.__SMparam, ptr %304, i32 0, i32 6
  %306 = load double, ptr %305, align 8, !tbaa !21
  %307 = fcmp olt double %303, %306
  br i1 %307, label %308, label %454

308:                                              ; preds = %297
  %309 = load ptr, ptr %22, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.__SMoptimal, ptr %309, i32 0, i32 4
  store i32 103, ptr %310, align 8, !tbaa !20
  store i32 101, ptr %12, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %311 = load i32, ptr %14, align 4, !tbaa !16
  %312 = icmp eq i32 %311, 2
  br i1 %312, label %313, label %324

313:                                              ; preds = %308
  %314 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 0
  %315 = load double, ptr %314, align 16, !tbaa !9
  %316 = load ptr, ptr %4, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %316, i32 0, i32 5
  %318 = getelementptr inbounds [3 x double], ptr %317, i64 0, i64 0
  store double %315, ptr %318, align 8, !tbaa !9
  %319 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 1
  %320 = load double, ptr %319, align 8, !tbaa !9
  %321 = load ptr, ptr %4, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %321, i32 0, i32 5
  %323 = getelementptr inbounds [3 x double], ptr %322, i64 0, i64 1
  store double %320, ptr %323, align 8, !tbaa !9
  br label %363

324:                                              ; preds = %308
  %325 = load i32, ptr %14, align 4, !tbaa !16
  %326 = icmp eq i32 %325, 3
  br i1 %326, label %327, label %343

327:                                              ; preds = %324
  %328 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 0
  %329 = load double, ptr %328, align 16, !tbaa !9
  %330 = load ptr, ptr %4, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %330, i32 0, i32 5
  %332 = getelementptr inbounds [3 x double], ptr %331, i64 0, i64 0
  store double %329, ptr %332, align 8, !tbaa !9
  %333 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 1
  %334 = load double, ptr %333, align 8, !tbaa !9
  %335 = load ptr, ptr %4, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %335, i32 0, i32 5
  %337 = getelementptr inbounds [3 x double], ptr %336, i64 0, i64 1
  store double %334, ptr %337, align 8, !tbaa !9
  %338 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 2
  %339 = load double, ptr %338, align 16, !tbaa !9
  %340 = load ptr, ptr %4, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %340, i32 0, i32 5
  %342 = getelementptr inbounds [3 x double], ptr %341, i64 0, i64 2
  store double %339, ptr %342, align 8, !tbaa !9
  br label %362

343:                                              ; preds = %324
  store i32 0, ptr %26, align 4, !tbaa !16
  br label %344

344:                                              ; preds = %358, %343
  %345 = load i32, ptr %26, align 4, !tbaa !16
  %346 = load i32, ptr %14, align 4, !tbaa !16
  %347 = icmp slt i32 %345, %346
  br i1 %347, label %348, label %361

348:                                              ; preds = %344
  %349 = load i32, ptr %26, align 4, !tbaa !16
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 %350
  %352 = load double, ptr %351, align 8, !tbaa !9
  %353 = load ptr, ptr %4, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %353, i32 0, i32 5
  %355 = load i32, ptr %26, align 4, !tbaa !16
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds [3 x double], ptr %354, i64 0, i64 %356
  store double %352, ptr %357, align 8, !tbaa !9
  br label %358

358:                                              ; preds = %348
  %359 = load i32, ptr %26, align 4, !tbaa !16
  %360 = add nsw i32 %359, 1
  store i32 %360, ptr %26, align 4, !tbaa !16
  br label %344, !llvm.loop !32

361:                                              ; preds = %344
  br label %362

362:                                              ; preds = %361, %327
  br label %363

363:                                              ; preds = %362, %313
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %364 = load i32, ptr %9, align 4, !tbaa !16
  %365 = icmp eq i32 %364, 2
  br i1 %365, label %366, label %385

366:                                              ; preds = %363
  %367 = load ptr, ptr %22, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.__SMoptimal, ptr %367, i32 0, i32 13
  %369 = load ptr, ptr %368, align 8, !tbaa !26
  %370 = getelementptr inbounds double, ptr %369, i64 0
  %371 = load double, ptr %370, align 8, !tbaa !9
  %372 = load ptr, ptr %22, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.__SMoptimal, ptr %372, i32 0, i32 10
  %374 = load ptr, ptr %373, align 8, !tbaa !25
  %375 = getelementptr inbounds double, ptr %374, i64 0
  store double %371, ptr %375, align 8, !tbaa !9
  %376 = load ptr, ptr %22, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.__SMoptimal, ptr %376, i32 0, i32 13
  %378 = load ptr, ptr %377, align 8, !tbaa !26
  %379 = getelementptr inbounds double, ptr %378, i64 1
  %380 = load double, ptr %379, align 8, !tbaa !9
  %381 = load ptr, ptr %22, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.__SMoptimal, ptr %381, i32 0, i32 10
  %383 = load ptr, ptr %382, align 8, !tbaa !25
  %384 = getelementptr inbounds double, ptr %383, i64 1
  store double %380, ptr %384, align 8, !tbaa !9
  br label %440

385:                                              ; preds = %363
  %386 = load i32, ptr %9, align 4, !tbaa !16
  %387 = icmp eq i32 %386, 3
  br i1 %387, label %388, label %416

388:                                              ; preds = %385
  %389 = load ptr, ptr %22, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.__SMoptimal, ptr %389, i32 0, i32 13
  %391 = load ptr, ptr %390, align 8, !tbaa !26
  %392 = getelementptr inbounds double, ptr %391, i64 0
  %393 = load double, ptr %392, align 8, !tbaa !9
  %394 = load ptr, ptr %22, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.__SMoptimal, ptr %394, i32 0, i32 10
  %396 = load ptr, ptr %395, align 8, !tbaa !25
  %397 = getelementptr inbounds double, ptr %396, i64 0
  store double %393, ptr %397, align 8, !tbaa !9
  %398 = load ptr, ptr %22, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.__SMoptimal, ptr %398, i32 0, i32 13
  %400 = load ptr, ptr %399, align 8, !tbaa !26
  %401 = getelementptr inbounds double, ptr %400, i64 1
  %402 = load double, ptr %401, align 8, !tbaa !9
  %403 = load ptr, ptr %22, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.__SMoptimal, ptr %403, i32 0, i32 10
  %405 = load ptr, ptr %404, align 8, !tbaa !25
  %406 = getelementptr inbounds double, ptr %405, i64 1
  store double %402, ptr %406, align 8, !tbaa !9
  %407 = load ptr, ptr %22, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.__SMoptimal, ptr %407, i32 0, i32 13
  %409 = load ptr, ptr %408, align 8, !tbaa !26
  %410 = getelementptr inbounds double, ptr %409, i64 2
  %411 = load double, ptr %410, align 8, !tbaa !9
  %412 = load ptr, ptr %22, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.__SMoptimal, ptr %412, i32 0, i32 10
  %414 = load ptr, ptr %413, align 8, !tbaa !25
  %415 = getelementptr inbounds double, ptr %414, i64 2
  store double %411, ptr %415, align 8, !tbaa !9
  br label %439

416:                                              ; preds = %385
  store i32 0, ptr %27, align 4, !tbaa !16
  br label %417

417:                                              ; preds = %435, %416
  %418 = load i32, ptr %27, align 4, !tbaa !16
  %419 = load i32, ptr %9, align 4, !tbaa !16
  %420 = icmp slt i32 %418, %419
  br i1 %420, label %421, label %438

421:                                              ; preds = %417
  %422 = load ptr, ptr %22, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.__SMoptimal, ptr %422, i32 0, i32 13
  %424 = load ptr, ptr %423, align 8, !tbaa !26
  %425 = load i32, ptr %27, align 4, !tbaa !16
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds double, ptr %424, i64 %426
  %428 = load double, ptr %427, align 8, !tbaa !9
  %429 = load ptr, ptr %22, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.__SMoptimal, ptr %429, i32 0, i32 10
  %431 = load ptr, ptr %430, align 8, !tbaa !25
  %432 = load i32, ptr %27, align 4, !tbaa !16
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds double, ptr %431, i64 %433
  store double %428, ptr %434, align 8, !tbaa !9
  br label %435

435:                                              ; preds = %421
  %436 = load i32, ptr %27, align 4, !tbaa !16
  %437 = add nsw i32 %436, 1
  store i32 %437, ptr %27, align 4, !tbaa !16
  br label %417, !llvm.loop !33

438:                                              ; preds = %417
  br label %439

439:                                              ; preds = %438, %388
  br label %440

440:                                              ; preds = %439, %366
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  %441 = load ptr, ptr %22, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.__SMoptimal, ptr %441, i32 0, i32 16
  %443 = load ptr, ptr %442, align 8, !tbaa !28
  %444 = load ptr, ptr %22, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.__SMoptimal, ptr %444, i32 0, i32 14
  %446 = load ptr, ptr %445, align 8, !tbaa !17
  %447 = call i32 @SMcopyActive(ptr noundef %443, ptr noundef %446)
  store i32 %447, ptr %6, align 4, !tbaa !16
  %448 = load i32, ptr %6, align 4, !tbaa !16
  %449 = icmp ne i32 %448, 0
  br i1 %449, label %450, label %453

450:                                              ; preds = %440
  %451 = load i32, ptr %6, align 4, !tbaa !16
  %452 = call i32 @SMerror(i32 noundef 270, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %451, i32 noundef 0, ptr noundef null)
  store i32 %452, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

453:                                              ; preds = %440
  br label %454

454:                                              ; preds = %453, %297
  br label %455

455:                                              ; preds = %454, %268, %265
  br label %223, !llvm.loop !34

456:                                              ; preds = %232
  %457 = load i32, ptr %11, align 4, !tbaa !16
  %458 = icmp ne i32 %457, 0
  br i1 %458, label %464, label %459

459:                                              ; preds = %456
  %460 = load ptr, ptr %4, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %460, i32 0, i32 15
  %462 = load i32, ptr %461, align 8, !tbaa !30
  %463 = icmp eq i32 %462, 0
  br i1 %463, label %464, label %1171

464:                                              ; preds = %459, %456
  %465 = load double, ptr %15, align 8, !tbaa !9
  %466 = load ptr, ptr %5, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.__SMparam, ptr %466, i32 0, i32 6
  %468 = load double, ptr %467, align 8, !tbaa !21
  %469 = fcmp ogt double %465, %468
  br i1 %469, label %470, label %1171

470:                                              ; preds = %464
  %471 = load ptr, ptr %4, align 8, !tbaa !5
  %472 = load ptr, ptr %5, align 8, !tbaa !5
  %473 = load ptr, ptr %22, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.__SMoptimal, ptr %473, i32 0, i32 10
  %475 = load ptr, ptr %474, align 8, !tbaa !25
  %476 = call i32 @SMcomputeFunction(ptr noundef %471, ptr noundef %472, ptr noundef %475)
  store i32 %476, ptr %6, align 4, !tbaa !16
  %477 = load i32, ptr %6, align 4, !tbaa !16
  %478 = icmp ne i32 %477, 0
  br i1 %478, label %479, label %482

479:                                              ; preds = %470
  %480 = load i32, ptr %6, align 4, !tbaa !16
  %481 = call i32 @SMerror(i32 noundef 279, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %480, i32 noundef 0, ptr noundef null)
  store i32 %481, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

482:                                              ; preds = %470
  %483 = load ptr, ptr %4, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %483, i32 0, i32 16
  %485 = load ptr, ptr %484, align 8, !tbaa !11
  %486 = getelementptr inbounds %struct.__SMoptimal, ptr %485, i32 0, i32 9
  %487 = load i32, ptr %486, align 4, !tbaa !14
  %488 = load ptr, ptr %22, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.__SMoptimal, ptr %488, i32 0, i32 10
  %490 = load ptr, ptr %489, align 8, !tbaa !25
  %491 = load ptr, ptr %5, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.__SMparam, ptr %491, i32 0, i32 4
  %493 = load double, ptr %492, align 8, !tbaa !35
  %494 = load ptr, ptr %22, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.__SMoptimal, ptr %494, i32 0, i32 14
  %496 = load ptr, ptr %495, align 8, !tbaa !17
  %497 = call i32 @SMfindActiveSet(i32 noundef %487, ptr noundef %490, double noundef %493, ptr noundef %496)
  store i32 %497, ptr %6, align 4, !tbaa !16
  %498 = load i32, ptr %6, align 4, !tbaa !16
  %499 = icmp ne i32 %498, 0
  br i1 %499, label %500, label %503

500:                                              ; preds = %482
  %501 = load i32, ptr %6, align 4, !tbaa !16
  %502 = call i32 @SMerror(i32 noundef 282, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %501, i32 noundef 0, ptr noundef null)
  store i32 %502, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

503:                                              ; preds = %482
  %504 = load ptr, ptr %4, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %504, i32 0, i32 16
  %506 = load ptr, ptr %505, align 8, !tbaa !11
  %507 = call i32 @SMgetMinEstimate(ptr noundef %506, ptr noundef %16)
  store i32 %507, ptr %6, align 4, !tbaa !16
  %508 = load i32, ptr %6, align 4, !tbaa !16
  %509 = icmp ne i32 %508, 0
  br i1 %509, label %510, label %513

510:                                              ; preds = %503
  %511 = load i32, ptr %6, align 4, !tbaa !16
  %512 = call i32 @SMerror(i32 noundef 286, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %511, i32 noundef 0, ptr noundef null)
  store i32 %512, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

513:                                              ; preds = %503
  %514 = load ptr, ptr %22, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.__SMoptimal, ptr %514, i32 0, i32 14
  %516 = load ptr, ptr %515, align 8, !tbaa !17
  %517 = getelementptr inbounds %struct.__SMactive, ptr %516, i32 0, i32 3
  %518 = load double, ptr %517, align 8, !tbaa !36
  %519 = load ptr, ptr %22, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.__SMoptimal, ptr %519, i32 0, i32 22
  %521 = load ptr, ptr %520, align 8, !tbaa !38
  %522 = load ptr, ptr %22, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.__SMoptimal, ptr %522, i32 0, i32 5
  %524 = load i32, ptr %523, align 4, !tbaa !39
  %525 = sub nsw i32 %524, 1
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds double, ptr %521, i64 %526
  %528 = load double, ptr %527, align 8, !tbaa !9
  %529 = fsub double %518, %528
  store double %529, ptr %17, align 8, !tbaa !9
  %530 = load double, ptr %17, align 8, !tbaa !9
  %531 = load double, ptr %16, align 8, !tbaa !9
  %532 = fsub double %530, %531
  %533 = call double @llvm.fabs.f64(double %532)
  %534 = load double, ptr %16, align 8, !tbaa !9
  %535 = call double @llvm.fabs.f64(double %534)
  %536 = fdiv double %533, %535
  store double %536, ptr %19, align 8, !tbaa !9
  %537 = load double, ptr %18, align 8, !tbaa !9
  %538 = load double, ptr %17, align 8, !tbaa !9
  %539 = fcmp ogt double %537, %538
  br i1 %539, label %540, label %687

540:                                              ; preds = %513
  %541 = load double, ptr %18, align 8, !tbaa !9
  %542 = fcmp ogt double %541, 0.000000e+00
  br i1 %542, label %543, label %687

543:                                              ; preds = %540
  store i32 0, ptr %8, align 4, !tbaa !16
  br label %544

544:                                              ; preds = %563, %543
  %545 = load i32, ptr %8, align 4, !tbaa !16
  %546 = load i32, ptr %14, align 4, !tbaa !16
  %547 = icmp slt i32 %545, %546
  br i1 %547, label %548, label %566

548:                                              ; preds = %544
  %549 = load double, ptr %15, align 8, !tbaa !9
  %550 = load ptr, ptr %22, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.__SMoptimal, ptr %550, i32 0, i32 18
  %552 = load i32, ptr %8, align 4, !tbaa !16
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds [3 x double], ptr %551, i64 0, i64 %553
  %555 = load double, ptr %554, align 8, !tbaa !9
  %556 = load ptr, ptr %4, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %556, i32 0, i32 5
  %558 = load i32, ptr %8, align 4, !tbaa !16
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds [3 x double], ptr %557, i64 0, i64 %559
  %561 = load double, ptr %560, align 8, !tbaa !9
  %562 = call double @llvm.fmuladd.f64(double %549, double %555, double %561)
  store double %562, ptr %560, align 8, !tbaa !9
  br label %563

563:                                              ; preds = %548
  %564 = load i32, ptr %8, align 4, !tbaa !16
  %565 = add nsw i32 %564, 1
  store i32 %565, ptr %8, align 4, !tbaa !16
  br label %544, !llvm.loop !40

566:                                              ; preds = %544
  store i32 1, ptr %11, align 4, !tbaa !16
  %567 = load ptr, ptr %4, align 8, !tbaa !5
  %568 = call i32 @SMvalidMesh(ptr noundef %567, ptr noundef %11)
  store i32 %568, ptr %6, align 4, !tbaa !16
  %569 = load i32, ptr %6, align 4, !tbaa !16
  %570 = icmp ne i32 %569, 0
  br i1 %570, label %571, label %574

571:                                              ; preds = %566
  %572 = load i32, ptr %6, align 4, !tbaa !16
  %573 = call i32 @SMerror(i32 noundef 316, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %572, i32 noundef 0, ptr noundef null)
  store i32 %573, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

574:                                              ; preds = %566
  %575 = load i32, ptr %11, align 4, !tbaa !16
  %576 = icmp ne i32 %575, 0
  br i1 %576, label %577, label %585

577:                                              ; preds = %574
  %578 = load ptr, ptr %4, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %578, i32 0, i32 15
  %580 = load i32, ptr %579, align 8, !tbaa !30
  %581 = icmp eq i32 %580, 0
  br i1 %581, label %582, label %585

582:                                              ; preds = %577
  %583 = load ptr, ptr %4, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %583, i32 0, i32 15
  store i32 1, ptr %584, align 8, !tbaa !30
  br label %585

585:                                              ; preds = %582, %577, %574
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %586 = load i32, ptr %9, align 4, !tbaa !16
  %587 = icmp eq i32 %586, 2
  br i1 %587, label %588, label %607

588:                                              ; preds = %585
  %589 = load ptr, ptr %22, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.__SMoptimal, ptr %589, i32 0, i32 12
  %591 = load ptr, ptr %590, align 8, !tbaa !41
  %592 = getelementptr inbounds double, ptr %591, i64 0
  %593 = load double, ptr %592, align 8, !tbaa !9
  %594 = load ptr, ptr %22, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.__SMoptimal, ptr %594, i32 0, i32 10
  %596 = load ptr, ptr %595, align 8, !tbaa !25
  %597 = getelementptr inbounds double, ptr %596, i64 0
  store double %593, ptr %597, align 8, !tbaa !9
  %598 = load ptr, ptr %22, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.__SMoptimal, ptr %598, i32 0, i32 12
  %600 = load ptr, ptr %599, align 8, !tbaa !41
  %601 = getelementptr inbounds double, ptr %600, i64 1
  %602 = load double, ptr %601, align 8, !tbaa !9
  %603 = load ptr, ptr %22, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.__SMoptimal, ptr %603, i32 0, i32 10
  %605 = load ptr, ptr %604, align 8, !tbaa !25
  %606 = getelementptr inbounds double, ptr %605, i64 1
  store double %602, ptr %606, align 8, !tbaa !9
  br label %662

607:                                              ; preds = %585
  %608 = load i32, ptr %9, align 4, !tbaa !16
  %609 = icmp eq i32 %608, 3
  br i1 %609, label %610, label %638

610:                                              ; preds = %607
  %611 = load ptr, ptr %22, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.__SMoptimal, ptr %611, i32 0, i32 12
  %613 = load ptr, ptr %612, align 8, !tbaa !41
  %614 = getelementptr inbounds double, ptr %613, i64 0
  %615 = load double, ptr %614, align 8, !tbaa !9
  %616 = load ptr, ptr %22, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.__SMoptimal, ptr %616, i32 0, i32 10
  %618 = load ptr, ptr %617, align 8, !tbaa !25
  %619 = getelementptr inbounds double, ptr %618, i64 0
  store double %615, ptr %619, align 8, !tbaa !9
  %620 = load ptr, ptr %22, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.__SMoptimal, ptr %620, i32 0, i32 12
  %622 = load ptr, ptr %621, align 8, !tbaa !41
  %623 = getelementptr inbounds double, ptr %622, i64 1
  %624 = load double, ptr %623, align 8, !tbaa !9
  %625 = load ptr, ptr %22, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.__SMoptimal, ptr %625, i32 0, i32 10
  %627 = load ptr, ptr %626, align 8, !tbaa !25
  %628 = getelementptr inbounds double, ptr %627, i64 1
  store double %624, ptr %628, align 8, !tbaa !9
  %629 = load ptr, ptr %22, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.__SMoptimal, ptr %629, i32 0, i32 12
  %631 = load ptr, ptr %630, align 8, !tbaa !41
  %632 = getelementptr inbounds double, ptr %631, i64 2
  %633 = load double, ptr %632, align 8, !tbaa !9
  %634 = load ptr, ptr %22, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.__SMoptimal, ptr %634, i32 0, i32 10
  %636 = load ptr, ptr %635, align 8, !tbaa !25
  %637 = getelementptr inbounds double, ptr %636, i64 2
  store double %633, ptr %637, align 8, !tbaa !9
  br label %661

638:                                              ; preds = %607
  store i32 0, ptr %28, align 4, !tbaa !16
  br label %639

639:                                              ; preds = %657, %638
  %640 = load i32, ptr %28, align 4, !tbaa !16
  %641 = load i32, ptr %9, align 4, !tbaa !16
  %642 = icmp slt i32 %640, %641
  br i1 %642, label %643, label %660

643:                                              ; preds = %639
  %644 = load ptr, ptr %22, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.__SMoptimal, ptr %644, i32 0, i32 12
  %646 = load ptr, ptr %645, align 8, !tbaa !41
  %647 = load i32, ptr %28, align 4, !tbaa !16
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds double, ptr %646, i64 %648
  %650 = load double, ptr %649, align 8, !tbaa !9
  %651 = load ptr, ptr %22, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.__SMoptimal, ptr %651, i32 0, i32 10
  %653 = load ptr, ptr %652, align 8, !tbaa !25
  %654 = load i32, ptr %28, align 4, !tbaa !16
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds double, ptr %653, i64 %655
  store double %650, ptr %656, align 8, !tbaa !9
  br label %657

657:                                              ; preds = %643
  %658 = load i32, ptr %28, align 4, !tbaa !16
  %659 = add nsw i32 %658, 1
  store i32 %659, ptr %28, align 4, !tbaa !16
  br label %639, !llvm.loop !42

660:                                              ; preds = %639
  br label %661

661:                                              ; preds = %660, %610
  br label %662

662:                                              ; preds = %661, %588
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  %663 = load ptr, ptr %22, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.__SMoptimal, ptr %663, i32 0, i32 15
  %665 = load ptr, ptr %664, align 8, !tbaa !43
  %666 = load ptr, ptr %22, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.__SMoptimal, ptr %666, i32 0, i32 14
  %668 = load ptr, ptr %667, align 8, !tbaa !17
  %669 = call i32 @SMcopyActive(ptr noundef %665, ptr noundef %668)
  store i32 %669, ptr %6, align 4, !tbaa !16
  %670 = load i32, ptr %6, align 4, !tbaa !16
  %671 = icmp ne i32 %670, 0
  br i1 %671, label %672, label %675

672:                                              ; preds = %662
  %673 = load i32, ptr %6, align 4, !tbaa !16
  %674 = call i32 @SMerror(i32 noundef 323, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %673, i32 noundef 0, ptr noundef null)
  store i32 %674, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

675:                                              ; preds = %662
  %676 = load ptr, ptr %22, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.__SMoptimal, ptr %676, i32 0, i32 4
  store i32 100, ptr %677, align 8, !tbaa !20
  store i32 101, ptr %12, align 4, !tbaa !16
  %678 = load double, ptr %18, align 8, !tbaa !9
  %679 = load ptr, ptr %5, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.__SMparam, ptr %679, i32 0, i32 5
  %681 = load double, ptr %680, align 8, !tbaa !44
  %682 = fcmp olt double %678, %681
  br i1 %682, label %683, label %686

683:                                              ; preds = %675
  %684 = load ptr, ptr %22, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.__SMoptimal, ptr %684, i32 0, i32 4
  store i32 101, ptr %685, align 8, !tbaa !20
  store i32 101, ptr %12, align 4, !tbaa !16
  br label %686

686:                                              ; preds = %683, %675
  br label %1170

687:                                              ; preds = %540, %513
  %688 = load double, ptr %17, align 8, !tbaa !9
  %689 = load double, ptr %16, align 8, !tbaa !9
  %690 = fcmp ogt double %688, %689
  br i1 %690, label %694, label %691

691:                                              ; preds = %687
  %692 = load double, ptr %19, align 8, !tbaa !9
  %693 = fcmp olt double %692, 1.000000e-01
  br i1 %693, label %694, label %728

694:                                              ; preds = %691, %687
  %695 = load double, ptr %17, align 8, !tbaa !9
  %696 = fcmp ogt double %695, 0.000000e+00
  br i1 %696, label %697, label %728

697:                                              ; preds = %694
  %698 = load ptr, ptr %22, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.__SMoptimal, ptr %698, i32 0, i32 4
  store i32 100, ptr %699, align 8, !tbaa !20
  store i32 101, ptr %12, align 4, !tbaa !16
  store i32 1, ptr %11, align 4, !tbaa !16
  %700 = load ptr, ptr %4, align 8, !tbaa !5
  %701 = call i32 @SMvalidMesh(ptr noundef %700, ptr noundef %11)
  store i32 %701, ptr %6, align 4, !tbaa !16
  %702 = load i32, ptr %6, align 4, !tbaa !16
  %703 = icmp ne i32 %702, 0
  br i1 %703, label %704, label %707

704:                                              ; preds = %697
  %705 = load i32, ptr %6, align 4, !tbaa !16
  %706 = call i32 @SMerror(i32 noundef 340, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %705, i32 noundef 0, ptr noundef null)
  store i32 %706, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

707:                                              ; preds = %697
  %708 = load i32, ptr %11, align 4, !tbaa !16
  %709 = icmp ne i32 %708, 0
  br i1 %709, label %710, label %718

710:                                              ; preds = %707
  %711 = load ptr, ptr %4, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %711, i32 0, i32 15
  %713 = load i32, ptr %712, align 8, !tbaa !30
  %714 = icmp eq i32 %713, 0
  br i1 %714, label %715, label %718

715:                                              ; preds = %710
  %716 = load ptr, ptr %4, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %716, i32 0, i32 15
  store i32 1, ptr %717, align 8, !tbaa !30
  br label %718

718:                                              ; preds = %715, %710, %707
  %719 = load double, ptr %17, align 8, !tbaa !9
  %720 = load ptr, ptr %5, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.__SMparam, ptr %720, i32 0, i32 5
  %722 = load double, ptr %721, align 8, !tbaa !44
  %723 = fcmp olt double %719, %722
  br i1 %723, label %724, label %727

724:                                              ; preds = %718
  %725 = load ptr, ptr %22, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.__SMoptimal, ptr %725, i32 0, i32 4
  store i32 101, ptr %726, align 8, !tbaa !20
  store i32 101, ptr %12, align 4, !tbaa !16
  br label %727

727:                                              ; preds = %724, %718
  br label %1169

728:                                              ; preds = %694, %691
  %729 = load double, ptr %17, align 8, !tbaa !9
  %730 = fcmp olt double %729, 0.000000e+00
  br i1 %730, label %731, label %894

731:                                              ; preds = %728
  %732 = load double, ptr %18, align 8, !tbaa !9
  %733 = fcmp olt double %732, 0.000000e+00
  br i1 %733, label %734, label %894

734:                                              ; preds = %731
  %735 = load double, ptr %17, align 8, !tbaa !9
  %736 = call double @llvm.fabs.f64(double %735)
  %737 = load ptr, ptr %5, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.__SMparam, ptr %737, i32 0, i32 5
  %739 = load double, ptr %738, align 8, !tbaa !44
  %740 = fcmp olt double %736, %739
  br i1 %740, label %741, label %894

741:                                              ; preds = %734
  %742 = load double, ptr %18, align 8, !tbaa !9
  %743 = call double @llvm.fabs.f64(double %742)
  %744 = load ptr, ptr %5, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.__SMparam, ptr %744, i32 0, i32 5
  %746 = load double, ptr %745, align 8, !tbaa !44
  %747 = fcmp olt double %743, %746
  br i1 %747, label %748, label %894

748:                                              ; preds = %741
  %749 = load ptr, ptr %22, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.__SMoptimal, ptr %749, i32 0, i32 4
  store i32 102, ptr %750, align 8, !tbaa !20
  store i32 101, ptr %12, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %751 = load i32, ptr %14, align 4, !tbaa !16
  %752 = icmp eq i32 %751, 2
  br i1 %752, label %753, label %764

753:                                              ; preds = %748
  %754 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 0
  %755 = load double, ptr %754, align 16, !tbaa !9
  %756 = load ptr, ptr %4, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %756, i32 0, i32 5
  %758 = getelementptr inbounds [3 x double], ptr %757, i64 0, i64 0
  store double %755, ptr %758, align 8, !tbaa !9
  %759 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 1
  %760 = load double, ptr %759, align 8, !tbaa !9
  %761 = load ptr, ptr %4, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %761, i32 0, i32 5
  %763 = getelementptr inbounds [3 x double], ptr %762, i64 0, i64 1
  store double %760, ptr %763, align 8, !tbaa !9
  br label %803

764:                                              ; preds = %748
  %765 = load i32, ptr %14, align 4, !tbaa !16
  %766 = icmp eq i32 %765, 3
  br i1 %766, label %767, label %783

767:                                              ; preds = %764
  %768 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 0
  %769 = load double, ptr %768, align 16, !tbaa !9
  %770 = load ptr, ptr %4, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %770, i32 0, i32 5
  %772 = getelementptr inbounds [3 x double], ptr %771, i64 0, i64 0
  store double %769, ptr %772, align 8, !tbaa !9
  %773 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 1
  %774 = load double, ptr %773, align 8, !tbaa !9
  %775 = load ptr, ptr %4, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %775, i32 0, i32 5
  %777 = getelementptr inbounds [3 x double], ptr %776, i64 0, i64 1
  store double %774, ptr %777, align 8, !tbaa !9
  %778 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 2
  %779 = load double, ptr %778, align 16, !tbaa !9
  %780 = load ptr, ptr %4, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %780, i32 0, i32 5
  %782 = getelementptr inbounds [3 x double], ptr %781, i64 0, i64 2
  store double %779, ptr %782, align 8, !tbaa !9
  br label %802

783:                                              ; preds = %764
  store i32 0, ptr %29, align 4, !tbaa !16
  br label %784

784:                                              ; preds = %798, %783
  %785 = load i32, ptr %29, align 4, !tbaa !16
  %786 = load i32, ptr %14, align 4, !tbaa !16
  %787 = icmp slt i32 %785, %786
  br i1 %787, label %788, label %801

788:                                              ; preds = %784
  %789 = load i32, ptr %29, align 4, !tbaa !16
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 %790
  %792 = load double, ptr %791, align 8, !tbaa !9
  %793 = load ptr, ptr %4, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %793, i32 0, i32 5
  %795 = load i32, ptr %29, align 4, !tbaa !16
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds [3 x double], ptr %794, i64 0, i64 %796
  store double %792, ptr %797, align 8, !tbaa !9
  br label %798

798:                                              ; preds = %788
  %799 = load i32, ptr %29, align 4, !tbaa !16
  %800 = add nsw i32 %799, 1
  store i32 %800, ptr %29, align 4, !tbaa !16
  br label %784, !llvm.loop !45

801:                                              ; preds = %784
  br label %802

802:                                              ; preds = %801, %767
  br label %803

803:                                              ; preds = %802, %753
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %804 = load i32, ptr %9, align 4, !tbaa !16
  %805 = icmp eq i32 %804, 2
  br i1 %805, label %806, label %825

806:                                              ; preds = %803
  %807 = load ptr, ptr %22, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.__SMoptimal, ptr %807, i32 0, i32 13
  %809 = load ptr, ptr %808, align 8, !tbaa !26
  %810 = getelementptr inbounds double, ptr %809, i64 0
  %811 = load double, ptr %810, align 8, !tbaa !9
  %812 = load ptr, ptr %22, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.__SMoptimal, ptr %812, i32 0, i32 10
  %814 = load ptr, ptr %813, align 8, !tbaa !25
  %815 = getelementptr inbounds double, ptr %814, i64 0
  store double %811, ptr %815, align 8, !tbaa !9
  %816 = load ptr, ptr %22, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.__SMoptimal, ptr %816, i32 0, i32 13
  %818 = load ptr, ptr %817, align 8, !tbaa !26
  %819 = getelementptr inbounds double, ptr %818, i64 1
  %820 = load double, ptr %819, align 8, !tbaa !9
  %821 = load ptr, ptr %22, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.__SMoptimal, ptr %821, i32 0, i32 10
  %823 = load ptr, ptr %822, align 8, !tbaa !25
  %824 = getelementptr inbounds double, ptr %823, i64 1
  store double %820, ptr %824, align 8, !tbaa !9
  br label %880

825:                                              ; preds = %803
  %826 = load i32, ptr %9, align 4, !tbaa !16
  %827 = icmp eq i32 %826, 3
  br i1 %827, label %828, label %856

828:                                              ; preds = %825
  %829 = load ptr, ptr %22, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.__SMoptimal, ptr %829, i32 0, i32 13
  %831 = load ptr, ptr %830, align 8, !tbaa !26
  %832 = getelementptr inbounds double, ptr %831, i64 0
  %833 = load double, ptr %832, align 8, !tbaa !9
  %834 = load ptr, ptr %22, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.__SMoptimal, ptr %834, i32 0, i32 10
  %836 = load ptr, ptr %835, align 8, !tbaa !25
  %837 = getelementptr inbounds double, ptr %836, i64 0
  store double %833, ptr %837, align 8, !tbaa !9
  %838 = load ptr, ptr %22, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.__SMoptimal, ptr %838, i32 0, i32 13
  %840 = load ptr, ptr %839, align 8, !tbaa !26
  %841 = getelementptr inbounds double, ptr %840, i64 1
  %842 = load double, ptr %841, align 8, !tbaa !9
  %843 = load ptr, ptr %22, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.__SMoptimal, ptr %843, i32 0, i32 10
  %845 = load ptr, ptr %844, align 8, !tbaa !25
  %846 = getelementptr inbounds double, ptr %845, i64 1
  store double %842, ptr %846, align 8, !tbaa !9
  %847 = load ptr, ptr %22, align 8, !tbaa !5
  %848 = getelementptr inbounds %struct.__SMoptimal, ptr %847, i32 0, i32 13
  %849 = load ptr, ptr %848, align 8, !tbaa !26
  %850 = getelementptr inbounds double, ptr %849, i64 2
  %851 = load double, ptr %850, align 8, !tbaa !9
  %852 = load ptr, ptr %22, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.__SMoptimal, ptr %852, i32 0, i32 10
  %854 = load ptr, ptr %853, align 8, !tbaa !25
  %855 = getelementptr inbounds double, ptr %854, i64 2
  store double %851, ptr %855, align 8, !tbaa !9
  br label %879

856:                                              ; preds = %825
  store i32 0, ptr %30, align 4, !tbaa !16
  br label %857

857:                                              ; preds = %875, %856
  %858 = load i32, ptr %30, align 4, !tbaa !16
  %859 = load i32, ptr %9, align 4, !tbaa !16
  %860 = icmp slt i32 %858, %859
  br i1 %860, label %861, label %878

861:                                              ; preds = %857
  %862 = load ptr, ptr %22, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.__SMoptimal, ptr %862, i32 0, i32 13
  %864 = load ptr, ptr %863, align 8, !tbaa !26
  %865 = load i32, ptr %30, align 4, !tbaa !16
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds double, ptr %864, i64 %866
  %868 = load double, ptr %867, align 8, !tbaa !9
  %869 = load ptr, ptr %22, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.__SMoptimal, ptr %869, i32 0, i32 10
  %871 = load ptr, ptr %870, align 8, !tbaa !25
  %872 = load i32, ptr %30, align 4, !tbaa !16
  %873 = sext i32 %872 to i64
  %874 = getelementptr inbounds double, ptr %871, i64 %873
  store double %868, ptr %874, align 8, !tbaa !9
  br label %875

875:                                              ; preds = %861
  %876 = load i32, ptr %30, align 4, !tbaa !16
  %877 = add nsw i32 %876, 1
  store i32 %877, ptr %30, align 4, !tbaa !16
  br label %857, !llvm.loop !46

878:                                              ; preds = %857
  br label %879

879:                                              ; preds = %878, %828
  br label %880

880:                                              ; preds = %879, %806
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  %881 = load ptr, ptr %22, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.__SMoptimal, ptr %881, i32 0, i32 16
  %883 = load ptr, ptr %882, align 8, !tbaa !28
  %884 = load ptr, ptr %22, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.__SMoptimal, ptr %884, i32 0, i32 14
  %886 = load ptr, ptr %885, align 8, !tbaa !17
  %887 = call i32 @SMcopyActive(ptr noundef %883, ptr noundef %886)
  store i32 %887, ptr %6, align 4, !tbaa !16
  %888 = load i32, ptr %6, align 4, !tbaa !16
  %889 = icmp ne i32 %888, 0
  br i1 %889, label %890, label %893

890:                                              ; preds = %880
  %891 = load i32, ptr %6, align 4, !tbaa !16
  %892 = call i32 @SMerror(i32 noundef 362, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %891, i32 noundef 0, ptr noundef null)
  store i32 %892, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

893:                                              ; preds = %880
  br label %1168

894:                                              ; preds = %741, %734, %731, %728
  store i32 0, ptr %8, align 4, !tbaa !16
  br label %895

895:                                              ; preds = %915, %894
  %896 = load i32, ptr %8, align 4, !tbaa !16
  %897 = load i32, ptr %14, align 4, !tbaa !16
  %898 = icmp slt i32 %896, %897
  br i1 %898, label %899, label %918

899:                                              ; preds = %895
  %900 = load double, ptr %15, align 8, !tbaa !9
  %901 = load ptr, ptr %22, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.__SMoptimal, ptr %901, i32 0, i32 18
  %903 = load i32, ptr %8, align 4, !tbaa !16
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds [3 x double], ptr %902, i64 0, i64 %904
  %906 = load double, ptr %905, align 8, !tbaa !9
  %907 = load ptr, ptr %4, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %907, i32 0, i32 5
  %909 = load i32, ptr %8, align 4, !tbaa !16
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds [3 x double], ptr %908, i64 0, i64 %910
  %912 = load double, ptr %911, align 8, !tbaa !9
  %913 = fneg double %900
  %914 = call double @llvm.fmuladd.f64(double %913, double %906, double %912)
  store double %914, ptr %911, align 8, !tbaa !9
  br label %915

915:                                              ; preds = %899
  %916 = load i32, ptr %8, align 4, !tbaa !16
  %917 = add nsw i32 %916, 1
  store i32 %917, ptr %8, align 4, !tbaa !16
  br label %895, !llvm.loop !47

918:                                              ; preds = %895
  %919 = load double, ptr %15, align 8, !tbaa !9
  %920 = fdiv double %919, 2.000000e+00
  store double %920, ptr %15, align 8, !tbaa !9
  %921 = load double, ptr %15, align 8, !tbaa !9
  %922 = load ptr, ptr %22, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.__SMoptimal, ptr %922, i32 0, i32 19
  store double %921, ptr %923, align 8, !tbaa !18
  %924 = load double, ptr %15, align 8, !tbaa !9
  %925 = load ptr, ptr %5, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.__SMparam, ptr %925, i32 0, i32 6
  %927 = load double, ptr %926, align 8, !tbaa !21
  %928 = fcmp olt double %924, %927
  br i1 %928, label %929, label %1075

929:                                              ; preds = %918
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %930 = load i32, ptr %14, align 4, !tbaa !16
  %931 = icmp eq i32 %930, 2
  br i1 %931, label %932, label %943

932:                                              ; preds = %929
  %933 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 0
  %934 = load double, ptr %933, align 16, !tbaa !9
  %935 = load ptr, ptr %4, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %935, i32 0, i32 5
  %937 = getelementptr inbounds [3 x double], ptr %936, i64 0, i64 0
  store double %934, ptr %937, align 8, !tbaa !9
  %938 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 1
  %939 = load double, ptr %938, align 8, !tbaa !9
  %940 = load ptr, ptr %4, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %940, i32 0, i32 5
  %942 = getelementptr inbounds [3 x double], ptr %941, i64 0, i64 1
  store double %939, ptr %942, align 8, !tbaa !9
  br label %982

943:                                              ; preds = %929
  %944 = load i32, ptr %14, align 4, !tbaa !16
  %945 = icmp eq i32 %944, 3
  br i1 %945, label %946, label %962

946:                                              ; preds = %943
  %947 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 0
  %948 = load double, ptr %947, align 16, !tbaa !9
  %949 = load ptr, ptr %4, align 8, !tbaa !5
  %950 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %949, i32 0, i32 5
  %951 = getelementptr inbounds [3 x double], ptr %950, i64 0, i64 0
  store double %948, ptr %951, align 8, !tbaa !9
  %952 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 1
  %953 = load double, ptr %952, align 8, !tbaa !9
  %954 = load ptr, ptr %4, align 8, !tbaa !5
  %955 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %954, i32 0, i32 5
  %956 = getelementptr inbounds [3 x double], ptr %955, i64 0, i64 1
  store double %953, ptr %956, align 8, !tbaa !9
  %957 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 2
  %958 = load double, ptr %957, align 16, !tbaa !9
  %959 = load ptr, ptr %4, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %959, i32 0, i32 5
  %961 = getelementptr inbounds [3 x double], ptr %960, i64 0, i64 2
  store double %958, ptr %961, align 8, !tbaa !9
  br label %981

962:                                              ; preds = %943
  store i32 0, ptr %31, align 4, !tbaa !16
  br label %963

963:                                              ; preds = %977, %962
  %964 = load i32, ptr %31, align 4, !tbaa !16
  %965 = load i32, ptr %14, align 4, !tbaa !16
  %966 = icmp slt i32 %964, %965
  br i1 %966, label %967, label %980

967:                                              ; preds = %963
  %968 = load i32, ptr %31, align 4, !tbaa !16
  %969 = sext i32 %968 to i64
  %970 = getelementptr inbounds [3 x double], ptr %20, i64 0, i64 %969
  %971 = load double, ptr %970, align 8, !tbaa !9
  %972 = load ptr, ptr %4, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.__SMlocal_mesh, ptr %972, i32 0, i32 5
  %974 = load i32, ptr %31, align 4, !tbaa !16
  %975 = sext i32 %974 to i64
  %976 = getelementptr inbounds [3 x double], ptr %973, i64 0, i64 %975
  store double %971, ptr %976, align 8, !tbaa !9
  br label %977

977:                                              ; preds = %967
  %978 = load i32, ptr %31, align 4, !tbaa !16
  %979 = add nsw i32 %978, 1
  store i32 %979, ptr %31, align 4, !tbaa !16
  br label %963, !llvm.loop !48

980:                                              ; preds = %963
  br label %981

981:                                              ; preds = %980, %946
  br label %982

982:                                              ; preds = %981, %932
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %983 = load i32, ptr %9, align 4, !tbaa !16
  %984 = icmp eq i32 %983, 2
  br i1 %984, label %985, label %1004

985:                                              ; preds = %982
  %986 = load ptr, ptr %22, align 8, !tbaa !5
  %987 = getelementptr inbounds %struct.__SMoptimal, ptr %986, i32 0, i32 13
  %988 = load ptr, ptr %987, align 8, !tbaa !26
  %989 = getelementptr inbounds double, ptr %988, i64 0
  %990 = load double, ptr %989, align 8, !tbaa !9
  %991 = load ptr, ptr %22, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.__SMoptimal, ptr %991, i32 0, i32 10
  %993 = load ptr, ptr %992, align 8, !tbaa !25
  %994 = getelementptr inbounds double, ptr %993, i64 0
  store double %990, ptr %994, align 8, !tbaa !9
  %995 = load ptr, ptr %22, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.__SMoptimal, ptr %995, i32 0, i32 13
  %997 = load ptr, ptr %996, align 8, !tbaa !26
  %998 = getelementptr inbounds double, ptr %997, i64 1
  %999 = load double, ptr %998, align 8, !tbaa !9
  %1000 = load ptr, ptr %22, align 8, !tbaa !5
  %1001 = getelementptr inbounds %struct.__SMoptimal, ptr %1000, i32 0, i32 10
  %1002 = load ptr, ptr %1001, align 8, !tbaa !25
  %1003 = getelementptr inbounds double, ptr %1002, i64 1
  store double %999, ptr %1003, align 8, !tbaa !9
  br label %1059

1004:                                             ; preds = %982
  %1005 = load i32, ptr %9, align 4, !tbaa !16
  %1006 = icmp eq i32 %1005, 3
  br i1 %1006, label %1007, label %1035

1007:                                             ; preds = %1004
  %1008 = load ptr, ptr %22, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.__SMoptimal, ptr %1008, i32 0, i32 13
  %1010 = load ptr, ptr %1009, align 8, !tbaa !26
  %1011 = getelementptr inbounds double, ptr %1010, i64 0
  %1012 = load double, ptr %1011, align 8, !tbaa !9
  %1013 = load ptr, ptr %22, align 8, !tbaa !5
  %1014 = getelementptr inbounds %struct.__SMoptimal, ptr %1013, i32 0, i32 10
  %1015 = load ptr, ptr %1014, align 8, !tbaa !25
  %1016 = getelementptr inbounds double, ptr %1015, i64 0
  store double %1012, ptr %1016, align 8, !tbaa !9
  %1017 = load ptr, ptr %22, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.__SMoptimal, ptr %1017, i32 0, i32 13
  %1019 = load ptr, ptr %1018, align 8, !tbaa !26
  %1020 = getelementptr inbounds double, ptr %1019, i64 1
  %1021 = load double, ptr %1020, align 8, !tbaa !9
  %1022 = load ptr, ptr %22, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.__SMoptimal, ptr %1022, i32 0, i32 10
  %1024 = load ptr, ptr %1023, align 8, !tbaa !25
  %1025 = getelementptr inbounds double, ptr %1024, i64 1
  store double %1021, ptr %1025, align 8, !tbaa !9
  %1026 = load ptr, ptr %22, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.__SMoptimal, ptr %1026, i32 0, i32 13
  %1028 = load ptr, ptr %1027, align 8, !tbaa !26
  %1029 = getelementptr inbounds double, ptr %1028, i64 2
  %1030 = load double, ptr %1029, align 8, !tbaa !9
  %1031 = load ptr, ptr %22, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.__SMoptimal, ptr %1031, i32 0, i32 10
  %1033 = load ptr, ptr %1032, align 8, !tbaa !25
  %1034 = getelementptr inbounds double, ptr %1033, i64 2
  store double %1030, ptr %1034, align 8, !tbaa !9
  br label %1058

1035:                                             ; preds = %1004
  store i32 0, ptr %32, align 4, !tbaa !16
  br label %1036

1036:                                             ; preds = %1054, %1035
  %1037 = load i32, ptr %32, align 4, !tbaa !16
  %1038 = load i32, ptr %9, align 4, !tbaa !16
  %1039 = icmp slt i32 %1037, %1038
  br i1 %1039, label %1040, label %1057

1040:                                             ; preds = %1036
  %1041 = load ptr, ptr %22, align 8, !tbaa !5
  %1042 = getelementptr inbounds %struct.__SMoptimal, ptr %1041, i32 0, i32 13
  %1043 = load ptr, ptr %1042, align 8, !tbaa !26
  %1044 = load i32, ptr %32, align 4, !tbaa !16
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds double, ptr %1043, i64 %1045
  %1047 = load double, ptr %1046, align 8, !tbaa !9
  %1048 = load ptr, ptr %22, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.__SMoptimal, ptr %1048, i32 0, i32 10
  %1050 = load ptr, ptr %1049, align 8, !tbaa !25
  %1051 = load i32, ptr %32, align 4, !tbaa !16
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds double, ptr %1050, i64 %1052
  store double %1047, ptr %1053, align 8, !tbaa !9
  br label %1054

1054:                                             ; preds = %1040
  %1055 = load i32, ptr %32, align 4, !tbaa !16
  %1056 = add nsw i32 %1055, 1
  store i32 %1056, ptr %32, align 4, !tbaa !16
  br label %1036, !llvm.loop !49

1057:                                             ; preds = %1036
  br label %1058

1058:                                             ; preds = %1057, %1007
  br label %1059

1059:                                             ; preds = %1058, %985
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  %1060 = load ptr, ptr %22, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.__SMoptimal, ptr %1060, i32 0, i32 16
  %1062 = load ptr, ptr %1061, align 8, !tbaa !28
  %1063 = load ptr, ptr %22, align 8, !tbaa !5
  %1064 = getelementptr inbounds %struct.__SMoptimal, ptr %1063, i32 0, i32 14
  %1065 = load ptr, ptr %1064, align 8, !tbaa !17
  %1066 = call i32 @SMcopyActive(ptr noundef %1062, ptr noundef %1065)
  store i32 %1066, ptr %6, align 4, !tbaa !16
  %1067 = load i32, ptr %6, align 4, !tbaa !16
  %1068 = icmp ne i32 %1067, 0
  br i1 %1068, label %1069, label %1072

1069:                                             ; preds = %1059
  %1070 = load i32, ptr %6, align 4, !tbaa !16
  %1071 = call i32 @SMerror(i32 noundef 380, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %1070, i32 noundef 0, ptr noundef null)
  store i32 %1071, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

1072:                                             ; preds = %1059
  %1073 = load ptr, ptr %22, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct.__SMoptimal, ptr %1073, i32 0, i32 4
  store i32 103, ptr %1074, align 8, !tbaa !20
  store i32 101, ptr %12, align 4, !tbaa !16
  br label %1167

1075:                                             ; preds = %918
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %1076 = load i32, ptr %9, align 4, !tbaa !16
  %1077 = icmp eq i32 %1076, 2
  br i1 %1077, label %1078, label %1097

1078:                                             ; preds = %1075
  %1079 = load ptr, ptr %22, align 8, !tbaa !5
  %1080 = getelementptr inbounds %struct.__SMoptimal, ptr %1079, i32 0, i32 10
  %1081 = load ptr, ptr %1080, align 8, !tbaa !25
  %1082 = getelementptr inbounds double, ptr %1081, i64 0
  %1083 = load double, ptr %1082, align 8, !tbaa !9
  %1084 = load ptr, ptr %22, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.__SMoptimal, ptr %1084, i32 0, i32 12
  %1086 = load ptr, ptr %1085, align 8, !tbaa !41
  %1087 = getelementptr inbounds double, ptr %1086, i64 0
  store double %1083, ptr %1087, align 8, !tbaa !9
  %1088 = load ptr, ptr %22, align 8, !tbaa !5
  %1089 = getelementptr inbounds %struct.__SMoptimal, ptr %1088, i32 0, i32 10
  %1090 = load ptr, ptr %1089, align 8, !tbaa !25
  %1091 = getelementptr inbounds double, ptr %1090, i64 1
  %1092 = load double, ptr %1091, align 8, !tbaa !9
  %1093 = load ptr, ptr %22, align 8, !tbaa !5
  %1094 = getelementptr inbounds %struct.__SMoptimal, ptr %1093, i32 0, i32 12
  %1095 = load ptr, ptr %1094, align 8, !tbaa !41
  %1096 = getelementptr inbounds double, ptr %1095, i64 1
  store double %1092, ptr %1096, align 8, !tbaa !9
  br label %1152

1097:                                             ; preds = %1075
  %1098 = load i32, ptr %9, align 4, !tbaa !16
  %1099 = icmp eq i32 %1098, 3
  br i1 %1099, label %1100, label %1128

1100:                                             ; preds = %1097
  %1101 = load ptr, ptr %22, align 8, !tbaa !5
  %1102 = getelementptr inbounds %struct.__SMoptimal, ptr %1101, i32 0, i32 10
  %1103 = load ptr, ptr %1102, align 8, !tbaa !25
  %1104 = getelementptr inbounds double, ptr %1103, i64 0
  %1105 = load double, ptr %1104, align 8, !tbaa !9
  %1106 = load ptr, ptr %22, align 8, !tbaa !5
  %1107 = getelementptr inbounds %struct.__SMoptimal, ptr %1106, i32 0, i32 12
  %1108 = load ptr, ptr %1107, align 8, !tbaa !41
  %1109 = getelementptr inbounds double, ptr %1108, i64 0
  store double %1105, ptr %1109, align 8, !tbaa !9
  %1110 = load ptr, ptr %22, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.__SMoptimal, ptr %1110, i32 0, i32 10
  %1112 = load ptr, ptr %1111, align 8, !tbaa !25
  %1113 = getelementptr inbounds double, ptr %1112, i64 1
  %1114 = load double, ptr %1113, align 8, !tbaa !9
  %1115 = load ptr, ptr %22, align 8, !tbaa !5
  %1116 = getelementptr inbounds %struct.__SMoptimal, ptr %1115, i32 0, i32 12
  %1117 = load ptr, ptr %1116, align 8, !tbaa !41
  %1118 = getelementptr inbounds double, ptr %1117, i64 1
  store double %1114, ptr %1118, align 8, !tbaa !9
  %1119 = load ptr, ptr %22, align 8, !tbaa !5
  %1120 = getelementptr inbounds %struct.__SMoptimal, ptr %1119, i32 0, i32 10
  %1121 = load ptr, ptr %1120, align 8, !tbaa !25
  %1122 = getelementptr inbounds double, ptr %1121, i64 2
  %1123 = load double, ptr %1122, align 8, !tbaa !9
  %1124 = load ptr, ptr %22, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct.__SMoptimal, ptr %1124, i32 0, i32 12
  %1126 = load ptr, ptr %1125, align 8, !tbaa !41
  %1127 = getelementptr inbounds double, ptr %1126, i64 2
  store double %1123, ptr %1127, align 8, !tbaa !9
  br label %1151

1128:                                             ; preds = %1097
  store i32 0, ptr %33, align 4, !tbaa !16
  br label %1129

1129:                                             ; preds = %1147, %1128
  %1130 = load i32, ptr %33, align 4, !tbaa !16
  %1131 = load i32, ptr %9, align 4, !tbaa !16
  %1132 = icmp slt i32 %1130, %1131
  br i1 %1132, label %1133, label %1150

1133:                                             ; preds = %1129
  %1134 = load ptr, ptr %22, align 8, !tbaa !5
  %1135 = getelementptr inbounds %struct.__SMoptimal, ptr %1134, i32 0, i32 10
  %1136 = load ptr, ptr %1135, align 8, !tbaa !25
  %1137 = load i32, ptr %33, align 4, !tbaa !16
  %1138 = sext i32 %1137 to i64
  %1139 = getelementptr inbounds double, ptr %1136, i64 %1138
  %1140 = load double, ptr %1139, align 8, !tbaa !9
  %1141 = load ptr, ptr %22, align 8, !tbaa !5
  %1142 = getelementptr inbounds %struct.__SMoptimal, ptr %1141, i32 0, i32 12
  %1143 = load ptr, ptr %1142, align 8, !tbaa !41
  %1144 = load i32, ptr %33, align 4, !tbaa !16
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds double, ptr %1143, i64 %1145
  store double %1140, ptr %1146, align 8, !tbaa !9
  br label %1147

1147:                                             ; preds = %1133
  %1148 = load i32, ptr %33, align 4, !tbaa !16
  %1149 = add nsw i32 %1148, 1
  store i32 %1149, ptr %33, align 4, !tbaa !16
  br label %1129, !llvm.loop !50

1150:                                             ; preds = %1129
  br label %1151

1151:                                             ; preds = %1150, %1100
  br label %1152

1152:                                             ; preds = %1151, %1078
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  %1153 = load ptr, ptr %22, align 8, !tbaa !5
  %1154 = getelementptr inbounds %struct.__SMoptimal, ptr %1153, i32 0, i32 14
  %1155 = load ptr, ptr %1154, align 8, !tbaa !17
  %1156 = load ptr, ptr %22, align 8, !tbaa !5
  %1157 = getelementptr inbounds %struct.__SMoptimal, ptr %1156, i32 0, i32 15
  %1158 = load ptr, ptr %1157, align 8, !tbaa !43
  %1159 = call i32 @SMcopyActive(ptr noundef %1155, ptr noundef %1158)
  store i32 %1159, ptr %6, align 4, !tbaa !16
  %1160 = load i32, ptr %6, align 4, !tbaa !16
  %1161 = icmp ne i32 %1160, 0
  br i1 %1161, label %1162, label %1165

1162:                                             ; preds = %1152
  %1163 = load i32, ptr %6, align 4, !tbaa !16
  %1164 = call i32 @SMerror(i32 noundef 384, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef %1163, i32 noundef 0, ptr noundef null)
  store i32 %1164, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

1165:                                             ; preds = %1152
  %1166 = load double, ptr %17, align 8, !tbaa !9
  store double %1166, ptr %18, align 8, !tbaa !9
  br label %1167

1167:                                             ; preds = %1165, %1072
  br label %1168

1168:                                             ; preds = %1167, %893
  br label %1169

1169:                                             ; preds = %1168, %727
  br label %1170

1170:                                             ; preds = %1169, %686
  br label %1171

1171:                                             ; preds = %1170, %464, %459
  br label %213, !llvm.loop !51

1172:                                             ; preds = %213
  %1173 = load double, ptr %17, align 8, !tbaa !9
  %1174 = fcmp olt double %1173, 0.000000e+00
  br i1 %1174, label %1175, label %1181

1175:                                             ; preds = %1172
  %1176 = load ptr, ptr %22, align 8, !tbaa !5
  %1177 = getelementptr inbounds %struct.__SMoptimal, ptr %1176, i32 0, i32 4
  %1178 = load i32, ptr %1177, align 8, !tbaa !20
  %1179 = icmp eq i32 %1178, 100
  br i1 %1179, label %1180, label %1181

1180:                                             ; preds = %1175
  br label %1181

1181:                                             ; preds = %1180, %1175, %1172
  store i32 0, ptr %6, align 4, !tbaa !16
  store i32 0, ptr %3, align 4
  store i32 1, ptr %23, align 4
  br label %1182

1182:                                             ; preds = %1181, %1162, %1069, %890, %704, %672, %571, %510, %500, %479, %450, %262, %209, %41, %36
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  %1183 = load i32, ptr %3, align 4
  ret i32 %1183
}

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

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

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

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

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

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

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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !6, i64 160}
!12 = !{!"__SMlocal_mesh", !13, i64 0, !13, i64 4, !13, i64 8, !7, i64 16, !7, i64 40, !7, i64 64, !6, i64 88, !6, i64 96, !6, i64 104, !13, i64 112, !10, i64 120, !6, i64 128, !10, i64 136, !13, i64 144, !13, i64 148, !13, i64 152, !6, i64 160, !6, i64 168, !6, i64 176}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !13, i64 44}
!15 = !{!"__SMoptimal", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !10, i64 32, !13, i64 40, !13, i64 44, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !13, i64 104, !7, i64 112, !10, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !7, i64 184, !13, i64 196}
!16 = !{!13, !13, i64 0}
!17 = !{!15, !6, i64 80}
!18 = !{!15, !10, i64 136}
!19 = !{!12, !13, i64 0}
!20 = !{!15, !13, i64 16}
!21 = !{!22, !10, i64 40}
!22 = !{!"__SMparam", !13, i64 0, !13, i64 4, !13, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !13, i64 48, !13, i64 52, !13, i64 56, !10, i64 64, !10, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!15, !6, i64 48}
!26 = !{!15, !6, i64 72}
!27 = distinct !{!27, !24}
!28 = !{!15, !6, i64 96}
!29 = distinct !{!29, !24}
!30 = !{!12, !13, i64 152}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = distinct !{!34, !24}
!35 = !{!22, !10, i64 24}
!36 = !{!37, !10, i64 16}
!37 = !{!"__SMactive", !13, i64 0, !13, i64 4, !6, i64 8, !10, i64 16}
!38 = !{!15, !6, i64 160}
!39 = !{!15, !13, i64 20}
!40 = distinct !{!40, !24}
!41 = !{!15, !6, i64 64}
!42 = distinct !{!42, !24}
!43 = !{!15, !6, i64 88}
!44 = !{!22, !10, i64 32}
!45 = distinct !{!45, !24}
!46 = distinct !{!46, !24}
!47 = distinct !{!47, !24}
!48 = distinct !{!48, !24}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !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.3 = external hidden unnamed_addr constant [17 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

declare i32 @SMfindActiveSet(i32 noundef, ptr noundef, double noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local i32 @SMstepAcceptance(ptr noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  %3 = alloca i32, align 4
  %4 = alloca double, align 8
  %5 = alloca [3 x double], align 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5)
  %6 = icmp eq ptr %0, null
  br i1 %6, label %7, label %9

7:                                                ; preds = %2
  %8 = tail call i32 @SMerror(i32 noundef 205, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 56, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

9:                                                ; preds = %2
  %10 = icmp eq ptr %1, null
  br i1 %10, label %11, label %13

11:                                               ; preds = %9
  %12 = tail call i32 @SMerror(i32 noundef 206, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 56, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

13:                                               ; preds = %9
  %14 = getelementptr inbounds i8, ptr %0, i64 160
  %15 = load ptr, ptr %14, align 8, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %15, i64 44
  %17 = load i32, ptr %16, align 4, !tbaa !12
  %18 = getelementptr inbounds i8, ptr %15, i64 80
  %19 = getelementptr inbounds i8, ptr %15, i64 136
  %20 = load double, ptr %19, align 8, !tbaa !14
  %21 = load i32, ptr %0, align 8, !tbaa !15
  %22 = getelementptr inbounds i8, ptr %15, i64 16
  store i32 0, ptr %22, align 8, !tbaa !16
  %23 = getelementptr inbounds i8, ptr %1, i64 40
  %24 = load double, ptr %23, align 8, !tbaa !17
  %25 = fcmp uge double %20, %24
  br i1 %25, label %27, label %26

26:                                               ; preds = %13
  store i32 101, ptr %22, align 8, !tbaa !16
  br label %27

27:                                               ; preds = %26, %13
  %28 = icmp eq i32 %21, 2
  br i1 %28, label %29, label %32

29:                                               ; preds = %27
  %30 = getelementptr inbounds i8, ptr %0, i64 64
  %31 = load <2 x double>, ptr %30, align 8, !tbaa !19
  store <2 x double> %31, ptr %5, align 16, !tbaa !19
  br label %.loopexit410

32:                                               ; preds = %27
  %33 = icmp eq i32 %21, 3
  br i1 %33, label %38, label %.preheader409

.preheader409:                                    ; preds = %32
  %34 = icmp sgt i32 %21, 0
  br i1 %34, label %.lr.ph, label %.loopexit410

.lr.ph:                                           ; preds = %.preheader409
  %35 = getelementptr inbounds i8, ptr %0, i64 64
  %36 = zext nneg i32 %21 to i64
  %37 = shl nuw nsw i64 %36, 3
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %5, ptr nonnull align 8 %35, i64 %37, i1 false), !tbaa !19
  br label %.loopexit410

38:                                               ; preds = %32
  %39 = getelementptr inbounds i8, ptr %0, i64 64
  %40 = load <2 x double>, ptr %39, align 8, !tbaa !19
  store <2 x double> %40, ptr %5, align 16, !tbaa !19
  %41 = getelementptr inbounds i8, ptr %0, i64 80
  %42 = load double, ptr %41, align 8, !tbaa !19
  %.16.sroa_idx1056 = getelementptr inbounds i8, ptr %5, i64 16
  store double %42, ptr %.16.sroa_idx1056, align 16, !tbaa !19
  br label %.loopexit410

.loopexit410:                                     ; preds = %.lr.ph, %.preheader409, %38, %29
  %43 = icmp eq i32 %17, 2
  br i1 %43, label %44, label %53

44:                                               ; preds = %.loopexit410
  %45 = getelementptr inbounds i8, ptr %15, i64 48
  %46 = load ptr, ptr %45, align 8, !tbaa !20
  %47 = load double, ptr %46, align 8, !tbaa !19
  %48 = getelementptr inbounds i8, ptr %15, i64 72
  %49 = load ptr, ptr %48, align 8, !tbaa !21
  store double %47, ptr %49, align 8, !tbaa !19
  %50 = getelementptr inbounds i8, ptr %46, i64 8
  %51 = load double, ptr %50, align 8, !tbaa !19
  %52 = getelementptr inbounds i8, ptr %49, i64 8
  store double %51, ptr %52, align 8, !tbaa !19
  br label %.loopexit408

53:                                               ; preds = %.loopexit410
  %54 = icmp eq i32 %17, 3
  br i1 %54, label %73, label %.preheader407

.preheader407:                                    ; preds = %53
  %55 = icmp sgt i32 %17, 0
  br i1 %55, label %.lr.ph450, label %.loopexit408

.lr.ph450:                                        ; preds = %.preheader407
  %56 = getelementptr inbounds i8, ptr %15, i64 48
  %57 = load ptr, ptr %56, align 8, !tbaa !20
  %58 = getelementptr inbounds i8, ptr %15, i64 72
  %59 = load ptr, ptr %58, align 8, !tbaa !21
  %wide.trip.count = zext nneg i32 %17 to i64
  %min.iters.check = icmp ult i32 %17, 6
  %60 = ptrtoint ptr %59 to i64
  %61 = ptrtoint ptr %57 to i64
  %62 = sub i64 %60, %61
  %diff.check = icmp ult i64 %62, 32
  %or.cond944 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond944, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph450
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph450 ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %scalar.ph.prol ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %63 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.prol
  %64 = load double, ptr %63, align 8, !tbaa !19
  %65 = getelementptr inbounds double, ptr %59, i64 %indvars.iv.prol
  store double %64, ptr %65, align 8, !tbaa !19
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !22

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %66 = sub nsw i64 %indvars.iv.ph, %wide.trip.count
  %67 = icmp ugt i64 %66, -4
  br i1 %67, label %.loopexit408, label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph450
  %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 ]
  %68 = getelementptr inbounds double, ptr %57, i64 %index
  %69 = getelementptr inbounds i8, ptr %68, i64 16
  %wide.load = load <2 x double>, ptr %68, align 8, !tbaa !19
  %wide.load780 = load <2 x double>, ptr %69, align 8, !tbaa !19
  %70 = getelementptr inbounds double, ptr %59, i64 %index
  %71 = getelementptr inbounds i8, ptr %70, i64 16
  store <2 x double> %wide.load, ptr %70, align 8, !tbaa !19
  store <2 x double> %wide.load780, ptr %71, align 8, !tbaa !19
  %index.next = add nuw i64 %index, 4
  %72 = icmp eq i64 %index.next, %n.vec
  br i1 %72, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.loopexit408, label %scalar.ph.preheader

73:                                               ; preds = %53
  %74 = getelementptr inbounds i8, ptr %15, i64 48
  %75 = load ptr, ptr %74, align 8, !tbaa !20
  %76 = load double, ptr %75, align 8, !tbaa !19
  %77 = getelementptr inbounds i8, ptr %15, i64 72
  %78 = load ptr, ptr %77, align 8, !tbaa !21
  store double %76, ptr %78, align 8, !tbaa !19
  %79 = getelementptr inbounds i8, ptr %75, i64 8
  %80 = load double, ptr %79, align 8, !tbaa !19
  %81 = getelementptr inbounds i8, ptr %78, i64 8
  store double %80, ptr %81, align 8, !tbaa !19
  %82 = getelementptr inbounds i8, ptr %75, i64 16
  %83 = load double, ptr %82, align 8, !tbaa !19
  %84 = getelementptr inbounds i8, ptr %78, i64 16
  store double %83, ptr %84, align 8, !tbaa !19
  br label %.loopexit408

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %85 = getelementptr inbounds double, ptr %57, i64 %indvars.iv
  %86 = load double, ptr %85, align 8, !tbaa !19
  %87 = getelementptr inbounds double, ptr %59, i64 %indvars.iv
  store double %86, ptr %87, align 8, !tbaa !19
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %88 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next
  %89 = load double, ptr %88, align 8, !tbaa !19
  %90 = getelementptr inbounds double, ptr %59, i64 %indvars.iv.next
  store double %89, ptr %90, align 8, !tbaa !19
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %91 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next.1
  %92 = load double, ptr %91, align 8, !tbaa !19
  %93 = getelementptr inbounds double, ptr %59, i64 %indvars.iv.next.1
  store double %92, ptr %93, align 8, !tbaa !19
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %94 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next.2
  %95 = load double, ptr %94, align 8, !tbaa !19
  %96 = getelementptr inbounds double, ptr %59, i64 %indvars.iv.next.2
  store double %95, ptr %96, align 8, !tbaa !19
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %.loopexit408, label %scalar.ph, !llvm.loop !28

.loopexit408:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %.preheader407, %73, %44
  %97 = load ptr, ptr %18, align 8, !tbaa !29
  %98 = getelementptr inbounds i8, ptr %15, i64 96
  %99 = load ptr, ptr %98, align 8, !tbaa !30
  %100 = tail call i32 @SMcopyActive(ptr noundef %97, ptr noundef %99)
  %.not = icmp eq i32 %100, 0
  br i1 %.not, label %.preheader405, label %131

.preheader405:                                    ; preds = %.loopexit408
  br i1 %25, label %.lr.ph485, label %.loopexit406

.lr.ph485:                                        ; preds = %.preheader405
  %101 = icmp sgt i32 %21, 0
  %102 = getelementptr i8, ptr %15, i64 112
  %103 = getelementptr i8, ptr %0, i64 64
  %104 = getelementptr inbounds i8, ptr %0, i64 152
  %105 = icmp eq i32 %21, 3
  %106 = getelementptr inbounds i8, ptr %0, i64 80
  %107 = icmp eq i32 %17, 3
  %108 = icmp sgt i32 %17, 0
  %109 = getelementptr inbounds i8, ptr %15, i64 72
  %110 = getelementptr inbounds i8, ptr %15, i64 48
  %111 = getelementptr inbounds i8, ptr %1, i64 24
  %112 = getelementptr inbounds i8, ptr %15, i64 160
  %113 = getelementptr inbounds i8, ptr %15, i64 20
  %114 = getelementptr inbounds i8, ptr %1, i64 32
  %115 = getelementptr inbounds i8, ptr %15, i64 64
  %116 = getelementptr inbounds i8, ptr %15, i64 88
  %117 = zext i32 %21 to i64
  %118 = shl nuw nsw i64 %117, 3
  %.0. = load <2 x double>, ptr %5, align 16
  %.16.sroa_idx1057 = getelementptr inbounds i8, ptr %5, i64 16
  %.16..16..pre = load double, ptr %.16.sroa_idx1057, align 16
  %wide.trip.count537 = zext i32 %17 to i64
  %wide.trip.count547 = zext nneg i32 %17 to i64
  %119 = shl nuw nsw i64 %117, 3
  %120 = getelementptr i8, ptr %0, i64 %119
  %scevgep = getelementptr i8, ptr %120, i64 64
  %121 = getelementptr i8, ptr %15, i64 %119
  %scevgep797 = getelementptr i8, ptr %121, i64 112
  %122 = shl nuw nsw i64 %117, 3
  %123 = getelementptr i8, ptr %0, i64 %122
  %scevgep829 = getelementptr i8, ptr %123, i64 64
  %124 = getelementptr i8, ptr %15, i64 %122
  %scevgep830 = getelementptr i8, ptr %124, i64 112
  %125 = shl nuw nsw i64 %117, 3
  %126 = getelementptr i8, ptr %0, i64 %125
  %scevgep852 = getelementptr i8, ptr %126, i64 64
  %127 = getelementptr i8, ptr %15, i64 %125
  %scevgep853 = getelementptr i8, ptr %127, i64 112
  %min.iters.check859 = icmp ult i32 %21, 4
  %bound0854 = icmp ult ptr %103, %scevgep853
  %bound1855 = icmp ult ptr %102, %scevgep852
  %found.conflict856 = and i1 %bound0854, %bound1855
  %n.vec862 = and i64 %117, 2147483644
  %cmp.n873 = icmp eq i64 %n.vec862, %117
  %xtraiter1029 = and i64 %117, 1
  %lcmp.mod1030.not = icmp eq i64 %xtraiter1029, 0
  %128 = add nsw i64 %117, -1
  %min.iters.check836 = icmp ult i32 %21, 4
  %bound0831 = icmp ult ptr %103, %scevgep830
  %bound1832 = icmp ult ptr %102, %scevgep829
  %found.conflict833 = and i1 %bound0831, %bound1832
  %n.vec839 = and i64 %117, 2147483644
  %cmp.n850 = icmp eq i64 %n.vec839, %117
  %xtraiter1032 = and i64 %117, 1
  %lcmp.mod1033.not = icmp eq i64 %xtraiter1032, 0
  %129 = add nsw i64 %117, -1
  %min.iters.check817 = icmp ult i32 %17, 4
  %n.vec820 = and i64 %wide.trip.count537, 2147483644
  %cmp.n827 = icmp eq i64 %n.vec820, %wide.trip.count537
  %xtraiter1035 = and i64 %wide.trip.count537, 3
  %lcmp.mod1036.not = icmp eq i64 %xtraiter1035, 0
  %min.iters.check800 = icmp ult i32 %21, 4
  %bound0 = icmp ult ptr %103, %scevgep797
  %bound1 = icmp ult ptr %102, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %n.vec803 = and i64 %117, 2147483644
  %cmp.n812 = icmp eq i64 %n.vec803, %117
  %xtraiter1038 = and i64 %117, 1
  %lcmp.mod1039.not = icmp eq i64 %xtraiter1038, 0
  %130 = add nsw i64 %117, -1
  %min.iters.check785 = icmp ult i32 %17, 4
  %n.vec788 = and i64 %wide.trip.count537, 2147483644
  %cmp.n795 = icmp eq i64 %n.vec788, %wide.trip.count537
  %xtraiter1041 = and i64 %wide.trip.count537, 3
  %lcmp.mod1042.not = icmp eq i64 %xtraiter1041, 0
  br label %133

131:                                              ; preds = %.loopexit408
  %132 = tail call i32 @SMerror(i32 noundef 229, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %100, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

133:                                              ; preds = %.lr.ph485, %597
  %.0326484 = phi double [ -1.000000e+300, %.lr.ph485 ], [ %.1, %597 ]
  %.0329482 = phi double [ %20, %.lr.ph485 ], [ %.3, %597 ]
  %.0341481 = phi i32 [ 0, %.lr.ph485 ], [ %134, %597 ]
  %134 = add nuw nsw i32 %.0341481, 1
  %135 = icmp ugt i32 %.0341481, 98
  %spec.select = select i1 %135, i32 101, i32 102
  %136 = load double, ptr %23, align 8, !tbaa !17
  %137 = fcmp ogt double %.0329482, %136
  br i1 %137, label %.preheader391, label %.critedge

.preheader391:                                    ; preds = %133, %250
  %.3340460778 = phi i32 [ %.4, %250 ], [ %spec.select, %133 ]
  %.1330461777 = phi double [ %193, %250 ], [ %.0329482, %133 ]
  br i1 %101, label %.lr.ph452.preheader, label %._crit_edge

.lr.ph452.preheader:                              ; preds = %.preheader391
  %brmerge = select i1 %min.iters.check859, i1 true, i1 %found.conflict856
  br i1 %brmerge, label %.lr.ph452.preheader961, label %vector.ph860

vector.ph860:                                     ; preds = %.lr.ph452.preheader
  %broadcast.splatinsert870 = insertelement <2 x double> poison, double %.1330461777, i64 0
  %broadcast.splat871 = shufflevector <2 x double> %broadcast.splatinsert870, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body864

vector.body864:                                   ; preds = %vector.body864, %vector.ph860
  %index865 = phi i64 [ 0, %vector.ph860 ], [ %index.next872, %vector.body864 ]
  %138 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %index865
  %139 = getelementptr inbounds i8, ptr %138, i64 16
  %wide.load866 = load <2 x double>, ptr %138, align 8, !tbaa !19, !alias.scope !31
  %wide.load867 = load <2 x double>, ptr %139, align 8, !tbaa !19, !alias.scope !31
  %140 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %index865
  %141 = getelementptr inbounds i8, ptr %140, i64 16
  %wide.load868 = load <2 x double>, ptr %140, align 8, !tbaa !19, !alias.scope !34, !noalias !31
  %wide.load869 = load <2 x double>, ptr %141, align 8, !tbaa !19, !alias.scope !34, !noalias !31
  %142 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat871, <2 x double> %wide.load866, <2 x double> %wide.load868)
  %143 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat871, <2 x double> %wide.load867, <2 x double> %wide.load869)
  store <2 x double> %142, ptr %140, align 8, !tbaa !19, !alias.scope !34, !noalias !31
  store <2 x double> %143, ptr %141, align 8, !tbaa !19, !alias.scope !34, !noalias !31
  %index.next872 = add nuw i64 %index865, 4
  %144 = icmp eq i64 %index.next872, %n.vec862
  br i1 %144, label %middle.block857, label %vector.body864, !llvm.loop !36

middle.block857:                                  ; preds = %vector.body864
  br i1 %cmp.n873, label %._crit_edge, label %.lr.ph452.preheader961

.lr.ph452.preheader961:                           ; preds = %.lr.ph452.preheader, %middle.block857
  %indvars.iv521.ph = phi i64 [ 0, %.lr.ph452.preheader ], [ %n.vec862, %middle.block857 ]
  br i1 %lcmp.mod1030.not, label %.lr.ph452.prol.loopexit, label %.lr.ph452.prol

.lr.ph452.prol:                                   ; preds = %.lr.ph452.preheader961
  %145 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv521.ph
  %146 = load double, ptr %145, align 8, !tbaa !19
  %147 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv521.ph
  %148 = load double, ptr %147, align 8, !tbaa !19
  %149 = call double @llvm.fmuladd.f64(double %.1330461777, double %146, double %148)
  store double %149, ptr %147, align 8, !tbaa !19
  %indvars.iv.next522.prol = or disjoint i64 %indvars.iv521.ph, 1
  br label %.lr.ph452.prol.loopexit

.lr.ph452.prol.loopexit:                          ; preds = %.lr.ph452.prol, %.lr.ph452.preheader961
  %indvars.iv521.unr = phi i64 [ %indvars.iv521.ph, %.lr.ph452.preheader961 ], [ %indvars.iv.next522.prol, %.lr.ph452.prol ]
  %150 = icmp eq i64 %indvars.iv521.ph, %128
  br i1 %150, label %._crit_edge, label %.lr.ph452

.lr.ph452:                                        ; preds = %.lr.ph452.prol.loopexit, %.lr.ph452
  %indvars.iv521 = phi i64 [ %indvars.iv.next522.1, %.lr.ph452 ], [ %indvars.iv521.unr, %.lr.ph452.prol.loopexit ]
  %151 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv521
  %152 = load double, ptr %151, align 8, !tbaa !19
  %153 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv521
  %154 = load double, ptr %153, align 8, !tbaa !19
  %155 = call double @llvm.fmuladd.f64(double %.1330461777, double %152, double %154)
  store double %155, ptr %153, align 8, !tbaa !19
  %indvars.iv.next522 = add nuw nsw i64 %indvars.iv521, 1
  %156 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv.next522
  %157 = load double, ptr %156, align 8, !tbaa !19
  %158 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv.next522
  %159 = load double, ptr %158, align 8, !tbaa !19
  %160 = call double @llvm.fmuladd.f64(double %.1330461777, double %157, double %159)
  store double %160, ptr %158, align 8, !tbaa !19
  %indvars.iv.next522.1 = add nuw nsw i64 %indvars.iv521, 2
  %exitcond525.not.1 = icmp eq i64 %indvars.iv.next522.1, %117
  br i1 %exitcond525.not.1, label %._crit_edge, label %.lr.ph452, !llvm.loop !37

._crit_edge:                                      ; preds = %.lr.ph452.prol.loopexit, %.lr.ph452, %middle.block857, %.preheader391
  store i32 1, ptr %3, align 4, !tbaa !38
  %161 = call i32 @SMvalidMesh(ptr noundef nonnull %0, ptr noundef nonnull %3) #6
  %.not371 = icmp eq i32 %161, 0
  br i1 %.not371, label %164, label %162

162:                                              ; preds = %._crit_edge
  %163 = call i32 @SMerror(i32 noundef 248, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %161, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

164:                                              ; preds = %._crit_edge
  %165 = load i32, ptr %3, align 4, !tbaa !38
  %.not372 = icmp eq i32 %165, 0
  br i1 %.not372, label %166, label %.critedge.thread638

166:                                              ; preds = %164
  %167 = load i32, ptr %104, align 8, !tbaa !39
  %168 = icmp eq i32 %167, 1
  br i1 %168, label %.preheader390, label %.critedge.thread

.preheader390:                                    ; preds = %166
  br i1 %101, label %.lr.ph454, label %._crit_edge455

.lr.ph454:                                        ; preds = %.preheader390
  %169 = fneg double %.1330461777
  %brmerge1125 = select i1 %min.iters.check836, i1 true, i1 %found.conflict833
  br i1 %brmerge1125, label %scalar.ph835.preheader, label %vector.ph837

vector.ph837:                                     ; preds = %.lr.ph454
  %broadcast.splatinsert847 = insertelement <2 x double> poison, double %169, i64 0
  %broadcast.splat848 = shufflevector <2 x double> %broadcast.splatinsert847, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body841

vector.body841:                                   ; preds = %vector.body841, %vector.ph837
  %index842 = phi i64 [ 0, %vector.ph837 ], [ %index.next849, %vector.body841 ]
  %170 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %index842
  %171 = getelementptr inbounds i8, ptr %170, i64 16
  %wide.load843 = load <2 x double>, ptr %170, align 8, !tbaa !19, !alias.scope !40
  %wide.load844 = load <2 x double>, ptr %171, align 8, !tbaa !19, !alias.scope !40
  %172 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %index842
  %173 = getelementptr inbounds i8, ptr %172, i64 16
  %wide.load845 = load <2 x double>, ptr %172, align 8, !tbaa !19, !alias.scope !43, !noalias !40
  %wide.load846 = load <2 x double>, ptr %173, align 8, !tbaa !19, !alias.scope !43, !noalias !40
  %174 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat848, <2 x double> %wide.load843, <2 x double> %wide.load845)
  %175 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat848, <2 x double> %wide.load844, <2 x double> %wide.load846)
  store <2 x double> %174, ptr %172, align 8, !tbaa !19, !alias.scope !43, !noalias !40
  store <2 x double> %175, ptr %173, align 8, !tbaa !19, !alias.scope !43, !noalias !40
  %index.next849 = add nuw i64 %index842, 4
  %176 = icmp eq i64 %index.next849, %n.vec839
  br i1 %176, label %middle.block834, label %vector.body841, !llvm.loop !45

middle.block834:                                  ; preds = %vector.body841
  br i1 %cmp.n850, label %._crit_edge455, label %scalar.ph835.preheader

scalar.ph835.preheader:                           ; preds = %.lr.ph454, %middle.block834
  %indvars.iv526.ph = phi i64 [ 0, %.lr.ph454 ], [ %n.vec839, %middle.block834 ]
  br i1 %lcmp.mod1033.not, label %scalar.ph835.prol.loopexit, label %scalar.ph835.prol

scalar.ph835.prol:                                ; preds = %scalar.ph835.preheader
  %177 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv526.ph
  %178 = load double, ptr %177, align 8, !tbaa !19
  %179 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv526.ph
  %180 = load double, ptr %179, align 8, !tbaa !19
  %181 = call double @llvm.fmuladd.f64(double %169, double %178, double %180)
  store double %181, ptr %179, align 8, !tbaa !19
  %indvars.iv.next527.prol = or disjoint i64 %indvars.iv526.ph, 1
  br label %scalar.ph835.prol.loopexit

scalar.ph835.prol.loopexit:                       ; preds = %scalar.ph835.prol, %scalar.ph835.preheader
  %indvars.iv526.unr = phi i64 [ %indvars.iv526.ph, %scalar.ph835.preheader ], [ %indvars.iv.next527.prol, %scalar.ph835.prol ]
  %182 = icmp eq i64 %indvars.iv526.ph, %129
  br i1 %182, label %._crit_edge455, label %scalar.ph835

scalar.ph835:                                     ; preds = %scalar.ph835.prol.loopexit, %scalar.ph835
  %indvars.iv526 = phi i64 [ %indvars.iv.next527.1, %scalar.ph835 ], [ %indvars.iv526.unr, %scalar.ph835.prol.loopexit ]
  %183 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv526
  %184 = load double, ptr %183, align 8, !tbaa !19
  %185 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv526
  %186 = load double, ptr %185, align 8, !tbaa !19
  %187 = call double @llvm.fmuladd.f64(double %169, double %184, double %186)
  store double %187, ptr %185, align 8, !tbaa !19
  %indvars.iv.next527 = add nuw nsw i64 %indvars.iv526, 1
  %188 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv.next527
  %189 = load double, ptr %188, align 8, !tbaa !19
  %190 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv.next527
  %191 = load double, ptr %190, align 8, !tbaa !19
  %192 = call double @llvm.fmuladd.f64(double %169, double %189, double %191)
  store double %192, ptr %190, align 8, !tbaa !19
  %indvars.iv.next527.1 = add nuw nsw i64 %indvars.iv526, 2
  %exitcond530.not.1 = icmp eq i64 %indvars.iv.next527.1, %117
  br i1 %exitcond530.not.1, label %._crit_edge455, label %scalar.ph835, !llvm.loop !46

._crit_edge455:                                   ; preds = %scalar.ph835.prol.loopexit, %scalar.ph835, %middle.block834, %.preheader390
  %193 = fmul double %.1330461777, 5.000000e-01
  store double %193, ptr %19, align 8, !tbaa !14
  %194 = load double, ptr %23, align 8, !tbaa !17
  %195 = fcmp olt double %193, %194
  br i1 %195, label %196, label %250

196:                                              ; preds = %._crit_edge455
  store i32 103, ptr %22, align 8, !tbaa !16
  br i1 %28, label %197, label %198

197:                                              ; preds = %196
  store <2 x double> %.0., ptr %103, align 8, !tbaa !19
  br label %.loopexit389

198:                                              ; preds = %196
  br i1 %105, label %199, label %.preheader388

.preheader388:                                    ; preds = %198
  br i1 %101, label %.lr.ph457.preheader, label %.loopexit389

.lr.ph457.preheader:                              ; preds = %.preheader388
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %103, ptr nonnull align 16 %5, i64 %118, i1 false), !tbaa !19
  br label %.loopexit389

199:                                              ; preds = %198
  store <2 x double> %.0., ptr %103, align 8, !tbaa !19
  store double %.16..16..pre, ptr %106, align 8, !tbaa !19
  br label %.loopexit389

.loopexit389:                                     ; preds = %.lr.ph457.preheader, %.preheader388, %199, %197
  br i1 %43, label %200, label %207

200:                                              ; preds = %.loopexit389
  %201 = load ptr, ptr %109, align 8, !tbaa !21
  %202 = load double, ptr %201, align 8, !tbaa !19
  %203 = load ptr, ptr %110, align 8, !tbaa !20
  store double %202, ptr %203, align 8, !tbaa !19
  %204 = getelementptr inbounds i8, ptr %201, i64 8
  %205 = load double, ptr %204, align 8, !tbaa !19
  %206 = getelementptr inbounds i8, ptr %203, i64 8
  store double %205, ptr %206, align 8, !tbaa !19
  br label %.loopexit

207:                                              ; preds = %.loopexit389
  br i1 %107, label %223, label %.preheader

.preheader:                                       ; preds = %207
  br i1 %108, label %.lr.ph459, label %.loopexit

.lr.ph459:                                        ; preds = %.preheader
  %208 = load ptr, ptr %109, align 8, !tbaa !21
  %209 = load ptr, ptr %110, align 8, !tbaa !20
  %210 = ptrtoint ptr %209 to i64
  %211 = ptrtoint ptr %208 to i64
  %212 = sub i64 %210, %211
  %diff.check814 = icmp ult i64 %212, 32
  %or.cond947 = select i1 %min.iters.check817, i1 true, i1 %diff.check814
  br i1 %or.cond947, label %scalar.ph816.preheader, label %vector.body822

scalar.ph816.preheader:                           ; preds = %middle.block815, %.lr.ph459
  %indvars.iv534.ph = phi i64 [ 0, %.lr.ph459 ], [ %n.vec820, %middle.block815 ]
  br i1 %lcmp.mod1036.not, label %scalar.ph816.prol.loopexit, label %scalar.ph816.prol

scalar.ph816.prol:                                ; preds = %scalar.ph816.preheader, %scalar.ph816.prol
  %indvars.iv534.prol = phi i64 [ %indvars.iv.next535.prol, %scalar.ph816.prol ], [ %indvars.iv534.ph, %scalar.ph816.preheader ]
  %prol.iter1037 = phi i64 [ %prol.iter1037.next, %scalar.ph816.prol ], [ 0, %scalar.ph816.preheader ]
  %213 = getelementptr inbounds double, ptr %208, i64 %indvars.iv534.prol
  %214 = load double, ptr %213, align 8, !tbaa !19
  %215 = getelementptr inbounds double, ptr %209, i64 %indvars.iv534.prol
  store double %214, ptr %215, align 8, !tbaa !19
  %indvars.iv.next535.prol = add nuw nsw i64 %indvars.iv534.prol, 1
  %prol.iter1037.next = add i64 %prol.iter1037, 1
  %prol.iter1037.cmp.not = icmp eq i64 %prol.iter1037.next, %xtraiter1035
  br i1 %prol.iter1037.cmp.not, label %scalar.ph816.prol.loopexit, label %scalar.ph816.prol, !llvm.loop !47

scalar.ph816.prol.loopexit:                       ; preds = %scalar.ph816.prol, %scalar.ph816.preheader
  %indvars.iv534.unr = phi i64 [ %indvars.iv534.ph, %scalar.ph816.preheader ], [ %indvars.iv.next535.prol, %scalar.ph816.prol ]
  %216 = sub nsw i64 %indvars.iv534.ph, %wide.trip.count537
  %217 = icmp ugt i64 %216, -4
  br i1 %217, label %.loopexit, label %scalar.ph816

vector.body822:                                   ; preds = %.lr.ph459, %vector.body822
  %index823 = phi i64 [ %index.next826, %vector.body822 ], [ 0, %.lr.ph459 ]
  %218 = getelementptr inbounds double, ptr %208, i64 %index823
  %219 = getelementptr inbounds i8, ptr %218, i64 16
  %wide.load824 = load <2 x double>, ptr %218, align 8, !tbaa !19
  %wide.load825 = load <2 x double>, ptr %219, align 8, !tbaa !19
  %220 = getelementptr inbounds double, ptr %209, i64 %index823
  %221 = getelementptr inbounds i8, ptr %220, i64 16
  store <2 x double> %wide.load824, ptr %220, align 8, !tbaa !19
  store <2 x double> %wide.load825, ptr %221, align 8, !tbaa !19
  %index.next826 = add nuw i64 %index823, 4
  %222 = icmp eq i64 %index.next826, %n.vec820
  br i1 %222, label %middle.block815, label %vector.body822, !llvm.loop !48

middle.block815:                                  ; preds = %vector.body822
  br i1 %cmp.n827, label %.loopexit, label %scalar.ph816.preheader

223:                                              ; preds = %207
  %224 = load ptr, ptr %109, align 8, !tbaa !21
  %225 = load double, ptr %224, align 8, !tbaa !19
  %226 = load ptr, ptr %110, align 8, !tbaa !20
  store double %225, ptr %226, align 8, !tbaa !19
  %227 = getelementptr inbounds i8, ptr %224, i64 8
  %228 = load double, ptr %227, align 8, !tbaa !19
  %229 = getelementptr inbounds i8, ptr %226, i64 8
  store double %228, ptr %229, align 8, !tbaa !19
  %230 = getelementptr inbounds i8, ptr %224, i64 16
  %231 = load double, ptr %230, align 8, !tbaa !19
  %232 = getelementptr inbounds i8, ptr %226, i64 16
  store double %231, ptr %232, align 8, !tbaa !19
  br label %.loopexit

scalar.ph816:                                     ; preds = %scalar.ph816.prol.loopexit, %scalar.ph816
  %indvars.iv534 = phi i64 [ %indvars.iv.next535.3, %scalar.ph816 ], [ %indvars.iv534.unr, %scalar.ph816.prol.loopexit ]
  %233 = getelementptr inbounds double, ptr %208, i64 %indvars.iv534
  %234 = load double, ptr %233, align 8, !tbaa !19
  %235 = getelementptr inbounds double, ptr %209, i64 %indvars.iv534
  store double %234, ptr %235, align 8, !tbaa !19
  %indvars.iv.next535 = add nuw nsw i64 %indvars.iv534, 1
  %236 = getelementptr inbounds double, ptr %208, i64 %indvars.iv.next535
  %237 = load double, ptr %236, align 8, !tbaa !19
  %238 = getelementptr inbounds double, ptr %209, i64 %indvars.iv.next535
  store double %237, ptr %238, align 8, !tbaa !19
  %indvars.iv.next535.1 = add nuw nsw i64 %indvars.iv534, 2
  %239 = getelementptr inbounds double, ptr %208, i64 %indvars.iv.next535.1
  %240 = load double, ptr %239, align 8, !tbaa !19
  %241 = getelementptr inbounds double, ptr %209, i64 %indvars.iv.next535.1
  store double %240, ptr %241, align 8, !tbaa !19
  %indvars.iv.next535.2 = add nuw nsw i64 %indvars.iv534, 3
  %242 = getelementptr inbounds double, ptr %208, i64 %indvars.iv.next535.2
  %243 = load double, ptr %242, align 8, !tbaa !19
  %244 = getelementptr inbounds double, ptr %209, i64 %indvars.iv.next535.2
  store double %243, ptr %244, align 8, !tbaa !19
  %indvars.iv.next535.3 = add nuw nsw i64 %indvars.iv534, 4
  %exitcond538.not.3 = icmp eq i64 %indvars.iv.next535.3, %wide.trip.count537
  br i1 %exitcond538.not.3, label %.loopexit, label %scalar.ph816, !llvm.loop !49

.loopexit:                                        ; preds = %scalar.ph816.prol.loopexit, %scalar.ph816, %middle.block815, %.preheader, %223, %200
  %245 = load ptr, ptr %98, align 8, !tbaa !30
  %246 = load ptr, ptr %18, align 8, !tbaa !29
  %247 = call i32 @SMcopyActive(ptr noundef %245, ptr noundef %246)
  %.not373 = icmp eq i32 %247, 0
  br i1 %.not373, label %250, label %248

248:                                              ; preds = %.loopexit
  %249 = call i32 @SMerror(i32 noundef 270, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %247, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

250:                                              ; preds = %._crit_edge455, %.loopexit
  %.4 = phi i32 [ 101, %.loopexit ], [ %.3340460778, %._crit_edge455 ]
  %251 = load double, ptr %23, align 8, !tbaa !17
  %252 = fcmp ogt double %193, %251
  br i1 %252, label %.preheader391, label %.critedge, !llvm.loop !50

.critedge:                                        ; preds = %250, %133
  %.1330461.lcssa = phi double [ %.0329482, %133 ], [ %193, %250 ]
  %.3340460.lcssa = phi i32 [ %spec.select, %133 ], [ %.4, %250 ]
  %.pr = load i32, ptr %3, align 4, !tbaa !38
  %.not374 = icmp eq i32 %.pr, 0
  br i1 %.not374, label %thread-pre-split, label %.critedge.thread638

thread-pre-split:                                 ; preds = %.critedge
  %.pr640 = load i32, ptr %104, align 8, !tbaa !39
  br label %.critedge.thread

.critedge.thread:                                 ; preds = %166, %thread-pre-split
  %.1330461721 = phi double [ %.1330461.lcssa, %thread-pre-split ], [ %.1330461777, %166 ]
  %.3340460715 = phi i32 [ %.3340460.lcssa, %thread-pre-split ], [ %.3340460778, %166 ]
  %253 = phi i32 [ %.pr640, %thread-pre-split ], [ %167, %166 ]
  %254 = icmp eq i32 %253, 0
  br i1 %254, label %.critedge.thread638, label %597

.critedge.thread638:                              ; preds = %164, %.critedge.thread, %.critedge
  %.1330461720 = phi double [ %.1330461721, %.critedge.thread ], [ %.1330461.lcssa, %.critedge ], [ %.1330461777, %164 ]
  %.3340460714 = phi i32 [ %.3340460715, %.critedge.thread ], [ %.3340460.lcssa, %.critedge ], [ %.3340460778, %164 ]
  %255 = load double, ptr %23, align 8, !tbaa !17
  %256 = fcmp ogt double %.1330461720, %255
  br i1 %256, label %257, label %597

257:                                              ; preds = %.critedge.thread638
  %258 = load ptr, ptr %110, align 8, !tbaa !20
  %259 = call i32 @SMcomputeFunction(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef %258) #6
  %.not375 = icmp eq i32 %259, 0
  br i1 %.not375, label %262, label %260

260:                                              ; preds = %257
  %261 = call i32 @SMerror(i32 noundef 279, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %259, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

262:                                              ; preds = %257
  %263 = load ptr, ptr %14, align 8, !tbaa !5
  %264 = getelementptr inbounds i8, ptr %263, i64 44
  %265 = load i32, ptr %264, align 4, !tbaa !12
  %266 = load ptr, ptr %110, align 8, !tbaa !20
  %267 = load double, ptr %111, align 8, !tbaa !51
  %268 = load ptr, ptr %18, align 8, !tbaa !29
  %269 = call i32 @SMfindActiveSet(i32 noundef %265, ptr noundef %266, double noundef %267, ptr noundef %268) #6
  %.not376 = icmp eq i32 %269, 0
  br i1 %.not376, label %272, label %270

270:                                              ; preds = %262
  %271 = call i32 @SMerror(i32 noundef 282, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %269, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

272:                                              ; preds = %262
  %273 = load ptr, ptr %14, align 8, !tbaa !5
  %274 = call i32 @SMgetMinEstimate(ptr noundef %273, ptr noundef nonnull %4)
  %.not377 = icmp eq i32 %274, 0
  br i1 %.not377, label %277, label %275

275:                                              ; preds = %272
  %276 = call i32 @SMerror(i32 noundef 286, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %274, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

277:                                              ; preds = %272
  %278 = load ptr, ptr %18, align 8, !tbaa !29
  %279 = getelementptr inbounds i8, ptr %278, i64 16
  %280 = load double, ptr %279, align 8, !tbaa !52
  %281 = load ptr, ptr %112, align 8, !tbaa !54
  %282 = load i32, ptr %113, align 4, !tbaa !55
  %283 = sext i32 %282 to i64
  %284 = getelementptr double, ptr %281, i64 %283
  %285 = getelementptr i8, ptr %284, i64 -8
  %286 = load double, ptr %285, align 8, !tbaa !19
  %287 = fsub double %280, %286
  %288 = fcmp ogt double %.0326484, %287
  %289 = fcmp ogt double %.0326484, 0.000000e+00
  %or.cond = and i1 %289, %288
  br i1 %or.cond, label %.preheader394, label %381

.preheader394:                                    ; preds = %277
  br i1 %101, label %.lr.ph477.preheader, label %._crit_edge478

.lr.ph477.preheader:                              ; preds = %.preheader394
  %min.iters.check912 = icmp ult i32 %21, 8
  br i1 %min.iters.check912, label %.lr.ph477.preheader960, label %vector.memcheck904

vector.memcheck904:                               ; preds = %.lr.ph477.preheader
  %290 = shl nuw nsw i64 %117, 3
  %291 = getelementptr i8, ptr %0, i64 %290
  %scevgep905 = getelementptr i8, ptr %291, i64 64
  %292 = getelementptr i8, ptr %15, i64 %290
  %scevgep906 = getelementptr i8, ptr %292, i64 112
  %bound0907 = icmp ult ptr %103, %scevgep906
  %bound1908 = icmp ult ptr %102, %scevgep905
  %found.conflict909 = and i1 %bound0907, %bound1908
  br i1 %found.conflict909, label %.lr.ph477.preheader960, label %vector.ph913

vector.ph913:                                     ; preds = %vector.memcheck904
  %n.vec915 = and i64 %117, 2147483644
  %broadcast.splatinsert923 = insertelement <2 x double> poison, double %.1330461720, i64 0
  %broadcast.splat924 = shufflevector <2 x double> %broadcast.splatinsert923, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body917

vector.body917:                                   ; preds = %vector.body917, %vector.ph913
  %index918 = phi i64 [ 0, %vector.ph913 ], [ %index.next925, %vector.body917 ]
  %293 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %index918
  %294 = getelementptr inbounds i8, ptr %293, i64 16
  %wide.load919 = load <2 x double>, ptr %293, align 8, !tbaa !19, !alias.scope !56
  %wide.load920 = load <2 x double>, ptr %294, align 8, !tbaa !19, !alias.scope !56
  %295 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %index918
  %296 = getelementptr inbounds i8, ptr %295, i64 16
  %wide.load921 = load <2 x double>, ptr %295, align 8, !tbaa !19, !alias.scope !59, !noalias !56
  %wide.load922 = load <2 x double>, ptr %296, align 8, !tbaa !19, !alias.scope !59, !noalias !56
  %297 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat924, <2 x double> %wide.load919, <2 x double> %wide.load921)
  %298 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat924, <2 x double> %wide.load920, <2 x double> %wide.load922)
  store <2 x double> %297, ptr %295, align 8, !tbaa !19, !alias.scope !59, !noalias !56
  store <2 x double> %298, ptr %296, align 8, !tbaa !19, !alias.scope !59, !noalias !56
  %index.next925 = add nuw i64 %index918, 4
  %299 = icmp eq i64 %index.next925, %n.vec915
  br i1 %299, label %middle.block910, label %vector.body917, !llvm.loop !61

middle.block910:                                  ; preds = %vector.body917
  %cmp.n926 = icmp eq i64 %n.vec915, %117
  br i1 %cmp.n926, label %._crit_edge478, label %.lr.ph477.preheader960

.lr.ph477.preheader960:                           ; preds = %middle.block910, %vector.memcheck904, %.lr.ph477.preheader
  %indvars.iv565.ph = phi i64 [ 0, %vector.memcheck904 ], [ 0, %.lr.ph477.preheader ], [ %n.vec915, %middle.block910 ]
  %xtraiter1050 = and i64 %117, 1
  %lcmp.mod1051.not = icmp eq i64 %xtraiter1050, 0
  br i1 %lcmp.mod1051.not, label %.lr.ph477.prol.loopexit, label %.lr.ph477.prol

.lr.ph477.prol:                                   ; preds = %.lr.ph477.preheader960
  %300 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv565.ph
  %301 = load double, ptr %300, align 8, !tbaa !19
  %302 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv565.ph
  %303 = load double, ptr %302, align 8, !tbaa !19
  %304 = call double @llvm.fmuladd.f64(double %.1330461720, double %301, double %303)
  store double %304, ptr %302, align 8, !tbaa !19
  %indvars.iv.next566.prol = or disjoint i64 %indvars.iv565.ph, 1
  br label %.lr.ph477.prol.loopexit

.lr.ph477.prol.loopexit:                          ; preds = %.lr.ph477.prol, %.lr.ph477.preheader960
  %indvars.iv565.unr = phi i64 [ %indvars.iv565.ph, %.lr.ph477.preheader960 ], [ %indvars.iv.next566.prol, %.lr.ph477.prol ]
  %305 = add nsw i64 %117, -1
  %306 = icmp eq i64 %indvars.iv565.ph, %305
  br i1 %306, label %._crit_edge478, label %.lr.ph477

.lr.ph477:                                        ; preds = %.lr.ph477.prol.loopexit, %.lr.ph477
  %indvars.iv565 = phi i64 [ %indvars.iv.next566.1, %.lr.ph477 ], [ %indvars.iv565.unr, %.lr.ph477.prol.loopexit ]
  %307 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv565
  %308 = load double, ptr %307, align 8, !tbaa !19
  %309 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv565
  %310 = load double, ptr %309, align 8, !tbaa !19
  %311 = call double @llvm.fmuladd.f64(double %.1330461720, double %308, double %310)
  store double %311, ptr %309, align 8, !tbaa !19
  %indvars.iv.next566 = add nuw nsw i64 %indvars.iv565, 1
  %312 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv.next566
  %313 = load double, ptr %312, align 8, !tbaa !19
  %314 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv.next566
  %315 = load double, ptr %314, align 8, !tbaa !19
  %316 = call double @llvm.fmuladd.f64(double %.1330461720, double %313, double %315)
  store double %316, ptr %314, align 8, !tbaa !19
  %indvars.iv.next566.1 = add nuw nsw i64 %indvars.iv565, 2
  %exitcond569.not.1 = icmp eq i64 %indvars.iv.next566.1, %117
  br i1 %exitcond569.not.1, label %._crit_edge478, label %.lr.ph477, !llvm.loop !62

._crit_edge478:                                   ; preds = %.lr.ph477.prol.loopexit, %.lr.ph477, %middle.block910, %.preheader394
  store i32 1, ptr %3, align 4, !tbaa !38
  %317 = call i32 @SMvalidMesh(ptr noundef nonnull %0, ptr noundef nonnull %3) #6
  %.not383 = icmp eq i32 %317, 0
  br i1 %.not383, label %320, label %318

318:                                              ; preds = %._crit_edge478
  %319 = call i32 @SMerror(i32 noundef 316, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %317, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

320:                                              ; preds = %._crit_edge478
  %321 = load i32, ptr %3, align 4, !tbaa !38
  %.not384 = icmp eq i32 %321, 0
  br i1 %.not384, label %326, label %322

322:                                              ; preds = %320
  %323 = load i32, ptr %104, align 8, !tbaa !39
  %324 = icmp eq i32 %323, 0
  br i1 %324, label %325, label %326

325:                                              ; preds = %322
  store i32 1, ptr %104, align 8, !tbaa !39
  br label %326

326:                                              ; preds = %325, %322, %320
  br i1 %43, label %327, label %334

327:                                              ; preds = %326
  %328 = load ptr, ptr %115, align 8, !tbaa !63
  %329 = load double, ptr %328, align 8, !tbaa !19
  %330 = load ptr, ptr %110, align 8, !tbaa !20
  store double %329, ptr %330, align 8, !tbaa !19
  %331 = getelementptr inbounds i8, ptr %328, i64 8
  %332 = load double, ptr %331, align 8, !tbaa !19
  %333 = getelementptr inbounds i8, ptr %330, i64 8
  store double %332, ptr %333, align 8, !tbaa !19
  br label %.loopexit393

334:                                              ; preds = %326
  br i1 %107, label %350, label %.preheader392

.preheader392:                                    ; preds = %334
  br i1 %108, label %.lr.ph480, label %.loopexit393

.lr.ph480:                                        ; preds = %.preheader392
  %335 = load ptr, ptr %115, align 8, !tbaa !63
  %336 = load ptr, ptr %110, align 8, !tbaa !20
  %wide.trip.count573 = zext nneg i32 %17 to i64
  %min.iters.check931 = icmp ult i32 %17, 6
  %337 = ptrtoint ptr %336 to i64
  %338 = ptrtoint ptr %335 to i64
  %339 = sub i64 %337, %338
  %diff.check928 = icmp ult i64 %339, 32
  %or.cond950 = select i1 %min.iters.check931, i1 true, i1 %diff.check928
  br i1 %or.cond950, label %scalar.ph930.preheader, label %vector.ph932

scalar.ph930.preheader:                           ; preds = %middle.block929, %.lr.ph480
  %indvars.iv570.ph = phi i64 [ 0, %.lr.ph480 ], [ %n.vec934, %middle.block929 ]
  %xtraiter1053 = and i64 %wide.trip.count537, 3
  %lcmp.mod1054.not = icmp eq i64 %xtraiter1053, 0
  br i1 %lcmp.mod1054.not, label %scalar.ph930.prol.loopexit, label %scalar.ph930.prol

scalar.ph930.prol:                                ; preds = %scalar.ph930.preheader, %scalar.ph930.prol
  %indvars.iv570.prol = phi i64 [ %indvars.iv.next571.prol, %scalar.ph930.prol ], [ %indvars.iv570.ph, %scalar.ph930.preheader ]
  %prol.iter1055 = phi i64 [ %prol.iter1055.next, %scalar.ph930.prol ], [ 0, %scalar.ph930.preheader ]
  %340 = getelementptr inbounds double, ptr %335, i64 %indvars.iv570.prol
  %341 = load double, ptr %340, align 8, !tbaa !19
  %342 = getelementptr inbounds double, ptr %336, i64 %indvars.iv570.prol
  store double %341, ptr %342, align 8, !tbaa !19
  %indvars.iv.next571.prol = add nuw nsw i64 %indvars.iv570.prol, 1
  %prol.iter1055.next = add i64 %prol.iter1055, 1
  %prol.iter1055.cmp.not = icmp eq i64 %prol.iter1055.next, %xtraiter1053
  br i1 %prol.iter1055.cmp.not, label %scalar.ph930.prol.loopexit, label %scalar.ph930.prol, !llvm.loop !64

scalar.ph930.prol.loopexit:                       ; preds = %scalar.ph930.prol, %scalar.ph930.preheader
  %indvars.iv570.unr = phi i64 [ %indvars.iv570.ph, %scalar.ph930.preheader ], [ %indvars.iv.next571.prol, %scalar.ph930.prol ]
  %343 = sub nsw i64 %indvars.iv570.ph, %wide.trip.count537
  %344 = icmp ugt i64 %343, -4
  br i1 %344, label %.loopexit393, label %scalar.ph930

vector.ph932:                                     ; preds = %.lr.ph480
  %n.vec934 = and i64 %wide.trip.count537, 2147483644
  br label %vector.body936

vector.body936:                                   ; preds = %vector.body936, %vector.ph932
  %index937 = phi i64 [ 0, %vector.ph932 ], [ %index.next940, %vector.body936 ]
  %345 = getelementptr inbounds double, ptr %335, i64 %index937
  %346 = getelementptr inbounds i8, ptr %345, i64 16
  %wide.load938 = load <2 x double>, ptr %345, align 8, !tbaa !19
  %wide.load939 = load <2 x double>, ptr %346, align 8, !tbaa !19
  %347 = getelementptr inbounds double, ptr %336, i64 %index937
  %348 = getelementptr inbounds i8, ptr %347, i64 16
  store <2 x double> %wide.load938, ptr %347, align 8, !tbaa !19
  store <2 x double> %wide.load939, ptr %348, align 8, !tbaa !19
  %index.next940 = add nuw i64 %index937, 4
  %349 = icmp eq i64 %index.next940, %n.vec934
  br i1 %349, label %middle.block929, label %vector.body936, !llvm.loop !65

middle.block929:                                  ; preds = %vector.body936
  %cmp.n941 = icmp eq i64 %n.vec934, %wide.trip.count537
  br i1 %cmp.n941, label %.loopexit393, label %scalar.ph930.preheader

350:                                              ; preds = %334
  %351 = load ptr, ptr %115, align 8, !tbaa !63
  %352 = load double, ptr %351, align 8, !tbaa !19
  %353 = load ptr, ptr %110, align 8, !tbaa !20
  store double %352, ptr %353, align 8, !tbaa !19
  %354 = getelementptr inbounds i8, ptr %351, i64 8
  %355 = load double, ptr %354, align 8, !tbaa !19
  %356 = getelementptr inbounds i8, ptr %353, i64 8
  store double %355, ptr %356, align 8, !tbaa !19
  %357 = getelementptr inbounds i8, ptr %351, i64 16
  %358 = load double, ptr %357, align 8, !tbaa !19
  %359 = getelementptr inbounds i8, ptr %353, i64 16
  store double %358, ptr %359, align 8, !tbaa !19
  br label %.loopexit393

scalar.ph930:                                     ; preds = %scalar.ph930.prol.loopexit, %scalar.ph930
  %indvars.iv570 = phi i64 [ %indvars.iv.next571.3, %scalar.ph930 ], [ %indvars.iv570.unr, %scalar.ph930.prol.loopexit ]
  %360 = getelementptr inbounds double, ptr %335, i64 %indvars.iv570
  %361 = load double, ptr %360, align 8, !tbaa !19
  %362 = getelementptr inbounds double, ptr %336, i64 %indvars.iv570
  store double %361, ptr %362, align 8, !tbaa !19
  %indvars.iv.next571 = add nuw nsw i64 %indvars.iv570, 1
  %363 = getelementptr inbounds double, ptr %335, i64 %indvars.iv.next571
  %364 = load double, ptr %363, align 8, !tbaa !19
  %365 = getelementptr inbounds double, ptr %336, i64 %indvars.iv.next571
  store double %364, ptr %365, align 8, !tbaa !19
  %indvars.iv.next571.1 = add nuw nsw i64 %indvars.iv570, 2
  %366 = getelementptr inbounds double, ptr %335, i64 %indvars.iv.next571.1
  %367 = load double, ptr %366, align 8, !tbaa !19
  %368 = getelementptr inbounds double, ptr %336, i64 %indvars.iv.next571.1
  store double %367, ptr %368, align 8, !tbaa !19
  %indvars.iv.next571.2 = add nuw nsw i64 %indvars.iv570, 3
  %369 = getelementptr inbounds double, ptr %335, i64 %indvars.iv.next571.2
  %370 = load double, ptr %369, align 8, !tbaa !19
  %371 = getelementptr inbounds double, ptr %336, i64 %indvars.iv.next571.2
  store double %370, ptr %371, align 8, !tbaa !19
  %indvars.iv.next571.3 = add nuw nsw i64 %indvars.iv570, 4
  %exitcond574.not.3 = icmp eq i64 %indvars.iv.next571.3, %wide.trip.count573
  br i1 %exitcond574.not.3, label %.loopexit393, label %scalar.ph930, !llvm.loop !66

.loopexit393:                                     ; preds = %scalar.ph930.prol.loopexit, %scalar.ph930, %middle.block929, %.preheader392, %350, %327
  %372 = load ptr, ptr %116, align 8, !tbaa !67
  %373 = load ptr, ptr %18, align 8, !tbaa !29
  %374 = call i32 @SMcopyActive(ptr noundef %372, ptr noundef %373)
  %.not385 = icmp eq i32 %374, 0
  br i1 %.not385, label %377, label %375

375:                                              ; preds = %.loopexit393
  %376 = call i32 @SMerror(i32 noundef 323, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %374, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

377:                                              ; preds = %.loopexit393
  store i32 100, ptr %22, align 8, !tbaa !16
  %378 = load double, ptr %114, align 8, !tbaa !68
  %379 = fcmp olt double %.0326484, %378
  br i1 %379, label %380, label %.loopexit406

380:                                              ; preds = %377
  store i32 101, ptr %22, align 8, !tbaa !16
  br label %.loopexit406

381:                                              ; preds = %277
  %382 = load double, ptr %4, align 8, !tbaa !19
  %383 = fsub double %287, %382
  %384 = fdiv double %383, %382
  %385 = call double @llvm.fabs.f64(double %384)
  %386 = fcmp ogt double %287, %382
  %387 = fcmp olt double %385, 1.000000e-01
  %or.cond3 = or i1 %386, %387
  %388 = fcmp ogt double %287, 0.000000e+00
  %or.cond5 = and i1 %388, %or.cond3
  br i1 %or.cond5, label %389, label %403

389:                                              ; preds = %381
  store i32 100, ptr %22, align 8, !tbaa !16
  store i32 1, ptr %3, align 4, !tbaa !38
  %390 = call i32 @SMvalidMesh(ptr noundef nonnull %0, ptr noundef nonnull %3) #6
  %.not381 = icmp eq i32 %390, 0
  br i1 %.not381, label %393, label %391

391:                                              ; preds = %389
  %392 = call i32 @SMerror(i32 noundef 340, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %390, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

393:                                              ; preds = %389
  %394 = load i32, ptr %3, align 4, !tbaa !38
  %.not382 = icmp eq i32 %394, 0
  br i1 %.not382, label %399, label %395

395:                                              ; preds = %393
  %396 = load i32, ptr %104, align 8, !tbaa !39
  %397 = icmp eq i32 %396, 0
  br i1 %397, label %398, label %399

398:                                              ; preds = %395
  store i32 1, ptr %104, align 8, !tbaa !39
  br label %399

399:                                              ; preds = %398, %395, %393
  %400 = load double, ptr %114, align 8, !tbaa !68
  %401 = fcmp olt double %287, %400
  br i1 %401, label %402, label %.loopexit406

402:                                              ; preds = %399
  store i32 101, ptr %22, align 8, !tbaa !16
  br label %.loopexit406

403:                                              ; preds = %381
  %404 = fcmp olt double %287, 0.000000e+00
  %405 = fcmp olt double %.0326484, 0.000000e+00
  %or.cond7 = select i1 %404, i1 %405, i1 false
  br i1 %or.cond7, label %406, label %465

406:                                              ; preds = %403
  %407 = call double @llvm.fabs.f64(double %287)
  %408 = load double, ptr %114, align 8, !tbaa !68
  %409 = fcmp olt double %407, %408
  %410 = call double @llvm.fabs.f64(double %.0326484)
  %411 = fcmp olt double %410, %408
  %or.cond387 = select i1 %409, i1 %411, i1 false
  br i1 %or.cond387, label %412, label %465

412:                                              ; preds = %406
  store i32 102, ptr %22, align 8, !tbaa !16
  br i1 %28, label %413, label %414

413:                                              ; preds = %412
  store <2 x double> %.0., ptr %103, align 8, !tbaa !19
  br label %.loopexit398

414:                                              ; preds = %412
  br i1 %105, label %415, label %.preheader397

.preheader397:                                    ; preds = %414
  br i1 %101, label %.lr.ph473.preheader, label %.loopexit398

.lr.ph473.preheader:                              ; preds = %.preheader397
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %103, ptr nonnull align 16 %5, i64 %118, i1 false), !tbaa !19
  br label %.loopexit398

415:                                              ; preds = %414
  store <2 x double> %.0., ptr %103, align 8, !tbaa !19
  store double %.16..16..pre, ptr %106, align 8, !tbaa !19
  br label %.loopexit398

.loopexit398:                                     ; preds = %.lr.ph473.preheader, %.preheader397, %415, %413
  br i1 %43, label %416, label %423

416:                                              ; preds = %.loopexit398
  %417 = load ptr, ptr %109, align 8, !tbaa !21
  %418 = load double, ptr %417, align 8, !tbaa !19
  %419 = load ptr, ptr %110, align 8, !tbaa !20
  store double %418, ptr %419, align 8, !tbaa !19
  %420 = getelementptr inbounds i8, ptr %417, i64 8
  %421 = load double, ptr %420, align 8, !tbaa !19
  %422 = getelementptr inbounds i8, ptr %419, i64 8
  store double %421, ptr %422, align 8, !tbaa !19
  br label %.loopexit396

423:                                              ; preds = %.loopexit398
  br i1 %107, label %439, label %.preheader395

.preheader395:                                    ; preds = %423
  br i1 %108, label %.lr.ph475, label %.loopexit396

.lr.ph475:                                        ; preds = %.preheader395
  %424 = load ptr, ptr %109, align 8, !tbaa !21
  %425 = load ptr, ptr %110, align 8, !tbaa !20
  %wide.trip.count563 = zext nneg i32 %17 to i64
  %min.iters.check893 = icmp ult i32 %17, 6
  %426 = ptrtoint ptr %425 to i64
  %427 = ptrtoint ptr %424 to i64
  %428 = sub i64 %426, %427
  %diff.check890 = icmp ult i64 %428, 32
  %or.cond953 = select i1 %min.iters.check893, i1 true, i1 %diff.check890
  br i1 %or.cond953, label %scalar.ph892.preheader, label %vector.ph894

scalar.ph892.preheader:                           ; preds = %middle.block891, %.lr.ph475
  %indvars.iv560.ph = phi i64 [ 0, %.lr.ph475 ], [ %n.vec896, %middle.block891 ]
  %xtraiter1047 = and i64 %wide.trip.count537, 3
  %lcmp.mod1048.not = icmp eq i64 %xtraiter1047, 0
  br i1 %lcmp.mod1048.not, label %scalar.ph892.prol.loopexit, label %scalar.ph892.prol

scalar.ph892.prol:                                ; preds = %scalar.ph892.preheader, %scalar.ph892.prol
  %indvars.iv560.prol = phi i64 [ %indvars.iv.next561.prol, %scalar.ph892.prol ], [ %indvars.iv560.ph, %scalar.ph892.preheader ]
  %prol.iter1049 = phi i64 [ %prol.iter1049.next, %scalar.ph892.prol ], [ 0, %scalar.ph892.preheader ]
  %429 = getelementptr inbounds double, ptr %424, i64 %indvars.iv560.prol
  %430 = load double, ptr %429, align 8, !tbaa !19
  %431 = getelementptr inbounds double, ptr %425, i64 %indvars.iv560.prol
  store double %430, ptr %431, align 8, !tbaa !19
  %indvars.iv.next561.prol = add nuw nsw i64 %indvars.iv560.prol, 1
  %prol.iter1049.next = add i64 %prol.iter1049, 1
  %prol.iter1049.cmp.not = icmp eq i64 %prol.iter1049.next, %xtraiter1047
  br i1 %prol.iter1049.cmp.not, label %scalar.ph892.prol.loopexit, label %scalar.ph892.prol, !llvm.loop !69

scalar.ph892.prol.loopexit:                       ; preds = %scalar.ph892.prol, %scalar.ph892.preheader
  %indvars.iv560.unr = phi i64 [ %indvars.iv560.ph, %scalar.ph892.preheader ], [ %indvars.iv.next561.prol, %scalar.ph892.prol ]
  %432 = sub nsw i64 %indvars.iv560.ph, %wide.trip.count537
  %433 = icmp ugt i64 %432, -4
  br i1 %433, label %.loopexit396, label %scalar.ph892

vector.ph894:                                     ; preds = %.lr.ph475
  %n.vec896 = and i64 %wide.trip.count537, 2147483644
  br label %vector.body898

vector.body898:                                   ; preds = %vector.body898, %vector.ph894
  %index899 = phi i64 [ 0, %vector.ph894 ], [ %index.next902, %vector.body898 ]
  %434 = getelementptr inbounds double, ptr %424, i64 %index899
  %435 = getelementptr inbounds i8, ptr %434, i64 16
  %wide.load900 = load <2 x double>, ptr %434, align 8, !tbaa !19
  %wide.load901 = load <2 x double>, ptr %435, align 8, !tbaa !19
  %436 = getelementptr inbounds double, ptr %425, i64 %index899
  %437 = getelementptr inbounds i8, ptr %436, i64 16
  store <2 x double> %wide.load900, ptr %436, align 8, !tbaa !19
  store <2 x double> %wide.load901, ptr %437, align 8, !tbaa !19
  %index.next902 = add nuw i64 %index899, 4
  %438 = icmp eq i64 %index.next902, %n.vec896
  br i1 %438, label %middle.block891, label %vector.body898, !llvm.loop !70

middle.block891:                                  ; preds = %vector.body898
  %cmp.n903 = icmp eq i64 %n.vec896, %wide.trip.count537
  br i1 %cmp.n903, label %.loopexit396, label %scalar.ph892.preheader

439:                                              ; preds = %423
  %440 = load ptr, ptr %109, align 8, !tbaa !21
  %441 = load double, ptr %440, align 8, !tbaa !19
  %442 = load ptr, ptr %110, align 8, !tbaa !20
  store double %441, ptr %442, align 8, !tbaa !19
  %443 = getelementptr inbounds i8, ptr %440, i64 8
  %444 = load double, ptr %443, align 8, !tbaa !19
  %445 = getelementptr inbounds i8, ptr %442, i64 8
  store double %444, ptr %445, align 8, !tbaa !19
  %446 = getelementptr inbounds i8, ptr %440, i64 16
  %447 = load double, ptr %446, align 8, !tbaa !19
  %448 = getelementptr inbounds i8, ptr %442, i64 16
  store double %447, ptr %448, align 8, !tbaa !19
  br label %.loopexit396

scalar.ph892:                                     ; preds = %scalar.ph892.prol.loopexit, %scalar.ph892
  %indvars.iv560 = phi i64 [ %indvars.iv.next561.3, %scalar.ph892 ], [ %indvars.iv560.unr, %scalar.ph892.prol.loopexit ]
  %449 = getelementptr inbounds double, ptr %424, i64 %indvars.iv560
  %450 = load double, ptr %449, align 8, !tbaa !19
  %451 = getelementptr inbounds double, ptr %425, i64 %indvars.iv560
  store double %450, ptr %451, align 8, !tbaa !19
  %indvars.iv.next561 = add nuw nsw i64 %indvars.iv560, 1
  %452 = getelementptr inbounds double, ptr %424, i64 %indvars.iv.next561
  %453 = load double, ptr %452, align 8, !tbaa !19
  %454 = getelementptr inbounds double, ptr %425, i64 %indvars.iv.next561
  store double %453, ptr %454, align 8, !tbaa !19
  %indvars.iv.next561.1 = add nuw nsw i64 %indvars.iv560, 2
  %455 = getelementptr inbounds double, ptr %424, i64 %indvars.iv.next561.1
  %456 = load double, ptr %455, align 8, !tbaa !19
  %457 = getelementptr inbounds double, ptr %425, i64 %indvars.iv.next561.1
  store double %456, ptr %457, align 8, !tbaa !19
  %indvars.iv.next561.2 = add nuw nsw i64 %indvars.iv560, 3
  %458 = getelementptr inbounds double, ptr %424, i64 %indvars.iv.next561.2
  %459 = load double, ptr %458, align 8, !tbaa !19
  %460 = getelementptr inbounds double, ptr %425, i64 %indvars.iv.next561.2
  store double %459, ptr %460, align 8, !tbaa !19
  %indvars.iv.next561.3 = add nuw nsw i64 %indvars.iv560, 4
  %exitcond564.not.3 = icmp eq i64 %indvars.iv.next561.3, %wide.trip.count563
  br i1 %exitcond564.not.3, label %.loopexit396, label %scalar.ph892, !llvm.loop !71

.loopexit396:                                     ; preds = %scalar.ph892.prol.loopexit, %scalar.ph892, %middle.block891, %.preheader395, %439, %416
  %461 = load ptr, ptr %98, align 8, !tbaa !30
  %462 = call i32 @SMcopyActive(ptr noundef %461, ptr noundef %278)
  %.not380 = icmp eq i32 %462, 0
  br i1 %.not380, label %.loopexit406, label %463

463:                                              ; preds = %.loopexit396
  %464 = call i32 @SMerror(i32 noundef 362, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %462, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

465:                                              ; preds = %406, %403
  br i1 %101, label %.lr.ph464, label %._crit_edge465

.lr.ph464:                                        ; preds = %465
  %466 = fneg double %.1330461720
  %brmerge1126 = select i1 %min.iters.check800, i1 true, i1 %found.conflict
  br i1 %brmerge1126, label %scalar.ph799.preheader, label %vector.ph801

vector.ph801:                                     ; preds = %.lr.ph464
  %broadcast.splatinsert = insertelement <2 x double> poison, double %466, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body805

vector.body805:                                   ; preds = %vector.body805, %vector.ph801
  %index806 = phi i64 [ 0, %vector.ph801 ], [ %index.next811, %vector.body805 ]
  %467 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %index806
  %468 = getelementptr inbounds i8, ptr %467, i64 16
  %wide.load807 = load <2 x double>, ptr %467, align 8, !tbaa !19, !alias.scope !72
  %wide.load808 = load <2 x double>, ptr %468, align 8, !tbaa !19, !alias.scope !72
  %469 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %index806
  %470 = getelementptr inbounds i8, ptr %469, i64 16
  %wide.load809 = load <2 x double>, ptr %469, align 8, !tbaa !19, !alias.scope !75, !noalias !72
  %wide.load810 = load <2 x double>, ptr %470, align 8, !tbaa !19, !alias.scope !75, !noalias !72
  %471 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load807, <2 x double> %wide.load809)
  %472 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load808, <2 x double> %wide.load810)
  store <2 x double> %471, ptr %469, align 8, !tbaa !19, !alias.scope !75, !noalias !72
  store <2 x double> %472, ptr %470, align 8, !tbaa !19, !alias.scope !75, !noalias !72
  %index.next811 = add nuw i64 %index806, 4
  %473 = icmp eq i64 %index.next811, %n.vec803
  br i1 %473, label %middle.block798, label %vector.body805, !llvm.loop !77

middle.block798:                                  ; preds = %vector.body805
  br i1 %cmp.n812, label %._crit_edge465, label %scalar.ph799.preheader

scalar.ph799.preheader:                           ; preds = %.lr.ph464, %middle.block798
  %indvars.iv539.ph = phi i64 [ 0, %.lr.ph464 ], [ %n.vec803, %middle.block798 ]
  br i1 %lcmp.mod1039.not, label %scalar.ph799.prol.loopexit, label %scalar.ph799.prol

scalar.ph799.prol:                                ; preds = %scalar.ph799.preheader
  %474 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv539.ph
  %475 = load double, ptr %474, align 8, !tbaa !19
  %476 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv539.ph
  %477 = load double, ptr %476, align 8, !tbaa !19
  %478 = call double @llvm.fmuladd.f64(double %466, double %475, double %477)
  store double %478, ptr %476, align 8, !tbaa !19
  %indvars.iv.next540.prol = or disjoint i64 %indvars.iv539.ph, 1
  br label %scalar.ph799.prol.loopexit

scalar.ph799.prol.loopexit:                       ; preds = %scalar.ph799.prol, %scalar.ph799.preheader
  %indvars.iv539.unr = phi i64 [ %indvars.iv539.ph, %scalar.ph799.preheader ], [ %indvars.iv.next540.prol, %scalar.ph799.prol ]
  %479 = icmp eq i64 %indvars.iv539.ph, %130
  br i1 %479, label %._crit_edge465, label %scalar.ph799

scalar.ph799:                                     ; preds = %scalar.ph799.prol.loopexit, %scalar.ph799
  %indvars.iv539 = phi i64 [ %indvars.iv.next540.1, %scalar.ph799 ], [ %indvars.iv539.unr, %scalar.ph799.prol.loopexit ]
  %480 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv539
  %481 = load double, ptr %480, align 8, !tbaa !19
  %482 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv539
  %483 = load double, ptr %482, align 8, !tbaa !19
  %484 = call double @llvm.fmuladd.f64(double %466, double %481, double %483)
  store double %484, ptr %482, align 8, !tbaa !19
  %indvars.iv.next540 = add nuw nsw i64 %indvars.iv539, 1
  %485 = getelementptr inbounds [3 x double], ptr %102, i64 0, i64 %indvars.iv.next540
  %486 = load double, ptr %485, align 8, !tbaa !19
  %487 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 %indvars.iv.next540
  %488 = load double, ptr %487, align 8, !tbaa !19
  %489 = call double @llvm.fmuladd.f64(double %466, double %486, double %488)
  store double %489, ptr %487, align 8, !tbaa !19
  %indvars.iv.next540.1 = add nuw nsw i64 %indvars.iv539, 2
  %exitcond543.not.1 = icmp eq i64 %indvars.iv.next540.1, %117
  br i1 %exitcond543.not.1, label %._crit_edge465, label %scalar.ph799, !llvm.loop !78

._crit_edge465:                                   ; preds = %scalar.ph799.prol.loopexit, %scalar.ph799, %middle.block798, %465
  %490 = fmul double %.1330461720, 5.000000e-01
  store double %490, ptr %19, align 8, !tbaa !14
  %491 = load double, ptr %23, align 8, !tbaa !17
  %492 = fcmp olt double %490, %491
  br i1 %492, label %493, label %547

493:                                              ; preds = %._crit_edge465
  br i1 %28, label %494, label %495

494:                                              ; preds = %493
  store <2 x double> %.0., ptr %103, align 8, !tbaa !19
  br label %.loopexit402

495:                                              ; preds = %493
  br i1 %105, label %496, label %.preheader401

.preheader401:                                    ; preds = %495
  br i1 %101, label %.lr.ph469.preheader, label %.loopexit402

.lr.ph469.preheader:                              ; preds = %.preheader401
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %103, ptr nonnull align 16 %5, i64 %118, i1 false), !tbaa !19
  br label %.loopexit402

496:                                              ; preds = %495
  store <2 x double> %.0., ptr %103, align 8, !tbaa !19
  store double %.16..16..pre, ptr %106, align 8, !tbaa !19
  br label %.loopexit402

.loopexit402:                                     ; preds = %.lr.ph469.preheader, %.preheader401, %496, %494
  br i1 %43, label %497, label %504

497:                                              ; preds = %.loopexit402
  %498 = load ptr, ptr %109, align 8, !tbaa !21
  %499 = load double, ptr %498, align 8, !tbaa !19
  %500 = load ptr, ptr %110, align 8, !tbaa !20
  store double %499, ptr %500, align 8, !tbaa !19
  %501 = getelementptr inbounds i8, ptr %498, i64 8
  %502 = load double, ptr %501, align 8, !tbaa !19
  %503 = getelementptr inbounds i8, ptr %500, i64 8
  store double %502, ptr %503, align 8, !tbaa !19
  br label %.loopexit400

504:                                              ; preds = %.loopexit402
  br i1 %107, label %520, label %.preheader399

.preheader399:                                    ; preds = %504
  br i1 %108, label %.lr.ph471, label %.loopexit400

.lr.ph471:                                        ; preds = %.preheader399
  %505 = load ptr, ptr %109, align 8, !tbaa !21
  %506 = load ptr, ptr %110, align 8, !tbaa !20
  %wide.trip.count555 = zext nneg i32 %17 to i64
  %min.iters.check878 = icmp ult i32 %17, 6
  %507 = ptrtoint ptr %506 to i64
  %508 = ptrtoint ptr %505 to i64
  %509 = sub i64 %507, %508
  %diff.check875 = icmp ult i64 %509, 32
  %or.cond956 = select i1 %min.iters.check878, i1 true, i1 %diff.check875
  br i1 %or.cond956, label %scalar.ph877.preheader, label %vector.ph879

scalar.ph877.preheader:                           ; preds = %middle.block876, %.lr.ph471
  %indvars.iv552.ph = phi i64 [ 0, %.lr.ph471 ], [ %n.vec881, %middle.block876 ]
  %xtraiter1044 = and i64 %wide.trip.count537, 3
  %lcmp.mod1045.not = icmp eq i64 %xtraiter1044, 0
  br i1 %lcmp.mod1045.not, label %scalar.ph877.prol.loopexit, label %scalar.ph877.prol

scalar.ph877.prol:                                ; preds = %scalar.ph877.preheader, %scalar.ph877.prol
  %indvars.iv552.prol = phi i64 [ %indvars.iv.next553.prol, %scalar.ph877.prol ], [ %indvars.iv552.ph, %scalar.ph877.preheader ]
  %prol.iter1046 = phi i64 [ %prol.iter1046.next, %scalar.ph877.prol ], [ 0, %scalar.ph877.preheader ]
  %510 = getelementptr inbounds double, ptr %505, i64 %indvars.iv552.prol
  %511 = load double, ptr %510, align 8, !tbaa !19
  %512 = getelementptr inbounds double, ptr %506, i64 %indvars.iv552.prol
  store double %511, ptr %512, align 8, !tbaa !19
  %indvars.iv.next553.prol = add nuw nsw i64 %indvars.iv552.prol, 1
  %prol.iter1046.next = add i64 %prol.iter1046, 1
  %prol.iter1046.cmp.not = icmp eq i64 %prol.iter1046.next, %xtraiter1044
  br i1 %prol.iter1046.cmp.not, label %scalar.ph877.prol.loopexit, label %scalar.ph877.prol, !llvm.loop !79

scalar.ph877.prol.loopexit:                       ; preds = %scalar.ph877.prol, %scalar.ph877.preheader
  %indvars.iv552.unr = phi i64 [ %indvars.iv552.ph, %scalar.ph877.preheader ], [ %indvars.iv.next553.prol, %scalar.ph877.prol ]
  %513 = sub nsw i64 %indvars.iv552.ph, %wide.trip.count537
  %514 = icmp ugt i64 %513, -4
  br i1 %514, label %.loopexit400, label %scalar.ph877

vector.ph879:                                     ; preds = %.lr.ph471
  %n.vec881 = and i64 %wide.trip.count537, 2147483644
  br label %vector.body883

vector.body883:                                   ; preds = %vector.body883, %vector.ph879
  %index884 = phi i64 [ 0, %vector.ph879 ], [ %index.next887, %vector.body883 ]
  %515 = getelementptr inbounds double, ptr %505, i64 %index884
  %516 = getelementptr inbounds i8, ptr %515, i64 16
  %wide.load885 = load <2 x double>, ptr %515, align 8, !tbaa !19
  %wide.load886 = load <2 x double>, ptr %516, align 8, !tbaa !19
  %517 = getelementptr inbounds double, ptr %506, i64 %index884
  %518 = getelementptr inbounds i8, ptr %517, i64 16
  store <2 x double> %wide.load885, ptr %517, align 8, !tbaa !19
  store <2 x double> %wide.load886, ptr %518, align 8, !tbaa !19
  %index.next887 = add nuw i64 %index884, 4
  %519 = icmp eq i64 %index.next887, %n.vec881
  br i1 %519, label %middle.block876, label %vector.body883, !llvm.loop !80

middle.block876:                                  ; preds = %vector.body883
  %cmp.n888 = icmp eq i64 %n.vec881, %wide.trip.count537
  br i1 %cmp.n888, label %.loopexit400, label %scalar.ph877.preheader

520:                                              ; preds = %504
  %521 = load ptr, ptr %109, align 8, !tbaa !21
  %522 = load double, ptr %521, align 8, !tbaa !19
  %523 = load ptr, ptr %110, align 8, !tbaa !20
  store double %522, ptr %523, align 8, !tbaa !19
  %524 = getelementptr inbounds i8, ptr %521, i64 8
  %525 = load double, ptr %524, align 8, !tbaa !19
  %526 = getelementptr inbounds i8, ptr %523, i64 8
  store double %525, ptr %526, align 8, !tbaa !19
  %527 = getelementptr inbounds i8, ptr %521, i64 16
  %528 = load double, ptr %527, align 8, !tbaa !19
  %529 = getelementptr inbounds i8, ptr %523, i64 16
  store double %528, ptr %529, align 8, !tbaa !19
  br label %.loopexit400

scalar.ph877:                                     ; preds = %scalar.ph877.prol.loopexit, %scalar.ph877
  %indvars.iv552 = phi i64 [ %indvars.iv.next553.3, %scalar.ph877 ], [ %indvars.iv552.unr, %scalar.ph877.prol.loopexit ]
  %530 = getelementptr inbounds double, ptr %505, i64 %indvars.iv552
  %531 = load double, ptr %530, align 8, !tbaa !19
  %532 = getelementptr inbounds double, ptr %506, i64 %indvars.iv552
  store double %531, ptr %532, align 8, !tbaa !19
  %indvars.iv.next553 = add nuw nsw i64 %indvars.iv552, 1
  %533 = getelementptr inbounds double, ptr %505, i64 %indvars.iv.next553
  %534 = load double, ptr %533, align 8, !tbaa !19
  %535 = getelementptr inbounds double, ptr %506, i64 %indvars.iv.next553
  store double %534, ptr %535, align 8, !tbaa !19
  %indvars.iv.next553.1 = add nuw nsw i64 %indvars.iv552, 2
  %536 = getelementptr inbounds double, ptr %505, i64 %indvars.iv.next553.1
  %537 = load double, ptr %536, align 8, !tbaa !19
  %538 = getelementptr inbounds double, ptr %506, i64 %indvars.iv.next553.1
  store double %537, ptr %538, align 8, !tbaa !19
  %indvars.iv.next553.2 = add nuw nsw i64 %indvars.iv552, 3
  %539 = getelementptr inbounds double, ptr %505, i64 %indvars.iv.next553.2
  %540 = load double, ptr %539, align 8, !tbaa !19
  %541 = getelementptr inbounds double, ptr %506, i64 %indvars.iv.next553.2
  store double %540, ptr %541, align 8, !tbaa !19
  %indvars.iv.next553.3 = add nuw nsw i64 %indvars.iv552, 4
  %exitcond556.not.3 = icmp eq i64 %indvars.iv.next553.3, %wide.trip.count555
  br i1 %exitcond556.not.3, label %.loopexit400, label %scalar.ph877, !llvm.loop !81

.loopexit400:                                     ; preds = %scalar.ph877.prol.loopexit, %scalar.ph877, %middle.block876, %.preheader399, %520, %497
  %542 = load ptr, ptr %98, align 8, !tbaa !30
  %543 = call i32 @SMcopyActive(ptr noundef %542, ptr noundef %278)
  %.not379 = icmp eq i32 %543, 0
  br i1 %.not379, label %546, label %544

544:                                              ; preds = %.loopexit400
  %545 = call i32 @SMerror(i32 noundef 380, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %543, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

546:                                              ; preds = %.loopexit400
  store i32 103, ptr %22, align 8, !tbaa !16
  br label %.loopexit406

547:                                              ; preds = %._crit_edge465
  br i1 %43, label %548, label %555

548:                                              ; preds = %547
  %549 = load ptr, ptr %110, align 8, !tbaa !20
  %550 = load double, ptr %549, align 8, !tbaa !19
  %551 = load ptr, ptr %115, align 8, !tbaa !63
  store double %550, ptr %551, align 8, !tbaa !19
  %552 = getelementptr inbounds i8, ptr %549, i64 8
  %553 = load double, ptr %552, align 8, !tbaa !19
  %554 = getelementptr inbounds i8, ptr %551, i64 8
  store double %553, ptr %554, align 8, !tbaa !19
  br label %.loopexit404

555:                                              ; preds = %547
  br i1 %107, label %571, label %.preheader403

.preheader403:                                    ; preds = %555
  br i1 %108, label %.lr.ph467, label %.loopexit404

.lr.ph467:                                        ; preds = %.preheader403
  %556 = load ptr, ptr %110, align 8, !tbaa !20
  %557 = load ptr, ptr %115, align 8, !tbaa !63
  %558 = ptrtoint ptr %557 to i64
  %559 = ptrtoint ptr %556 to i64
  %560 = sub i64 %558, %559
  %diff.check782 = icmp ult i64 %560, 32
  %or.cond959 = select i1 %min.iters.check785, i1 true, i1 %diff.check782
  br i1 %or.cond959, label %scalar.ph784.preheader, label %vector.body790

scalar.ph784.preheader:                           ; preds = %middle.block783, %.lr.ph467
  %indvars.iv544.ph = phi i64 [ 0, %.lr.ph467 ], [ %n.vec788, %middle.block783 ]
  br i1 %lcmp.mod1042.not, label %scalar.ph784.prol.loopexit, label %scalar.ph784.prol

scalar.ph784.prol:                                ; preds = %scalar.ph784.preheader, %scalar.ph784.prol
  %indvars.iv544.prol = phi i64 [ %indvars.iv.next545.prol, %scalar.ph784.prol ], [ %indvars.iv544.ph, %scalar.ph784.preheader ]
  %prol.iter1043 = phi i64 [ %prol.iter1043.next, %scalar.ph784.prol ], [ 0, %scalar.ph784.preheader ]
  %561 = getelementptr inbounds double, ptr %556, i64 %indvars.iv544.prol
  %562 = load double, ptr %561, align 8, !tbaa !19
  %563 = getelementptr inbounds double, ptr %557, i64 %indvars.iv544.prol
  store double %562, ptr %563, align 8, !tbaa !19
  %indvars.iv.next545.prol = add nuw nsw i64 %indvars.iv544.prol, 1
  %prol.iter1043.next = add i64 %prol.iter1043, 1
  %prol.iter1043.cmp.not = icmp eq i64 %prol.iter1043.next, %xtraiter1041
  br i1 %prol.iter1043.cmp.not, label %scalar.ph784.prol.loopexit, label %scalar.ph784.prol, !llvm.loop !82

scalar.ph784.prol.loopexit:                       ; preds = %scalar.ph784.prol, %scalar.ph784.preheader
  %indvars.iv544.unr = phi i64 [ %indvars.iv544.ph, %scalar.ph784.preheader ], [ %indvars.iv.next545.prol, %scalar.ph784.prol ]
  %564 = sub nsw i64 %indvars.iv544.ph, %wide.trip.count537
  %565 = icmp ugt i64 %564, -4
  br i1 %565, label %.loopexit404, label %scalar.ph784

vector.body790:                                   ; preds = %.lr.ph467, %vector.body790
  %index791 = phi i64 [ %index.next794, %vector.body790 ], [ 0, %.lr.ph467 ]
  %566 = getelementptr inbounds double, ptr %556, i64 %index791
  %567 = getelementptr inbounds i8, ptr %566, i64 16
  %wide.load792 = load <2 x double>, ptr %566, align 8, !tbaa !19
  %wide.load793 = load <2 x double>, ptr %567, align 8, !tbaa !19
  %568 = getelementptr inbounds double, ptr %557, i64 %index791
  %569 = getelementptr inbounds i8, ptr %568, i64 16
  store <2 x double> %wide.load792, ptr %568, align 8, !tbaa !19
  store <2 x double> %wide.load793, ptr %569, align 8, !tbaa !19
  %index.next794 = add nuw i64 %index791, 4
  %570 = icmp eq i64 %index.next794, %n.vec788
  br i1 %570, label %middle.block783, label %vector.body790, !llvm.loop !83

middle.block783:                                  ; preds = %vector.body790
  br i1 %cmp.n795, label %.loopexit404, label %scalar.ph784.preheader

571:                                              ; preds = %555
  %572 = load ptr, ptr %110, align 8, !tbaa !20
  %573 = load double, ptr %572, align 8, !tbaa !19
  %574 = load ptr, ptr %115, align 8, !tbaa !63
  store double %573, ptr %574, align 8, !tbaa !19
  %575 = getelementptr inbounds i8, ptr %572, i64 8
  %576 = load double, ptr %575, align 8, !tbaa !19
  %577 = getelementptr inbounds i8, ptr %574, i64 8
  store double %576, ptr %577, align 8, !tbaa !19
  %578 = getelementptr inbounds i8, ptr %572, i64 16
  %579 = load double, ptr %578, align 8, !tbaa !19
  %580 = getelementptr inbounds i8, ptr %574, i64 16
  store double %579, ptr %580, align 8, !tbaa !19
  br label %.loopexit404

scalar.ph784:                                     ; preds = %scalar.ph784.prol.loopexit, %scalar.ph784
  %indvars.iv544 = phi i64 [ %indvars.iv.next545.3, %scalar.ph784 ], [ %indvars.iv544.unr, %scalar.ph784.prol.loopexit ]
  %581 = getelementptr inbounds double, ptr %556, i64 %indvars.iv544
  %582 = load double, ptr %581, align 8, !tbaa !19
  %583 = getelementptr inbounds double, ptr %557, i64 %indvars.iv544
  store double %582, ptr %583, align 8, !tbaa !19
  %indvars.iv.next545 = add nuw nsw i64 %indvars.iv544, 1
  %584 = getelementptr inbounds double, ptr %556, i64 %indvars.iv.next545
  %585 = load double, ptr %584, align 8, !tbaa !19
  %586 = getelementptr inbounds double, ptr %557, i64 %indvars.iv.next545
  store double %585, ptr %586, align 8, !tbaa !19
  %indvars.iv.next545.1 = add nuw nsw i64 %indvars.iv544, 2
  %587 = getelementptr inbounds double, ptr %556, i64 %indvars.iv.next545.1
  %588 = load double, ptr %587, align 8, !tbaa !19
  %589 = getelementptr inbounds double, ptr %557, i64 %indvars.iv.next545.1
  store double %588, ptr %589, align 8, !tbaa !19
  %indvars.iv.next545.2 = add nuw nsw i64 %indvars.iv544, 3
  %590 = getelementptr inbounds double, ptr %556, i64 %indvars.iv.next545.2
  %591 = load double, ptr %590, align 8, !tbaa !19
  %592 = getelementptr inbounds double, ptr %557, i64 %indvars.iv.next545.2
  store double %591, ptr %592, align 8, !tbaa !19
  %indvars.iv.next545.3 = add nuw nsw i64 %indvars.iv544, 4
  %exitcond548.not.3 = icmp eq i64 %indvars.iv.next545.3, %wide.trip.count547
  br i1 %exitcond548.not.3, label %.loopexit404, label %scalar.ph784, !llvm.loop !84

.loopexit404:                                     ; preds = %scalar.ph784.prol.loopexit, %scalar.ph784, %middle.block783, %.preheader403, %571, %548
  %593 = load ptr, ptr %116, align 8, !tbaa !67
  %594 = call i32 @SMcopyActive(ptr noundef %278, ptr noundef %593)
  %.not378 = icmp eq i32 %594, 0
  br i1 %.not378, label %597, label %595

595:                                              ; preds = %.loopexit404
  %596 = call i32 @SMerror(i32 noundef 384, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef %594, i32 noundef 0, ptr noundef null) #6
  br label %.loopexit406

597:                                              ; preds = %.loopexit404, %.critedge.thread638, %.critedge.thread
  %.3340460713 = phi i32 [ %.3340460714, %.critedge.thread638 ], [ %.3340460715, %.critedge.thread ], [ %.3340460714, %.loopexit404 ]
  %.3 = phi double [ %.1330461720, %.critedge.thread638 ], [ %.1330461721, %.critedge.thread ], [ %490, %.loopexit404 ]
  %.1 = phi double [ %.0326484, %.critedge.thread638 ], [ %.0326484, %.critedge.thread ], [ %287, %.loopexit404 ]
  %598 = icmp eq i32 %.3340460713, 102
  br i1 %598, label %133, label %.loopexit406, !llvm.loop !85

.loopexit406:                                     ; preds = %597, %546, %.loopexit396, %399, %402, %377, %380, %.preheader405, %595, %544, %463, %391, %375, %318, %275, %270, %260, %248, %162, %131, %11, %7
  %.0325 = phi i32 [ %8, %7 ], [ %12, %11 ], [ %132, %131 ], [ %261, %260 ], [ %271, %270 ], [ %276, %275 ], [ %319, %318 ], [ %376, %375 ], [ %392, %391 ], [ %464, %463 ], [ %545, %544 ], [ %596, %595 ], [ %163, %162 ], [ %249, %248 ], [ 0, %.preheader405 ], [ 0, %380 ], [ 0, %377 ], [ 0, %402 ], [ 0, %399 ], [ 0, %.loopexit396 ], [ 0, %546 ], [ 0, %597 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  ret i32 %.0325
}

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #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: readwrite) }
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, !10, i64 160}
!6 = !{!"__SMlocal_mesh", !7, i64 0, !7, i64 4, !7, i64 8, !8, i64 16, !8, i64 40, !8, i64 64, !10, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !11, i64 120, !10, i64 128, !11, i64 136, !7, i64 144, !7, i64 148, !7, i64 152, !10, i64 160, !10, i64 168, !10, i64 176}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!13, !7, i64 44}
!13 = !{!"__SMoptimal", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !11, i64 32, !7, i64 40, !7, i64 44, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !7, i64 104, !8, i64 112, !11, i64 136, !11, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !8, i64 184, !7, i64 196}
!14 = !{!13, !11, i64 136}
!15 = !{!6, !7, i64 0}
!16 = !{!13, !7, i64 16}
!17 = !{!18, !11, i64 40}
!18 = !{!"__SMparam", !7, i64 0, !7, i64 4, !7, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !7, i64 48, !7, i64 52, !7, i64 56, !11, i64 64, !11, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104}
!19 = !{!11, !11, i64 0}
!20 = !{!13, !10, i64 48}
!21 = !{!13, !10, i64 72}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.unroll.disable"}
!24 = distinct !{!24, !25, !26, !27}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!"llvm.loop.isvectorized", i32 1}
!27 = !{!"llvm.loop.unroll.runtime.disable"}
!28 = distinct !{!28, !25, !26}
!29 = !{!13, !10, i64 80}
!30 = !{!13, !10, i64 96}
!31 = !{!32}
!32 = distinct !{!32, !33}
!33 = distinct !{!33, !"LVerDomain"}
!34 = !{!35}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !25, !26, !27}
!37 = distinct !{!37, !25, !26}
!38 = !{!7, !7, i64 0}
!39 = !{!6, !7, i64 152}
!40 = !{!41}
!41 = distinct !{!41, !42}
!42 = distinct !{!42, !"LVerDomain"}
!43 = !{!44}
!44 = distinct !{!44, !42}
!45 = distinct !{!45, !25, !26, !27}
!46 = distinct !{!46, !25, !26}
!47 = distinct !{!47, !23}
!48 = distinct !{!48, !25, !26, !27}
!49 = distinct !{!49, !25, !26}
!50 = distinct !{!50, !25}
!51 = !{!18, !11, i64 24}
!52 = !{!53, !11, i64 16}
!53 = !{!"__SMactive", !7, i64 0, !7, i64 4, !10, i64 8, !11, i64 16}
!54 = !{!13, !10, i64 160}
!55 = !{!13, !7, i64 20}
!56 = !{!57}
!57 = distinct !{!57, !58}
!58 = distinct !{!58, !"LVerDomain"}
!59 = !{!60}
!60 = distinct !{!60, !58}
!61 = distinct !{!61, !25, !26, !27}
!62 = distinct !{!62, !25, !26}
!63 = !{!13, !10, i64 64}
!64 = distinct !{!64, !23}
!65 = distinct !{!65, !25, !26, !27}
!66 = distinct !{!66, !25, !26}
!67 = !{!13, !10, i64 88}
!68 = !{!18, !11, i64 32}
!69 = distinct !{!69, !23}
!70 = distinct !{!70, !25, !26, !27}
!71 = distinct !{!71, !25, !26}
!72 = !{!73}
!73 = distinct !{!73, !74}
!74 = distinct !{!74, !"LVerDomain"}
!75 = !{!76}
!76 = distinct !{!76, !74}
!77 = distinct !{!77, !25, !26, !27}
!78 = distinct !{!78, !25, !26}
!79 = distinct !{!79, !23}
!80 = distinct !{!80, !25, !26, !27}
!81 = distinct !{!81, !25, !26}
!82 = distinct !{!82, !23}
!83 = distinct !{!83, !25, !26, !27}
!84 = distinct !{!84, !25, !26}
!85 = distinct !{!85, !25}


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