; 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.NOMAD_4_3::Double" = type <{ ptr, double, i8, [7 x i8] }>
%"class.NOMAD_4_3::ArrayOfDouble" = type { ptr, i64, ptr }
%"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.std::__shared_count" = type { 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 }>

@_ZN9NOMAD_4_3L3INFE = external hidden constant double, align 8

; 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: nounwind
declare void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24)) 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
declare dso_local void @_ZNK9NOMAD_4_35GMesh23checkFrameSizeIntegrityERKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417), ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417), i64 noundef, ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #4 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: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN9NOMAD_4_35GMesh21enlargeDeltaFrameSizeERKNS_9DirectionE(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(24) %1) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca %"class.NOMAD_4_3::Double", align 8
  %7 = alloca i64, align 8
  %8 = alloca %"class.NOMAD_4_3::Double", align 8
  %9 = alloca double, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.NOMAD_4_3::Double", align 8
  %13 = alloca %"class.NOMAD_4_3::Double", align 8
  %14 = alloca %"class.NOMAD_4_3::Double", align 8
  %15 = alloca i64, align 8
  %16 = alloca i8, align 1
  %17 = alloca %"class.NOMAD_4_3::Double", align 8
  %18 = alloca i1, align 1
  %19 = alloca %"class.NOMAD_4_3::Double", align 8
  %20 = alloca i1, align 1
  %21 = alloca %"class.NOMAD_4_3::Double", align 8
  %22 = alloca i1, align 1
  %23 = alloca i1, align 1
  %24 = alloca %"class.NOMAD_4_3::Double", align 8
  %25 = alloca i1, align 1
  %26 = alloca i1, align 1
  %27 = alloca i1, align 1
  %28 = alloca %"class.NOMAD_4_3::Double", align 8
  %29 = alloca i1, align 1
  %30 = alloca i1, align 1
  %31 = alloca i1, align 1
  %32 = alloca %"class.NOMAD_4_3::Double", align 8
  %33 = alloca i1, align 1
  %34 = alloca double, align 8
  %35 = alloca i1, align 1
  %36 = alloca %"class.NOMAD_4_3::Double", align 8
  %37 = alloca i1, align 1
  %38 = alloca i1, align 1
  %39 = alloca %"class.NOMAD_4_3::Double", align 8
  %40 = alloca i1, align 1
  %41 = alloca i1, align 1
  %42 = alloca %"class.NOMAD_4_3::Double", align 8
  %43 = alloca %"class.NOMAD_4_3::Double", align 8
  %44 = alloca %"class.NOMAD_4_3::Double", align 8
  %45 = alloca %"class.NOMAD_4_3::Double", align 8
  %46 = alloca %"class.NOMAD_4_3::Double", align 8
  %47 = alloca %"class.NOMAD_4_3::ArrayOfDouble", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %48 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #5
  store i8 0, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %6) #5
  call void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %6, ptr noundef nonnull align 8 dereferenceable(8) @_ZN9NOMAD_4_3L3INFE)
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  store i64 0, ptr %7, align 8, !tbaa !11
  br label %49

49:                                               ; preds = %102, %2
  %50 = load i64, ptr %7, align 8, !tbaa !11
  %51 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %48, i32 0, i32 1
  %52 = load i64, ptr %51, align 8, !tbaa !13
  %53 = icmp ult i64 %50, %52
  br i1 %53, label %55, label %54

54:                                               ; preds = %49
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  br label %106

55:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  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 %56 unwind label %73

56:                                               ; preds = %55
  %57 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 6
  %58 = load i64, ptr %7, align 8, !tbaa !11
  %59 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %57, i64 noundef %58)
          to label %60 unwind label %77

60:                                               ; preds = %56
  %61 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %8, ptr noundef nonnull align 8 dereferenceable(17) %59)
          to label %62 unwind label %77

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

63:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %13, ptr noundef nonnull align 8 dereferenceable(17) %6)
          to label %64 unwind label %82

64:                                               ; preds = %63
  %65 = load i64, ptr %7, align 8, !tbaa !11
  %66 = load ptr, ptr %48, align 8, !tbaa !22
  %67 = getelementptr inbounds ptr, ptr %66, i64 7
  %68 = load ptr, ptr %67, align 8
  invoke void %68(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %14, ptr noundef nonnull align 8 dereferenceable(417) %48, i64 noundef %65)
          to label %69 unwind label %86

69:                                               ; preds = %64
  invoke void @_ZN9NOMAD_4_33minENS_6DoubleES0_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %12, ptr noundef %13, ptr noundef %14)
          to label %70 unwind label %90

70:                                               ; preds = %69
  %71 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %6, ptr noundef nonnull align 8 dereferenceable(17) %12)
          to label %72 unwind label %94

72:                                               ; preds = %70
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #5
  br label %101

73:                                               ; preds = %55
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %10, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %11, align 4
  br label %81

77:                                               ; preds = %60, %56
  %78 = landingpad { ptr, i32 }
          cleanup
  %79 = extractvalue { ptr, i32 } %78, 0
  store ptr %79, ptr %10, align 8
  %80 = extractvalue { ptr, i32 } %78, 1
  store i32 %80, ptr %11, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %8) #5
  br label %81

81:                                               ; preds = %77, %73
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #5
  br label %105

82:                                               ; preds = %63
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %10, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %11, align 4
  br label %100

86:                                               ; preds = %64
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %10, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %11, align 4
  br label %99

90:                                               ; preds = %69
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %10, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %11, align 4
  br label %98

94:                                               ; preds = %70
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %10, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %11, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #5
  br label %98

98:                                               ; preds = %94, %90
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #5
  br label %99

99:                                               ; preds = %98, %86
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #5
  br label %100

100:                                              ; preds = %99, %82
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #5
  br label %105

101:                                              ; preds = %72, %62
  br label %102

102:                                              ; preds = %101
  %103 = load i64, ptr %7, align 8, !tbaa !11
  %104 = add i64 %103, 1
  store i64 %104, ptr %7, align 8, !tbaa !11
  br label %49, !llvm.loop !24

105:                                              ; preds = %100, %81
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  br label %446

106:                                              ; preds = %54
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  store i64 0, ptr %15, align 8, !tbaa !11
  br label %107

107:                                              ; preds = %420, %106
  %108 = load i64, ptr %15, align 8, !tbaa !11
  %109 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %48, i32 0, i32 1
  %110 = load i64, ptr %109, align 8, !tbaa !13
  %111 = icmp ult i64 %108, %110
  br i1 %111, label %113, label %112

112:                                              ; preds = %107
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %424

113:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #5
  store i8 0, ptr %16, align 1, !tbaa !9
  %114 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 11
  %115 = load i8, ptr %114, align 8, !tbaa !26, !range !29, !noundef !30
  %116 = trunc i8 %115 to i1
  store i1 false, ptr %18, align 1
  store i1 false, ptr %20, align 1
  store i1 false, ptr %22, align 1
  store i1 false, ptr %23, align 1
  store i1 false, ptr %25, align 1
  store i1 false, ptr %26, align 1
  store i1 false, ptr %27, align 1
  store i1 false, ptr %29, align 1
  store i1 false, ptr %30, align 1
  store i1 false, ptr %31, align 1
  store i1 false, ptr %33, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  store i1 false, ptr %35, align 1
  store i1 false, ptr %37, align 1
  store i1 false, ptr %38, align 1
  store i1 false, ptr %40, align 1
  store i1 false, ptr %41, align 1
  br i1 %116, label %117, label %168

117:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #5
  store i1 true, ptr %18, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #5
  store i1 true, ptr %20, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #5
  store i1 true, ptr %22, align 1
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = load i64, ptr %15, align 8, !tbaa !11
  %120 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %119)
          to label %121 unwind label %251

121:                                              ; preds = %117
  invoke void @_ZNK9NOMAD_4_36Double3absEv(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %21, ptr noundef nonnull align 8 dereferenceable(17) %120)
          to label %122 unwind label %251

122:                                              ; preds = %121
  store i1 true, ptr %23, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #5
  store i1 true, ptr %25, align 1
  %123 = load i64, ptr %15, align 8, !tbaa !11
  %124 = load ptr, ptr %48, align 8, !tbaa !22
  %125 = getelementptr inbounds ptr, ptr %124, i64 11
  %126 = load ptr, ptr %125, align 8
  invoke void %126(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %24, ptr noundef nonnull align 8 dereferenceable(417) %48, i64 noundef %123)
          to label %127 unwind label %255

127:                                              ; preds = %122
  store i1 true, ptr %26, align 1
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %19, ptr noundef nonnull align 8 dereferenceable(17) %21, ptr noundef nonnull align 8 dereferenceable(17) %24)
          to label %128 unwind label %259

128:                                              ; preds = %127
  store i1 true, ptr %27, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %28) #5
  store i1 true, ptr %29, align 1
  %129 = load i64, ptr %15, align 8, !tbaa !11
  %130 = load ptr, ptr %48, align 8, !tbaa !22
  %131 = getelementptr inbounds ptr, ptr %130, i64 7
  %132 = load ptr, ptr %131, align 8
  invoke void %132(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %28, ptr noundef nonnull align 8 dereferenceable(417) %48, i64 noundef %129)
          to label %133 unwind label %263

133:                                              ; preds = %128
  store i1 true, ptr %30, align 1
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %17, ptr noundef nonnull align 8 dereferenceable(17) %19, ptr noundef nonnull align 8 dereferenceable(17) %28)
          to label %134 unwind label %267

134:                                              ; preds = %133
  store i1 true, ptr %31, align 1
  %135 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 10
  %136 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %17, ptr noundef nonnull align 8 dereferenceable(17) %135)
          to label %137 unwind label %271

137:                                              ; preds = %134
  br i1 %136, label %168, label %138

138:                                              ; preds = %137
  %139 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 6
  %140 = load i64, ptr %15, align 8, !tbaa !11
  %141 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %139, i64 noundef %140)
          to label %142 unwind label %271

142:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #5
  store i1 true, ptr %33, align 1
  store double 0.000000e+00, ptr %34, align 8, !tbaa !20
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %32, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %143 unwind label %275

143:                                              ; preds = %142
  store i1 true, ptr %35, align 1
  %144 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %141, ptr noundef nonnull align 8 dereferenceable(17) %32)
          to label %145 unwind label %279

145:                                              ; preds = %143
  br i1 %144, label %146, label %166

146:                                              ; preds = %145
  %147 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 4
  %148 = load i64, ptr %15, align 8, !tbaa !11
  %149 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %147, i64 noundef %148)
          to label %150 unwind label %279

150:                                              ; preds = %146
  %151 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 2
  %152 = load i64, ptr %15, align 8, !tbaa !11
  %153 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %151, i64 noundef %152)
          to label %154 unwind label %279

154:                                              ; preds = %150
  %155 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3ltERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %149, ptr noundef nonnull align 8 dereferenceable(17) %153)
          to label %156 unwind label %279

156:                                              ; preds = %154
  br i1 %155, label %157, label %166

157:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #5
  store i1 true, ptr %37, align 1
  %158 = load i64, ptr %15, align 8, !tbaa !11
  %159 = load ptr, ptr %48, align 8, !tbaa !22
  %160 = getelementptr inbounds ptr, ptr %159, i64 7
  %161 = load ptr, ptr %160, align 8
  invoke void %161(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %36, ptr noundef nonnull align 8 dereferenceable(417) %48, i64 noundef %158)
          to label %162 unwind label %283

162:                                              ; preds = %157
  store i1 true, ptr %38, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %39) #5
  store i1 true, ptr %40, align 1
  invoke void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %39, ptr noundef nonnull align 8 dereferenceable(17) %6, ptr noundef nonnull align 8 dereferenceable(17) %6)
          to label %163 unwind label %287

163:                                              ; preds = %162
  store i1 true, ptr %41, align 1
  %164 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %36, ptr noundef nonnull align 8 dereferenceable(17) %39)
          to label %165 unwind label %291

165:                                              ; preds = %163
  br label %166

166:                                              ; preds = %165, %156, %145
  %167 = phi i1 [ false, %156 ], [ false, %145 ], [ %164, %165 ]
  br label %168

168:                                              ; preds = %166, %137, %113
  %169 = phi i1 [ true, %137 ], [ true, %113 ], [ %167, %166 ]
  %170 = load i1, ptr %41, align 1
  br i1 %170, label %171, label %172

171:                                              ; preds = %168
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %39) #5
  br label %172

172:                                              ; preds = %171, %168
  %173 = load i1, ptr %40, align 1
  br i1 %173, label %174, label %175

174:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 24, ptr %39) #5
  br label %175

175:                                              ; preds = %174, %172
  %176 = load i1, ptr %38, align 1
  br i1 %176, label %177, label %178

177:                                              ; preds = %175
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %36) #5
  br label %178

178:                                              ; preds = %177, %175
  %179 = load i1, ptr %37, align 1
  br i1 %179, label %180, label %181

180:                                              ; preds = %178
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #5
  br label %181

181:                                              ; preds = %180, %178
  %182 = load i1, ptr %35, align 1
  br i1 %182, label %183, label %184

183:                                              ; preds = %181
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %32) #5
  br label %184

184:                                              ; preds = %183, %181
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  %185 = load i1, ptr %33, align 1
  br i1 %185, label %186, label %187

186:                                              ; preds = %184
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #5
  br label %187

187:                                              ; preds = %186, %184
  %188 = load i1, ptr %31, align 1
  br i1 %188, label %189, label %190

189:                                              ; preds = %187
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %17) #5
  br label %190

190:                                              ; preds = %189, %187
  %191 = load i1, ptr %30, align 1
  br i1 %191, label %192, label %193

192:                                              ; preds = %190
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %28) #5
  br label %193

193:                                              ; preds = %192, %190
  %194 = load i1, ptr %29, align 1
  br i1 %194, label %195, label %196

195:                                              ; preds = %193
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #5
  br label %196

196:                                              ; preds = %195, %193
  %197 = load i1, ptr %27, align 1
  br i1 %197, label %198, label %199

198:                                              ; preds = %196
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %19) #5
  br label %199

199:                                              ; preds = %198, %196
  %200 = load i1, ptr %26, align 1
  br i1 %200, label %201, label %202

201:                                              ; preds = %199
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %24) #5
  br label %202

202:                                              ; preds = %201, %199
  %203 = load i1, ptr %25, align 1
  br i1 %203, label %204, label %205

204:                                              ; preds = %202
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #5
  br label %205

205:                                              ; preds = %204, %202
  %206 = load i1, ptr %23, align 1
  br i1 %206, label %207, label %208

207:                                              ; preds = %205
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #5
  br label %208

208:                                              ; preds = %207, %205
  %209 = load i1, ptr %22, align 1
  br i1 %209, label %210, label %211

210:                                              ; preds = %208
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #5
  br label %211

211:                                              ; preds = %210, %208
  %212 = load i1, ptr %20, align 1
  br i1 %212, label %213, label %214

213:                                              ; preds = %211
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #5
  br label %214

214:                                              ; preds = %213, %211
  %215 = load i1, ptr %18, align 1
  br i1 %215, label %216, label %217

216:                                              ; preds = %214
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #5
  br label %217

217:                                              ; preds = %216, %214
  br i1 %169, label %218, label %376

218:                                              ; preds = %217
  %219 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 3
  %220 = load i64, ptr %15, align 8, !tbaa !11
  %221 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %219, i64 noundef %220)
          to label %222 unwind label %353

222:                                              ; preds = %218
  %223 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 4
  %224 = load i64, ptr %15, align 8, !tbaa !11
  %225 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %223, i64 noundef %224)
          to label %226 unwind label %353

226:                                              ; preds = %222
  invoke void @_ZNK9NOMAD_4_35GMesh16getLargerMantExpERNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(417) %48, ptr noundef nonnull align 8 dereferenceable(17) %221, ptr noundef nonnull align 8 dereferenceable(17) %225)
          to label %227 unwind label %353

227:                                              ; preds = %226
  store i8 1, ptr %16, align 1, !tbaa !9
  store i8 1, ptr %5, align 1, !tbaa !9
  %228 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %48, i32 0, i32 9
  %229 = load i64, ptr %15, align 8, !tbaa !11
  %230 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %228, i64 noundef %229)
          to label %231 unwind label %353

231:                                              ; preds = %227
  %232 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleppEv(ptr noundef nonnull align 8 dereferenceable(17) %230)
          to label %233 unwind label %353

233:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #5
  %234 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %48, i32 0, i32 9
  %235 = load i64, ptr %15, align 8, !tbaa !11
  %236 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %234, i64 noundef %235)
          to label %237 unwind label %357

237:                                              ; preds = %233
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %43, ptr noundef nonnull align 8 dereferenceable(17) %236)
          to label %238 unwind label %357

238:                                              ; preds = %237
  %239 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %48, i32 0, i32 11
  %240 = load i64, ptr %15, align 8, !tbaa !11
  %241 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %239, i64 noundef %240)
          to label %242 unwind label %361

242:                                              ; preds = %238
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %44, ptr noundef nonnull align 8 dereferenceable(17) %241)
          to label %243 unwind label %361

243:                                              ; preds = %242
  invoke void @_ZN9NOMAD_4_33maxENS_6DoubleES0_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %42, ptr noundef %43, ptr noundef %44)
          to label %244 unwind label %365

244:                                              ; preds = %243
  %245 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %48, i32 0, i32 11
  %246 = load i64, ptr %15, align 8, !tbaa !11
  %247 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %245, i64 noundef %246)
          to label %248 unwind label %369

248:                                              ; preds = %244
  %249 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %247, ptr noundef nonnull align 8 dereferenceable(17) %42)
          to label %250 unwind label %369

250:                                              ; preds = %248
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %42) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %44) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %43) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #5
  br label %376

251:                                              ; preds = %121, %117
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %10, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %11, align 4
  br label %343

255:                                              ; preds = %122
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %10, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %11, align 4
  br label %336

259:                                              ; preds = %127
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %10, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %11, align 4
  br label %332

263:                                              ; preds = %128
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %10, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %11, align 4
  br label %325

267:                                              ; preds = %133
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %10, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %11, align 4
  br label %321

271:                                              ; preds = %138, %134
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %10, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %11, align 4
  br label %317

275:                                              ; preds = %142
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %10, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %11, align 4
  br label %313

279:                                              ; preds = %154, %150, %146, %143
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %10, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %11, align 4
  br label %309

283:                                              ; preds = %157
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %10, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %11, align 4
  br label %305

287:                                              ; preds = %162
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %10, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %11, align 4
  br label %298

291:                                              ; preds = %163
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %10, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %11, align 4
  %295 = load i1, ptr %41, align 1
  br i1 %295, label %296, label %297

296:                                              ; preds = %291
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %39) #5
  br label %297

297:                                              ; preds = %296, %291
  br label %298

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

300:                                              ; preds = %298
  call void @llvm.lifetime.end.p0(i64 24, ptr %39) #5
  br label %301

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

303:                                              ; preds = %301
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %36) #5
  br label %304

304:                                              ; preds = %303, %301
  br label %305

305:                                              ; preds = %304, %283
  %306 = load i1, ptr %37, align 1
  br i1 %306, label %307, label %308

307:                                              ; preds = %305
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #5
  br label %308

308:                                              ; preds = %307, %305
  br label %309

309:                                              ; preds = %308, %279
  %310 = load i1, ptr %35, align 1
  br i1 %310, label %311, label %312

311:                                              ; preds = %309
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %32) #5
  br label %312

312:                                              ; preds = %311, %309
  br label %313

313:                                              ; preds = %312, %275
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  %314 = load i1, ptr %33, align 1
  br i1 %314, label %315, label %316

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

316:                                              ; preds = %315, %313
  br label %317

317:                                              ; preds = %316, %271
  %318 = load i1, ptr %31, align 1
  br i1 %318, label %319, label %320

319:                                              ; preds = %317
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %17) #5
  br label %320

320:                                              ; preds = %319, %317
  br label %321

321:                                              ; preds = %320, %267
  %322 = load i1, ptr %30, align 1
  br i1 %322, label %323, label %324

323:                                              ; preds = %321
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %28) #5
  br label %324

324:                                              ; preds = %323, %321
  br label %325

325:                                              ; preds = %324, %263
  %326 = load i1, ptr %29, align 1
  br i1 %326, label %327, label %328

327:                                              ; preds = %325
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #5
  br label %328

328:                                              ; preds = %327, %325
  %329 = load i1, ptr %27, align 1
  br i1 %329, label %330, label %331

330:                                              ; preds = %328
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %19) #5
  br label %331

331:                                              ; preds = %330, %328
  br label %332

332:                                              ; preds = %331, %259
  %333 = load i1, ptr %26, align 1
  br i1 %333, label %334, label %335

334:                                              ; preds = %332
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %24) #5
  br label %335

335:                                              ; preds = %334, %332
  br label %336

336:                                              ; preds = %335, %255
  %337 = load i1, ptr %25, align 1
  br i1 %337, label %338, label %339

338:                                              ; preds = %336
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #5
  br label %339

339:                                              ; preds = %338, %336
  %340 = load i1, ptr %23, align 1
  br i1 %340, label %341, label %342

341:                                              ; preds = %339
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #5
  br label %342

342:                                              ; preds = %341, %339
  br label %343

343:                                              ; preds = %342, %251
  %344 = load i1, ptr %22, align 1
  br i1 %344, label %345, label %346

345:                                              ; preds = %343
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #5
  br label %346

346:                                              ; preds = %345, %343
  %347 = load i1, ptr %20, align 1
  br i1 %347, label %348, label %349

348:                                              ; preds = %346
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #5
  br label %349

349:                                              ; preds = %348, %346
  %350 = load i1, ptr %18, align 1
  br i1 %350, label %351, label %352

351:                                              ; preds = %349
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #5
  br label %352

352:                                              ; preds = %351, %349
  br label %423

353:                                              ; preds = %391, %387, %383, %231, %227, %226, %222, %218
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %10, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %11, align 4
  br label %423

357:                                              ; preds = %237, %233
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %10, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %11, align 4
  br label %375

361:                                              ; preds = %242, %238
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %10, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %11, align 4
  br label %374

365:                                              ; preds = %243
  %366 = landingpad { ptr, i32 }
          cleanup
  %367 = extractvalue { ptr, i32 } %366, 0
  store ptr %367, ptr %10, align 8
  %368 = extractvalue { ptr, i32 } %366, 1
  store i32 %368, ptr %11, align 4
  br label %373

369:                                              ; preds = %248, %244
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %10, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %11, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %42) #5
  br label %373

373:                                              ; preds = %369, %365
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %44) #5
  br label %374

374:                                              ; preds = %373, %361
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %43) #5
  br label %375

375:                                              ; preds = %374, %357
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #5
  br label %423

376:                                              ; preds = %250, %217
  %377 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 7
  %378 = load i8, ptr %377, align 8, !tbaa !31, !range !29, !noundef !30
  %379 = trunc i8 %378 to i1
  br i1 %379, label %380, label %419

380:                                              ; preds = %376
  %381 = load i8, ptr %16, align 1, !tbaa !9, !range !29, !noundef !30
  %382 = trunc i8 %381 to i1
  br i1 %382, label %383, label %419

383:                                              ; preds = %380
  %384 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 4
  %385 = load i64, ptr %15, align 8, !tbaa !11
  %386 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %384, i64 noundef %385)
          to label %387 unwind label %353

387:                                              ; preds = %383
  %388 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 3
  %389 = load i64, ptr %15, align 8, !tbaa !11
  %390 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %388, i64 noundef %389)
          to label %391 unwind label %353

391:                                              ; preds = %387
  invoke void @_ZNK9NOMAD_4_35GMesh23checkFrameSizeIntegrityERKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %48, ptr noundef nonnull align 8 dereferenceable(17) %386, ptr noundef nonnull align 8 dereferenceable(17) %390)
          to label %392 unwind label %353

392:                                              ; preds = %391
  %393 = load i64, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %45) #5
  %394 = load i64, ptr %15, align 8, !tbaa !11
  %395 = load ptr, ptr %48, align 8, !tbaa !22
  %396 = getelementptr inbounds ptr, ptr %395, i64 11
  %397 = load ptr, ptr %396, align 8
  invoke void %397(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %45, ptr noundef nonnull align 8 dereferenceable(417) %48, i64 noundef %394)
          to label %398 unwind label %405

398:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 24, ptr %46) #5
  %399 = load i64, ptr %15, align 8, !tbaa !11
  %400 = load ptr, ptr %48, align 8, !tbaa !22
  %401 = getelementptr inbounds ptr, ptr %400, i64 13
  %402 = load ptr, ptr %401, align 8
  invoke void %402(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %46, ptr noundef nonnull align 8 dereferenceable(417) %48, i64 noundef %399)
          to label %403 unwind label %409

403:                                              ; preds = %398
  invoke void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %48, i64 noundef %393, ptr noundef nonnull align 8 dereferenceable(17) %45, ptr noundef nonnull align 8 dereferenceable(17) %46)
          to label %404 unwind label %413

404:                                              ; preds = %403
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %46) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %46) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %45) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #5
  br label %419

405:                                              ; preds = %392
  %406 = landingpad { ptr, i32 }
          cleanup
  %407 = extractvalue { ptr, i32 } %406, 0
  store ptr %407, ptr %10, align 8
  %408 = extractvalue { ptr, i32 } %406, 1
  store i32 %408, ptr %11, align 4
  br label %418

409:                                              ; preds = %398
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %10, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %11, align 4
  br label %417

413:                                              ; preds = %403
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %10, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %11, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %46) #5
  br label %417

417:                                              ; preds = %413, %409
  call void @llvm.lifetime.end.p0(i64 24, ptr %46) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %45) #5
  br label %418

418:                                              ; preds = %417, %405
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #5
  br label %423

419:                                              ; preds = %404, %380, %376
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #5
  br label %420

420:                                              ; preds = %419
  %421 = load i64, ptr %15, align 8, !tbaa !11
  %422 = add i64 %421, 1
  store i64 %422, ptr %15, align 8, !tbaa !11
  br label %107, !llvm.loop !32

423:                                              ; preds = %418, %375, %353, %352
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %446

424:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #5
  %425 = load ptr, ptr %48, align 8, !tbaa !22
  %426 = getelementptr inbounds ptr, ptr %425, i64 12
  %427 = load ptr, ptr %426, align 8
  invoke void %427(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::ArrayOfDouble") align 8 %47, ptr noundef nonnull align 8 dereferenceable(417) %48)
          to label %428 unwind label %434

428:                                              ; preds = %424
  %429 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %48, i32 0, i32 5
  %430 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDoubleltERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %429, ptr noundef nonnull align 8 dereferenceable(24) %47)
          to label %431 unwind label %438

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

432:                                              ; preds = %431
  %433 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %48, i32 0, i32 14
  store i8 0, ptr %433, align 8, !tbaa !33
  br label %442

434:                                              ; preds = %424
  %435 = landingpad { ptr, i32 }
          cleanup
  %436 = extractvalue { ptr, i32 } %435, 0
  store ptr %436, ptr %10, align 8
  %437 = extractvalue { ptr, i32 } %435, 1
  store i32 %437, ptr %11, align 4
  br label %445

438:                                              ; preds = %428
  %439 = landingpad { ptr, i32 }
          cleanup
  %440 = extractvalue { ptr, i32 } %439, 0
  store ptr %440, ptr %10, align 8
  %441 = extractvalue { ptr, i32 } %439, 1
  store i32 %441, ptr %11, align 4
  call void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #5
  br label %445

442:                                              ; preds = %432, %431
  %443 = load i8, ptr %5, align 1, !tbaa !9, !range !29, !noundef !30
  %444 = trunc i8 %443 to i1
  call void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %6) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #5
  ret i1 %444

445:                                              ; preds = %438, %434
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #5
  br label %446

446:                                              ; preds = %445, %423, %105
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %6) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #5
  br label %447

447:                                              ; preds = %446
  %448 = load ptr, ptr %10, align 8
  %449 = load i32, ptr %11, align 4
  %450 = insertvalue { ptr, i32 } poison, ptr %448, 0
  %451 = insertvalue { ptr, i32 } %450, i32 %449, 1
  resume { ptr, i32 } %451
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_33minENS_6DoubleES0_(ptr dead_on_unwind noalias writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef, ptr noundef) #2

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

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

declare void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #3

declare void @_ZNK9NOMAD_4_36Double3absEv(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef nonnull align 8 dereferenceable(17)) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind noalias writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK9NOMAD_4_35GMesh16getLargerMantExpERNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(417), ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_33maxENS_6DoubleES0_(ptr dead_on_unwind noalias writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef, ptr noundef) #2

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

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


; 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.NOMAD_4_3::Double" = type <{ ptr, double, i8, [7 x i8] }>
%"class.NOMAD_4_3::ArrayOfDouble" = type { ptr, i64, ptr }

@_ZN9NOMAD_4_3L3INFE = external hidden constant double, align 8

; 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: nounwind
declare void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24)) 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
declare dso_local void @_ZNK9NOMAD_4_35GMesh23checkFrameSizeIntegrityERKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417), ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417), i64 noundef, ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #4 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: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN9NOMAD_4_35GMesh21enlargeDeltaFrameSizeERKNS_9DirectionE(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(24) %1) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.NOMAD_4_3::Double", align 8
  %4 = alloca %"class.NOMAD_4_3::Double", align 8
  %5 = alloca double, align 8
  %6 = alloca %"class.NOMAD_4_3::Double", align 8
  %7 = alloca %"class.NOMAD_4_3::Double", align 8
  %8 = alloca %"class.NOMAD_4_3::Double", align 8
  %9 = alloca %"class.NOMAD_4_3::Double", align 8
  %10 = alloca %"class.NOMAD_4_3::Double", align 8
  %11 = alloca %"class.NOMAD_4_3::Double", align 8
  %12 = alloca %"class.NOMAD_4_3::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 %"class.NOMAD_4_3::Double", align 8
  %18 = alloca %"class.NOMAD_4_3::Double", align 8
  %19 = alloca %"class.NOMAD_4_3::Double", align 8
  %20 = alloca %"class.NOMAD_4_3::Double", align 8
  %21 = alloca %"class.NOMAD_4_3::Double", align 8
  %22 = alloca %"class.NOMAD_4_3::Double", align 8
  %23 = alloca %"class.NOMAD_4_3::ArrayOfDouble", align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #5
  call void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %3, ptr noundef nonnull align 8 dereferenceable(8) @_ZN9NOMAD_4_3L3INFE)
  %24 = getelementptr inbounds i8, ptr %0, i64 8
  %25 = load i64, ptr %24, align 8, !tbaa !5
  %.not = icmp eq i64 %25, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %2
  %26 = getelementptr inbounds i8, ptr %0, i64 360
  br label %36

.preheader:                                       ; preds = %67
  %.not195 = icmp eq i64 %69, 0
  br i1 %.not195, label %._crit_edge, label %.lr.ph194

.lr.ph194:                                        ; preds = %.preheader
  %27 = getelementptr inbounds i8, ptr %0, i64 416
  %28 = getelementptr inbounds i8, ptr %0, i64 392
  %29 = getelementptr inbounds i8, ptr %0, i64 360
  %30 = getelementptr inbounds i8, ptr %0, i64 312
  %31 = getelementptr inbounds i8, ptr %0, i64 264
  %32 = getelementptr inbounds i8, ptr %0, i64 288
  %33 = getelementptr inbounds i8, ptr %0, i64 176
  %34 = getelementptr inbounds i8, ptr %0, i64 224
  %35 = getelementptr inbounds i8, ptr %0, i64 384
  br label %74

36:                                               ; preds = %.lr.ph, %67
  %.0102189 = phi i64 [ 0, %.lr.ph ], [ %68, %67 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  store double 0.000000e+00, ptr %5, align 8, !tbaa !17
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %4, ptr noundef nonnull align 8 dereferenceable(8) %5)
          to label %37 unwind label %51

37:                                               ; preds = %36
  %38 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %.0102189)
          to label %39 unwind label %53

39:                                               ; preds = %37
  %40 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %4, ptr noundef nonnull align 8 dereferenceable(17) %38)
          to label %41 unwind label %53

41:                                               ; preds = %39
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #5
  br i1 %40, label %42, label %67

42:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %7, ptr noundef nonnull align 8 dereferenceable(17) %3)
          to label %43 unwind label %56

43:                                               ; preds = %42
  %44 = load ptr, ptr %0, align 8, !tbaa !19
  %45 = getelementptr inbounds i8, ptr %44, i64 56
  %46 = load ptr, ptr %45, align 8
  invoke void %46(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %8, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.0102189)
          to label %47 unwind label %58

47:                                               ; preds = %43
  invoke void @_ZN9NOMAD_4_33minENS_6DoubleES0_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %6, ptr noundef nonnull %7, ptr noundef nonnull %8)
          to label %48 unwind label %60

48:                                               ; preds = %47
  %49 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %3, ptr noundef nonnull align 8 dereferenceable(17) %6)
          to label %50 unwind label %62

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

51:                                               ; preds = %36
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %55

53:                                               ; preds = %39, %37
  %54 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %4) #5
  br label %55

55:                                               ; preds = %53, %51
  %.pn125 = phi { ptr, i32 } [ %54, %53 ], [ %52, %51 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #5
  br label %220

56:                                               ; preds = %42
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %66

58:                                               ; preds = %43
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %65

60:                                               ; preds = %47
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %64

62:                                               ; preds = %48
  %63 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %6) #5
  br label %64

64:                                               ; preds = %62, %60
  %.pn127 = phi { ptr, i32 } [ %63, %62 ], [ %61, %60 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %8) #5
  br label %65

65:                                               ; preds = %64, %58
  %.pn127.pn = phi { ptr, i32 } [ %.pn127, %64 ], [ %59, %58 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %7) #5
  br label %66

66:                                               ; preds = %65, %56
  %.pn127.pn.pn = phi { ptr, i32 } [ %.pn127.pn, %65 ], [ %57, %56 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #5
  br label %220

67:                                               ; preds = %41, %50
  %68 = add nuw i64 %.0102189, 1
  %69 = load i64, ptr %24, align 8, !tbaa !5
  %70 = icmp ult i64 %68, %69
  br i1 %70, label %36, label %.preheader, !llvm.loop !21

._crit_edge:                                      ; preds = %.thread158, %2, %.preheader
  %.0103.lcssa = phi i1 [ false, %.preheader ], [ false, %2 ], [ %.1104163, %.thread158 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #5
  %71 = load ptr, ptr %0, align 8, !tbaa !19
  %72 = getelementptr inbounds i8, ptr %71, i64 96
  %73 = load ptr, ptr %72, align 8
  invoke void %73(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::ArrayOfDouble") align 8 %23, ptr noundef nonnull align 8 dereferenceable(417) %0)
          to label %208 unwind label %214

74:                                               ; preds = %.lr.ph194, %.thread158
  %.077191 = phi i64 [ 0, %.lr.ph194 ], [ %205, %.thread158 ]
  %.0103190 = phi i1 [ false, %.lr.ph194 ], [ %.1104163, %.thread158 ]
  %75 = load i8, ptr %27, align 8, !tbaa !23, !range !26, !noundef !27
  %76 = trunc nuw i8 %75 to i1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  br i1 %76, label %77, label %.critedge146.thread

77:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #5
  %78 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %.077191)
          to label %79 unwind label %134

79:                                               ; preds = %77
  invoke void @_ZNK9NOMAD_4_36Double3absEv(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %11, ptr noundef nonnull align 8 dereferenceable(17) %78)
          to label %80 unwind label %134

80:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #5
  %81 = load ptr, ptr %0, align 8, !tbaa !19
  %82 = getelementptr inbounds i8, ptr %81, i64 88
  %83 = load ptr, ptr %82, align 8
  invoke void %83(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %12, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.077191)
          to label %84 unwind label %136

84:                                               ; preds = %80
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %10, ptr noundef nonnull align 8 dereferenceable(17) %11, ptr noundef nonnull align 8 dereferenceable(17) %12)
          to label %85 unwind label %138

85:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #5
  %86 = load ptr, ptr %0, align 8, !tbaa !19
  %87 = getelementptr inbounds i8, ptr %86, i64 56
  %88 = load ptr, ptr %87, align 8
  invoke void %88(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 %.077191)
          to label %89 unwind label %140

89:                                               ; preds = %85
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %9, ptr noundef nonnull align 8 dereferenceable(17) %10, ptr noundef nonnull align 8 dereferenceable(17) %13)
          to label %90 unwind label %142

90:                                               ; preds = %89
  %91 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %9, ptr noundef nonnull align 8 dereferenceable(17) %28)
          to label %92 unwind label %144

92:                                               ; preds = %90
  br i1 %91, label %.thread156, label %93

.thread156:                                       ; preds = %92
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #5
  br label %114

93:                                               ; preds = %92
  %94 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %29, i64 noundef %.077191)
          to label %95 unwind label %144

95:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #5
  store double 0.000000e+00, ptr %15, align 8, !tbaa !17
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %14, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %96 unwind label %146

96:                                               ; preds = %95
  %97 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %94, ptr noundef nonnull align 8 dereferenceable(17) %14)
          to label %98 unwind label %148

98:                                               ; preds = %96
  br i1 %97, label %99, label %.thread155

99:                                               ; preds = %98
  %100 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %30, i64 noundef %.077191)
          to label %101 unwind label %148

101:                                              ; preds = %99
  %102 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %.077191)
          to label %103 unwind label %148

103:                                              ; preds = %101
  %104 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3ltERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %100, ptr noundef nonnull align 8 dereferenceable(17) %102)
          to label %105 unwind label %148

105:                                              ; preds = %103
  br i1 %104, label %106, label %.thread155

106:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #5
  %107 = load ptr, ptr %0, align 8, !tbaa !19
  %108 = getelementptr inbounds i8, ptr %107, i64 56
  %109 = load ptr, ptr %108, align 8
  invoke void %109(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %16, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.077191)
          to label %110 unwind label %150

110:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #5
  invoke void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %17, ptr noundef nonnull align 8 dereferenceable(17) %3, ptr noundef nonnull align 8 dereferenceable(17) %3)
          to label %111 unwind label %152

111:                                              ; preds = %110
  %112 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3gtERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %16, ptr noundef nonnull align 8 dereferenceable(17) %17)
          to label %.critedge134.thread unwind label %154

.critedge134.thread:                              ; preds = %111
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %17) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #5
  br label %.thread155

.thread155:                                       ; preds = %.critedge134.thread, %98, %105
  %113 = phi i1 [ %112, %.critedge134.thread ], [ false, %98 ], [ false, %105 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #5
  br i1 %113, label %114, label %.thread158

.critedge146.thread:                              ; preds = %74
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  br label %114

114:                                              ; preds = %.thread156, %.critedge146.thread, %.thread155
  %115 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %.077191)
          to label %116 unwind label %166

116:                                              ; preds = %114
  %117 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %30, i64 noundef %.077191)
          to label %118 unwind label %166

118:                                              ; preds = %116
  invoke void @_ZNK9NOMAD_4_35GMesh16getLargerMantExpERNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(17) %115, ptr noundef nonnull align 8 dereferenceable(17) %117)
          to label %119 unwind label %166

119:                                              ; preds = %118
  %120 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %.077191)
          to label %121 unwind label %166

121:                                              ; preds = %119
  %122 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleppEv(ptr noundef nonnull align 8 dereferenceable(17) %120)
          to label %123 unwind label %166

123:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #5
  %124 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %.077191)
          to label %125 unwind label %168

125:                                              ; preds = %123
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %19, ptr noundef nonnull align 8 dereferenceable(17) %124)
          to label %126 unwind label %168

126:                                              ; preds = %125
  %127 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.077191)
          to label %128 unwind label %170

128:                                              ; preds = %126
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %20, ptr noundef nonnull align 8 dereferenceable(17) %127)
          to label %129 unwind label %170

129:                                              ; preds = %128
  invoke void @_ZN9NOMAD_4_33maxENS_6DoubleES0_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %18, ptr noundef nonnull %19, ptr noundef nonnull %20)
          to label %130 unwind label %172

130:                                              ; preds = %129
  %131 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %34, i64 noundef %.077191)
          to label %132 unwind label %174

132:                                              ; preds = %130
  %133 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %131, ptr noundef nonnull align 8 dereferenceable(17) %18)
          to label %179 unwind label %174

134:                                              ; preds = %79, %77
  %135 = landingpad { ptr, i32 }
          cleanup
  br label %165

136:                                              ; preds = %80
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %164

138:                                              ; preds = %84
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %163

140:                                              ; preds = %85
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %162

142:                                              ; preds = %89
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %161

144:                                              ; preds = %93, %90
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %160

146:                                              ; preds = %95
  %147 = landingpad { ptr, i32 }
          cleanup
  br label %159

148:                                              ; preds = %103, %101, %99, %96
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %158

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

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

154:                                              ; preds = %111
  %155 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %17) #5
  br label %156

156:                                              ; preds = %152, %154
  %.pn106 = phi { ptr, i32 } [ %155, %154 ], [ %153, %152 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #5
  br label %157

157:                                              ; preds = %150, %156
  %.pn106.pn = phi { ptr, i32 } [ %.pn106, %156 ], [ %151, %150 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #5
  br label %158

158:                                              ; preds = %148, %157
  %.pn106.pn.pn = phi { ptr, i32 } [ %.pn106.pn, %157 ], [ %149, %148 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #5
  br label %159

159:                                              ; preds = %158, %146
  %.pn106.pn.pn.pn = phi { ptr, i32 } [ %.pn106.pn.pn, %158 ], [ %147, %146 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #5
  br label %160

160:                                              ; preds = %144, %159
  %.pn106.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn106.pn.pn.pn, %159 ], [ %145, %144 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9) #5
  br label %161

161:                                              ; preds = %142, %160
  %.pn106.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn106.pn.pn.pn.pn, %160 ], [ %143, %142 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #5
  br label %162

162:                                              ; preds = %140, %161
  %.pn106.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn106.pn.pn.pn.pn.pn, %161 ], [ %141, %140 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #5
  br label %163

163:                                              ; preds = %138, %162
  %.pn106.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn106.pn.pn.pn.pn.pn.pn, %162 ], [ %139, %138 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #5
  br label %164

164:                                              ; preds = %136, %163
  %.pn106.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn106.pn.pn.pn.pn.pn.pn.pn, %163 ], [ %137, %136 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #5
  br label %165

165:                                              ; preds = %134, %164
  %.pn106.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn106.pn.pn.pn.pn.pn.pn.pn.pn, %164 ], [ %135, %134 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #5
  br label %220

166:                                              ; preds = %186, %184, %182, %121, %119, %118, %116, %114
  %167 = landingpad { ptr, i32 }
          cleanup
  br label %220

168:                                              ; preds = %125, %123
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %178

170:                                              ; preds = %128, %126
  %171 = landingpad { ptr, i32 }
          cleanup
  br label %177

172:                                              ; preds = %129
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %176

174:                                              ; preds = %132, %130
  %175 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %18) #5
  br label %176

176:                                              ; preds = %174, %172
  %.pn117 = phi { ptr, i32 } [ %175, %174 ], [ %173, %172 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %20) #5
  br label %177

177:                                              ; preds = %176, %170
  %.pn117.pn = phi { ptr, i32 } [ %.pn117, %176 ], [ %171, %170 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %19) #5
  br label %178

178:                                              ; preds = %177, %168
  %.pn117.pn.pn = phi { ptr, i32 } [ %.pn117.pn, %177 ], [ %169, %168 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #5
  br label %220

179:                                              ; preds = %132
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %18) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %20) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %19) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #5
  %180 = load i8, ptr %35, align 8, !tbaa !28, !range !26, !noundef !27
  %181 = trunc nuw i8 %180 to i1
  br i1 %181, label %182, label %.thread158

182:                                              ; preds = %179
  %183 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %30, i64 noundef %.077191)
          to label %184 unwind label %166

184:                                              ; preds = %182
  %185 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %.077191)
          to label %186 unwind label %166

186:                                              ; preds = %184
  invoke void @_ZNK9NOMAD_4_35GMesh23checkFrameSizeIntegrityERKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(17) %183, ptr noundef nonnull align 8 dereferenceable(17) %185)
          to label %187 unwind label %166

187:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %21) #5
  %188 = load ptr, ptr %0, align 8, !tbaa !19
  %189 = getelementptr inbounds i8, ptr %188, i64 88
  %190 = load ptr, ptr %189, align 8
  invoke void %190(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %21, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.077191)
          to label %191 unwind label %197

191:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #5
  %192 = load ptr, ptr %0, align 8, !tbaa !19
  %193 = getelementptr inbounds i8, ptr %192, i64 104
  %194 = load ptr, ptr %193, align 8
  invoke void %194(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %22, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.077191)
          to label %195 unwind label %199

195:                                              ; preds = %191
  invoke void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.077191, ptr noundef nonnull align 8 dereferenceable(17) %21, ptr noundef nonnull align 8 dereferenceable(17) %22)
          to label %196 unwind label %201

196:                                              ; preds = %195
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %22) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #5
  br label %.thread158

197:                                              ; preds = %187
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %204

199:                                              ; preds = %191
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %203

201:                                              ; preds = %195
  %202 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %22) #5
  br label %203

203:                                              ; preds = %201, %199
  %.pn121 = phi { ptr, i32 } [ %202, %201 ], [ %200, %199 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #5
  br label %204

204:                                              ; preds = %203, %197
  %.pn121.pn = phi { ptr, i32 } [ %.pn121, %203 ], [ %198, %197 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #5
  br label %220

.thread158:                                       ; preds = %.thread155, %179, %196
  %.1104163 = phi i1 [ true, %179 ], [ true, %196 ], [ %.0103190, %.thread155 ]
  %205 = add nuw i64 %.077191, 1
  %206 = load i64, ptr %24, align 8, !tbaa !5
  %207 = icmp ult i64 %205, %206
  br i1 %207, label %74, label %._crit_edge, !llvm.loop !29

208:                                              ; preds = %._crit_edge
  %209 = getelementptr inbounds i8, ptr %0, i64 336
  %210 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDoubleltERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %209, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %211 unwind label %216

211:                                              ; preds = %208
  br i1 %210, label %212, label %218

212:                                              ; preds = %211
  %213 = getelementptr inbounds i8, ptr %0, i64 256
  store i8 0, ptr %213, align 8, !tbaa !30
  br label %218

214:                                              ; preds = %._crit_edge
  %215 = landingpad { ptr, i32 }
          cleanup
  br label %219

216:                                              ; preds = %208
  %217 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #5
  br label %219

218:                                              ; preds = %212, %211
  call void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %3) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #5
  ret i1 %.0103.lcssa

219:                                              ; preds = %216, %214
  %.pn = phi { ptr, i32 } [ %217, %216 ], [ %215, %214 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #5
  br label %220

220:                                              ; preds = %166, %178, %204, %165, %55, %66, %219
  %.pn127.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn, %219 ], [ %.pn127.pn.pn, %66 ], [ %.pn125, %55 ], [ %.pn121.pn, %204 ], [ %167, %166 ], [ %.pn117.pn.pn, %178 ], [ %.pn106.pn.pn.pn.pn.pn.pn.pn.pn.pn, %165 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %3) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #5
  resume { ptr, i32 } %.pn127.pn.pn.pn.pn
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_33minENS_6DoubleES0_(ptr dead_on_unwind noalias writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #3

declare void @_ZNK9NOMAD_4_36Double3absEv(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN9NOMAD_4_3ltERKNS_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 void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind noalias writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK9NOMAD_4_35GMesh16getLargerMantExpERNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(417), ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN9NOMAD_4_33maxENS_6DoubleES0_(ptr dead_on_unwind noalias writable sret(%"class.NOMAD_4_3::Double") align 8, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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 = { 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, !7, i64 8}
!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 = !{!18, !18, i64 0}
!18 = !{!"double", !8, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"vtable pointer", !9, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!24, !16, i64 416}
!24 = !{!"_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, !25, i64 392, !16, i64 416}
!25 = !{!"_ZTSN9NOMAD_4_36DoubleE", !18, i64 8, !16, i64 16}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!24, !16, i64 384}
!29 = distinct !{!29, !22}
!30 = !{!6, !16, i64 256}


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