; LLVM IR from ImperialCollegeLondon/pnflow :: src/pnm/pnflow/polygon/polygonDrain.ll (ZN7Polygon20centreEntryPrsOilInjEv)

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.2" = type { i8 }
%class.ElemModel = type { ptr, double, double, ptr, ptr, double, ptr, i8, i8, i8, i8, i32, double, double, double, double, double, double, double, %"struct.std::pair", %"struct.std::pair" }
%"struct.std::pair" = type { double, double }
%class.VoidElem = type { %class.ElemModel, double, double, double, double }
%class.Polygon = type { %class.VoidElem, i32, %"class.std::vector.16", ptr, ptr, i16, i8, double }
%"class.std::vector.16" = type { %"struct.std::_Vector_base.17" }
%"struct.std::_Vector_base.17" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.LayerApex = type { %class.Apex, i32, ptr, double, ptr, double }
%class.Apex = type { ptr, i8, double, double, ptr, i32, double, double, double, double, i8, i8, i8, i8, %"struct.std::pair.0" }
%"struct.std::pair.0" = type { i32, double }

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@_ZN9ElemModel2PIE = external constant double, align 8
@__FUNCTION__._ZN6Circle20centreEntryPrsOilInjEv = external hidden unnamed_addr constant [21 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z6_cerr_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES4_i(ptr noundef, ptr noundef, i32 noundef) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #1

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z2_sIiENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 4 dereferenceable(4)) #3

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984)) #3 align 2

; Function Attrs: nounwind
declare double @cos(double noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Elem22numOilCentreFeederNeisEv(ptr noundef nonnull align 8 dereferenceable(408)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK10CommonData11poreFillAlgB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(1972)) #0 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408), i32 noundef) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK9ElemModel17affectsAdjEntryPcERK5Fluid(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(80)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(80) ptr @_ZNK7GNMData5waterEv(ptr noundef nonnull align 8 dereferenceable(984)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972), i32 noundef) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK9ElemModel3RRREv(ptr noundef nonnull align 8 dereferenceable(152)) #0 align 2

; Function Attrs: nounwind
declare i32 @rand() #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK9ElemModel16Pc_pistonTypeRecEv(ptr noundef nonnull align 8 dereferenceable(152)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK9LayerApex13trappedOLayerEv(ptr noundef nonnull align 8 dereferenceable(144)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN7Polygon20centreEntryPrsOilInjEv(ptr noundef nonnull align 8 dereferenceable(248) %0) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca double, align 8
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca i32, align 4
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca i1, align 1
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca i1, align 1
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca i1, align 1
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca i1, align 1
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca i1, align 1
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca i1, align 1
  %27 = alloca %"class.std::allocator.2", align 1
  %28 = alloca i1, align 1
  %29 = alloca i1, align 1
  %30 = alloca i1, align 1
  %31 = alloca i1, align 1
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca i1, align 1
  %34 = alloca %"class.std::allocator.2", align 1
  %35 = alloca i1, align 1
  %36 = alloca i1, align 1
  %37 = alloca i1, align 1
  %38 = alloca i1, align 1
  %39 = alloca i1, align 1
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca i1, align 1
  %42 = alloca %"class.std::allocator.2", align 1
  %43 = alloca i1, align 1
  %44 = alloca i1, align 1
  %45 = alloca i1, align 1
  %46 = alloca i1, align 1
  %47 = alloca i1, align 1
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca i1, align 1
  %50 = alloca i32, align 4
  %51 = alloca i1, align 1
  %52 = alloca i1, align 1
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca i1, align 1
  %56 = alloca %"class.std::allocator.2", align 1
  %57 = alloca i1, align 1
  %58 = alloca i1, align 1
  %59 = alloca i1, align 1
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca i1, align 1
  %62 = alloca %"class.std::allocator.2", align 1
  %63 = alloca i1, align 1
  %64 = alloca i1, align 1
  %65 = alloca i1, align 1
  %66 = alloca i1, align 1
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca i32, align 4
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %74 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #9
  %75 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %76 = load ptr, ptr %75, align 8, !tbaa !9
  %77 = call noundef i32 @_ZNK4Elem22numOilCentreFeederNeisEv(ptr noundef nonnull align 8 dereferenceable(408) %76)
  store i32 %77, ptr %3, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #9
  %78 = getelementptr inbounds %class.VoidElem, ptr %74, i32 0, i32 4
  %79 = load double, ptr %78, align 8, !tbaa !16
  store double %79, ptr %4, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  %80 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %81 = load ptr, ptr %80, align 8, !tbaa !9
  %82 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %81)
  br i1 %82, label %83, label %557

83:                                               ; preds = %1
  %84 = load double, ptr %4, align 8, !tbaa !18
  %85 = load double, ptr @_ZN9ElemModel2PIE, align 8, !tbaa !18
  %86 = fdiv double %85, 2.000000e+00
  %87 = fcmp ogt double %84, %86
  br i1 %87, label %88, label %557

88:                                               ; preds = %83
  %89 = load i32, ptr %3, align 4, !tbaa !15
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %91, label %557

91:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #9
  store double 0.000000e+00, ptr %6, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  store i32 0, ptr %7, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #9
  %92 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 4
  %93 = load ptr, ptr %92, align 8, !tbaa !19
  %94 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK10CommonData11poreFillAlgB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(1972) %93)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %94)
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  store i32 0, ptr %9, align 4, !tbaa !15
  br label %95

95:                                               ; preds = %189, %91
  %96 = load i32, ptr %9, align 4, !tbaa !15
  %97 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %98 = load ptr, ptr %97, align 8, !tbaa !9
  %99 = invoke noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %98)
          to label %100 unwind label %103

100:                                              ; preds = %95
  %101 = icmp slt i32 %96, %99
  br i1 %101, label %107, label %102

102:                                              ; preds = %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  br label %193

103:                                              ; preds = %133, %127, %121, %118, %114, %112, %107, %95
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %10, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %11, align 4
  br label %192

107:                                              ; preds = %100
  %108 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %109 = load ptr, ptr %108, align 8, !tbaa !9
  %110 = load i32, ptr %9, align 4, !tbaa !15
  %111 = invoke noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %109, i32 noundef %110)
          to label %112 unwind label %103

112:                                              ; preds = %107
  %113 = invoke noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %111)
          to label %114 unwind label %103

114:                                              ; preds = %112
  %115 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 4
  %116 = load ptr, ptr %115, align 8, !tbaa !19
  %117 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZNK7GNMData5waterEv(ptr noundef nonnull align 8 dereferenceable(984) %116)
          to label %118 unwind label %103

118:                                              ; preds = %114
  %119 = invoke noundef zeroext i1 @_ZNK9ElemModel17affectsAdjEntryPcERK5Fluid(ptr noundef nonnull align 8 dereferenceable(152) %113, ptr noundef nonnull align 8 dereferenceable(80) %117)
          to label %120 unwind label %103

120:                                              ; preds = %118
  br i1 %119, label %121, label %188

121:                                              ; preds = %120
  %122 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %123 = load ptr, ptr %122, align 8, !tbaa !9
  %124 = invoke noundef i32 @_ZNK4Elem9rockIndexEv(ptr noundef nonnull align 8 dereferenceable(408) %123)
          to label %125 unwind label %103

125:                                              ; preds = %121
  %126 = icmp ne i32 %124, 0
  br i1 %126, label %188, label %127

127:                                              ; preds = %125
  %128 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %8, i64 noundef 0)
          to label %129 unwind label %103

129:                                              ; preds = %127
  %130 = load i8, ptr %128, align 1, !tbaa !20
  %131 = sext i8 %130 to i32
  %132 = icmp eq i32 %131, 111
  br i1 %132, label %139, label %133

133:                                              ; preds = %129
  %134 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %8, i64 noundef 0)
          to label %135 unwind label %103

135:                                              ; preds = %133
  %136 = load i8, ptr %134, align 1, !tbaa !20
  %137 = sext i8 %136 to i32
  %138 = icmp eq i32 %137, 79
  br i1 %138, label %139, label %167

139:                                              ; preds = %135, %129
  %140 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 4
  %141 = load ptr, ptr %140, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  store i32 5, ptr %12, align 4, !tbaa !15
  %142 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %143 unwind label %163

143:                                              ; preds = %139
  %144 = load i32, ptr %142, align 4, !tbaa !15
  %145 = invoke noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972) %141, i32 noundef %144)
          to label %146 unwind label %163

146:                                              ; preds = %143
  %147 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %148 = load ptr, ptr %147, align 8, !tbaa !9
  %149 = load i32, ptr %9, align 4, !tbaa !15
  %150 = invoke noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %148, i32 noundef %149)
          to label %151 unwind label %163

151:                                              ; preds = %146
  %152 = invoke noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %150)
          to label %153 unwind label %163

153:                                              ; preds = %151
  %154 = invoke noundef double @_ZNK9ElemModel3RRREv(ptr noundef nonnull align 8 dereferenceable(152) %152)
          to label %155 unwind label %163

155:                                              ; preds = %153
  %156 = fmul double %145, %154
  %157 = call i32 @rand() #9
  %158 = sitofp i32 %157 to double
  %159 = fmul double %156, %158
  %160 = fdiv double %159, 0x41DFFFFFFFC00000
  %161 = load double, ptr %6, align 8, !tbaa !18
  %162 = fadd double %161, %160
  store double %162, ptr %6, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %185

163:                                              ; preds = %153, %151, %146, %143, %139
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %10, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %192

167:                                              ; preds = %135
  %168 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 4
  %169 = load ptr, ptr %168, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  store i32 5, ptr %13, align 4, !tbaa !15
  %170 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %171 unwind label %181

171:                                              ; preds = %167
  %172 = load i32, ptr %170, align 4, !tbaa !15
  %173 = invoke noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972) %169, i32 noundef %172)
          to label %174 unwind label %181

174:                                              ; preds = %171
  %175 = call i32 @rand() #9
  %176 = sitofp i32 %175 to double
  %177 = fmul double %173, %176
  %178 = fdiv double %177, 0x41DFFFFFFFC00000
  %179 = load double, ptr %6, align 8, !tbaa !18
  %180 = fadd double %179, %178
  store double %180, ptr %6, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %185

181:                                              ; preds = %171, %167
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %10, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %192

185:                                              ; preds = %174, %155
  %186 = load i32, ptr %7, align 4, !tbaa !15
  %187 = add nsw i32 %186, 1
  store i32 %187, ptr %7, align 4, !tbaa !15
  br label %188

188:                                              ; preds = %185, %125, %120
  br label %189

189:                                              ; preds = %188
  %190 = load i32, ptr %9, align 4, !tbaa !15
  %191 = add nsw i32 %190, 1
  store i32 %191, ptr %9, align 4, !tbaa !15
  br label %95, !llvm.loop !21

192:                                              ; preds = %181, %163, %103
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  br label %556

193:                                              ; preds = %102
  %194 = load i32, ptr %7, align 4, !tbaa !15
  %195 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %196 = load ptr, ptr %195, align 8, !tbaa !9
  store i1 false, ptr %16, align 1
  store i1 false, ptr %18, align 1
  store i1 false, ptr %20, align 1
  store i1 false, ptr %22, align 1
  store i1 false, ptr %24, align 1
  store i1 false, ptr %26, align 1
  store i1 false, ptr %28, align 1
  store i1 false, ptr %29, align 1
  store i1 false, ptr %30, align 1
  store i1 false, ptr %31, align 1
  store i1 false, ptr %33, align 1
  store i1 false, ptr %35, align 1
  store i1 false, ptr %36, align 1
  store i1 false, ptr %37, align 1
  store i1 false, ptr %38, align 1
  store i1 false, ptr %39, align 1
  store i1 false, ptr %41, align 1
  store i1 false, ptr %43, align 1
  store i1 false, ptr %44, align 1
  store i1 false, ptr %45, align 1
  store i1 false, ptr %46, align 1
  store i1 false, ptr %47, align 1
  store i1 false, ptr %49, align 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  store i1 false, ptr %51, align 1
  store i1 false, ptr %52, align 1
  store i1 false, ptr %55, align 1
  store i1 false, ptr %57, align 1
  store i1 false, ptr %58, align 1
  store i1 false, ptr %59, align 1
  store i1 false, ptr %61, align 1
  store i1 false, ptr %63, align 1
  store i1 false, ptr %64, align 1
  store i1 false, ptr %65, align 1
  store i1 false, ptr %66, align 1
  %197 = invoke noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %196)
          to label %198 unwind label %339

198:                                              ; preds = %193
  %199 = load i32, ptr %3, align 4, !tbaa !15
  %200 = sub nsw i32 %197, %199
  %201 = icmp eq i32 %194, %200
  br i1 %201, label %218, label %202

202:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #9
  store i1 true, ptr %16, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #9
  store i1 true, ptr %18, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #9
  store i1 true, ptr %20, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #9
  store i1 true, ptr %22, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #9
  store i1 true, ptr %24, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #9
  store i1 true, ptr %26, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #9
  store i1 true, ptr %28, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #9
  store i1 true, ptr %29, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %203 unwind label %343

203:                                              ; preds = %202
  store i1 true, ptr %30, align 1
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.1)
          to label %204 unwind label %347

204:                                              ; preds = %203
  store i1 true, ptr %31, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #9
  store i1 true, ptr %33, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #9
  store i1 true, ptr %35, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #9
  store i1 true, ptr %36, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef @__FUNCTION__._ZN6Circle20centreEntryPrsOilInjEv, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %205 unwind label %351

205:                                              ; preds = %204
  store i1 true, ptr %37, align 1
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %206 unwind label %355

206:                                              ; preds = %205
  store i1 true, ptr %38, align 1
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.2)
          to label %207 unwind label %359

207:                                              ; preds = %206
  store i1 true, ptr %39, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #9
  store i1 true, ptr %41, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #9
  store i1 true, ptr %43, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #9
  store i1 true, ptr %44, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %42)
          to label %208 unwind label %363

208:                                              ; preds = %207
  store i1 true, ptr %45, align 1
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %209 unwind label %367

209:                                              ; preds = %208
  store i1 true, ptr %46, align 1
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.4)
          to label %210 unwind label %371

210:                                              ; preds = %209
  store i1 true, ptr %47, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #9
  store i1 true, ptr %49, align 1
  store i32 204, ptr %50, align 4, !tbaa !15
  invoke void @_Z2_sIiENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %211 unwind label %375

211:                                              ; preds = %210
  store i1 true, ptr %51, align 1
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %212 unwind label %379

212:                                              ; preds = %211
  store i1 true, ptr %52, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #9
  store i1 true, ptr %55, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #9
  store i1 true, ptr %57, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %56) #9
  store i1 true, ptr %58, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %56)
          to label %213 unwind label %383

213:                                              ; preds = %212
  store i1 true, ptr %59, align 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #9
  store i1 true, ptr %61, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #9
  store i1 true, ptr %63, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  store i1 true, ptr %64, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %62)
          to label %214 unwind label %387

214:                                              ; preds = %213
  store i1 true, ptr %65, align 1
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %215 unwind label %391

215:                                              ; preds = %214
  store i1 true, ptr %66, align 1
  %216 = invoke noundef zeroext i1 @_Z6_cerr_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES4_i(ptr noundef %14, ptr noundef %53, i32 noundef 0)
          to label %217 unwind label %395

217:                                              ; preds = %215
  br label %218

218:                                              ; preds = %217, %198
  %219 = phi i1 [ true, %198 ], [ %216, %217 ]
  %220 = xor i1 %219, true
  %221 = load i1, ptr %66, align 1
  br i1 %221, label %222, label %223

222:                                              ; preds = %218
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  br label %223

223:                                              ; preds = %222, %218
  %224 = load i1, ptr %65, align 1
  br i1 %224, label %225, label %226

225:                                              ; preds = %223
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  br label %226

226:                                              ; preds = %225, %223
  %227 = load i1, ptr %64, align 1
  br i1 %227, label %228, label %229

228:                                              ; preds = %226
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  br label %229

229:                                              ; preds = %228, %226
  %230 = load i1, ptr %63, align 1
  br i1 %230, label %231, label %232

231:                                              ; preds = %229
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #9
  br label %232

232:                                              ; preds = %231, %229
  %233 = load i1, ptr %61, align 1
  br i1 %233, label %234, label %235

234:                                              ; preds = %232
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #9
  br label %235

235:                                              ; preds = %234, %232
  %236 = load i1, ptr %59, align 1
  br i1 %236, label %237, label %238

237:                                              ; preds = %235
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  br label %238

238:                                              ; preds = %237, %235
  %239 = load i1, ptr %58, align 1
  br i1 %239, label %240, label %241

240:                                              ; preds = %238
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %56) #9
  br label %241

241:                                              ; preds = %240, %238
  %242 = load i1, ptr %57, align 1
  br i1 %242, label %243, label %244

243:                                              ; preds = %241
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #9
  br label %244

244:                                              ; preds = %243, %241
  %245 = load i1, ptr %55, align 1
  br i1 %245, label %246, label %247

246:                                              ; preds = %244
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #9
  br label %247

247:                                              ; preds = %246, %244
  %248 = load i1, ptr %52, align 1
  br i1 %248, label %249, label %250

249:                                              ; preds = %247
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #9
  br label %250

250:                                              ; preds = %249, %247
  %251 = load i1, ptr %51, align 1
  br i1 %251, label %252, label %253

252:                                              ; preds = %250
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  br label %253

253:                                              ; preds = %252, %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  %254 = load i1, ptr %49, align 1
  br i1 %254, label %255, label %256

255:                                              ; preds = %253
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  br label %256

256:                                              ; preds = %255, %253
  %257 = load i1, ptr %47, align 1
  br i1 %257, label %258, label %259

258:                                              ; preds = %256
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  br label %259

259:                                              ; preds = %258, %256
  %260 = load i1, ptr %46, align 1
  br i1 %260, label %261, label %262

261:                                              ; preds = %259
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  br label %262

262:                                              ; preds = %261, %259
  %263 = load i1, ptr %45, align 1
  br i1 %263, label %264, label %265

264:                                              ; preds = %262
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #9
  br label %265

265:                                              ; preds = %264, %262
  %266 = load i1, ptr %44, align 1
  br i1 %266, label %267, label %268

267:                                              ; preds = %265
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #9
  br label %268

268:                                              ; preds = %267, %265
  %269 = load i1, ptr %43, align 1
  br i1 %269, label %270, label %271

270:                                              ; preds = %268
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #9
  br label %271

271:                                              ; preds = %270, %268
  %272 = load i1, ptr %41, align 1
  br i1 %272, label %273, label %274

273:                                              ; preds = %271
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #9
  br label %274

274:                                              ; preds = %273, %271
  %275 = load i1, ptr %39, align 1
  br i1 %275, label %276, label %277

276:                                              ; preds = %274
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  br label %277

277:                                              ; preds = %276, %274
  %278 = load i1, ptr %38, align 1
  br i1 %278, label %279, label %280

279:                                              ; preds = %277
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  br label %280

280:                                              ; preds = %279, %277
  %281 = load i1, ptr %37, align 1
  br i1 %281, label %282, label %283

282:                                              ; preds = %280
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #9
  br label %283

283:                                              ; preds = %282, %280
  %284 = load i1, ptr %36, align 1
  br i1 %284, label %285, label %286

285:                                              ; preds = %283
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #9
  br label %286

286:                                              ; preds = %285, %283
  %287 = load i1, ptr %35, align 1
  br i1 %287, label %288, label %289

288:                                              ; preds = %286
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  br label %289

289:                                              ; preds = %288, %286
  %290 = load i1, ptr %33, align 1
  br i1 %290, label %291, label %292

291:                                              ; preds = %289
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #9
  br label %292

292:                                              ; preds = %291, %289
  %293 = load i1, ptr %31, align 1
  br i1 %293, label %294, label %295

294:                                              ; preds = %292
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  br label %295

295:                                              ; preds = %294, %292
  %296 = load i1, ptr %30, align 1
  br i1 %296, label %297, label %298

297:                                              ; preds = %295
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  br label %298

298:                                              ; preds = %297, %295
  %299 = load i1, ptr %29, align 1
  br i1 %299, label %300, label %301

300:                                              ; preds = %298
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #9
  br label %301

301:                                              ; preds = %300, %298
  %302 = load i1, ptr %28, align 1
  br i1 %302, label %303, label %304

303:                                              ; preds = %301
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #9
  br label %304

304:                                              ; preds = %303, %301
  %305 = load i1, ptr %26, align 1
  br i1 %305, label %306, label %307

306:                                              ; preds = %304
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #9
  br label %307

307:                                              ; preds = %306, %304
  %308 = load i1, ptr %24, align 1
  br i1 %308, label %309, label %310

309:                                              ; preds = %307
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #9
  br label %310

310:                                              ; preds = %309, %307
  %311 = load i1, ptr %22, align 1
  br i1 %311, label %312, label %313

312:                                              ; preds = %310
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  br label %313

313:                                              ; preds = %312, %310
  %314 = load i1, ptr %20, align 1
  br i1 %314, label %315, label %316

315:                                              ; preds = %313
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #9
  br label %316

316:                                              ; preds = %315, %313
  %317 = load i1, ptr %18, align 1
  br i1 %317, label %318, label %319

318:                                              ; preds = %316
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  br label %319

319:                                              ; preds = %318, %316
  %320 = load i1, ptr %16, align 1
  br i1 %320, label %321, label %322

321:                                              ; preds = %319
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #9
  br label %322

322:                                              ; preds = %321, %319
  %323 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.9)
          to label %324 unwind label %339

324:                                              ; preds = %322
  br i1 %323, label %325, label %514

325:                                              ; preds = %324
  %326 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 4
  %327 = load ptr, ptr %326, align 8, !tbaa !19
  %328 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %327)
          to label %329 unwind label %339

329:                                              ; preds = %325
  %330 = load double, ptr %4, align 8, !tbaa !18
  %331 = call double @cos(double noundef %330) #9
  %332 = fmul double 2.000000e+00, %331
  %333 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 5
  %334 = load double, ptr %333, align 8, !tbaa !23
  %335 = fdiv double %332, %334
  %336 = load double, ptr %6, align 8, !tbaa !18
  %337 = fsub double %335, %336
  %338 = fmul double %328, %337
  store double %338, ptr %5, align 8, !tbaa !18
  br label %555

339:                                              ; preds = %534, %520, %517, %514, %325, %322, %193
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %10, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %11, align 4
  br label %556

343:                                              ; preds = %202
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %10, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %11, align 4
  br label %489

347:                                              ; preds = %203
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %10, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %11, align 4
  br label %485

351:                                              ; preds = %204
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %10, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %11, align 4
  br label %472

355:                                              ; preds = %205
  %356 = landingpad { ptr, i32 }
          cleanup
  %357 = extractvalue { ptr, i32 } %356, 0
  store ptr %357, ptr %10, align 8
  %358 = extractvalue { ptr, i32 } %356, 1
  store i32 %358, ptr %11, align 4
  br label %468

359:                                              ; preds = %206
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %10, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %11, align 4
  br label %464

363:                                              ; preds = %207
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %10, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %11, align 4
  br label %451

367:                                              ; preds = %208
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %10, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %11, align 4
  br label %447

371:                                              ; preds = %209
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %10, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %11, align 4
  br label %443

375:                                              ; preds = %210
  %376 = landingpad { ptr, i32 }
          cleanup
  %377 = extractvalue { ptr, i32 } %376, 0
  store ptr %377, ptr %10, align 8
  %378 = extractvalue { ptr, i32 } %376, 1
  store i32 %378, ptr %11, align 4
  br label %436

379:                                              ; preds = %211
  %380 = landingpad { ptr, i32 }
          cleanup
  %381 = extractvalue { ptr, i32 } %380, 0
  store ptr %381, ptr %10, align 8
  %382 = extractvalue { ptr, i32 } %380, 1
  store i32 %382, ptr %11, align 4
  br label %432

383:                                              ; preds = %212
  %384 = landingpad { ptr, i32 }
          cleanup
  %385 = extractvalue { ptr, i32 } %384, 0
  store ptr %385, ptr %10, align 8
  %386 = extractvalue { ptr, i32 } %384, 1
  store i32 %386, ptr %11, align 4
  br label %419

387:                                              ; preds = %213
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %10, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %11, align 4
  br label %406

391:                                              ; preds = %214
  %392 = landingpad { ptr, i32 }
          cleanup
  %393 = extractvalue { ptr, i32 } %392, 0
  store ptr %393, ptr %10, align 8
  %394 = extractvalue { ptr, i32 } %392, 1
  store i32 %394, ptr %11, align 4
  br label %402

395:                                              ; preds = %215
  %396 = landingpad { ptr, i32 }
          cleanup
  %397 = extractvalue { ptr, i32 } %396, 0
  store ptr %397, ptr %10, align 8
  %398 = extractvalue { ptr, i32 } %396, 1
  store i32 %398, ptr %11, align 4
  %399 = load i1, ptr %66, align 1
  br i1 %399, label %400, label %401

400:                                              ; preds = %395
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  br label %401

401:                                              ; preds = %400, %395
  br label %402

402:                                              ; preds = %401, %391
  %403 = load i1, ptr %65, align 1
  br i1 %403, label %404, label %405

404:                                              ; preds = %402
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  br label %405

405:                                              ; preds = %404, %402
  br label %406

406:                                              ; preds = %405, %387
  %407 = load i1, ptr %64, align 1
  br i1 %407, label %408, label %409

408:                                              ; preds = %406
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #9
  br label %409

409:                                              ; preds = %408, %406
  %410 = load i1, ptr %63, align 1
  br i1 %410, label %411, label %412

411:                                              ; preds = %409
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #9
  br label %412

412:                                              ; preds = %411, %409
  %413 = load i1, ptr %61, align 1
  br i1 %413, label %414, label %415

414:                                              ; preds = %412
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #9
  br label %415

415:                                              ; preds = %414, %412
  %416 = load i1, ptr %59, align 1
  br i1 %416, label %417, label %418

417:                                              ; preds = %415
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  br label %418

418:                                              ; preds = %417, %415
  br label %419

419:                                              ; preds = %418, %383
  %420 = load i1, ptr %58, align 1
  br i1 %420, label %421, label %422

421:                                              ; preds = %419
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %56) #9
  br label %422

422:                                              ; preds = %421, %419
  %423 = load i1, ptr %57, align 1
  br i1 %423, label %424, label %425

424:                                              ; preds = %422
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #9
  br label %425

425:                                              ; preds = %424, %422
  %426 = load i1, ptr %55, align 1
  br i1 %426, label %427, label %428

427:                                              ; preds = %425
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #9
  br label %428

428:                                              ; preds = %427, %425
  %429 = load i1, ptr %52, align 1
  br i1 %429, label %430, label %431

430:                                              ; preds = %428
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #9
  br label %431

431:                                              ; preds = %430, %428
  br label %432

432:                                              ; preds = %431, %379
  %433 = load i1, ptr %51, align 1
  br i1 %433, label %434, label %435

434:                                              ; preds = %432
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #9
  br label %435

435:                                              ; preds = %434, %432
  br label %436

436:                                              ; preds = %435, %375
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  %437 = load i1, ptr %49, align 1
  br i1 %437, label %438, label %439

438:                                              ; preds = %436
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #9
  br label %439

439:                                              ; preds = %438, %436
  %440 = load i1, ptr %47, align 1
  br i1 %440, label %441, label %442

441:                                              ; preds = %439
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  br label %442

442:                                              ; preds = %441, %439
  br label %443

443:                                              ; preds = %442, %371
  %444 = load i1, ptr %46, align 1
  br i1 %444, label %445, label %446

445:                                              ; preds = %443
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  br label %446

446:                                              ; preds = %445, %443
  br label %447

447:                                              ; preds = %446, %367
  %448 = load i1, ptr %45, align 1
  br i1 %448, label %449, label %450

449:                                              ; preds = %447
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #9
  br label %450

450:                                              ; preds = %449, %447
  br label %451

451:                                              ; preds = %450, %363
  %452 = load i1, ptr %44, align 1
  br i1 %452, label %453, label %454

453:                                              ; preds = %451
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #9
  br label %454

454:                                              ; preds = %453, %451
  %455 = load i1, ptr %43, align 1
  br i1 %455, label %456, label %457

456:                                              ; preds = %454
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #9
  br label %457

457:                                              ; preds = %456, %454
  %458 = load i1, ptr %41, align 1
  br i1 %458, label %459, label %460

459:                                              ; preds = %457
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #9
  br label %460

460:                                              ; preds = %459, %457
  %461 = load i1, ptr %39, align 1
  br i1 %461, label %462, label %463

462:                                              ; preds = %460
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  br label %463

463:                                              ; preds = %462, %460
  br label %464

464:                                              ; preds = %463, %359
  %465 = load i1, ptr %38, align 1
  br i1 %465, label %466, label %467

466:                                              ; preds = %464
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  br label %467

467:                                              ; preds = %466, %464
  br label %468

468:                                              ; preds = %467, %355
  %469 = load i1, ptr %37, align 1
  br i1 %469, label %470, label %471

470:                                              ; preds = %468
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #9
  br label %471

471:                                              ; preds = %470, %468
  br label %472

472:                                              ; preds = %471, %351
  %473 = load i1, ptr %36, align 1
  br i1 %473, label %474, label %475

474:                                              ; preds = %472
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #9
  br label %475

475:                                              ; preds = %474, %472
  %476 = load i1, ptr %35, align 1
  br i1 %476, label %477, label %478

477:                                              ; preds = %475
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  br label %478

478:                                              ; preds = %477, %475
  %479 = load i1, ptr %33, align 1
  br i1 %479, label %480, label %481

480:                                              ; preds = %478
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #9
  br label %481

481:                                              ; preds = %480, %478
  %482 = load i1, ptr %31, align 1
  br i1 %482, label %483, label %484

483:                                              ; preds = %481
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  br label %484

484:                                              ; preds = %483, %481
  br label %485

485:                                              ; preds = %484, %347
  %486 = load i1, ptr %30, align 1
  br i1 %486, label %487, label %488

487:                                              ; preds = %485
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #9
  br label %488

488:                                              ; preds = %487, %485
  br label %489

489:                                              ; preds = %488, %343
  %490 = load i1, ptr %29, align 1
  br i1 %490, label %491, label %492

491:                                              ; preds = %489
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #9
  br label %492

492:                                              ; preds = %491, %489
  %493 = load i1, ptr %28, align 1
  br i1 %493, label %494, label %495

494:                                              ; preds = %492
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #9
  br label %495

495:                                              ; preds = %494, %492
  %496 = load i1, ptr %26, align 1
  br i1 %496, label %497, label %498

497:                                              ; preds = %495
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #9
  br label %498

498:                                              ; preds = %497, %495
  %499 = load i1, ptr %24, align 1
  br i1 %499, label %500, label %501

500:                                              ; preds = %498
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #9
  br label %501

501:                                              ; preds = %500, %498
  %502 = load i1, ptr %22, align 1
  br i1 %502, label %503, label %504

503:                                              ; preds = %501
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  br label %504

504:                                              ; preds = %503, %501
  %505 = load i1, ptr %20, align 1
  br i1 %505, label %506, label %507

506:                                              ; preds = %504
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #9
  br label %507

507:                                              ; preds = %506, %504
  %508 = load i1, ptr %18, align 1
  br i1 %508, label %509, label %510

509:                                              ; preds = %507
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  br label %510

510:                                              ; preds = %509, %507
  %511 = load i1, ptr %16, align 1
  br i1 %511, label %512, label %513

512:                                              ; preds = %510
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #9
  br label %513

513:                                              ; preds = %512, %510
  br label %556

514:                                              ; preds = %324
  %515 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.13)
          to label %516 unwind label %339

516:                                              ; preds = %514
  br i1 %515, label %520, label %517

517:                                              ; preds = %516
  %518 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.14)
          to label %519 unwind label %339

519:                                              ; preds = %517
  br i1 %518, label %520, label %534

520:                                              ; preds = %519, %516
  %521 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 4
  %522 = load ptr, ptr %521, align 8, !tbaa !19
  %523 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %522)
          to label %524 unwind label %339

524:                                              ; preds = %520
  %525 = fmul double %523, 2.000000e+00
  %526 = load double, ptr %4, align 8, !tbaa !18
  %527 = call double @cos(double noundef %526) #9
  %528 = fmul double %525, %527
  %529 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 5
  %530 = load double, ptr %529, align 8, !tbaa !23
  %531 = load double, ptr %6, align 8, !tbaa !18
  %532 = fadd double %530, %531
  %533 = fdiv double %528, %532
  store double %533, ptr %5, align 8, !tbaa !18
  br label %554

534:                                              ; preds = %519
  %535 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 4
  %536 = load ptr, ptr %535, align 8, !tbaa !19
  %537 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %536)
          to label %538 unwind label %339

538:                                              ; preds = %534
  %539 = load double, ptr @_ZN9ElemModel2PIE, align 8, !tbaa !18
  %540 = getelementptr inbounds %class.VoidElem, ptr %74, i32 0, i32 1
  %541 = load double, ptr %540, align 8, !tbaa !24
  %542 = fmul double %539, %541
  %543 = call double @sqrt(double noundef %542) #9
  %544 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %543, double 1.000000e+00)
  %545 = fmul double %537, %544
  %546 = load double, ptr %4, align 8, !tbaa !18
  %547 = call double @cos(double noundef %546) #9
  %548 = fmul double %545, %547
  %549 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 5
  %550 = load double, ptr %549, align 8, !tbaa !23
  %551 = load double, ptr %6, align 8, !tbaa !18
  %552 = fadd double %550, %551
  %553 = fdiv double %548, %552
  store double %553, ptr %5, align 8, !tbaa !18
  br label %554

554:                                              ; preds = %538, %524
  br label %555

555:                                              ; preds = %554, %329
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #9
  br label %560

556:                                              ; preds = %513, %339, %192
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #9
  br label %743

557:                                              ; preds = %88, %83, %1
  %558 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 15
  %559 = load double, ptr %558, align 8, !tbaa !25
  store double %559, ptr %5, align 8, !tbaa !18
  br label %560

560:                                              ; preds = %557, %555
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %561 = load double, ptr %5, align 8, !tbaa !18
  store double %561, ptr %67, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  store double 1.000000e+26, ptr %68, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #9
  store i32 0, ptr %69, align 4, !tbaa !15
  br label %562

562:                                              ; preds = %589, %560
  %563 = load i32, ptr %69, align 4, !tbaa !15
  %564 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %565 = load ptr, ptr %564, align 8, !tbaa !9
  %566 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %565)
  %567 = icmp slt i32 %563, %566
  br i1 %567, label %569, label %568

568:                                              ; preds = %562
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  br label %592

569:                                              ; preds = %562
  %570 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %571 = load ptr, ptr %570, align 8, !tbaa !9
  %572 = load i32, ptr %69, align 4, !tbaa !15
  %573 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %571, i32 noundef %572)
  %574 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %573)
  %575 = load ptr, ptr %574, align 8, !tbaa !26
  %576 = getelementptr inbounds ptr, ptr %575, i64 21
  %577 = load ptr, ptr %576, align 8
  %578 = call noundef zeroext i1 %577(ptr noundef nonnull align 8 dereferenceable(152) %574)
  br i1 %578, label %579, label %588

579:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %580 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %581 = load ptr, ptr %580, align 8, !tbaa !9
  %582 = load i32, ptr %69, align 4, !tbaa !15
  %583 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %581, i32 noundef %582)
  %584 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %583)
  %585 = call noundef double @_ZNK9ElemModel16Pc_pistonTypeRecEv(ptr noundef nonnull align 8 dereferenceable(152) %584)
  store double %585, ptr %70, align 8, !tbaa !18
  %586 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef nonnull align 8 dereferenceable(8) %70)
  %587 = load double, ptr %586, align 8, !tbaa !18
  store double %587, ptr %68, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  br label %588

588:                                              ; preds = %579, %569
  br label %589

589:                                              ; preds = %588
  %590 = load i32, ptr %69, align 4, !tbaa !15
  %591 = add nsw i32 %590, 1
  store i32 %591, ptr %69, align 4, !tbaa !15
  br label %562, !llvm.loop !28

592:                                              ; preds = %568
  %593 = load double, ptr %68, align 8, !tbaa !18
  %594 = fcmp olt double %593, 1.000000e+25
  br i1 %594, label %595, label %602

595:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %596 = load double, ptr %68, align 8, !tbaa !18
  %597 = load double, ptr %5, align 8, !tbaa !18
  %598 = fmul double 1.000000e-03, %597
  %599 = call double @llvm.fmuladd.f64(double %596, double 0x3FEFF7CED916872B, double %598)
  store double %599, ptr %71, align 8, !tbaa !18
  %600 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %71, ptr noundef nonnull align 8 dereferenceable(8) %5)
  %601 = load double, ptr %600, align 8, !tbaa !18
  store double %601, ptr %5, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  br label %602

602:                                              ; preds = %595, %592
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %603 = load double, ptr %5, align 8, !tbaa !18
  store double %603, ptr %72, align 8, !tbaa !18
  %604 = getelementptr inbounds %class.Polygon, ptr %74, i32 0, i32 6
  store i8 80, ptr %604, align 2, !tbaa !29
  %605 = getelementptr inbounds %class.Polygon, ptr %74, i32 0, i32 5
  %606 = load i16, ptr %605, align 8, !tbaa !36
  %607 = icmp ne i16 %606, 0
  br i1 %607, label %608, label %705

608:                                              ; preds = %602
  %609 = getelementptr inbounds %class.Polygon, ptr %74, i32 0, i32 4
  %610 = load ptr, ptr %609, align 8, !tbaa !37
  %611 = getelementptr inbounds %class.LayerApex, ptr %610, i64 0
  %612 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK9LayerApex13trappedOLayerEv(ptr noundef nonnull align 8 dereferenceable(144) %611)
  %613 = getelementptr inbounds %"struct.std::pair.0", ptr %612, i32 0, i32 0
  %614 = load i32, ptr %613, align 8, !tbaa !38
  %615 = icmp slt i32 %614, 0
  br i1 %615, label %616, label %705

616:                                              ; preds = %608
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  %617 = call noundef double @_ZNK7Polygon24calcSnapOffPressureDrainEv(ptr noundef nonnull align 8 dereferenceable(248) %74)
  store double %617, ptr %73, align 8, !tbaa !18
  %618 = getelementptr inbounds %class.Polygon, ptr %74, i32 0, i32 4
  %619 = load ptr, ptr %618, align 8, !tbaa !37
  %620 = getelementptr inbounds %class.LayerApex, ptr %619, i64 0
  %621 = load double, ptr %73, align 8, !tbaa !18
  %622 = call noundef zeroext i1 @_ZNK9LayerApex9freeAtPrsEd(ptr noundef nonnull align 8 dereferenceable(144) %620, double noundef %621)
  br i1 %622, label %623, label %668

623:                                              ; preds = %616
  %624 = load i32, ptr %3, align 4, !tbaa !15
  %625 = icmp eq i32 %624, 0
  br i1 %625, label %630, label %626

626:                                              ; preds = %623
  %627 = load double, ptr %5, align 8, !tbaa !18
  %628 = load double, ptr %73, align 8, !tbaa !18
  %629 = fcmp ogt double %627, %628
  br i1 %629, label %630, label %668

630:                                              ; preds = %626, %623
  %631 = load double, ptr %73, align 8, !tbaa !18
  store double %631, ptr %72, align 8, !tbaa !18
  %632 = getelementptr inbounds %class.Polygon, ptr %74, i32 0, i32 6
  store i8 83, ptr %632, align 2, !tbaa !29
  %633 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %634 = load ptr, ptr %633, align 8, !tbaa !9
  %635 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %634)
  br i1 %635, label %636, label %650

636:                                              ; preds = %630
  %637 = call ptr @_ZTWN7mstream7dbgFileE()
  %638 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %637, ptr noundef @.str.15)
  %639 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %640 = load ptr, ptr %639, align 8, !tbaa !9
  %641 = load ptr, ptr %640, align 8, !tbaa !26
  %642 = getelementptr inbounds ptr, ptr %641, i64 12
  %643 = load ptr, ptr %642, align 8
  %644 = call noundef i32 %643(ptr noundef nonnull align 8 dereferenceable(408) %640)
  %645 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %638, i32 noundef %644)
  %646 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %645, ptr noundef @.str.4)
  %647 = load double, ptr %67, align 8, !tbaa !18
  %648 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %646, double noundef %647)
  %649 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %648, ptr noundef @.str.16)
  br label %667

650:                                              ; preds = %630
  %651 = call ptr @_ZTWN7mstream7dbgFileE()
  %652 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %651, ptr noundef @.str.17)
  %653 = getelementptr inbounds %class.Polygon, ptr %74, i32 0, i32 6
  %654 = load i8, ptr %653, align 2, !tbaa !29
  %655 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %652, i8 noundef signext %654)
  %656 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %657 = load ptr, ptr %656, align 8, !tbaa !9
  %658 = load ptr, ptr %657, align 8, !tbaa !26
  %659 = getelementptr inbounds ptr, ptr %658, i64 12
  %660 = load ptr, ptr %659, align 8
  %661 = call noundef i32 %660(ptr noundef nonnull align 8 dereferenceable(408) %657)
  %662 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %655, i32 noundef %661)
  %663 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %662, ptr noundef @.str.4)
  %664 = load double, ptr %73, align 8, !tbaa !18
  %665 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %663, double noundef %664)
  %666 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %665, ptr noundef @.str.16)
  br label %667

667:                                              ; preds = %650, %636
  br label %704

668:                                              ; preds = %626, %616
  %669 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %670 = load ptr, ptr %669, align 8, !tbaa !9
  %671 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %670)
  br i1 %671, label %672, label %686

672:                                              ; preds = %668
  %673 = call ptr @_ZTWN7mstream7dbgFileE()
  %674 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %673, ptr noundef @.str.15)
  %675 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %676 = load ptr, ptr %675, align 8, !tbaa !9
  %677 = load ptr, ptr %676, align 8, !tbaa !26
  %678 = getelementptr inbounds ptr, ptr %677, i64 12
  %679 = load ptr, ptr %678, align 8
  %680 = call noundef i32 %679(ptr noundef nonnull align 8 dereferenceable(408) %676)
  %681 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %674, i32 noundef %680)
  %682 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %681, ptr noundef @.str.4)
  %683 = load double, ptr %67, align 8, !tbaa !18
  %684 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %682, double noundef %683)
  %685 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %684, ptr noundef @.str.16)
  br label %703

686:                                              ; preds = %668
  %687 = call ptr @_ZTWN7mstream7dbgFileE()
  %688 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %687, ptr noundef @.str.17)
  %689 = getelementptr inbounds %class.Polygon, ptr %74, i32 0, i32 6
  %690 = load i8, ptr %689, align 2, !tbaa !29
  %691 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %688, i8 noundef signext %690)
  %692 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %693 = load ptr, ptr %692, align 8, !tbaa !9
  %694 = load ptr, ptr %693, align 8, !tbaa !26
  %695 = getelementptr inbounds ptr, ptr %694, i64 12
  %696 = load ptr, ptr %695, align 8
  %697 = call noundef i32 %696(ptr noundef nonnull align 8 dereferenceable(408) %693)
  %698 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %691, i32 noundef %697)
  %699 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %698, ptr noundef @.str.4)
  %700 = load double, ptr %67, align 8, !tbaa !18
  %701 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %699, double noundef %700)
  %702 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %701, ptr noundef @.str.16)
  br label %703

703:                                              ; preds = %686, %672
  br label %704

704:                                              ; preds = %703, %667
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  br label %741

705:                                              ; preds = %608, %602
  %706 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %707 = load ptr, ptr %706, align 8, !tbaa !9
  %708 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %707)
  br i1 %708, label %709, label %723

709:                                              ; preds = %705
  %710 = call ptr @_ZTWN7mstream7dbgFileE()
  %711 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %710, ptr noundef @.str.15)
  %712 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %713 = load ptr, ptr %712, align 8, !tbaa !9
  %714 = load ptr, ptr %713, align 8, !tbaa !26
  %715 = getelementptr inbounds ptr, ptr %714, i64 12
  %716 = load ptr, ptr %715, align 8
  %717 = call noundef i32 %716(ptr noundef nonnull align 8 dereferenceable(408) %713)
  %718 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %711, i32 noundef %717)
  %719 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %718, ptr noundef @.str.4)
  %720 = load double, ptr %67, align 8, !tbaa !18
  %721 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %719, double noundef %720)
  %722 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %721, ptr noundef @.str.16)
  br label %740

723:                                              ; preds = %705
  %724 = call ptr @_ZTWN7mstream7dbgFileE()
  %725 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %724, ptr noundef @.str.17)
  %726 = getelementptr inbounds %class.Polygon, ptr %74, i32 0, i32 6
  %727 = load i8, ptr %726, align 2, !tbaa !29
  %728 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %725, i8 noundef signext %727)
  %729 = getelementptr inbounds %class.ElemModel, ptr %74, i32 0, i32 3
  %730 = load ptr, ptr %729, align 8, !tbaa !9
  %731 = load ptr, ptr %730, align 8, !tbaa !26
  %732 = getelementptr inbounds ptr, ptr %731, i64 12
  %733 = load ptr, ptr %732, align 8
  %734 = call noundef i32 %733(ptr noundef nonnull align 8 dereferenceable(408) %730)
  %735 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %728, i32 noundef %734)
  %736 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %735, ptr noundef @.str.4)
  %737 = load double, ptr %67, align 8, !tbaa !18
  %738 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %736, double noundef %737)
  %739 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %738, ptr noundef @.str.16)
  br label %740

740:                                              ; preds = %723, %709
  br label %741

741:                                              ; preds = %740, %704
  %742 = load double, ptr %72, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #9
  ret double %742

743:                                              ; preds = %556
  %744 = load ptr, ptr %10, align 8
  %745 = load i32, ptr %11, align 4
  %746 = insertvalue { ptr, i32 } poison, ptr %744, 0
  %747 = insertvalue { ptr, i32 } %746, i32 %745, 1
  resume { ptr, i32 } %747
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Elem9rockIndexEv(ptr noundef nonnull align 8 dereferenceable(408)) #0 align 2

; Function Attrs: nounwind
declare double @sqrt(double noundef) #4

declare noundef double @_ZNK7Polygon24calcSnapOffPressureDrainEv(ptr noundef nonnull align 8 dereferenceable(248)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK9LayerApex9freeAtPrsEd(ptr noundef nonnull align 8 dereferenceable(144), double noundef) #5 align 2

; Function Attrs: uwtable
declare hidden noundef ptr @_ZTWN7mstream7dbgFileE() #8

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #7

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8), i8 noundef signext) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress 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 #4 = { nounwind "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 #5 = { inlinehint mustprogress 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { "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 #8 = { uwtable "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 #9 = { 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++ TBAA"}
!9 = !{!10, !6, i64 24}
!10 = !{!"_ZTS9ElemModel", !11, i64 8, !11, i64 16, !6, i64 24, !6, i64 32, !11, i64 40, !6, i64 48, !12, i64 56, !12, i64 57, !12, i64 58, !12, i64 59, !13, i64 60, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !14, i64 120, !14, i64 136}
!11 = !{!"double", !7, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTSSt4pairIddE", !11, i64 0, !11, i64 8}
!15 = !{!13, !13, i64 0}
!16 = !{!17, !11, i64 176}
!17 = !{!"_ZTS8VoidElem", !10, i64 0, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176}
!18 = !{!11, !11, i64 0}
!19 = !{!10, !6, i64 32}
!20 = !{!7, !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!10, !11, i64 40}
!24 = !{!17, !11, i64 152}
!25 = !{!10, !11, i64 88}
!26 = !{!27, !27, i64 0}
!27 = !{!"vtable pointer", !8, i64 0}
!28 = distinct !{!28, !22}
!29 = !{!30, !7, i64 234}
!30 = !{!"_ZTS7Polygon", !17, i64 0, !13, i64 184, !31, i64 192, !6, i64 216, !6, i64 224, !35, i64 232, !7, i64 234, !11, i64 240}
!31 = !{!"_ZTSSt6vectorIdSaIdEE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!"short", !7, i64 0}
!36 = !{!30, !35, i64 232}
!37 = !{!30, !6, i64 224}
!38 = !{!39, !13, i64 0}
!39 = !{!"_ZTSSt4pairIidE", !13, i64 0, !11, i64 8}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.2" = type { i8 }

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@_ZN9ElemModel2PIE = external local_unnamed_addr constant double, align 8
@__FUNCTION__._ZN6Circle20centreEntryPrsOilInjEv = external hidden unnamed_addr constant [21 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z6_cerr_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES4_i(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z2_sIiENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @cos(double noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Elem22numOilCentreFeederNeisEv(ptr noundef nonnull align 8 dereferenceable(408)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK10CommonData11poreFillAlgB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(1972)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408), i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK9ElemModel17affectsAdjEntryPcERK5Fluid(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(80) ptr @_ZNK7GNMData5waterEv(ptr noundef nonnull align 8 dereferenceable(984)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972), i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK9ElemModel3RRREv(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #0 align 2

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK9ElemModel16Pc_pistonTypeRecEv(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK9LayerApex13trappedOLayerEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN7Polygon20centreEntryPrsOilInjEv(ptr noundef nonnull align 8 dereferenceable(248) %0) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca double, align 8
  %3 = alloca i32, align 4
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::allocator.2", align 1
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::allocator.2", align 1
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::allocator.2", align 1
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator.2", align 1
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::allocator.2", align 1
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = getelementptr inbounds i8, ptr %0, i64 24
  %30 = load ptr, ptr %29, align 8, !tbaa !5
  %31 = tail call noundef i32 @_ZNK4Elem22numOilCentreFeederNeisEv(ptr noundef nonnull align 8 dereferenceable(408) %30)
  %32 = getelementptr inbounds i8, ptr %0, i64 176
  %33 = load double, ptr %32, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #10
  %34 = load ptr, ptr %29, align 8, !tbaa !5
  %35 = tail call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %34)
  br i1 %35, label %36, label %202

36:                                               ; preds = %1
  %37 = load double, ptr @_ZN9ElemModel2PIE, align 8, !tbaa !16
  %38 = fmul double %37, 5.000000e-01
  %39 = fcmp ogt double %33, %38
  %40 = icmp ne i32 %31, 0
  %or.cond = and i1 %40, %39
  br i1 %or.cond, label %41, label %202

41:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #10
  store i32 0, ptr %3, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #10
  %42 = getelementptr inbounds i8, ptr %0, i64 32
  %43 = load ptr, ptr %42, align 8, !tbaa !18
  %44 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK10CommonData11poreFillAlgB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(1972) %43)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %44)
  %45 = load ptr, ptr %29, align 8, !tbaa !5
  %46 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %45)
  %47 = icmp sgt i32 %46, 0
  br i1 %47, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %93, %41
  %.0.lcssa = phi double [ 0.000000e+00, %41 ], [ %.2, %93 ]
  %48 = load i32, ptr %3, align 4, !tbaa !17
  %49 = load ptr, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #10
  %50 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %49)
  %51 = sub nsw i32 %50, %31
  %.not = icmp eq i32 %48, %51
  br i1 %.not, label %.thread, label %98

.lr.ph:                                           ; preds = %41, %93
  %.0214 = phi double [ %.2, %93 ], [ 0.000000e+00, %41 ]
  %.0104212 = phi i32 [ %94, %93 ], [ 0, %41 ]
  %52 = load ptr, ptr %29, align 8, !tbaa !5
  %53 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %52, i32 noundef %.0104212)
  %54 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %53)
  %55 = load ptr, ptr %42, align 8, !tbaa !18
  %56 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNK7GNMData5waterEv(ptr noundef nonnull align 8 dereferenceable(984) %55)
  %57 = call noundef zeroext i1 @_ZNK9ElemModel17affectsAdjEntryPcERK5Fluid(ptr noundef nonnull align 8 dereferenceable(152) %54, ptr noundef nonnull align 8 dereferenceable(80) %56)
  br i1 %57, label %58, label %93

58:                                               ; preds = %.lr.ph
  %59 = load ptr, ptr %29, align 8, !tbaa !5
  %60 = call noundef i32 @_ZNK4Elem9rockIndexEv(ptr noundef nonnull align 8 dereferenceable(408) %59)
  %.not174 = icmp eq i32 %60, 0
  br i1 %.not174, label %61, label %93

61:                                               ; preds = %58
  %62 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %4, i64 noundef 0)
  %63 = load i8, ptr %62, align 1, !tbaa !19
  %64 = icmp eq i8 %63, 111
  br i1 %64, label %69, label %65

65:                                               ; preds = %61
  %66 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %4, i64 noundef 0)
  %67 = load i8, ptr %66, align 1, !tbaa !19
  %68 = icmp eq i8 %67, 79
  br i1 %68, label %69, label %82

69:                                               ; preds = %65, %61
  %70 = load ptr, ptr %42, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #10
  store i32 5, ptr %5, align 4, !tbaa !17
  %71 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %72 = load i32, ptr %71, align 4, !tbaa !17
  %73 = call noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972) %70, i32 noundef %72)
  %74 = load ptr, ptr %29, align 8, !tbaa !5
  %75 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %74, i32 noundef %.0104212)
  %76 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %75)
  %77 = call noundef double @_ZNK9ElemModel3RRREv(ptr noundef nonnull align 8 dereferenceable(152) %76)
  %78 = fmul double %73, %77
  %79 = call i32 @rand() #10
  %80 = sitofp i32 %79 to double
  %81 = fmul double %78, %80
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #10
  br label %90

82:                                               ; preds = %65
  %83 = load ptr, ptr %42, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #10
  store i32 5, ptr %6, align 4, !tbaa !17
  %84 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %85 = load i32, ptr %84, align 4, !tbaa !17
  %86 = call noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972) %83, i32 noundef %85)
  %87 = call i32 @rand() #10
  %88 = sitofp i32 %87 to double
  %89 = fmul double %86, %88
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #10
  br label %90

90:                                               ; preds = %82, %69
  %.pn175.in = phi double [ %81, %69 ], [ %89, %82 ]
  %.pn175 = fdiv double %.pn175.in, 0x41DFFFFFFFC00000
  %.1 = fadd double %.0214, %.pn175
  %91 = load i32, ptr %3, align 4, !tbaa !17
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr %3, align 4, !tbaa !17
  br label %93

93:                                               ; preds = %.lr.ph, %58, %90
  %.2 = phi double [ %.0214, %58 ], [ %.1, %90 ], [ %.0214, %.lr.ph ]
  %94 = add nuw nsw i32 %.0104212, 1
  %95 = load ptr, ptr %29, align 8, !tbaa !5
  %96 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %95)
  %97 = icmp slt i32 %94, %96
  br i1 %97, label %.lr.ph, label %._crit_edge, !llvm.loop !20

98:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %99 unwind label %127

99:                                               ; preds = %98
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.1)
          to label %100 unwind label %129

100:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull @__FUNCTION__._ZN6Circle20centreEntryPrsOilInjEv, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %101 unwind label %131

101:                                              ; preds = %100
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %102 unwind label %133

102:                                              ; preds = %101
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.2)
          to label %103 unwind label %135

103:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %104 unwind label %137

104:                                              ; preds = %103
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %105 unwind label %139

105:                                              ; preds = %104
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.4)
          to label %106 unwind label %141

106:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #10
  store i32 204, ptr %20, align 4, !tbaa !17
  invoke void @_Z2_sIiENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %107 unwind label %143

107:                                              ; preds = %106
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %108 unwind label %145

108:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %109 unwind label %147

109:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %110 unwind label %149

110:                                              ; preds = %109
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %111 unwind label %151

111:                                              ; preds = %110
  %112 = invoke noundef zeroext i1 @_Z6_cerr_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES4_i(ptr noundef nonnull %7, ptr noundef nonnull %21, i32 noundef 0)
          to label %.critedge188 unwind label %153

.thread:                                          ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #10
  br label %.critedge209

.critedge188:                                     ; preds = %111
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #10
  br label %.critedge209

.critedge209:                                     ; preds = %.thread, %.critedge188
  %113 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.9)
  br i1 %113, label %114, label %168

114:                                              ; preds = %.critedge209
  %115 = load ptr, ptr %42, align 8, !tbaa !18
  %116 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %115)
          to label %117 unwind label %125

117:                                              ; preds = %114
  %118 = call double @cos(double noundef %33) #10
  %119 = fmul double %118, 2.000000e+00
  %120 = getelementptr inbounds i8, ptr %0, i64 40
  %121 = load double, ptr %120, align 8, !tbaa !22
  %122 = fdiv double %119, %121
  %123 = fsub double %122, %.0.lcssa
  %124 = fmul double %116, %123
  store double %124, ptr %2, align 8, !tbaa !16
  br label %199

125:                                              ; preds = %183, %172, %114
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %201

127:                                              ; preds = %98
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %167

129:                                              ; preds = %99
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %166

131:                                              ; preds = %100
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %165

133:                                              ; preds = %101
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %164

135:                                              ; preds = %102
  %136 = landingpad { ptr, i32 }
          cleanup
  br label %163

137:                                              ; preds = %103
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %162

139:                                              ; preds = %104
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %161

141:                                              ; preds = %105
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %160

143:                                              ; preds = %106
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %159

145:                                              ; preds = %107
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %158

147:                                              ; preds = %108
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %157

149:                                              ; preds = %109
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %156

151:                                              ; preds = %110
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %155

153:                                              ; preds = %111
  %154 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  br label %155

155:                                              ; preds = %151, %153
  %.pn = phi { ptr, i32 } [ %154, %153 ], [ %152, %151 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  br label %156

156:                                              ; preds = %149, %155
  %.pn.pn = phi { ptr, i32 } [ %.pn, %155 ], [ %150, %149 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  br label %157

157:                                              ; preds = %147, %156
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %156 ], [ %148, %147 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  br label %158

158:                                              ; preds = %145, %157
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %157 ], [ %146, %145 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  br label %159

159:                                              ; preds = %158, %143
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %158 ], [ %144, %143 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #10
  br label %160

160:                                              ; preds = %141, %159
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %159 ], [ %142, %141 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  br label %161

161:                                              ; preds = %139, %160
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %160 ], [ %140, %139 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #10
  br label %162

162:                                              ; preds = %137, %161
  %.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn, %161 ], [ %138, %137 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #10
  br label %163

163:                                              ; preds = %135, %162
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn, %162 ], [ %136, %135 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #10
  br label %164

164:                                              ; preds = %133, %163
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn, %163 ], [ %134, %133 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #10
  br label %165

165:                                              ; preds = %131, %164
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %164 ], [ %132, %131 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #10
  br label %166

166:                                              ; preds = %129, %165
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %165 ], [ %130, %129 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  br label %167

167:                                              ; preds = %127, %166
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %166 ], [ %128, %127 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #10
  br label %201

168:                                              ; preds = %.critedge209
  %169 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.13)
  br i1 %169, label %172, label %170

170:                                              ; preds = %168
  %171 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.14)
  br i1 %171, label %172, label %183

172:                                              ; preds = %170, %168
  %173 = load ptr, ptr %42, align 8, !tbaa !18
  %174 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %173)
          to label %175 unwind label %125

175:                                              ; preds = %172
  %176 = fmul double %174, 2.000000e+00
  %177 = call double @cos(double noundef %33) #10
  %178 = fmul double %176, %177
  %179 = getelementptr inbounds i8, ptr %0, i64 40
  %180 = load double, ptr %179, align 8, !tbaa !22
  %181 = fadd double %.0.lcssa, %180
  %182 = fdiv double %178, %181
  store double %182, ptr %2, align 8, !tbaa !16
  br label %199

183:                                              ; preds = %170
  %184 = load ptr, ptr %42, align 8, !tbaa !18
  %185 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %184)
          to label %186 unwind label %125

186:                                              ; preds = %183
  %187 = getelementptr inbounds i8, ptr %0, i64 152
  %188 = load double, ptr %187, align 8, !tbaa !23
  %189 = fmul double %37, %188
  %190 = call double @sqrt(double noundef %189) #10
  %191 = call double @llvm.fmuladd.f64(double %190, double 2.000000e+00, double 1.000000e+00)
  %192 = fmul double %185, %191
  %193 = call double @cos(double noundef %33) #10
  %194 = fmul double %193, %192
  %195 = getelementptr inbounds i8, ptr %0, i64 40
  %196 = load double, ptr %195, align 8, !tbaa !22
  %197 = fadd double %.0.lcssa, %196
  %198 = fdiv double %194, %197
  store double %198, ptr %2, align 8, !tbaa !16
  br label %199

199:                                              ; preds = %175, %186, %117
  %200 = phi double [ %182, %175 ], [ %198, %186 ], [ %124, %117 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #10
  br label %205

201:                                              ; preds = %167, %125
  %.pn171 = phi { ptr, i32 } [ %126, %125 ], [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %167 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn171

202:                                              ; preds = %36, %1
  %203 = getelementptr inbounds i8, ptr %0, i64 88
  %204 = load double, ptr %203, align 8, !tbaa !24
  store double %204, ptr %2, align 8, !tbaa !16
  br label %205

205:                                              ; preds = %202, %199
  %206 = phi double [ %204, %202 ], [ %200, %199 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  store double 1.000000e+26, ptr %26, align 8, !tbaa !16
  %207 = load ptr, ptr %29, align 8, !tbaa !5
  %208 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %207)
  %209 = icmp sgt i32 %208, 0
  br i1 %209, label %.lr.ph217, label %._crit_edge218.thread

._crit_edge218:                                   ; preds = %225
  %.pre = load double, ptr %26, align 8, !tbaa !16
  %210 = fcmp olt double %.pre, 1.000000e+25
  br i1 %210, label %230, label %._crit_edge218.thread

.lr.ph217:                                        ; preds = %205, %225
  %.0103215 = phi i32 [ %226, %225 ], [ 0, %205 ]
  %211 = load ptr, ptr %29, align 8, !tbaa !5
  %212 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %211, i32 noundef %.0103215)
  %213 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %212)
  %214 = load ptr, ptr %213, align 8, !tbaa !25
  %215 = getelementptr inbounds i8, ptr %214, i64 168
  %216 = load ptr, ptr %215, align 8
  %217 = call noundef zeroext i1 %216(ptr noundef nonnull align 8 dereferenceable(152) %213)
  br i1 %217, label %218, label %225

218:                                              ; preds = %.lr.ph217
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #10
  %219 = load ptr, ptr %29, align 8, !tbaa !5
  %220 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %219, i32 noundef %.0103215)
  %221 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %220)
  %222 = call noundef double @_ZNK9ElemModel16Pc_pistonTypeRecEv(ptr noundef nonnull align 8 dereferenceable(152) %221)
  store double %222, ptr %27, align 8, !tbaa !16
  %223 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %27)
  %224 = load double, ptr %223, align 8, !tbaa !16
  store double %224, ptr %26, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #10
  br label %225

225:                                              ; preds = %.lr.ph217, %218
  %226 = add nuw nsw i32 %.0103215, 1
  %227 = load ptr, ptr %29, align 8, !tbaa !5
  %228 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %227)
  %229 = icmp slt i32 %226, %228
  br i1 %229, label %.lr.ph217, label %._crit_edge218, !llvm.loop !27

230:                                              ; preds = %._crit_edge218
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #10
  %231 = fmul double %206, 1.000000e-03
  %232 = call double @llvm.fmuladd.f64(double %.pre, double 0x3FEFF7CED916872B, double %231)
  store double %232, ptr %28, align 8, !tbaa !16
  %233 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %2)
  %234 = load double, ptr %233, align 8, !tbaa !16
  store double %234, ptr %2, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #10
  br label %._crit_edge218.thread

._crit_edge218.thread:                            ; preds = %205, %230, %._crit_edge218
  %235 = phi double [ %234, %230 ], [ %206, %._crit_edge218 ], [ %206, %205 ]
  %236 = getelementptr inbounds i8, ptr %0, i64 234
  store i8 80, ptr %236, align 2, !tbaa !28
  %237 = getelementptr inbounds i8, ptr %0, i64 232
  %238 = load i16, ptr %237, align 8, !tbaa !35
  %.not173 = icmp eq i16 %238, 0
  br i1 %.not173, label %273, label %239

239:                                              ; preds = %._crit_edge218.thread
  %240 = getelementptr inbounds i8, ptr %0, i64 224
  %241 = load ptr, ptr %240, align 8, !tbaa !36
  %242 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK9LayerApex13trappedOLayerEv(ptr noundef nonnull align 8 dereferenceable(144) %241)
  %243 = load i32, ptr %242, align 8, !tbaa !37
  %244 = icmp slt i32 %243, 0
  br i1 %244, label %245, label %273

245:                                              ; preds = %239
  %246 = call noundef double @_ZNK7Polygon24calcSnapOffPressureDrainEv(ptr noundef nonnull align 8 dereferenceable(248) %0)
  %247 = load ptr, ptr %240, align 8, !tbaa !36
  %248 = call noundef zeroext i1 @_ZNK9LayerApex9freeAtPrsEd(ptr noundef nonnull align 8 dereferenceable(144) %247, double noundef %246)
  br i1 %248, label %249, label %263

249:                                              ; preds = %245
  %250 = icmp eq i32 %31, 0
  %251 = load double, ptr %2, align 8
  %252 = fcmp ogt double %251, %246
  %or.cond211 = select i1 %250, i1 true, i1 %252
  br i1 %or.cond211, label %253, label %263

253:                                              ; preds = %249
  store i8 83, ptr %236, align 2, !tbaa !28
  %254 = load ptr, ptr %29, align 8, !tbaa !5
  %255 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %254)
  %256 = call ptr @_ZTWN7mstream7dbgFileE()
  br i1 %255, label %257, label %259

257:                                              ; preds = %253
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %256, ptr noundef nonnull @.str.15)
  br label %283

259:                                              ; preds = %253
  %260 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %256, ptr noundef nonnull @.str.17)
  %261 = load i8, ptr %236, align 2, !tbaa !28
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %260, i8 noundef signext %261)
  br label %283

263:                                              ; preds = %249, %245
  %264 = load ptr, ptr %29, align 8, !tbaa !5
  %265 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %264)
  %266 = call ptr @_ZTWN7mstream7dbgFileE()
  br i1 %265, label %267, label %269

267:                                              ; preds = %263
  %268 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %266, ptr noundef nonnull @.str.15)
  br label %283

269:                                              ; preds = %263
  %270 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %266, ptr noundef nonnull @.str.17)
  %271 = load i8, ptr %236, align 2, !tbaa !28
  %272 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %270, i8 noundef signext %271)
  br label %283

273:                                              ; preds = %239, %._crit_edge218.thread
  %274 = load ptr, ptr %29, align 8, !tbaa !5
  %275 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %274)
  %276 = call ptr @_ZTWN7mstream7dbgFileE()
  br i1 %275, label %277, label %279

277:                                              ; preds = %273
  %278 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %276, ptr noundef nonnull @.str.15)
  br label %283

279:                                              ; preds = %273
  %280 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %276, ptr noundef nonnull @.str.17)
  %281 = load i8, ptr %236, align 2, !tbaa !28
  %282 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %280, i8 noundef signext %281)
  br label %283

283:                                              ; preds = %259, %257, %269, %267, %277, %279
  %.sink221 = phi ptr [ %262, %259 ], [ %258, %257 ], [ %272, %269 ], [ %268, %267 ], [ %278, %277 ], [ %282, %279 ]
  %.sink220 = phi double [ %246, %259 ], [ %206, %257 ], [ %206, %269 ], [ %206, %267 ], [ %206, %277 ], [ %206, %279 ]
  %.1102 = phi double [ %246, %259 ], [ %246, %257 ], [ %235, %269 ], [ %235, %267 ], [ %235, %277 ], [ %235, %279 ]
  %284 = load ptr, ptr %29, align 8, !tbaa !5
  %285 = load ptr, ptr %284, align 8, !tbaa !25
  %286 = getelementptr inbounds i8, ptr %285, i64 96
  %287 = load ptr, ptr %286, align 8
  %288 = call noundef i32 %287(ptr noundef nonnull align 8 dereferenceable(408) %284)
  %289 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %.sink221, i32 noundef %288)
  %290 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %289, ptr noundef nonnull @.str.4)
  %291 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %290, double noundef %.sink220)
  %292 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %291, ptr noundef nonnull @.str.16)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  ret double %.1102
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Elem9rockIndexEv(ptr noundef nonnull align 8 dereferenceable(408)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #4

declare noundef double @_ZNK7Polygon24calcSnapOffPressureDrainEv(ptr noundef nonnull align 8 dereferenceable(248)) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK9LayerApex9freeAtPrsEd(ptr noundef nonnull align 8 dereferenceable(144), double noundef) local_unnamed_addr #5 align 2

; Function Attrs: uwtable
declare hidden noundef ptr @_ZTWN7mstream7dbgFileE() local_unnamed_addr #9

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #8

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8), i8 noundef signext) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress 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 #4 = { mustprogress nofree nounwind willreturn memory(write) "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 #5 = { inlinehint mustprogress 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 #6 = { nounwind "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 #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { "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 #9 = { uwtable "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 #10 = { 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 24}
!6 = !{!"_ZTS9ElemModel", !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !7, i64 40, !10, i64 48, !11, i64 56, !11, i64 57, !11, i64 58, !11, i64 59, !12, i64 60, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !13, i64 120, !13, i64 136}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"bool", !8, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!"_ZTSSt4pairIddE", !7, i64 0, !7, i64 8}
!14 = !{!15, !7, i64 176}
!15 = !{!"_ZTS8VoidElem", !6, i64 0, !7, i64 152, !7, i64 160, !7, i64 168, !7, i64 176}
!16 = !{!7, !7, i64 0}
!17 = !{!12, !12, i64 0}
!18 = !{!6, !10, i64 32}
!19 = !{!8, !8, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!6, !7, i64 40}
!23 = !{!15, !7, i64 152}
!24 = !{!6, !7, i64 88}
!25 = !{!26, !26, i64 0}
!26 = !{!"vtable pointer", !9, i64 0}
!27 = distinct !{!27, !21}
!28 = !{!29, !8, i64 234}
!29 = !{!"_ZTS7Polygon", !15, i64 0, !12, i64 184, !30, i64 192, !10, i64 216, !10, i64 224, !34, i64 232, !8, i64 234, !7, i64 240}
!30 = !{!"_ZTSSt6vectorIdSaIdEE", !31, i64 0}
!31 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!34 = !{!"short", !8, i64 0}
!35 = !{!29, !34, i64 232}
!36 = !{!29, !10, i64 224}
!37 = !{!38, !12, i64 0}
!38 = !{!"_ZTSSt4pairIidE", !12, i64 0, !7, i64 8}


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