; LLVM IR from buresjan/optim_lbm :: nomad/src/Algos/Mads (GMesh)

; 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::shared_ptr.6" = type { %"class.std::__shared_ptr.7" }
%"class.std::__shared_ptr.7" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.3" = type { %"class.std::__shared_ptr.4" }
%"class.std::__shared_ptr.4" = type { ptr, %"class.std::__shared_count" }
%"class.NOMAD_4_3::Double" = type <{ ptr, double, i8, [7 x i8] }>
%"class.NOMAD_4_3::MeshBase" = type <{ ptr, i64, %"class.std::shared_ptr", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", i32, i32, i8, [7 x i8] }>
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.NOMAD_4_3::ArrayOfDouble" = type { ptr, i64, ptr }
%"class.NOMAD_4_3::GMesh" = type <{ %"class.NOMAD_4_3::MeshBase.base", [7 x i8], %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", i8, i8, [6 x i8], %"class.NOMAD_4_3::Double", i8, [7 x i8] }>
%"class.NOMAD_4_3::MeshBase.base" = type <{ ptr, i64, %"class.std::shared_ptr", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", %"class.NOMAD_4_3::ArrayOfDouble", i32, i32, i8 }>

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nounwind
declare void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17)) unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #2

declare void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3

declare noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK9NOMAD_4_35GMesh20checkMeshForStoppingESt10shared_ptrINS_14AllStopReasonsEE(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef %1) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::shared_ptr.6", align 8
  %6 = alloca %"class.std::shared_ptr.3", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i8, align 1
  %10 = alloca i64, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.NOMAD_4_3::Double", align 8
  %13 = alloca double, align 8
  %14 = alloca i64, align 8
  %15 = alloca %"class.NOMAD_4_3::Double", align 8
  %16 = alloca %"class.NOMAD_4_3::Double", align 8
  %17 = alloca i1, align 1
  %18 = alloca double, align 8
  %19 = alloca i1, align 1
  %20 = alloca i64, align 8
  %21 = alloca %"class.NOMAD_4_3::Double", align 8
  %22 = alloca i1, align 1
  %23 = alloca i1, align 1
  %24 = alloca i64, align 8
  %25 = alloca %"class.NOMAD_4_3::Double", align 8
  %26 = alloca double, align 8
  %27 = alloca %"class.NOMAD_4_3::Double", align 8
  %28 = alloca i1, align 1
  %29 = alloca i1, align 1
  %30 = alloca %"class.NOMAD_4_3::Double", align 8
  %31 = alloca double, align 8
  %32 = alloca %"class.NOMAD_4_3::Double", align 8
  %33 = alloca i1, align 1
  %34 = alloca double, align 8
  %35 = alloca i1, align 1
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %36 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #6
  call void @_ZNSt10shared_ptrIN9NOMAD_4_314AllStopReasonsEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %1) #6
  invoke void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3getESt10shared_ptrINS_14AllStopReasonsEE(ptr dead_on_unwind writable sret(%"class.std::shared_ptr.6") align 8 %5, ptr noundef %6)
          to label %37 unwind label %48

37:                                               ; preds = %2
  call void @_ZNSt12__shared_ptrIN9NOMAD_4_314AllStopReasonsELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #6
  store i8 1, ptr %9, align 1, !tbaa !9
  %38 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 13
  %39 = load i32, ptr %38, align 4, !tbaa !11
  %40 = icmp slt i32 %39, 2147483647
  br i1 %40, label %41, label %94

41:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  store i64 0, ptr %10, align 8, !tbaa !19
  br label %42

42:                                               ; preds = %78, %41
  %43 = load i64, ptr %10, align 8, !tbaa !19
  %44 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 1
  %45 = load i64, ptr %44, align 8, !tbaa !20
  %46 = icmp ult i64 %43, %45
  br i1 %46, label %52, label %47

47:                                               ; preds = %42
  store i32 2, ptr %11, align 4
  br label %81

48:                                               ; preds = %2
  %49 = landingpad { ptr, i32 }
          cleanup
  %50 = extractvalue { ptr, i32 } %49, 0
  store ptr %50, ptr %7, align 8
  %51 = extractvalue { ptr, i32 } %49, 1
  store i32 %51, ptr %8, align 4
  call void @_ZNSt12__shared_ptrIN9NOMAD_4_314AllStopReasonsELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  br label %412

52:                                               ; preds = %42
  %53 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 9
  %54 = load i64, ptr %10, align 8, !tbaa !19
  %55 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %53, i64 noundef %54)
          to label %56 unwind label %64

56:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %57 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 13
  %58 = load i32, ptr %57, align 4, !tbaa !11
  %59 = sitofp i32 %58 to double
  store double %59, ptr %13, align 8, !tbaa !21
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %12, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %60 unwind label %68

60:                                               ; preds = %56
  %61 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3leERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %55, ptr noundef nonnull align 8 dereferenceable(17) %12)
          to label %62 unwind label %72

62:                                               ; preds = %60
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #6
  br i1 %61, label %63, label %77

63:                                               ; preds = %62
  store i8 0, ptr %9, align 1, !tbaa !9
  store i32 2, ptr %11, align 4
  br label %81

64:                                               ; preds = %52
  %65 = landingpad { ptr, i32 }
          cleanup
  %66 = extractvalue { ptr, i32 } %65, 0
  store ptr %66, ptr %7, align 8
  %67 = extractvalue { ptr, i32 } %65, 1
  store i32 %67, ptr %8, align 4
  br label %82

68:                                               ; preds = %56
  %69 = landingpad { ptr, i32 }
          cleanup
  %70 = extractvalue { ptr, i32 } %69, 0
  store ptr %70, ptr %7, align 8
  %71 = extractvalue { ptr, i32 } %69, 1
  store i32 %71, ptr %8, align 4
  br label %76

72:                                               ; preds = %60
  %73 = landingpad { ptr, i32 }
          cleanup
  %74 = extractvalue { ptr, i32 } %73, 0
  store ptr %74, ptr %7, align 8
  %75 = extractvalue { ptr, i32 } %73, 1
  store i32 %75, ptr %8, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #6
  br label %76

76:                                               ; preds = %72, %68
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #6
  br label %82

77:                                               ; preds = %62
  br label %78

78:                                               ; preds = %77
  %79 = load i64, ptr %10, align 8, !tbaa !19
  %80 = add i64 %79, 1
  store i64 %80, ptr %10, align 8, !tbaa !19
  br label %42, !llvm.loop !23

81:                                               ; preds = %63, %47
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  br label %83

82:                                               ; preds = %76, %64
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  br label %411

83:                                               ; preds = %81
  %84 = load i8, ptr %9, align 1, !tbaa !9, !range !25, !noundef !26
  %85 = trunc i8 %84 to i1
  br i1 %85, label %86, label %93

86:                                               ; preds = %83
  %87 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  invoke void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3setES1_(ptr noundef nonnull align 8 dereferenceable(40) %87, i32 noundef 2)
          to label %88 unwind label %89

88:                                               ; preds = %86
  store i32 1, ptr %11, align 4
  br label %408

89:                                               ; preds = %403, %261, %189, %179, %99, %86
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %7, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %8, align 4
  br label %411

93:                                               ; preds = %83
  br label %94

94:                                               ; preds = %93, %37
  store i8 1, ptr %9, align 1, !tbaa !9
  %95 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %36, i32 0, i32 8
  %96 = load i8, ptr %95, align 1, !tbaa !27, !range !25, !noundef !26
  %97 = trunc i8 %96 to i1
  br i1 %97, label %98, label %99

98:                                               ; preds = %94
  store i8 0, ptr %9, align 1, !tbaa !9
  br label %176

99:                                               ; preds = %94
  %100 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 4
  %101 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDouble9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(24) %100)
          to label %102 unwind label %89

102:                                              ; preds = %99
  br i1 %101, label %103, label %175

103:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  store i64 0, ptr %14, align 8, !tbaa !19
  br label %104

104:                                              ; preds = %170, %103
  %105 = load i64, ptr %14, align 8, !tbaa !19
  %106 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 1
  %107 = load i64, ptr %106, align 8, !tbaa !20
  %108 = icmp ult i64 %105, %107
  br i1 %108, label %110, label %109

109:                                              ; preds = %104
  store i32 5, ptr %11, align 4
  br label %173

110:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #6
  %111 = load i64, ptr %14, align 8, !tbaa !19
  %112 = load ptr, ptr %36, align 8, !tbaa !30
  %113 = getelementptr inbounds ptr, ptr %112, i64 11
  %114 = load ptr, ptr %113, align 8
  store i1 false, ptr %17, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  store i1 false, ptr %19, align 1
  invoke void %114(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %15, ptr noundef nonnull align 8 dereferenceable(417) %36, i64 noundef %111)
          to label %115 unwind label %144

115:                                              ; preds = %110
  %116 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %15)
          to label %117 unwind label %148

117:                                              ; preds = %115
  %118 = load double, ptr %116, align 8, !tbaa !21
  %119 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 4
  %120 = load i64, ptr %14, align 8, !tbaa !19
  %121 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %119, i64 noundef %120)
          to label %122 unwind label %148

122:                                              ; preds = %117
  %123 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %121)
          to label %124 unwind label %148

124:                                              ; preds = %122
  %125 = load double, ptr %123, align 8, !tbaa !21
  %126 = fcmp oge double %118, %125
  br i1 %126, label %127, label %135

127:                                              ; preds = %124
  %128 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %36, i32 0, i32 6
  %129 = load i64, ptr %14, align 8, !tbaa !19
  %130 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %128, i64 noundef %129)
          to label %131 unwind label %148

131:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #6
  store i1 true, ptr %17, align 1
  store double 0.000000e+00, ptr %18, align 8, !tbaa !21
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %16, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %132 unwind label %152

132:                                              ; preds = %131
  store i1 true, ptr %19, align 1
  %133 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %130, ptr noundef nonnull align 8 dereferenceable(17) %16)
          to label %134 unwind label %156

134:                                              ; preds = %132
  br label %135

135:                                              ; preds = %134, %124
  %136 = phi i1 [ false, %124 ], [ %133, %134 ]
  %137 = load i1, ptr %19, align 1
  br i1 %137, label %138, label %139

138:                                              ; preds = %135
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #6
  br label %139

139:                                              ; preds = %138, %135
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  %140 = load i1, ptr %17, align 1
  br i1 %140, label %141, label %142

141:                                              ; preds = %139
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #6
  br label %142

142:                                              ; preds = %141, %139
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #6
  br i1 %136, label %143, label %169

143:                                              ; preds = %142
  store i8 0, ptr %9, align 1, !tbaa !9
  store i32 5, ptr %11, align 4
  br label %173

144:                                              ; preds = %110
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %7, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %8, align 4
  br label %168

148:                                              ; preds = %127, %122, %117, %115
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %7, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %8, align 4
  br label %167

152:                                              ; preds = %131
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %7, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %8, align 4
  br label %163

156:                                              ; preds = %132
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %7, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %8, align 4
  %160 = load i1, ptr %19, align 1
  br i1 %160, label %161, label %162

161:                                              ; preds = %156
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #6
  br label %162

162:                                              ; preds = %161, %156
  br label %163

163:                                              ; preds = %162, %152
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  %164 = load i1, ptr %17, align 1
  br i1 %164, label %165, label %166

165:                                              ; preds = %163
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #6
  br label %166

166:                                              ; preds = %165, %163
  br label %167

167:                                              ; preds = %166, %148
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #6
  br label %168

168:                                              ; preds = %167, %144
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %411

169:                                              ; preds = %142
  br label %170

170:                                              ; preds = %169
  %171 = load i64, ptr %14, align 8, !tbaa !19
  %172 = add i64 %171, 1
  store i64 %172, ptr %14, align 8, !tbaa !19
  br label %104, !llvm.loop !32

173:                                              ; preds = %143, %109
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %174

174:                                              ; preds = %173
  br label %175

175:                                              ; preds = %174, %102
  br label %176

176:                                              ; preds = %175, %98
  %177 = load i8, ptr %9, align 1, !tbaa !9, !range !25, !noundef !26
  %178 = trunc i8 %177 to i1
  br i1 %178, label %179, label %182

179:                                              ; preds = %176
  %180 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  invoke void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3setES1_(ptr noundef nonnull align 8 dereferenceable(40) %180, i32 noundef 4)
          to label %181 unwind label %89

181:                                              ; preds = %179
  store i32 1, ptr %11, align 4
  br label %408

182:                                              ; preds = %176
  %183 = load i8, ptr %9, align 1, !tbaa !9, !range !25, !noundef !26
  %184 = trunc i8 %183 to i1
  br i1 %184, label %265, label %185

185:                                              ; preds = %182
  %186 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %36, i32 0, i32 8
  %187 = load i8, ptr %186, align 1, !tbaa !27, !range !25, !noundef !26
  %188 = trunc i8 %187 to i1
  br i1 %188, label %265, label %189

189:                                              ; preds = %185
  %190 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 6
  %191 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDouble9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(24) %190)
          to label %192 unwind label %89

192:                                              ; preds = %189
  br i1 %191, label %193, label %265

193:                                              ; preds = %192
  store i8 1, ptr %9, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  store i64 0, ptr %20, align 8, !tbaa !19
  br label %194

194:                                              ; preds = %253, %193
  %195 = load i64, ptr %20, align 8, !tbaa !19
  %196 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 1
  %197 = load i64, ptr %196, align 8, !tbaa !20
  %198 = icmp ult i64 %195, %197
  br i1 %198, label %200, label %199

199:                                              ; preds = %194
  store i32 8, ptr %11, align 4
  br label %256

200:                                              ; preds = %194
  %201 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 6
  %202 = load i64, ptr %20, align 8, !tbaa !19
  store i1 false, ptr %22, align 1
  store i1 false, ptr %23, align 1
  %203 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %201, i64 noundef %202)
          to label %204 unwind label %233

204:                                              ; preds = %200
  %205 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(17) %203)
          to label %206 unwind label %233

206:                                              ; preds = %204
  br i1 %205, label %207, label %224

207:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #6
  store i1 true, ptr %22, align 1
  %208 = load i64, ptr %20, align 8, !tbaa !19
  %209 = load ptr, ptr %36, align 8, !tbaa !30
  %210 = getelementptr inbounds ptr, ptr %209, i64 13
  %211 = load ptr, ptr %210, align 8
  invoke void %211(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %21, ptr noundef nonnull align 8 dereferenceable(417) %36, i64 noundef %208)
          to label %212 unwind label %237

212:                                              ; preds = %207
  store i1 true, ptr %23, align 1
  %213 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %21)
          to label %214 unwind label %241

214:                                              ; preds = %212
  %215 = load double, ptr %213, align 8, !tbaa !21
  %216 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 6
  %217 = load i64, ptr %20, align 8, !tbaa !19
  %218 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %216, i64 noundef %217)
          to label %219 unwind label %241

219:                                              ; preds = %214
  %220 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %218)
          to label %221 unwind label %241

221:                                              ; preds = %219
  %222 = load double, ptr %220, align 8, !tbaa !21
  %223 = fcmp oge double %215, %222
  br label %224

224:                                              ; preds = %221, %206
  %225 = phi i1 [ false, %206 ], [ %223, %221 ]
  %226 = load i1, ptr %23, align 1
  br i1 %226, label %227, label %228

227:                                              ; preds = %224
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #6
  br label %228

228:                                              ; preds = %227, %224
  %229 = load i1, ptr %22, align 1
  br i1 %229, label %230, label %231

230:                                              ; preds = %228
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #6
  br label %231

231:                                              ; preds = %230, %228
  br i1 %225, label %232, label %252

232:                                              ; preds = %231
  store i8 0, ptr %9, align 1, !tbaa !9
  store i32 8, ptr %11, align 4
  br label %256

233:                                              ; preds = %204, %200
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %7, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %8, align 4
  br label %257

237:                                              ; preds = %207
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %7, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %8, align 4
  br label %248

241:                                              ; preds = %219, %214, %212
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %7, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %8, align 4
  %245 = load i1, ptr %23, align 1
  br i1 %245, label %246, label %247

246:                                              ; preds = %241
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #6
  br label %247

247:                                              ; preds = %246, %241
  br label %248

248:                                              ; preds = %247, %237
  %249 = load i1, ptr %22, align 1
  br i1 %249, label %250, label %251

250:                                              ; preds = %248
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #6
  br label %251

251:                                              ; preds = %250, %248
  br label %257

252:                                              ; preds = %231
  br label %253

253:                                              ; preds = %252
  %254 = load i64, ptr %20, align 8, !tbaa !19
  %255 = add i64 %254, 1
  store i64 %255, ptr %20, align 8, !tbaa !19
  br label %194, !llvm.loop !33

256:                                              ; preds = %232, %199
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %258

257:                                              ; preds = %251, %233
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %411

258:                                              ; preds = %256
  %259 = load i8, ptr %9, align 1, !tbaa !9, !range !25, !noundef !26
  %260 = trunc i8 %259 to i1
  br i1 %260, label %261, label %264

261:                                              ; preds = %258
  %262 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  invoke void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3setES1_(ptr noundef nonnull align 8 dereferenceable(40) %262, i32 noundef 5)
          to label %263 unwind label %89

263:                                              ; preds = %261
  br label %264

264:                                              ; preds = %263, %258
  br label %265

265:                                              ; preds = %264, %192, %185, %182
  %266 = load i8, ptr %9, align 1, !tbaa !9, !range !25, !noundef !26
  %267 = trunc i8 %266 to i1
  br i1 %267, label %407, label %268

268:                                              ; preds = %265
  %269 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %36, i32 0, i32 8
  %270 = load i8, ptr %269, align 1, !tbaa !27, !range !25, !noundef !26
  %271 = trunc i8 %270 to i1
  br i1 %271, label %407, label %272

272:                                              ; preds = %268
  %273 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 12
  %274 = load i32, ptr %273, align 8, !tbaa !34
  %275 = icmp sgt i32 %274, -2147483648
  br i1 %275, label %276, label %407

276:                                              ; preds = %272
  store i8 1, ptr %9, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  store i64 0, ptr %24, align 8, !tbaa !19
  br label %277

277:                                              ; preds = %395, %276
  %278 = load i64, ptr %24, align 8, !tbaa !19
  %279 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 1
  %280 = load i64, ptr %279, align 8, !tbaa !20
  %281 = icmp ult i64 %278, %280
  br i1 %281, label %283, label %282

282:                                              ; preds = %277
  store i32 11, ptr %11, align 4
  br label %398

283:                                              ; preds = %277
  %284 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %36, i32 0, i32 6
  %285 = load i64, ptr %24, align 8, !tbaa !19
  store i1 false, ptr %28, align 1
  store i1 false, ptr %29, align 1
  %286 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %284, i64 noundef %285)
          to label %287 unwind label %312

287:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  store double 0.000000e+00, ptr %26, align 8, !tbaa !21
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %25, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %288 unwind label %316

288:                                              ; preds = %287
  %289 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %286, ptr noundef nonnull align 8 dereferenceable(17) %25)
          to label %290 unwind label %320

290:                                              ; preds = %288
  br i1 %289, label %291, label %303

291:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #6
  store i1 true, ptr %28, align 1
  %292 = load i64, ptr %24, align 8, !tbaa !19
  %293 = load ptr, ptr %36, align 8, !tbaa !30
  %294 = getelementptr inbounds ptr, ptr %293, i64 11
  %295 = load ptr, ptr %294, align 8
  invoke void %295(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %27, ptr noundef nonnull align 8 dereferenceable(417) %36, i64 noundef %292)
          to label %296 unwind label %324

296:                                              ; preds = %291
  store i1 true, ptr %29, align 1
  %297 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %36, i32 0, i32 6
  %298 = load i64, ptr %24, align 8, !tbaa !19
  %299 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %297, i64 noundef %298)
          to label %300 unwind label %328

300:                                              ; preds = %296
  %301 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %27, ptr noundef nonnull align 8 dereferenceable(17) %299)
          to label %302 unwind label %328

302:                                              ; preds = %300
  br label %303

303:                                              ; preds = %302, %290
  %304 = phi i1 [ false, %290 ], [ %301, %302 ]
  %305 = load i1, ptr %29, align 1
  br i1 %305, label %306, label %307

306:                                              ; preds = %303
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %27) #6
  br label %307

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

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

310:                                              ; preds = %309, %307
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #6
  br i1 %304, label %311, label %341

311:                                              ; preds = %310
  store i8 0, ptr %9, align 1, !tbaa !9
  store i32 11, ptr %11, align 4
  br label %398

312:                                              ; preds = %341, %283
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %7, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %8, align 4
  br label %399

316:                                              ; preds = %287
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %7, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %8, align 4
  br label %340

320:                                              ; preds = %288
  %321 = landingpad { ptr, i32 }
          cleanup
  %322 = extractvalue { ptr, i32 } %321, 0
  store ptr %322, ptr %7, align 8
  %323 = extractvalue { ptr, i32 } %321, 1
  store i32 %323, ptr %8, align 4
  br label %339

324:                                              ; preds = %291
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %7, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %8, align 4
  br label %335

328:                                              ; preds = %300, %296
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %7, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %8, align 4
  %332 = load i1, ptr %29, align 1
  br i1 %332, label %333, label %334

333:                                              ; preds = %328
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %27) #6
  br label %334

334:                                              ; preds = %333, %328
  br label %335

335:                                              ; preds = %334, %324
  %336 = load i1, ptr %28, align 1
  br i1 %336, label %337, label %338

337:                                              ; preds = %335
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #6
  br label %338

338:                                              ; preds = %337, %335
  br label %339

339:                                              ; preds = %338, %320
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %25) #6
  br label %340

340:                                              ; preds = %339, %316
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #6
  br label %399

341:                                              ; preds = %310
  %342 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 9
  %343 = load i64, ptr %24, align 8, !tbaa !19
  store i1 false, ptr %33, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  store i1 false, ptr %35, align 1
  %344 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %342, i64 noundef %343)
          to label %345 unwind label %312

345:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %346 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %36, i32 0, i32 12
  %347 = load i32, ptr %346, align 8, !tbaa !34
  %348 = sitofp i32 %347 to double
  store double %348, ptr %31, align 8, !tbaa !21
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %30, ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %349 unwind label %369

349:                                              ; preds = %345
  %350 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3geERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %344, ptr noundef nonnull align 8 dereferenceable(17) %30)
          to label %351 unwind label %373

351:                                              ; preds = %349
  br i1 %350, label %352, label %360

352:                                              ; preds = %351
  %353 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %36, i32 0, i32 6
  %354 = load i64, ptr %24, align 8, !tbaa !19
  %355 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %353, i64 noundef %354)
          to label %356 unwind label %373

356:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #6
  store i1 true, ptr %33, align 1
  store double 0.000000e+00, ptr %34, align 8, !tbaa !21
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %32, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %357 unwind label %377

357:                                              ; preds = %356
  store i1 true, ptr %35, align 1
  %358 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %355, ptr noundef nonnull align 8 dereferenceable(17) %32)
          to label %359 unwind label %381

359:                                              ; preds = %357
  br label %360

360:                                              ; preds = %359, %351
  %361 = phi i1 [ false, %351 ], [ %358, %359 ]
  %362 = load i1, ptr %35, align 1
  br i1 %362, label %363, label %364

363:                                              ; preds = %360
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %32) #6
  br label %364

364:                                              ; preds = %363, %360
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  %365 = load i1, ptr %33, align 1
  br i1 %365, label %366, label %367

366:                                              ; preds = %364
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #6
  br label %367

367:                                              ; preds = %366, %364
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #6
  br i1 %361, label %368, label %394

368:                                              ; preds = %367
  store i8 0, ptr %9, align 1, !tbaa !9
  store i32 11, ptr %11, align 4
  br label %398

369:                                              ; preds = %345
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %7, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %8, align 4
  br label %393

373:                                              ; preds = %352, %349
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %7, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %8, align 4
  br label %392

377:                                              ; preds = %356
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %7, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %8, align 4
  br label %388

381:                                              ; preds = %357
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %7, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %8, align 4
  %385 = load i1, ptr %35, align 1
  br i1 %385, label %386, label %387

386:                                              ; preds = %381
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %32) #6
  br label %387

387:                                              ; preds = %386, %381
  br label %388

388:                                              ; preds = %387, %377
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  %389 = load i1, ptr %33, align 1
  br i1 %389, label %390, label %391

390:                                              ; preds = %388
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #6
  br label %391

391:                                              ; preds = %390, %388
  br label %392

392:                                              ; preds = %391, %373
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %30) #6
  br label %393

393:                                              ; preds = %392, %369
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #6
  br label %399

394:                                              ; preds = %367
  br label %395

395:                                              ; preds = %394
  %396 = load i64, ptr %24, align 8, !tbaa !19
  %397 = add i64 %396, 1
  store i64 %397, ptr %24, align 8, !tbaa !19
  br label %277, !llvm.loop !35

398:                                              ; preds = %368, %311, %282
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  br label %400

399:                                              ; preds = %393, %340, %312
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  br label %411

400:                                              ; preds = %398
  %401 = load i8, ptr %9, align 1, !tbaa !9, !range !25, !noundef !26
  %402 = trunc i8 %401 to i1
  br i1 %402, label %403, label %406

403:                                              ; preds = %400
  %404 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  invoke void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3setES1_(ptr noundef nonnull align 8 dereferenceable(40) %404, i32 noundef 3)
          to label %405 unwind label %89

405:                                              ; preds = %403
  br label %406

406:                                              ; preds = %405, %400
  br label %407

407:                                              ; preds = %406, %272, %268, %265
  store i32 0, ptr %11, align 4
  br label %408

408:                                              ; preds = %407, %181, %88
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #6
  call void @_ZNSt12__shared_ptrIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #6
  %409 = load i32, ptr %11, align 4
  switch i32 %409, label %418 [
    i32 0, label %410
    i32 1, label %410
  ]

410:                                              ; preds = %408, %408
  ret void

411:                                              ; preds = %399, %257, %168, %89, %82
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #6
  call void @_ZNSt12__shared_ptrIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  br label %412

412:                                              ; preds = %411, %48
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #6
  br label %413

413:                                              ; preds = %412
  %414 = load ptr, ptr %7, align 8
  %415 = load i32, ptr %8, align 4
  %416 = insertvalue { ptr, i32 } poison, ptr %414, 0
  %417 = insertvalue { ptr, i32 } %416, i32 %415, 1
  resume { ptr, i32 } %417

418:                                              ; preds = %408
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3getESt10shared_ptrINS_14AllStopReasonsEE(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.6") align 8, ptr noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10shared_ptrIN9NOMAD_4_314AllStopReasonsEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN9NOMAD_4_314AllStopReasonsELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3leERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3setES1_(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #4 align 2

declare noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDouble9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(17)) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3geERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { "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 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 = { 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 }

!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, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !18, i64 252}
!12 = !{!"_ZTSN9NOMAD_4_38MeshBaseE", !13, i64 8, !14, i64 16, !17, i64 32, !17, i64 56, !17, i64 80, !17, i64 104, !17, i64 128, !17, i64 152, !17, i64 176, !17, i64 200, !17, i64 224, !18, i64 248, !18, i64 252, !10, i64 256}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSSt10shared_ptrIN9NOMAD_4_312PbParametersEE", !15, i64 0}
!15 = !{!"_ZTSSt12__shared_ptrIN9NOMAD_4_312PbParametersELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !16, i64 8}
!16 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!17 = !{!"_ZTSN9NOMAD_4_313ArrayOfDoubleE", !13, i64 8, !6, i64 16}
!18 = !{!"int", !7, i64 0}
!19 = !{!13, !13, i64 0}
!20 = !{!12, !13, i64 8}
!21 = !{!22, !22, i64 0}
!22 = !{!"double", !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{i8 0, i8 2}
!26 = !{}
!27 = !{!28, !10, i64 385}
!28 = !{!"_ZTSN9NOMAD_4_35GMeshE", !12, i64 0, !17, i64 264, !17, i64 288, !17, i64 312, !17, i64 336, !17, i64 360, !10, i64 384, !10, i64 385, !29, i64 392, !10, i64 416}
!29 = !{!"_ZTSN9NOMAD_4_36DoubleE", !22, i64 8, !10, i64 16}
!30 = !{!31, !31, i64 0}
!31 = !{!"vtable pointer", !8, i64 0}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = !{!12, !18, i64 248}
!35 = distinct !{!35, !24}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::shared_ptr.6" = type { %"class.std::__shared_ptr.7" }
%"class.std::__shared_ptr.7" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.3" = type { %"class.std::__shared_ptr.4" }
%"class.std::__shared_ptr.4" = type { ptr, %"class.std::__shared_count" }
%"class.NOMAD_4_3::Double" = type <{ ptr, double, i8, [7 x i8] }>

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nounwind
declare void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17)) unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #2

declare void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3

declare noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK9NOMAD_4_35GMesh20checkMeshForStoppingESt10shared_ptrINS_14AllStopReasonsEE(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull %1) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::shared_ptr.6", align 8
  %4 = alloca %"class.std::shared_ptr.3", align 8
  %5 = alloca %"class.NOMAD_4_3::Double", align 8
  %6 = alloca double, align 8
  %7 = alloca %"class.NOMAD_4_3::Double", align 8
  %8 = alloca %"class.NOMAD_4_3::Double", align 8
  %9 = alloca double, align 8
  %10 = alloca %"class.NOMAD_4_3::Double", align 8
  %11 = alloca %"class.NOMAD_4_3::Double", align 8
  %12 = alloca double, align 8
  %13 = alloca %"class.NOMAD_4_3::Double", align 8
  %14 = alloca %"class.NOMAD_4_3::Double", align 8
  %15 = alloca double, align 8
  %16 = alloca %"class.NOMAD_4_3::Double", align 8
  %17 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #6
  call void @_ZNSt10shared_ptrIN9NOMAD_4_314AllStopReasonsEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %1) #6
  invoke void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3getESt10shared_ptrINS_14AllStopReasonsEE(ptr dead_on_unwind nonnull writable sret(%"class.std::shared_ptr.6") align 8 %3, ptr noundef nonnull %4)
          to label %18 unwind label %27

18:                                               ; preds = %2
  call void @_ZNSt12__shared_ptrIN9NOMAD_4_314AllStopReasonsELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #6
  %19 = getelementptr inbounds i8, ptr %0, i64 252
  %20 = load i32, ptr %19, align 4, !tbaa !5
  %.not = icmp eq i32 %20, 2147483647
  br i1 %.not, label %.loopexit131, label %.preheader130

.preheader130:                                    ; preds = %18
  %21 = getelementptr inbounds i8, ptr %0, i64 8
  %22 = load i64, ptr %21, align 8, !tbaa !17
  %.not80132.not = icmp eq i64 %22, 0
  br i1 %.not80132.not, label %.critedge111.invoke, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader130
  %23 = getelementptr inbounds i8, ptr %0, i64 176
  br label %29

24:                                               ; preds = %36
  %25 = add nuw i64 %.054133, 1
  %26 = load i64, ptr %21, align 8, !tbaa !17
  %.not80 = icmp ult i64 %25, %26
  br i1 %.not80, label %29, label %.critedge111.invoke, !llvm.loop !18

27:                                               ; preds = %2
  %28 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN9NOMAD_4_314AllStopReasonsELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #6
  br label %192

29:                                               ; preds = %.lr.ph, %24
  %.054133 = phi i64 [ 0, %.lr.ph ], [ %25, %24 ]
  %30 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %.054133)
          to label %31 unwind label %37

31:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  %32 = load i32, ptr %19, align 4, !tbaa !5
  %33 = sitofp i32 %32 to double
  store double %33, ptr %6, align 8, !tbaa !20
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %34 unwind label %39

34:                                               ; preds = %31
  %35 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3leERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %30, ptr noundef nonnull align 8 dereferenceable(17) %5)
          to label %36 unwind label %41

36:                                               ; preds = %34
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  br i1 %35, label %.loopexit131, label %24

37:                                               ; preds = %29
  %38 = landingpad { ptr, i32 }
          cleanup
  br label %191

39:                                               ; preds = %31
  %40 = landingpad { ptr, i32 }
          cleanup
  br label %43

41:                                               ; preds = %34
  %42 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %5) #6
  br label %43

43:                                               ; preds = %41, %39
  %.pn = phi { ptr, i32 } [ %42, %41 ], [ %40, %39 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  br label %191

44:                                               ; preds = %.critedge111.invoke, %93, %49
  %45 = landingpad { ptr, i32 }
          cleanup
  br label %191

.loopexit131:                                     ; preds = %36, %18
  %46 = getelementptr inbounds i8, ptr %0, i64 385
  %47 = load i8, ptr %46, align 1, !tbaa !22, !range !25, !noundef !26
  %48 = trunc nuw i8 %47 to i1
  br i1 %48, label %.loopexit129, label %49

49:                                               ; preds = %.loopexit131
  %50 = getelementptr inbounds i8, ptr %0, i64 56
  %51 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDouble9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(24) %50)
          to label %52 unwind label %44

52:                                               ; preds = %49
  br i1 %51, label %.preheader127, label %.critedge111.invoke

.preheader127:                                    ; preds = %52
  %53 = getelementptr inbounds i8, ptr %0, i64 8
  %54 = load i64, ptr %53, align 8, !tbaa !17
  %.not141 = icmp eq i64 %54, 0
  br i1 %.not141, label %.critedge111.invoke, label %.lr.ph135

.lr.ph135:                                        ; preds = %.preheader127
  %55 = getelementptr inbounds i8, ptr %0, i64 360
  br label %56

56:                                               ; preds = %.lr.ph135, %87
  %.053134 = phi i64 [ 0, %.lr.ph135 ], [ %88, %87 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #6
  %57 = load ptr, ptr %0, align 8, !tbaa !27
  %58 = getelementptr inbounds i8, ptr %57, i64 88
  %59 = load ptr, ptr %58, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  invoke void %59(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %7, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.053134)
          to label %60 unwind label %76

60:                                               ; preds = %56
  %61 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %7)
          to label %62 unwind label %78

62:                                               ; preds = %60
  %63 = load double, ptr %61, align 8, !tbaa !20
  %64 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %50, i64 noundef %.053134)
          to label %65 unwind label %78

65:                                               ; preds = %62
  %66 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %64)
          to label %67 unwind label %78

67:                                               ; preds = %65
  %68 = load double, ptr %66, align 8, !tbaa !20
  %69 = fcmp ult double %63, %68
  br i1 %69, label %.thread112, label %70

70:                                               ; preds = %67
  %71 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %55, i64 noundef %.053134)
          to label %72 unwind label %78

72:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #6
  store double 0.000000e+00, ptr %9, align 8, !tbaa !20
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %8, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %73 unwind label %80

73:                                               ; preds = %72
  %74 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %71, ptr noundef nonnull align 8 dereferenceable(17) %8)
          to label %75 unwind label %82

.thread112:                                       ; preds = %67
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %7) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  br label %87

75:                                               ; preds = %73
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %7) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  br i1 %74, label %.loopexit129.loopexit, label %87

76:                                               ; preds = %56
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %86

78:                                               ; preds = %70, %65, %62, %60
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %85

80:                                               ; preds = %72
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %84

82:                                               ; preds = %73
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %8) #6
  br label %84

84:                                               ; preds = %82, %80
  %.pn81 = phi { ptr, i32 } [ %83, %82 ], [ %81, %80 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  br label %85

85:                                               ; preds = %84, %78
  %.pn81.pn = phi { ptr, i32 } [ %.pn81, %84 ], [ %79, %78 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %7) #6
  br label %86

86:                                               ; preds = %85, %76
  %.pn81.pn.pn = phi { ptr, i32 } [ %.pn81.pn, %85 ], [ %77, %76 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  br label %191

87:                                               ; preds = %.thread112, %75
  %88 = add nuw i64 %.053134, 1
  %89 = load i64, ptr %53, align 8, !tbaa !17
  %90 = icmp ult i64 %88, %89
  br i1 %90, label %56, label %.critedge111.invoke, !llvm.loop !29

.loopexit129.loopexit:                            ; preds = %75
  %.pre = load i8, ptr %46, align 1, !tbaa !22, !range !25
  br label %.loopexit129

.loopexit129:                                     ; preds = %.loopexit129.loopexit, %.loopexit131
  %91 = phi i8 [ %.pre, %.loopexit129.loopexit ], [ %47, %.loopexit131 ]
  %92 = trunc nuw i8 %91 to i1
  br i1 %92, label %.loopexit126, label %93

93:                                               ; preds = %.loopexit129
  %94 = getelementptr inbounds i8, ptr %0, i64 104
  %95 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDouble9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(24) %94)
          to label %96 unwind label %44

96:                                               ; preds = %93
  br i1 %95, label %.preheader125, label %.loopexit126

.preheader125:                                    ; preds = %96
  %97 = getelementptr inbounds i8, ptr %0, i64 8
  %98 = load i64, ptr %97, align 8, !tbaa !17
  %.not142 = icmp eq i64 %98, 0
  br i1 %.not142, label %.critedge111.invoke, label %.lr.ph137

.lr.ph137:                                        ; preds = %.preheader125, %.critedge105.thread
  %.050136 = phi i64 [ %122, %.critedge105.thread ], [ 0, %.preheader125 ]
  %99 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %94, i64 noundef %.050136)
          to label %100 unwind label %115

100:                                              ; preds = %.lr.ph137
  %101 = call noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(17) %99)
  br i1 %101, label %102, label %.critedge105.thread

102:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #6
  %103 = load ptr, ptr %0, align 8, !tbaa !27
  %104 = getelementptr inbounds i8, ptr %103, i64 104
  %105 = load ptr, ptr %104, align 8
  invoke void %105(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %10, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.050136)
          to label %106 unwind label %117

106:                                              ; preds = %102
  %107 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %10)
          to label %108 unwind label %119

108:                                              ; preds = %106
  %109 = load double, ptr %107, align 8, !tbaa !20
  %110 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %94, i64 noundef %.050136)
          to label %111 unwind label %119

111:                                              ; preds = %108
  %112 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %110)
          to label %.critedge105 unwind label %119

.critedge105:                                     ; preds = %111
  %113 = load double, ptr %112, align 8, !tbaa !20
  %114 = fcmp ult double %109, %113
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  br i1 %114, label %.critedge105.thread, label %.loopexit126

115:                                              ; preds = %.lr.ph137
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %191

117:                                              ; preds = %102
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %121

119:                                              ; preds = %111, %108, %106
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #6
  br label %121

121:                                              ; preds = %117, %119
  %.pn85 = phi { ptr, i32 } [ %120, %119 ], [ %118, %117 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  br label %191

.critedge105.thread:                              ; preds = %100, %.critedge105
  %122 = add nuw i64 %.050136, 1
  %123 = load i64, ptr %97, align 8, !tbaa !17
  %124 = icmp ult i64 %122, %123
  br i1 %124, label %.lr.ph137, label %.critedge111.invoke, !llvm.loop !30

.loopexit126:                                     ; preds = %.critedge105, %.loopexit129, %96
  %125 = load i8, ptr %46, align 1, !tbaa !22, !range !25, !noundef !26
  %126 = trunc nuw i8 %125 to i1
  br i1 %126, label %.loopexit, label %127

127:                                              ; preds = %.loopexit126
  %128 = getelementptr inbounds i8, ptr %0, i64 248
  %129 = load i32, ptr %128, align 8, !tbaa !31
  %.not88 = icmp eq i32 %129, -2147483648
  br i1 %.not88, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %127
  %130 = getelementptr inbounds i8, ptr %0, i64 8
  %131 = load i64, ptr %130, align 8, !tbaa !17
  %.not98138.not = icmp eq i64 %131, 0
  br i1 %.not98138.not, label %.critedge111.invoke, label %.lr.ph140

.lr.ph140:                                        ; preds = %.preheader
  %132 = getelementptr inbounds i8, ptr %0, i64 360
  %133 = getelementptr inbounds i8, ptr %0, i64 176
  br label %134

134:                                              ; preds = %.lr.ph140, %186
  %.047139 = phi i64 [ 0, %.lr.ph140 ], [ %187, %186 ]
  %135 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %132, i64 noundef %.047139)
          to label %136 unwind label %148

136:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  store double 0.000000e+00, ptr %12, align 8, !tbaa !20
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %11, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %137 unwind label %150

137:                                              ; preds = %136
  %138 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %135, ptr noundef nonnull align 8 dereferenceable(17) %11)
          to label %139 unwind label %152

139:                                              ; preds = %137
  br i1 %138, label %140, label %.critedge107.thread

.critedge107.thread:                              ; preds = %139
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  br label %161

140:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #6
  %141 = load ptr, ptr %0, align 8, !tbaa !27
  %142 = getelementptr inbounds i8, ptr %141, i64 88
  %143 = load ptr, ptr %142, align 8
  invoke void %143(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %13, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.047139)
          to label %144 unwind label %154

144:                                              ; preds = %140
  %145 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %132, i64 noundef %.047139)
          to label %146 unwind label %156

146:                                              ; preds = %144
  %147 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %13, ptr noundef nonnull align 8 dereferenceable(17) %145)
          to label %.critedge107 unwind label %156

.critedge107:                                     ; preds = %146
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  br i1 %147, label %.loopexit, label %161

148:                                              ; preds = %161, %134
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %191

150:                                              ; preds = %136
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %160

152:                                              ; preds = %137
  %153 = landingpad { ptr, i32 }
          cleanup
  br label %159

154:                                              ; preds = %140
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %158

156:                                              ; preds = %146, %144
  %157 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #6
  br label %158

158:                                              ; preds = %154, %156
  %.pn89 = phi { ptr, i32 } [ %157, %156 ], [ %155, %154 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  br label %159

159:                                              ; preds = %158, %152
  %.pn89.pn = phi { ptr, i32 } [ %.pn89, %158 ], [ %153, %152 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #6
  br label %160

160:                                              ; preds = %159, %150
  %.pn89.pn.pn = phi { ptr, i32 } [ %.pn89.pn, %159 ], [ %151, %150 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  br label %191

161:                                              ; preds = %.critedge107.thread, %.critedge107
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  %162 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %133, i64 noundef %.047139)
          to label %163 unwind label %148

163:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  %164 = load i32, ptr %128, align 8, !tbaa !31
  %165 = sitofp i32 %164 to double
  store double %165, ptr %15, align 8, !tbaa !20
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %14, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %166 unwind label %175

166:                                              ; preds = %163
  %167 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3geERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %162, ptr noundef nonnull align 8 dereferenceable(17) %14)
          to label %168 unwind label %177

168:                                              ; preds = %166
  br i1 %167, label %169, label %.thread124

169:                                              ; preds = %168
  %170 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %132, i64 noundef %.047139)
          to label %171 unwind label %177

171:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #6
  store double 0.000000e+00, ptr %17, align 8, !tbaa !20
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %16, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %172 unwind label %179

172:                                              ; preds = %171
  %173 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %170, ptr noundef nonnull align 8 dereferenceable(17) %16)
          to label %174 unwind label %181

.thread124:                                       ; preds = %168
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #6
  br label %186

174:                                              ; preds = %172
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #6
  br i1 %173, label %.loopexit, label %186

175:                                              ; preds = %163
  %176 = landingpad { ptr, i32 }
          cleanup
  br label %185

177:                                              ; preds = %169, %166
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %184

179:                                              ; preds = %171
  %180 = landingpad { ptr, i32 }
          cleanup
  br label %183

181:                                              ; preds = %172
  %182 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #6
  br label %183

183:                                              ; preds = %181, %179
  %.pn93 = phi { ptr, i32 } [ %182, %181 ], [ %180, %179 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #6
  br label %184

184:                                              ; preds = %183, %177
  %.pn93.pn = phi { ptr, i32 } [ %.pn93, %183 ], [ %178, %177 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #6
  br label %185

185:                                              ; preds = %184, %175
  %.pn93.pn.pn = phi { ptr, i32 } [ %.pn93.pn, %184 ], [ %176, %175 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #6
  br label %191

186:                                              ; preds = %.thread124, %174
  %187 = add nuw i64 %.047139, 1
  %188 = load i64, ptr %130, align 8, !tbaa !17
  %.not98 = icmp ult i64 %187, %188
  br i1 %.not98, label %134, label %.critedge111.invoke, !llvm.loop !32

.critedge111.invoke:                              ; preds = %24, %87, %.critedge105.thread, %186, %.preheader, %.preheader125, %52, %.preheader127, %.preheader130
  %189 = phi i32 [ 2, %.preheader130 ], [ 4, %.preheader127 ], [ 4, %52 ], [ 5, %.preheader125 ], [ 3, %.preheader ], [ 3, %186 ], [ 5, %.critedge105.thread ], [ 4, %87 ], [ 2, %24 ]
  %190 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %3) #6
  invoke void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3setES1_(ptr noundef nonnull align 8 dereferenceable(40) %190, i32 noundef %189)
          to label %.loopexit unwind label %44

.loopexit:                                        ; preds = %.critedge107, %174, %.critedge111.invoke, %.loopexit126, %127
  call void @_ZNSt12__shared_ptrIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #6
  ret void

191:                                              ; preds = %148, %160, %185, %115, %121, %37, %43, %86, %44
  %.pn99 = phi { ptr, i32 } [ %45, %44 ], [ %.pn81.pn.pn, %86 ], [ %.pn, %43 ], [ %38, %37 ], [ %.pn85, %121 ], [ %116, %115 ], [ %.pn93.pn.pn, %185 ], [ %149, %148 ], [ %.pn89.pn.pn, %160 ]
  call void @_ZNSt12__shared_ptrIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  br label %192

192:                                              ; preds = %191, %27
  %.pn99.pn = phi { ptr, i32 } [ %.pn99, %191 ], [ %28, %27 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #6
  resume { ptr, i32 } %.pn99.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3getESt10shared_ptrINS_14AllStopReasonsEE(ptr dead_on_unwind noalias writable sret(%"class.std::shared_ptr.6") align 8, ptr noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10shared_ptrIN9NOMAD_4_314AllStopReasonsEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN9NOMAD_4_314AllStopReasonsELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3leERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt19__shared_ptr_accessIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_315AlgoStopReasonsINS_12MadsStopTypeEE3setES1_(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #4 align 2

declare noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDouble9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isDefinedEv(ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3geERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN9NOMAD_4_315AlgoStopReasonsINS0_12MadsStopTypeEEELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { "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 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 = { 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 }

!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, !15, i64 252}
!6 = !{!"_ZTSN9NOMAD_4_38MeshBaseE", !7, i64 8, !10, i64 16, !14, i64 32, !14, i64 56, !14, i64 80, !14, i64 104, !14, i64 128, !14, i64 152, !14, i64 176, !14, i64 200, !14, i64 224, !15, i64 248, !15, i64 252, !16, i64 256}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSSt10shared_ptrIN9NOMAD_4_312PbParametersEE", !11, i64 0}
!11 = !{!"_ZTSSt12__shared_ptrIN9NOMAD_4_312PbParametersELN9__gnu_cxx12_Lock_policyE2EE", !12, i64 0, !13, i64 8}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !12, i64 0}
!14 = !{!"_ZTSN9NOMAD_4_313ArrayOfDoubleE", !7, i64 8, !12, i64 16}
!15 = !{!"int", !8, i64 0}
!16 = !{!"bool", !8, i64 0}
!17 = !{!6, !7, i64 8}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!21, !21, i64 0}
!21 = !{!"double", !8, i64 0}
!22 = !{!23, !16, i64 385}
!23 = !{!"_ZTSN9NOMAD_4_35GMeshE", !6, i64 0, !14, i64 264, !14, i64 288, !14, i64 312, !14, i64 336, !14, i64 360, !16, i64 384, !16, i64 385, !24, i64 392, !16, i64 416}
!24 = !{!"_ZTSN9NOMAD_4_36DoubleE", !21, i64 8, !16, i64 16}
!25 = !{i8 0, i8 2}
!26 = !{}
!27 = !{!28, !28, i64 0}
!28 = !{!"vtable pointer", !9, i64 0}
!29 = distinct !{!29, !19}
!30 = distinct !{!30, !19}
!31 = !{!6, !15, i64 248}
!32 = distinct !{!32, !19}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass