; LLVM IR from ImperialCollegeLondon/pnflow :: src/pnm/pnflow/polygon/polygonImb.ll (ZN7Polygon20centreEntryPrsWatInjEv)

; 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.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.CornerApex = type { %class.Apex, ptr, double, double, double, ptr }
%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.4 = external hidden unnamed_addr constant [2 x i8], align 1
@_ZN9ElemModel2PIE = external constant double, align 8
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

declare i32 @__gxx_personality_v0(...)

; 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) #1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Elem23num_WatCentreFeederNeisEv(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 #2 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 @_ZNK7GNMData3oilEv(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)) #4

; 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() #3

; 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) #4

; 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)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK9ElemModel16Pc_pistonTypeAdvEv(ptr noundef nonnull align 8 dereferenceable(152)) #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) #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)) #4

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

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN7Polygon20centreEntryPrsWatInjEv(ptr noundef nonnull align 8 dereferenceable(248) %0) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca double, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %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 double, align 8
  %15 = alloca i32, align 4
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %20 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #9
  %21 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %22 = load ptr, ptr %21, align 8, !tbaa !9
  %23 = call noundef i32 @_ZNK4Elem23num_WatCentreFeederNeisEv(ptr noundef nonnull align 8 dereferenceable(408) %22)
  store i32 %23, ptr %4, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  %24 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %25 = load ptr, ptr %24, align 8, !tbaa !9
  %26 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %25)
  br i1 %26, label %27, label %205

27:                                               ; preds = %1
  %28 = getelementptr inbounds %class.VoidElem, ptr %20, i32 0, i32 3
  %29 = load double, ptr %28, align 8, !tbaa !16
  %30 = load double, ptr @_ZN9ElemModel2PIE, align 8, !tbaa !18
  %31 = fdiv double %30, 2.000000e+00
  %32 = fcmp olt double %29, %31
  br i1 %32, label %33, label %205

33:                                               ; preds = %27
  %34 = load i32, ptr %4, align 4, !tbaa !15
  %35 = icmp sgt i32 %34, 0
  br i1 %35, label %36, label %205

36:                                               ; preds = %33
  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
  %37 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 4
  %38 = load ptr, ptr %37, align 8, !tbaa !19
  %39 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK10CommonData11poreFillAlgB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(1972) %38)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %39)
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  store i32 0, ptr %9, align 4, !tbaa !15
  br label %40

40:                                               ; preds = %134, %36
  %41 = load i32, ptr %9, align 4, !tbaa !15
  %42 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %43 = load ptr, ptr %42, align 8, !tbaa !9
  %44 = invoke noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %43)
          to label %45 unwind label %48

45:                                               ; preds = %40
  %46 = icmp slt i32 %41, %44
  br i1 %46, label %52, label %47

47:                                               ; preds = %45
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  br label %138

48:                                               ; preds = %78, %72, %66, %63, %59, %57, %52, %40
  %49 = landingpad { ptr, i32 }
          cleanup
  %50 = extractvalue { ptr, i32 } %49, 0
  store ptr %50, ptr %10, align 8
  %51 = extractvalue { ptr, i32 } %49, 1
  store i32 %51, ptr %11, align 4
  br label %137

52:                                               ; preds = %45
  %53 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %54 = load ptr, ptr %53, align 8, !tbaa !9
  %55 = load i32, ptr %9, align 4, !tbaa !15
  %56 = invoke noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %54, i32 noundef %55)
          to label %57 unwind label %48

57:                                               ; preds = %52
  %58 = invoke noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %56)
          to label %59 unwind label %48

59:                                               ; preds = %57
  %60 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 4
  %61 = load ptr, ptr %60, align 8, !tbaa !19
  %62 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZNK7GNMData3oilEv(ptr noundef nonnull align 8 dereferenceable(984) %61)
          to label %63 unwind label %48

63:                                               ; preds = %59
  %64 = invoke noundef zeroext i1 @_ZNK9ElemModel17affectsAdjEntryPcERK5Fluid(ptr noundef nonnull align 8 dereferenceable(152) %58, ptr noundef nonnull align 8 dereferenceable(80) %62)
          to label %65 unwind label %48

65:                                               ; preds = %63
  br i1 %64, label %66, label %133

66:                                               ; preds = %65
  %67 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %68 = load ptr, ptr %67, align 8, !tbaa !9
  %69 = invoke noundef i32 @_ZNK4Elem9rockIndexEv(ptr noundef nonnull align 8 dereferenceable(408) %68)
          to label %70 unwind label %48

70:                                               ; preds = %66
  %71 = icmp ne i32 %69, 0
  br i1 %71, label %133, label %72

72:                                               ; preds = %70
  %73 = 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 %74 unwind label %48

74:                                               ; preds = %72
  %75 = load i8, ptr %73, align 1, !tbaa !20
  %76 = sext i8 %75 to i32
  %77 = icmp eq i32 %76, 111
  br i1 %77, label %84, label %78

78:                                               ; preds = %74
  %79 = 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 %80 unwind label %48

80:                                               ; preds = %78
  %81 = load i8, ptr %79, align 1, !tbaa !20
  %82 = sext i8 %81 to i32
  %83 = icmp eq i32 %82, 79
  br i1 %83, label %84, label %112

84:                                               ; preds = %80, %74
  %85 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 4
  %86 = load ptr, ptr %85, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  store i32 5, ptr %12, align 4, !tbaa !15
  %87 = 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 %88 unwind label %108

88:                                               ; preds = %84
  %89 = load i32, ptr %87, align 4, !tbaa !15
  %90 = invoke noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972) %86, i32 noundef %89)
          to label %91 unwind label %108

91:                                               ; preds = %88
  %92 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %93 = load ptr, ptr %92, align 8, !tbaa !9
  %94 = load i32, ptr %9, align 4, !tbaa !15
  %95 = invoke noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %93, i32 noundef %94)
          to label %96 unwind label %108

96:                                               ; preds = %91
  %97 = invoke noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %95)
          to label %98 unwind label %108

98:                                               ; preds = %96
  %99 = invoke noundef double @_ZNK9ElemModel3RRREv(ptr noundef nonnull align 8 dereferenceable(152) %97)
          to label %100 unwind label %108

100:                                              ; preds = %98
  %101 = fmul double %90, %99
  %102 = call i32 @rand() #9
  %103 = sitofp i32 %102 to double
  %104 = fmul double %101, %103
  %105 = fdiv double %104, 0x41DFFFFFFFC00000
  %106 = load double, ptr %6, align 8, !tbaa !18
  %107 = fadd double %106, %105
  store double %107, ptr %6, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %130

108:                                              ; preds = %98, %96, %91, %88, %84
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %10, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %137

112:                                              ; preds = %80
  %113 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 4
  %114 = load ptr, ptr %113, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  store i32 5, ptr %13, align 4, !tbaa !15
  %115 = 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 %116 unwind label %126

116:                                              ; preds = %112
  %117 = load i32, ptr %115, align 4, !tbaa !15
  %118 = invoke noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972) %114, i32 noundef %117)
          to label %119 unwind label %126

119:                                              ; preds = %116
  %120 = call i32 @rand() #9
  %121 = sitofp i32 %120 to double
  %122 = fmul double %118, %121
  %123 = fdiv double %122, 0x41DFFFFFFFC00000
  %124 = load double, ptr %6, align 8, !tbaa !18
  %125 = fadd double %124, %123
  store double %125, ptr %6, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %130

126:                                              ; preds = %116, %112
  %127 = landingpad { ptr, i32 }
          cleanup
  %128 = extractvalue { ptr, i32 } %127, 0
  store ptr %128, ptr %10, align 8
  %129 = extractvalue { ptr, i32 } %127, 1
  store i32 %129, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %137

130:                                              ; preds = %119, %100
  %131 = load i32, ptr %7, align 4, !tbaa !15
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr %7, align 4, !tbaa !15
  br label %133

133:                                              ; preds = %130, %70, %65
  br label %134

134:                                              ; preds = %133
  %135 = load i32, ptr %9, align 4, !tbaa !15
  %136 = add nsw i32 %135, 1
  store i32 %136, ptr %9, align 4, !tbaa !15
  br label %40, !llvm.loop !21

137:                                              ; preds = %126, %108, %48
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  br label %204

138:                                              ; preds = %47
  %139 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.7)
          to label %140 unwind label %156

140:                                              ; preds = %138
  br i1 %139, label %141, label %160

141:                                              ; preds = %140
  %142 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 4
  %143 = load ptr, ptr %142, align 8, !tbaa !19
  %144 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %143)
          to label %145 unwind label %156

145:                                              ; preds = %141
  %146 = getelementptr inbounds %class.VoidElem, ptr %20, i32 0, i32 3
  %147 = load double, ptr %146, align 8, !tbaa !16
  %148 = call double @cos(double noundef %147) #9
  %149 = fmul double 2.000000e+00, %148
  %150 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 5
  %151 = load double, ptr %150, align 8, !tbaa !23
  %152 = fdiv double %149, %151
  %153 = load double, ptr %6, align 8, !tbaa !18
  %154 = fsub double %152, %153
  %155 = fmul double %144, %154
  store double %155, ptr %5, align 8, !tbaa !18
  br label %203

156:                                              ; preds = %181, %166, %163, %160, %141, %138
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %10, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %11, align 4
  br label %204

160:                                              ; preds = %140
  %161 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.10)
          to label %162 unwind label %156

162:                                              ; preds = %160
  br i1 %161, label %166, label %163

163:                                              ; preds = %162
  %164 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.11)
          to label %165 unwind label %156

165:                                              ; preds = %163
  br i1 %164, label %166, label %181

166:                                              ; preds = %165, %162
  %167 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 4
  %168 = load ptr, ptr %167, align 8, !tbaa !19
  %169 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %168)
          to label %170 unwind label %156

170:                                              ; preds = %166
  %171 = fmul double %169, 2.000000e+00
  %172 = getelementptr inbounds %class.VoidElem, ptr %20, i32 0, i32 3
  %173 = load double, ptr %172, align 8, !tbaa !16
  %174 = call double @cos(double noundef %173) #9
  %175 = fmul double %171, %174
  %176 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 5
  %177 = load double, ptr %176, align 8, !tbaa !23
  %178 = load double, ptr %6, align 8, !tbaa !18
  %179 = fadd double %177, %178
  %180 = fdiv double %175, %179
  store double %180, ptr %5, align 8, !tbaa !18
  br label %202

181:                                              ; preds = %165
  %182 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 4
  %183 = load ptr, ptr %182, align 8, !tbaa !19
  %184 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %183)
          to label %185 unwind label %156

185:                                              ; preds = %181
  %186 = load double, ptr @_ZN9ElemModel2PIE, align 8, !tbaa !18
  %187 = getelementptr inbounds %class.VoidElem, ptr %20, i32 0, i32 1
  %188 = load double, ptr %187, align 8, !tbaa !24
  %189 = fmul double %186, %188
  %190 = call double @sqrt(double noundef %189) #9
  %191 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %190, double 1.000000e+00)
  %192 = fmul double %184, %191
  %193 = getelementptr inbounds %class.VoidElem, ptr %20, i32 0, i32 3
  %194 = load double, ptr %193, align 8, !tbaa !16
  %195 = call double @cos(double noundef %194) #9
  %196 = fmul double %192, %195
  %197 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 5
  %198 = load double, ptr %197, align 8, !tbaa !23
  %199 = load double, ptr %6, align 8, !tbaa !18
  %200 = fadd double %198, %199
  %201 = fdiv double %196, %200
  store double %201, ptr %5, align 8, !tbaa !18
  br label %202

202:                                              ; preds = %185, %170
  br label %203

203:                                              ; preds = %202, %145
  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 %208

204:                                              ; preds = %156, %137
  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 4, ptr %4) #9
  br label %374

205:                                              ; preds = %33, %27, %1
  %206 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 16
  %207 = load double, ptr %206, align 8, !tbaa !25
  store double %207, ptr %5, align 8, !tbaa !18
  br label %208

208:                                              ; preds = %205, %203
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  store double -1.000000e+26, ptr %14, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  store i32 0, ptr %15, align 4, !tbaa !15
  br label %209

209:                                              ; preds = %236, %208
  %210 = load i32, ptr %15, align 4, !tbaa !15
  %211 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %212 = load ptr, ptr %211, align 8, !tbaa !9
  %213 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %212)
  %214 = icmp slt i32 %210, %213
  br i1 %214, label %216, label %215

215:                                              ; preds = %209
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  br label %239

216:                                              ; preds = %209
  %217 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %218 = load ptr, ptr %217, align 8, !tbaa !9
  %219 = load i32, ptr %15, align 4, !tbaa !15
  %220 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %218, i32 noundef %219)
  %221 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %220)
  %222 = load ptr, ptr %221, align 8, !tbaa !26
  %223 = getelementptr inbounds ptr, ptr %222, i64 22
  %224 = load ptr, ptr %223, align 8
  %225 = call noundef zeroext i1 %224(ptr noundef nonnull align 8 dereferenceable(152) %221)
  br i1 %225, label %226, label %235

226:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %227 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %228 = load ptr, ptr %227, align 8, !tbaa !9
  %229 = load i32, ptr %15, align 4, !tbaa !15
  %230 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %228, i32 noundef %229)
  %231 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %230)
  %232 = call noundef double @_ZNK9ElemModel16Pc_pistonTypeAdvEv(ptr noundef nonnull align 8 dereferenceable(152) %231)
  store double %232, ptr %16, align 8, !tbaa !18
  %233 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %16)
  %234 = load double, ptr %233, align 8, !tbaa !18
  store double %234, ptr %14, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  br label %235

235:                                              ; preds = %226, %216
  br label %236

236:                                              ; preds = %235
  %237 = load i32, ptr %15, align 4, !tbaa !15
  %238 = add nsw i32 %237, 1
  store i32 %238, ptr %15, align 4, !tbaa !15
  br label %209, !llvm.loop !28

239:                                              ; preds = %215
  %240 = load double, ptr %14, align 8, !tbaa !18
  %241 = fcmp ogt double %240, -1.000000e+25
  br i1 %241, label %242, label %249

242:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %243 = load double, ptr %14, align 8, !tbaa !18
  %244 = load double, ptr %5, align 8, !tbaa !18
  %245 = fmul double 1.000000e-03, %244
  %246 = call double @llvm.fmuladd.f64(double %243, double 0x3FEFF7CED916872B, double %245)
  store double %246, ptr %17, align 8, !tbaa !18
  %247 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %5)
  %248 = load double, ptr %247, align 8, !tbaa !18
  store double %248, ptr %5, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %249

249:                                              ; preds = %242, %239
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %250 = getelementptr inbounds %class.Polygon, ptr %20, i32 0, i32 3
  %251 = load ptr, ptr %250, align 8, !tbaa !29
  %252 = getelementptr inbounds %class.CornerApex, ptr %251, i64 0
  %253 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK10CornerApex13trappedCornerEv(ptr noundef nonnull align 8 dereferenceable(144) %252)
  %254 = getelementptr inbounds %"struct.std::pair.0", ptr %253, i32 0, i32 0
  %255 = load i32, ptr %254, align 8, !tbaa !36
  %256 = icmp slt i32 %255, 0
  br i1 %256, label %257, label %259

257:                                              ; preds = %249
  %258 = call noundef double @_ZNK7Polygon22calcSnapOffPressureImbEv(ptr noundef nonnull align 8 dereferenceable(248) %20)
  br label %260

259:                                              ; preds = %249
  br label %260

260:                                              ; preds = %259, %257
  %261 = phi double [ %258, %257 ], [ -1.000000e+27, %259 ]
  store double %261, ptr %18, align 8, !tbaa !18
  %262 = load i32, ptr %4, align 4, !tbaa !15
  %263 = icmp sgt i32 %262, 0
  br i1 %263, label %264, label %320

264:                                              ; preds = %260
  %265 = load double, ptr %5, align 8, !tbaa !18
  %266 = load double, ptr %18, align 8, !tbaa !18
  %267 = fcmp ogt double %265, %266
  br i1 %267, label %268, label %320

268:                                              ; preds = %264
  %269 = getelementptr inbounds %class.Polygon, ptr %20, i32 0, i32 6
  store i8 80, ptr %269, align 2, !tbaa !38
  %270 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %271 = load ptr, ptr %270, align 8, !tbaa !9
  %272 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %271)
  br i1 %272, label %273, label %287

273:                                              ; preds = %268
  %274 = call ptr @_ZTWN7mstream7dbgFileE()
  %275 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %274, ptr noundef @.str.12)
  %276 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %277 = load ptr, ptr %276, align 8, !tbaa !9
  %278 = load ptr, ptr %277, align 8, !tbaa !26
  %279 = getelementptr inbounds ptr, ptr %278, i64 12
  %280 = load ptr, ptr %279, align 8
  %281 = call noundef i32 %280(ptr noundef nonnull align 8 dereferenceable(408) %277)
  %282 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %275, i32 noundef %281)
  %283 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %282, ptr noundef @.str.4)
  %284 = load double, ptr %5, align 8, !tbaa !18
  %285 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %283, double noundef %284)
  %286 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %285, ptr noundef @.str.13)
  br label %318

287:                                              ; preds = %268
  %288 = call ptr @_ZTWN7mstream7dbgFileE()
  %289 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %288, ptr noundef @.str.14)
  %290 = getelementptr inbounds %class.Polygon, ptr %20, i32 0, i32 6
  %291 = load i8, ptr %290, align 2, !tbaa !38
  %292 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %289, i8 noundef signext %291)
  %293 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %294 = load ptr, ptr %293, align 8, !tbaa !9
  %295 = load ptr, ptr %294, align 8, !tbaa !26
  %296 = getelementptr inbounds ptr, ptr %295, i64 12
  %297 = load ptr, ptr %296, align 8
  %298 = call noundef i32 %297(ptr noundef nonnull align 8 dereferenceable(408) %294)
  %299 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %292, i32 noundef %298)
  %300 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %299, ptr noundef @.str.4)
  %301 = load double, ptr %5, align 8, !tbaa !18
  %302 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %300, double noundef %301)
  %303 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %302, ptr noundef @.str.13)
  %304 = call ptr @_ZTWN7mstream7dbgFileE()
  %305 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %304, ptr noundef @.str.14)
  %306 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %305, i8 noundef signext 80)
  %307 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %308 = load ptr, ptr %307, align 8, !tbaa !9
  %309 = load ptr, ptr %308, align 8, !tbaa !26
  %310 = getelementptr inbounds ptr, ptr %309, i64 12
  %311 = load ptr, ptr %310, align 8
  %312 = call noundef i32 %311(ptr noundef nonnull align 8 dereferenceable(408) %308)
  %313 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %306, i32 noundef %312)
  %314 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %313, ptr noundef @.str.4)
  %315 = load double, ptr %18, align 8, !tbaa !18
  %316 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %314, double noundef %315)
  %317 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %316, ptr noundef @.str.13)
  br label %318

318:                                              ; preds = %287, %273
  %319 = load double, ptr %5, align 8, !tbaa !18
  store double %319, ptr %2, align 8
  store i32 1, ptr %19, align 4
  br label %372

320:                                              ; preds = %264, %260
  %321 = getelementptr inbounds %class.Polygon, ptr %20, i32 0, i32 6
  store i8 83, ptr %321, align 2, !tbaa !38
  %322 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %323 = load ptr, ptr %322, align 8, !tbaa !9
  %324 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %323)
  br i1 %324, label %325, label %339

325:                                              ; preds = %320
  %326 = call ptr @_ZTWN7mstream7dbgFileE()
  %327 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %326, ptr noundef @.str.12)
  %328 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %329 = load ptr, ptr %328, align 8, !tbaa !9
  %330 = load ptr, ptr %329, align 8, !tbaa !26
  %331 = getelementptr inbounds ptr, ptr %330, i64 12
  %332 = load ptr, ptr %331, align 8
  %333 = call noundef i32 %332(ptr noundef nonnull align 8 dereferenceable(408) %329)
  %334 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %327, i32 noundef %333)
  %335 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %334, ptr noundef @.str.4)
  %336 = load double, ptr %5, align 8, !tbaa !18
  %337 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %335, double noundef %336)
  %338 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %337, ptr noundef @.str.13)
  br label %370

339:                                              ; preds = %320
  %340 = call ptr @_ZTWN7mstream7dbgFileE()
  %341 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %340, ptr noundef @.str.14)
  %342 = getelementptr inbounds %class.Polygon, ptr %20, i32 0, i32 6
  %343 = load i8, ptr %342, align 2, !tbaa !38
  %344 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %341, i8 noundef signext %343)
  %345 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %346 = load ptr, ptr %345, align 8, !tbaa !9
  %347 = load ptr, ptr %346, align 8, !tbaa !26
  %348 = getelementptr inbounds ptr, ptr %347, i64 12
  %349 = load ptr, ptr %348, align 8
  %350 = call noundef i32 %349(ptr noundef nonnull align 8 dereferenceable(408) %346)
  %351 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %344, i32 noundef %350)
  %352 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %351, ptr noundef @.str.4)
  %353 = load double, ptr %18, align 8, !tbaa !18
  %354 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %352, double noundef %353)
  %355 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %354, ptr noundef @.str.13)
  %356 = call ptr @_ZTWN7mstream7dbgFileE()
  %357 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %356, ptr noundef @.str.14)
  %358 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %357, i8 noundef signext 80)
  %359 = getelementptr inbounds %class.ElemModel, ptr %20, i32 0, i32 3
  %360 = load ptr, ptr %359, align 8, !tbaa !9
  %361 = load ptr, ptr %360, align 8, !tbaa !26
  %362 = getelementptr inbounds ptr, ptr %361, i64 12
  %363 = load ptr, ptr %362, align 8
  %364 = call noundef i32 %363(ptr noundef nonnull align 8 dereferenceable(408) %360)
  %365 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %358, i32 noundef %364)
  %366 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %365, ptr noundef @.str.4)
  %367 = load double, ptr %5, align 8, !tbaa !18
  %368 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %366, double noundef %367)
  %369 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %368, ptr noundef @.str.13)
  br label %370

370:                                              ; preds = %339, %325
  %371 = load double, ptr %18, align 8, !tbaa !18
  store double %371, ptr %2, align 8
  store i32 1, ptr %19, align 4
  br label %372

372:                                              ; preds = %370, %318
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #9
  %373 = load double, ptr %2, align 8
  ret double %373

374:                                              ; preds = %204
  %375 = load ptr, ptr %10, align 8
  %376 = load i32, ptr %11, align 4
  %377 = insertvalue { ptr, i32 } poison, ptr %375, 0
  %378 = insertvalue { ptr, i32 } %377, i32 %376, 1
  resume { ptr, i32 } %378
}

; 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) #3

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

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

; 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) #2 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) #5

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { 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 #5 = { 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 #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 168}
!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 96}
!26 = !{!27, !27, i64 0}
!27 = !{!"vtable pointer", !8, i64 0}
!28 = distinct !{!28, !22}
!29 = !{!30, !6, i64 216}
!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 = !{!37, !13, i64 0}
!37 = !{!"_ZTSSt4pairIidE", !13, i64 0, !11, i64 8}
!38 = !{!30, !7, i64 234}


; 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] }

@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@_ZN9ElemModel2PIE = external local_unnamed_addr constant double, align 8
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = 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: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

declare i32 @__gxx_personality_v0(...)

; 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) #1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK4Elem23num_WatCentreFeederNeisEv(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 #2 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 @_ZNK7GNMData3oilEv(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 #4

; 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 #5

; 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 #4

; 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 #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK9ElemModel16Pc_pistonTypeAdvEv(ptr noundef nonnull align 8 dereferenceable(152)) 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 #6

; 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 #4

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

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN7Polygon20centreEntryPrsWatInjEv(ptr noundef nonnull align 8 dereferenceable(248) %0) unnamed_addr #2 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 double, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = getelementptr inbounds i8, ptr %0, i64 24
  %11 = load ptr, ptr %10, align 8, !tbaa !5
  %12 = tail call noundef i32 @_ZNK4Elem23num_WatCentreFeederNeisEv(ptr noundef nonnull align 8 dereferenceable(408) %11)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #10
  %13 = load ptr, ptr %10, align 8, !tbaa !5
  %14 = tail call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %13)
  br i1 %14, label %15, label %125

15:                                               ; preds = %1
  %16 = getelementptr inbounds i8, ptr %0, i64 168
  %17 = load double, ptr %16, align 8, !tbaa !14
  %18 = load double, ptr @_ZN9ElemModel2PIE, align 8, !tbaa !16
  %19 = fmul double %18, 5.000000e-01
  %20 = fcmp olt double %17, %19
  %21 = icmp sgt i32 %12, 0
  %or.cond = and i1 %21, %20
  br i1 %or.cond, label %22, label %125

22:                                               ; preds = %15
  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
  %23 = getelementptr inbounds i8, ptr %0, i64 32
  %24 = load ptr, ptr %23, align 8, !tbaa !18
  %25 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK10CommonData11poreFillAlgB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(1972) %24)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %25)
  %26 = load ptr, ptr %10, align 8, !tbaa !5
  %27 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %26)
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %71, %22
  %.024.lcssa = phi double [ 0.000000e+00, %22 ], [ %.2, %71 ]
  %29 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.7)
  br i1 %29, label %76, label %90

.lr.ph:                                           ; preds = %22, %71
  %.02431 = phi double [ %.2, %71 ], [ 0.000000e+00, %22 ]
  %.02529 = phi i32 [ %72, %71 ], [ 0, %22 ]
  %30 = load ptr, ptr %10, align 8, !tbaa !5
  %31 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %30, i32 noundef %.02529)
  %32 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %31)
  %33 = load ptr, ptr %23, align 8, !tbaa !18
  %34 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZNK7GNMData3oilEv(ptr noundef nonnull align 8 dereferenceable(984) %33)
  %35 = call noundef zeroext i1 @_ZNK9ElemModel17affectsAdjEntryPcERK5Fluid(ptr noundef nonnull align 8 dereferenceable(152) %32, ptr noundef nonnull align 8 dereferenceable(80) %34)
  br i1 %35, label %36, label %71

36:                                               ; preds = %.lr.ph
  %37 = load ptr, ptr %10, align 8, !tbaa !5
  %38 = call noundef i32 @_ZNK4Elem9rockIndexEv(ptr noundef nonnull align 8 dereferenceable(408) %37)
  %.not = icmp eq i32 %38, 0
  br i1 %.not, label %39, label %71

39:                                               ; preds = %36
  %40 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %4, i64 noundef 0)
  %41 = load i8, ptr %40, align 1, !tbaa !19
  %42 = icmp eq i8 %41, 111
  br i1 %42, label %47, label %43

43:                                               ; preds = %39
  %44 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %4, i64 noundef 0)
  %45 = load i8, ptr %44, align 1, !tbaa !19
  %46 = icmp eq i8 %45, 79
  br i1 %46, label %47, label %60

47:                                               ; preds = %43, %39
  %48 = load ptr, ptr %23, 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
  %49 = 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)
  %50 = load i32, ptr %49, align 4, !tbaa !17
  %51 = call noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972) %48, i32 noundef %50)
  %52 = load ptr, ptr %10, align 8, !tbaa !5
  %53 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %52, i32 noundef %.02529)
  %54 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %53)
  %55 = call noundef double @_ZNK9ElemModel3RRREv(ptr noundef nonnull align 8 dereferenceable(152) %54)
  %56 = fmul double %51, %55
  %57 = call i32 @rand() #10
  %58 = sitofp i32 %57 to double
  %59 = fmul double %56, %58
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #10
  br label %68

60:                                               ; preds = %43
  %61 = load ptr, ptr %23, 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
  %62 = 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)
  %63 = load i32, ptr %62, align 4, !tbaa !17
  %64 = call noundef double @_ZNK10CommonData15poreFillWeightsEi(ptr noundef nonnull align 8 dereferenceable(1972) %61, i32 noundef %63)
  %65 = call i32 @rand() #10
  %66 = sitofp i32 %65 to double
  %67 = fmul double %64, %66
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #10
  br label %68

68:                                               ; preds = %60, %47
  %.pn.in = phi double [ %59, %47 ], [ %67, %60 ]
  %.pn = fdiv double %.pn.in, 0x41DFFFFFFFC00000
  %.1 = fadd double %.02431, %.pn
  %69 = load i32, ptr %3, align 4, !tbaa !17
  %70 = add nsw i32 %69, 1
  store i32 %70, ptr %3, align 4, !tbaa !17
  br label %71

71:                                               ; preds = %.lr.ph, %36, %68
  %.2 = phi double [ %.02431, %36 ], [ %.1, %68 ], [ %.02431, %.lr.ph ]
  %72 = add nuw nsw i32 %.02529, 1
  %73 = load ptr, ptr %10, align 8, !tbaa !5
  %74 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %73)
  %75 = icmp slt i32 %72, %74
  br i1 %75, label %.lr.ph, label %._crit_edge, !llvm.loop !20

76:                                               ; preds = %._crit_edge
  %77 = load ptr, ptr %23, align 8, !tbaa !18
  %78 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %77)
          to label %79 unwind label %88

79:                                               ; preds = %76
  %80 = load double, ptr %16, align 8, !tbaa !14
  %81 = call double @cos(double noundef %80) #10
  %82 = fmul double %81, 2.000000e+00
  %83 = getelementptr inbounds i8, ptr %0, i64 40
  %84 = load double, ptr %83, align 8, !tbaa !22
  %85 = fdiv double %82, %84
  %86 = fsub double %85, %.024.lcssa
  %87 = fmul double %78, %86
  store double %87, ptr %2, align 8, !tbaa !16
  br label %123

88:                                               ; preds = %106, %94, %76
  %89 = landingpad { ptr, i32 }
          cleanup
  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 } %89

90:                                               ; preds = %._crit_edge
  %91 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.10)
  br i1 %91, label %94, label %92

92:                                               ; preds = %90
  %93 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.11)
  br i1 %93, label %94, label %106

94:                                               ; preds = %92, %90
  %95 = load ptr, ptr %23, align 8, !tbaa !18
  %96 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %95)
          to label %97 unwind label %88

97:                                               ; preds = %94
  %98 = fmul double %96, 2.000000e+00
  %99 = load double, ptr %16, align 8, !tbaa !14
  %100 = call double @cos(double noundef %99) #10
  %101 = fmul double %98, %100
  %102 = getelementptr inbounds i8, ptr %0, i64 40
  %103 = load double, ptr %102, align 8, !tbaa !22
  %104 = fadd double %.024.lcssa, %103
  %105 = fdiv double %101, %104
  store double %105, ptr %2, align 8, !tbaa !16
  br label %123

106:                                              ; preds = %92
  %107 = load ptr, ptr %23, align 8, !tbaa !18
  %108 = invoke noundef double @_ZNK7GNMData7sigmaOWEv(ptr noundef nonnull align 8 dereferenceable(984) %107)
          to label %109 unwind label %88

109:                                              ; preds = %106
  %110 = getelementptr inbounds i8, ptr %0, i64 152
  %111 = load double, ptr %110, align 8, !tbaa !23
  %112 = fmul double %18, %111
  %113 = call double @sqrt(double noundef %112) #10
  %114 = call double @llvm.fmuladd.f64(double %113, double 2.000000e+00, double 1.000000e+00)
  %115 = fmul double %108, %114
  %116 = load double, ptr %16, align 8, !tbaa !14
  %117 = call double @cos(double noundef %116) #10
  %118 = fmul double %115, %117
  %119 = getelementptr inbounds i8, ptr %0, i64 40
  %120 = load double, ptr %119, align 8, !tbaa !22
  %121 = fadd double %.024.lcssa, %120
  %122 = fdiv double %118, %121
  store double %122, ptr %2, align 8, !tbaa !16
  br label %123

123:                                              ; preds = %97, %109, %79
  %124 = phi double [ %105, %97 ], [ %122, %109 ], [ %87, %79 ]
  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 %128

125:                                              ; preds = %15, %1
  %126 = getelementptr inbounds i8, ptr %0, i64 96
  %127 = load double, ptr %126, align 8, !tbaa !24
  store double %127, ptr %2, align 8, !tbaa !16
  br label %128

128:                                              ; preds = %125, %123
  %129 = phi double [ %127, %125 ], [ %124, %123 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #10
  store double -1.000000e+26, ptr %7, align 8, !tbaa !16
  %130 = load ptr, ptr %10, align 8, !tbaa !5
  %131 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %130)
  %132 = icmp sgt i32 %131, 0
  br i1 %132, label %.lr.ph34, label %._crit_edge35.thread

._crit_edge35:                                    ; preds = %148
  %.pre = load double, ptr %7, align 8, !tbaa !16
  %133 = fcmp ogt double %.pre, -1.000000e+25
  br i1 %133, label %153, label %._crit_edge35.thread

.lr.ph34:                                         ; preds = %128, %148
  %.02332 = phi i32 [ %149, %148 ], [ 0, %128 ]
  %134 = load ptr, ptr %10, align 8, !tbaa !5
  %135 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %134, i32 noundef %.02332)
  %136 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %135)
  %137 = load ptr, ptr %136, align 8, !tbaa !25
  %138 = getelementptr inbounds i8, ptr %137, i64 176
  %139 = load ptr, ptr %138, align 8
  %140 = call noundef zeroext i1 %139(ptr noundef nonnull align 8 dereferenceable(152) %136)
  br i1 %140, label %141, label %148

141:                                              ; preds = %.lr.ph34
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  %142 = load ptr, ptr %10, align 8, !tbaa !5
  %143 = call noundef ptr @_ZNK4Elem4neibEi(ptr noundef nonnull align 8 dereferenceable(408) %142, i32 noundef %.02332)
  %144 = call noundef ptr @_ZNK4Elem5modelEv(ptr noundef nonnull align 8 dereferenceable(408) %143)
  %145 = call noundef double @_ZNK9ElemModel16Pc_pistonTypeAdvEv(ptr noundef nonnull align 8 dereferenceable(152) %144)
  store double %145, ptr %8, align 8, !tbaa !16
  %146 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8)
  %147 = load double, ptr %146, align 8, !tbaa !16
  store double %147, ptr %7, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  br label %148

148:                                              ; preds = %.lr.ph34, %141
  %149 = add nuw nsw i32 %.02332, 1
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  %151 = call noundef i32 @_ZNK4Elem6nCnctsEv(ptr noundef nonnull align 8 dereferenceable(408) %150)
  %152 = icmp slt i32 %149, %151
  br i1 %152, label %.lr.ph34, label %._crit_edge35, !llvm.loop !27

153:                                              ; preds = %._crit_edge35
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #10
  %154 = fmul double %129, 1.000000e-03
  %155 = call double @llvm.fmuladd.f64(double %.pre, double 0x3FEFF7CED916872B, double %154)
  store double %155, ptr %9, align 8, !tbaa !16
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %2)
  %157 = load double, ptr %156, align 8, !tbaa !16
  store double %157, ptr %2, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  br label %._crit_edge35.thread

._crit_edge35.thread:                             ; preds = %128, %153, %._crit_edge35
  %158 = getelementptr inbounds i8, ptr %0, i64 216
  %159 = load ptr, ptr %158, align 8, !tbaa !28
  %160 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK10CornerApex13trappedCornerEv(ptr noundef nonnull align 8 dereferenceable(144) %159)
  %161 = load i32, ptr %160, align 8, !tbaa !35
  %162 = icmp slt i32 %161, 0
  br i1 %162, label %163, label %165

163:                                              ; preds = %._crit_edge35.thread
  %164 = call noundef double @_ZNK7Polygon22calcSnapOffPressureImbEv(ptr noundef nonnull align 8 dereferenceable(248) %0)
  br label %165

165:                                              ; preds = %._crit_edge35.thread, %163
  %166 = phi double [ %164, %163 ], [ -1.000000e+27, %._crit_edge35.thread ]
  %167 = icmp sgt i32 %12, 0
  %168 = load double, ptr %2, align 8
  %169 = fcmp ogt double %168, %166
  %or.cond28 = select i1 %167, i1 %169, i1 false
  %170 = getelementptr inbounds i8, ptr %0, i64 234
  br i1 %or.cond28, label %171, label %214

171:                                              ; preds = %165
  store i8 80, ptr %170, align 2, !tbaa !37
  %172 = load ptr, ptr %10, align 8, !tbaa !5
  %173 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %172)
  %174 = call ptr @_ZTWN7mstream7dbgFileE()
  br i1 %173, label %175, label %186

175:                                              ; preds = %171
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %174, ptr noundef nonnull @.str.12)
  %177 = load ptr, ptr %10, align 8, !tbaa !5
  %178 = load ptr, ptr %177, align 8, !tbaa !25
  %179 = getelementptr inbounds i8, ptr %178, i64 96
  %180 = load ptr, ptr %179, align 8
  %181 = call noundef i32 %180(ptr noundef nonnull align 8 dereferenceable(408) %177)
  %182 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %176, i32 noundef %181)
  %183 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %182, ptr noundef nonnull @.str.4)
  %184 = load double, ptr %2, align 8, !tbaa !16
  %185 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %183, double noundef %184)
  br label %211

186:                                              ; preds = %171
  %187 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %174, ptr noundef nonnull @.str.14)
  %188 = load i8, ptr %170, align 2, !tbaa !37
  %189 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %187, i8 noundef signext %188)
  %190 = load ptr, ptr %10, align 8, !tbaa !5
  %191 = load ptr, ptr %190, align 8, !tbaa !25
  %192 = getelementptr inbounds i8, ptr %191, i64 96
  %193 = load ptr, ptr %192, align 8
  %194 = call noundef i32 %193(ptr noundef nonnull align 8 dereferenceable(408) %190)
  %195 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %189, i32 noundef %194)
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %195, ptr noundef nonnull @.str.4)
  %197 = load double, ptr %2, align 8, !tbaa !16
  %198 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %196, double noundef %197)
  %199 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %198, ptr noundef nonnull @.str.13)
  %200 = call ptr @_ZTWN7mstream7dbgFileE()
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %200, ptr noundef nonnull @.str.14)
  %202 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %201, i8 noundef signext 80)
  %203 = load ptr, ptr %10, align 8, !tbaa !5
  %204 = load ptr, ptr %203, align 8, !tbaa !25
  %205 = getelementptr inbounds i8, ptr %204, i64 96
  %206 = load ptr, ptr %205, align 8
  %207 = call noundef i32 %206(ptr noundef nonnull align 8 dereferenceable(408) %203)
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %202, i32 noundef %207)
  %209 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %208, ptr noundef nonnull @.str.4)
  %210 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %209, double noundef %166)
  br label %211

211:                                              ; preds = %186, %175
  %.sink = phi ptr [ %210, %186 ], [ %185, %175 ]
  %212 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %.sink, ptr noundef nonnull @.str.13)
  %213 = load double, ptr %2, align 8, !tbaa !16
  br label %256

214:                                              ; preds = %165
  store i8 83, ptr %170, align 2, !tbaa !37
  %215 = load ptr, ptr %10, align 8, !tbaa !5
  %216 = call noundef zeroext i1 @_ZNK4Elem8iAmAPoreEv(ptr noundef nonnull align 8 dereferenceable(408) %215)
  %217 = call ptr @_ZTWN7mstream7dbgFileE()
  br i1 %216, label %218, label %230

218:                                              ; preds = %214
  %219 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %217, ptr noundef nonnull @.str.12)
  %220 = load ptr, ptr %10, align 8, !tbaa !5
  %221 = load ptr, ptr %220, align 8, !tbaa !25
  %222 = getelementptr inbounds i8, ptr %221, i64 96
  %223 = load ptr, ptr %222, align 8
  %224 = call noundef i32 %223(ptr noundef nonnull align 8 dereferenceable(408) %220)
  %225 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %219, i32 noundef %224)
  %226 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %225, ptr noundef nonnull @.str.4)
  %227 = load double, ptr %2, align 8, !tbaa !16
  %228 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %226, double noundef %227)
  %229 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %228, ptr noundef nonnull @.str.13)
  br label %256

230:                                              ; preds = %214
  %231 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %217, ptr noundef nonnull @.str.14)
  %232 = load i8, ptr %170, align 2, !tbaa !37
  %233 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %231, i8 noundef signext %232)
  %234 = load ptr, ptr %10, align 8, !tbaa !5
  %235 = load ptr, ptr %234, align 8, !tbaa !25
  %236 = getelementptr inbounds i8, ptr %235, i64 96
  %237 = load ptr, ptr %236, align 8
  %238 = call noundef i32 %237(ptr noundef nonnull align 8 dereferenceable(408) %234)
  %239 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %233, i32 noundef %238)
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %239, ptr noundef nonnull @.str.4)
  %241 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %240, double noundef %166)
  %242 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %241, ptr noundef nonnull @.str.13)
  %243 = call ptr @_ZTWN7mstream7dbgFileE()
  %244 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %243, ptr noundef nonnull @.str.14)
  %245 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %244, i8 noundef signext 80)
  %246 = load ptr, ptr %10, align 8, !tbaa !5
  %247 = load ptr, ptr %246, align 8, !tbaa !25
  %248 = getelementptr inbounds i8, ptr %247, i64 96
  %249 = load ptr, ptr %248, align 8
  %250 = call noundef i32 %249(ptr noundef nonnull align 8 dereferenceable(408) %246)
  %251 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %245, i32 noundef %250)
  %252 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %251, ptr noundef nonnull @.str.4)
  %253 = load double, ptr %2, align 8, !tbaa !16
  %254 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %252, double noundef %253)
  %255 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %254, ptr noundef nonnull @.str.13)
  br label %256

256:                                              ; preds = %218, %230, %211
  %.0 = phi double [ %213, %211 ], [ %166, %230 ], [ %166, %218 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  ret double %.0
}

; 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 #3

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

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

; 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 #2 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 #6

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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { 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 #5 = { 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 #6 = { 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 #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 168}
!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 96}
!25 = !{!26, !26, i64 0}
!26 = !{!"vtable pointer", !9, i64 0}
!27 = distinct !{!27, !21}
!28 = !{!29, !10, i64 216}
!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 = !{!36, !12, i64 0}
!36 = !{!"_ZTSSt4pairIidE", !12, i64 0, !7, i64 8}
!37 = !{!29, !8, i64 234}


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