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

; 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::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 }>
%"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::ArrayOfDouble" = type { ptr, i64, ptr }

; 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

declare void @_ZN9NOMAD_4_36DoubleC1Ev(ptr noundef nonnull align 8 dereferenceable(17)) unnamed_addr #1

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

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

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

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17), double noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9NOMAD_4_35GMesh17roundFrameSizeExpERKNS_6DoubleE(ptr noundef nonnull align 8 dereferenceable(417), ptr noundef nonnull align 8 dereferenceable(17)) #3 align 2

; Function Attrs: nounwind
declare double @log10(double noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9NOMAD_4_35GMesh9setDeltasEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %1, ptr noundef nonnull align 8 dereferenceable(17) %2, ptr noundef nonnull align 8 dereferenceable(17) %3) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"class.NOMAD_4_3::Double", align 8
  %10 = alloca double, align 8
  %11 = alloca %"class.NOMAD_4_3::Double", align 8
  %12 = alloca double, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.NOMAD_4_3::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 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::Double", align 8
  %24 = alloca double, align 8
  %25 = alloca %"class.NOMAD_4_3::Double", align 8
  %26 = alloca %"class.NOMAD_4_3::Double", align 8
  %27 = alloca %"class.NOMAD_4_3::Double", align 8
  %28 = alloca double, align 8
  %29 = alloca %"class.NOMAD_4_3::Double", align 8
  %30 = alloca double, align 8
  %31 = alloca %"class.NOMAD_4_3::Double", align 8
  %32 = alloca double, align 8
  %33 = alloca %"class.NOMAD_4_3::Double", align 8
  %34 = alloca double, align 8
  %35 = alloca %"class.NOMAD_4_3::Double", align 8
  %36 = alloca %"class.NOMAD_4_3::Double", align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i64 %1, ptr %6, align 8, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %37 = load ptr, ptr %5, align 8
  %38 = load i64, ptr %6, align 8, !tbaa !9
  %39 = load ptr, ptr %7, align 8, !tbaa !5
  %40 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %37, i64 noundef %38, ptr noundef nonnull align 8 dereferenceable(17) %39, ptr noundef nonnull align 8 dereferenceable(17) %40)
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  store double 1.000000e+00, ptr %10, align 8, !tbaa !11
  call void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %9, ptr noundef nonnull align 8 dereferenceable(8) %10)
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  store double 0.000000e+00, ptr %12, align 8, !tbaa !11
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %11, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %41 unwind label %55

41:                                               ; preds = %4
  %42 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %37, i32 0, i32 6
  %43 = load i64, ptr %6, align 8, !tbaa !9
  %44 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %42, i64 noundef %43)
          to label %45 unwind label %59

45:                                               ; preds = %41
  %46 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3ltERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %11, ptr noundef nonnull align 8 dereferenceable(17) %44)
          to label %47 unwind label %59

47:                                               ; preds = %45
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  br i1 %46, label %48, label %68

48:                                               ; preds = %47
  %49 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %37, i32 0, i32 6
  %50 = load i64, ptr %6, align 8, !tbaa !9
  %51 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %49, i64 noundef %50)
          to label %52 unwind label %64

52:                                               ; preds = %48
  %53 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %9, ptr noundef nonnull align 8 dereferenceable(17) %51)
          to label %54 unwind label %64

54:                                               ; preds = %52
  br label %68

55:                                               ; preds = %4
  %56 = landingpad { ptr, i32 }
          cleanup
  %57 = extractvalue { ptr, i32 } %56, 0
  store ptr %57, ptr %13, align 8
  %58 = extractvalue { ptr, i32 } %56, 1
  store i32 %58, ptr %14, align 4
  br label %63

59:                                               ; preds = %45, %41
  %60 = landingpad { ptr, i32 }
          cleanup
  %61 = extractvalue { ptr, i32 } %60, 0
  store ptr %61, ptr %13, align 8
  %62 = extractvalue { ptr, i32 } %60, 1
  store i32 %62, ptr %14, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #5
  br label %63

63:                                               ; preds = %59, %55
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  br label %254

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

68:                                               ; preds = %54, %47
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #5
  invoke void @_ZN9NOMAD_4_36DoubleC1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15)
          to label %69 unwind label %105

69:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #5
  invoke void @_ZN9NOMAD_4_36DoubleC1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16)
          to label %70 unwind label %109

70:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #5
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  store double 1.000000e+00, ptr %20, align 8, !tbaa !11
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %19, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %72 unwind label %113

72:                                               ; preds = %70
  invoke void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %18, ptr noundef nonnull align 8 dereferenceable(17) %19, ptr noundef nonnull align 8 dereferenceable(17) %9)
          to label %73 unwind label %117

73:                                               ; preds = %72
  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) %71, ptr noundef nonnull align 8 dereferenceable(17) %18)
          to label %74 unwind label %121

74:                                               ; preds = %73
  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) %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #5
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store double 2.000000e+00, ptr %24, align 8, !tbaa !11
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %23, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %76 unwind label %127

76:                                               ; preds = %74
  invoke void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %22, ptr noundef nonnull align 8 dereferenceable(17) %23, ptr noundef nonnull align 8 dereferenceable(17) %9)
          to label %77 unwind label %131

77:                                               ; preds = %76
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %21, ptr noundef nonnull align 8 dereferenceable(17) %75, ptr noundef nonnull align 8 dereferenceable(17) %22)
          to label %78 unwind label %135

78:                                               ; preds = %77
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %22) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #5
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  store double 5.000000e+00, ptr %28, align 8, !tbaa !11
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %27, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %80 unwind label %141

80:                                               ; preds = %78
  invoke void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %26, ptr noundef nonnull align 8 dereferenceable(17) %27, ptr noundef nonnull align 8 dereferenceable(17) %9)
          to label %81 unwind label %145

81:                                               ; preds = %80
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %25, ptr noundef nonnull align 8 dereferenceable(17) %79, ptr noundef nonnull align 8 dereferenceable(17) %26)
          to label %82 unwind label %149

82:                                               ; preds = %81
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %26) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %83 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %17)
          to label %84 unwind label %155

84:                                               ; preds = %82
  %85 = load double, ptr %83, align 8, !tbaa !11
  %86 = call double @log10(double noundef %85) #5
  store double %86, ptr %30, align 8, !tbaa !11
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %29, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %87 unwind label %155

87:                                               ; preds = %84
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %88 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %21)
          to label %89 unwind label %159

89:                                               ; preds = %87
  %90 = load double, ptr %88, align 8, !tbaa !11
  %91 = call double @log10(double noundef %90) #5
  store double %91, ptr %32, align 8, !tbaa !11
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %31, ptr noundef nonnull align 8 dereferenceable(8) %32)
          to label %92 unwind label %159

92:                                               ; preds = %89
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %93 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %25)
          to label %94 unwind label %163

94:                                               ; preds = %92
  %95 = load double, ptr %93, align 8, !tbaa !11
  %96 = call double @log10(double noundef %95) #5
  store double %96, ptr %34, align 8, !tbaa !11
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %33, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %97 unwind label %163

97:                                               ; preds = %94
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  %98 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isIntegerEv(ptr noundef nonnull align 8 dereferenceable(17) %29)
          to label %99 unwind label %167

99:                                               ; preds = %97
  br i1 %98, label %100, label %171

100:                                              ; preds = %99
  %101 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17) %15, double noundef 1.000000e+00)
          to label %102 unwind label %167

102:                                              ; preds = %100
  %103 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %16, ptr noundef nonnull align 8 dereferenceable(17) %29)
          to label %104 unwind label %167

104:                                              ; preds = %102
  br label %185

105:                                              ; preds = %68
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %13, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %14, align 4
  br label %253

109:                                              ; preds = %69
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %13, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %14, align 4
  br label %252

113:                                              ; preds = %70
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %13, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %14, align 4
  br label %126

117:                                              ; preds = %72
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %13, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %14, align 4
  br label %125

121:                                              ; preds = %73
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %13, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %14, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %18) #5
  br label %125

125:                                              ; preds = %121, %117
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %19) #5
  br label %126

126:                                              ; preds = %125, %113
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #5
  br label %251

127:                                              ; preds = %74
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %13, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %14, align 4
  br label %140

131:                                              ; preds = %76
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %13, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %14, align 4
  br label %139

135:                                              ; preds = %77
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %13, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %14, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %22) #5
  br label %139

139:                                              ; preds = %135, %131
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %23) #5
  br label %140

140:                                              ; preds = %139, %127
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #5
  br label %250

141:                                              ; preds = %78
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %13, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %14, align 4
  br label %154

145:                                              ; preds = %80
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %13, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %14, align 4
  br label %153

149:                                              ; preds = %81
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %13, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %14, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %26) #5
  br label %153

153:                                              ; preds = %149, %145
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %27) #5
  br label %154

154:                                              ; preds = %153, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #5
  br label %249

155:                                              ; preds = %84, %82
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %13, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  br label %248

159:                                              ; preds = %89, %87
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %13, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %247

163:                                              ; preds = %94, %92
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %13, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %246

167:                                              ; preds = %213, %212, %208, %204, %198, %194, %192, %187, %185, %181, %179, %176, %174, %171, %102, %100, %97
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %13, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %14, align 4
  br label %245

171:                                              ; preds = %99
  %172 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isIntegerEv(ptr noundef nonnull align 8 dereferenceable(17) %31)
          to label %173 unwind label %167

173:                                              ; preds = %171
  br i1 %172, label %174, label %179

174:                                              ; preds = %173
  %175 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17) %15, double noundef 2.000000e+00)
          to label %176 unwind label %167

176:                                              ; preds = %174
  %177 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %16, ptr noundef nonnull align 8 dereferenceable(17) %31)
          to label %178 unwind label %167

178:                                              ; preds = %176
  br label %184

179:                                              ; preds = %173
  %180 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17) %15, double noundef 5.000000e+00)
          to label %181 unwind label %167

181:                                              ; preds = %179
  %182 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %16, ptr noundef nonnull align 8 dereferenceable(17) %33)
          to label %183 unwind label %167

183:                                              ; preds = %181
  br label %184

184:                                              ; preds = %183, %178
  br label %185

185:                                              ; preds = %184, %104
  %186 = invoke noundef i32 @_ZN9NOMAD_4_35GMesh17roundFrameSizeExpERKNS_6DoubleE(ptr noundef nonnull align 8 dereferenceable(417) %37, ptr noundef nonnull align 8 dereferenceable(17) %16)
          to label %187 unwind label %167

187:                                              ; preds = %185
  %188 = sitofp i32 %186 to double
  %189 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %37, i32 0, i32 4
  %190 = load i64, ptr %6, align 8, !tbaa !9
  %191 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %189, i64 noundef %190)
          to label %192 unwind label %167

192:                                              ; preds = %187
  %193 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17) %191, double noundef %188)
          to label %194 unwind label %167

194:                                              ; preds = %192
  %195 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %37, i32 0, i32 3
  %196 = load i64, ptr %6, align 8, !tbaa !9
  %197 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %195, i64 noundef %196)
          to label %198 unwind label %167

198:                                              ; preds = %194
  %199 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %197, ptr noundef nonnull align 8 dereferenceable(17) %15)
          to label %200 unwind label %167

200:                                              ; preds = %198
  %201 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %37, i32 0, i32 7
  %202 = load i8, ptr %201, align 8, !tbaa !13, !range !23, !noundef !24
  %203 = trunc i8 %202 to i1
  br i1 %203, label %204, label %244

204:                                              ; preds = %200
  %205 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %37, i32 0, i32 4
  %206 = load i64, ptr %6, align 8, !tbaa !9
  %207 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %205, i64 noundef %206)
          to label %208 unwind label %167

208:                                              ; preds = %204
  %209 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %37, i32 0, i32 3
  %210 = load i64, ptr %6, align 8, !tbaa !9
  %211 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %209, i64 noundef %210)
          to label %212 unwind label %167

212:                                              ; preds = %208
  invoke void @_ZNK9NOMAD_4_35GMesh23checkFrameSizeIntegrityERKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %37, ptr noundef nonnull align 8 dereferenceable(17) %207, ptr noundef nonnull align 8 dereferenceable(17) %211)
          to label %213 unwind label %167

213:                                              ; preds = %212
  %214 = load i64, ptr %6, align 8, !tbaa !9
  %215 = load ptr, ptr %7, align 8, !tbaa !5
  %216 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZNK9NOMAD_4_35GMesh14checkSetDeltasEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %37, i64 noundef %214, ptr noundef nonnull align 8 dereferenceable(17) %215, ptr noundef nonnull align 8 dereferenceable(17) %216)
          to label %217 unwind label %167

217:                                              ; preds = %213
  %218 = load i64, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #5
  %219 = load i64, ptr %6, align 8, !tbaa !9
  %220 = load ptr, ptr %37, align 8, !tbaa !25
  %221 = getelementptr inbounds ptr, ptr %220, i64 11
  %222 = load ptr, ptr %221, align 8
  invoke void %222(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %35, ptr noundef nonnull align 8 dereferenceable(417) %37, i64 noundef %219)
          to label %223 unwind label %230

223:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #5
  %224 = load i64, ptr %6, align 8, !tbaa !9
  %225 = load ptr, ptr %37, align 8, !tbaa !25
  %226 = getelementptr inbounds ptr, ptr %225, i64 13
  %227 = load ptr, ptr %226, align 8
  invoke void %227(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %36, ptr noundef nonnull align 8 dereferenceable(417) %37, i64 noundef %224)
          to label %228 unwind label %234

228:                                              ; preds = %223
  invoke void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %37, i64 noundef %218, ptr noundef nonnull align 8 dereferenceable(17) %35, ptr noundef nonnull align 8 dereferenceable(17) %36)
          to label %229 unwind label %238

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

230:                                              ; preds = %217
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %13, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %14, align 4
  br label %243

234:                                              ; preds = %223
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %13, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %14, align 4
  br label %242

238:                                              ; preds = %228
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %13, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %14, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %36) #5
  br label %242

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

243:                                              ; preds = %242, %230
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #5
  br label %245

244:                                              ; preds = %229, %200
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %33) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %31) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %29) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %25) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %17) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %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 %16) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #5
  ret void

245:                                              ; preds = %243, %167
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %33) #5
  br label %246

246:                                              ; preds = %245, %163
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %31) #5
  br label %247

247:                                              ; preds = %246, %159
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %29) #5
  br label %248

248:                                              ; preds = %247, %155
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %25) #5
  br label %249

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

250:                                              ; preds = %249, %140
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %17) #5
  br label %251

251:                                              ; preds = %250, %126
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #5
  br label %252

252:                                              ; preds = %251, %109
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #5
  br label %253

253:                                              ; preds = %252, %105
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #5
  br label %254

254:                                              ; preds = %253, %64, %63
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #5
  br label %255

255:                                              ; preds = %254
  %256 = load ptr, ptr %13, align 8
  %257 = load i32, ptr %14, align 4
  %258 = insertvalue { ptr, i32 } poison, ptr %256, 0
  %259 = insertvalue { ptr, i32 } %258, i32 %257, 1
  resume { ptr, i32 } %259
}

declare noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isIntegerEv(ptr noundef nonnull align 8 dereferenceable(17)) #1

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #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 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !21, i64 384}
!14 = !{!"_ZTSN9NOMAD_4_35GMeshE", !15, i64 0, !19, i64 264, !19, i64 288, !19, i64 312, !19, i64 336, !19, i64 360, !21, i64 384, !21, i64 385, !22, i64 392, !21, i64 416}
!15 = !{!"_ZTSN9NOMAD_4_38MeshBaseE", !10, i64 8, !16, i64 16, !19, i64 32, !19, i64 56, !19, i64 80, !19, i64 104, !19, i64 128, !19, i64 152, !19, i64 176, !19, i64 200, !19, i64 224, !20, i64 248, !20, i64 252, !21, i64 256}
!16 = !{!"_ZTSSt10shared_ptrIN9NOMAD_4_312PbParametersEE", !17, i64 0}
!17 = !{!"_ZTSSt12__shared_ptrIN9NOMAD_4_312PbParametersELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !18, i64 8}
!18 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!19 = !{!"_ZTSN9NOMAD_4_313ArrayOfDoubleE", !10, i64 8, !6, i64 16}
!20 = !{!"int", !7, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{!"_ZTSN9NOMAD_4_36DoubleE", !12, i64 8, !21, i64 16}
!23 = !{i8 0, i8 2}
!24 = !{}
!25 = !{!26, !26, i64 0}
!26 = !{!"vtable pointer", !8, i64 0}


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

; 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

declare void @_ZN9NOMAD_4_36DoubleC1Ev(ptr noundef nonnull align 8 dereferenceable(17)) unnamed_addr #1

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

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

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

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17), double noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9NOMAD_4_35GMesh17roundFrameSizeExpERKNS_6DoubleE(ptr noundef nonnull align 8 dereferenceable(417), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9NOMAD_4_35GMesh9setDeltasEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %1, ptr noundef nonnull align 8 dereferenceable(17) %2, ptr noundef nonnull align 8 dereferenceable(17) %3) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.NOMAD_4_3::Double", align 8
  %6 = alloca double, align 8
  %7 = alloca %"class.NOMAD_4_3::Double", align 8
  %8 = alloca 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 double, align 8
  %15 = alloca %"class.NOMAD_4_3::Double", align 8
  %16 = alloca %"class.NOMAD_4_3::Double", align 8
  %17 = alloca %"class.NOMAD_4_3::Double", align 8
  %18 = alloca 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 double, align 8
  %23 = alloca %"class.NOMAD_4_3::Double", align 8
  %24 = alloca double, align 8
  %25 = alloca %"class.NOMAD_4_3::Double", align 8
  %26 = alloca double, align 8
  %27 = alloca %"class.NOMAD_4_3::Double", align 8
  %28 = alloca double, align 8
  %29 = alloca %"class.NOMAD_4_3::Double", align 8
  %30 = alloca %"class.NOMAD_4_3::Double", align 8
  tail call void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %1, ptr noundef nonnull align 8 dereferenceable(17) %2, ptr noundef nonnull align 8 dereferenceable(17) %3)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  store double 1.000000e+00, ptr %6, align 8, !tbaa !5
  call void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  store double 0.000000e+00, ptr %8, align 8, !tbaa !5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %7, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %31 unwind label %41

31:                                               ; preds = %4
  %32 = getelementptr inbounds i8, ptr %0, i64 360
  %33 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %1)
          to label %34 unwind label %43

34:                                               ; preds = %31
  %35 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3ltERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %7, ptr noundef nonnull align 8 dereferenceable(17) %33)
          to label %36 unwind label %43

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

37:                                               ; preds = %36
  %38 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %1)
          to label %39 unwind label %46

39:                                               ; preds = %37
  %40 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %5, ptr noundef nonnull align 8 dereferenceable(17) %38)
          to label %48 unwind label %46

41:                                               ; preds = %4
  %42 = landingpad { ptr, i32 }
          cleanup
  br label %45

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

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

46:                                               ; preds = %39, %37
  %47 = landingpad { ptr, i32 }
          cleanup
  br label %175

48:                                               ; preds = %39, %36
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #6
  invoke void @_ZN9NOMAD_4_36DoubleC1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9)
          to label %49 unwind label %79

49:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #6
  invoke void @_ZN9NOMAD_4_36DoubleC1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10)
          to label %50 unwind label %81

50:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  store double 1.000000e+00, ptr %14, align 8, !tbaa !5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %13, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %51 unwind label %83

51:                                               ; preds = %50
  invoke void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %12, ptr noundef nonnull align 8 dereferenceable(17) %13, ptr noundef nonnull align 8 dereferenceable(17) %5)
          to label %52 unwind label %85

52:                                               ; preds = %51
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %11, ptr noundef nonnull align 8 dereferenceable(17) %3, ptr noundef nonnull align 8 dereferenceable(17) %12)
          to label %53 unwind label %87

53:                                               ; preds = %52
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  store double 2.000000e+00, ptr %18, align 8, !tbaa !5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %17, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %54 unwind label %91

54:                                               ; preds = %53
  invoke void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %16, ptr noundef nonnull align 8 dereferenceable(17) %17, ptr noundef nonnull align 8 dereferenceable(17) %5)
          to label %55 unwind label %93

55:                                               ; preds = %54
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %15, ptr noundef nonnull align 8 dereferenceable(17) %3, ptr noundef nonnull align 8 dereferenceable(17) %16)
          to label %56 unwind label %95

56:                                               ; preds = %55
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #6
  store double 5.000000e+00, ptr %22, align 8, !tbaa !5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %21, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %57 unwind label %99

57:                                               ; preds = %56
  invoke void @_ZN9NOMAD_4_3mlERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %20, ptr noundef nonnull align 8 dereferenceable(17) %21, ptr noundef nonnull align 8 dereferenceable(17) %5)
          to label %58 unwind label %101

58:                                               ; preds = %57
  invoke void @_ZN9NOMAD_4_3dvERKNS_6DoubleES2_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %19, ptr noundef nonnull align 8 dereferenceable(17) %3, ptr noundef nonnull align 8 dereferenceable(17) %20)
          to label %59 unwind label %103

59:                                               ; preds = %58
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %20) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  %60 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %11)
          to label %61 unwind label %107

61:                                               ; preds = %59
  %62 = load double, ptr %60, align 8, !tbaa !5
  %63 = call double @log10(double noundef %62) #6
  store double %63, ptr %24, align 8, !tbaa !5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %23, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %64 unwind label %107

64:                                               ; preds = %61
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #6
  %65 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %15)
          to label %66 unwind label %109

66:                                               ; preds = %64
  %67 = load double, ptr %65, align 8, !tbaa !5
  %68 = call double @log10(double noundef %67) #6
  store double %68, ptr %26, align 8, !tbaa !5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %25, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %69 unwind label %109

69:                                               ; preds = %66
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #6
  %70 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9NOMAD_4_36Double8todoubleEv(ptr noundef nonnull align 8 dereferenceable(17) %19)
          to label %71 unwind label %111

71:                                               ; preds = %69
  %72 = load double, ptr %70, align 8, !tbaa !5
  %73 = call double @log10(double noundef %72) #6
  store double %73, ptr %28, align 8, !tbaa !5
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %27, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %74 unwind label %111

74:                                               ; preds = %71
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  %75 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isIntegerEv(ptr noundef nonnull align 8 dereferenceable(17) %23)
          to label %76 unwind label %113

76:                                               ; preds = %74
  br i1 %75, label %77, label %115

77:                                               ; preds = %76
  %78 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17) %9, double noundef 1.000000e+00)
          to label %.invoke unwind label %113

79:                                               ; preds = %48
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %174

81:                                               ; preds = %49
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %173

83:                                               ; preds = %50
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %90

85:                                               ; preds = %51
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %89

87:                                               ; preds = %52
  %88 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #6
  br label %89

89:                                               ; preds = %87, %85
  %.pn40 = phi { ptr, i32 } [ %88, %87 ], [ %86, %85 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #6
  br label %90

90:                                               ; preds = %89, %83
  %.pn40.pn = phi { ptr, i32 } [ %.pn40, %89 ], [ %84, %83 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #6
  br label %172

91:                                               ; preds = %53
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %98

93:                                               ; preds = %54
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %97

95:                                               ; preds = %55
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %16) #6
  br label %97

97:                                               ; preds = %95, %93
  %.pn43 = phi { ptr, i32 } [ %96, %95 ], [ %94, %93 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %17) #6
  br label %98

98:                                               ; preds = %97, %91
  %.pn43.pn = phi { ptr, i32 } [ %.pn43, %97 ], [ %92, %91 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #6
  br label %171

99:                                               ; preds = %56
  %100 = landingpad { ptr, i32 }
          cleanup
  br label %106

101:                                              ; preds = %57
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %105

103:                                              ; preds = %58
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %20) #6
  br label %105

105:                                              ; preds = %103, %101
  %.pn46 = phi { ptr, i32 } [ %104, %103 ], [ %102, %101 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %21) #6
  br label %106

106:                                              ; preds = %105, %99
  %.pn46.pn = phi { ptr, i32 } [ %.pn46, %105 ], [ %100, %99 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #6
  br label %170

107:                                              ; preds = %61, %59
  %108 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  br label %169

109:                                              ; preds = %66, %64
  %110 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  br label %168

111:                                              ; preds = %71, %69
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  br label %167

113:                                              ; preds = %.invoke, %146, %145, %143, %141, %135, %132, %129, %126, %124, %120, %118, %115, %77, %74
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %166

115:                                              ; preds = %76
  %116 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isIntegerEv(ptr noundef nonnull align 8 dereferenceable(17) %25)
          to label %117 unwind label %113

117:                                              ; preds = %115
  br i1 %116, label %118, label %120

118:                                              ; preds = %117
  %119 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17) %9, double noundef 2.000000e+00)
          to label %.invoke unwind label %113

120:                                              ; preds = %117
  %121 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17) %9, double noundef 5.000000e+00)
          to label %.invoke unwind label %113

.invoke:                                          ; preds = %77, %120, %118
  %122 = phi ptr [ %25, %118 ], [ %27, %120 ], [ %23, %77 ]
  %123 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %10, ptr noundef nonnull align 8 dereferenceable(17) %122)
          to label %124 unwind label %113

124:                                              ; preds = %.invoke
  %125 = invoke noundef i32 @_ZN9NOMAD_4_35GMesh17roundFrameSizeExpERKNS_6DoubleE(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(17) %10)
          to label %126 unwind label %113

126:                                              ; preds = %124
  %127 = getelementptr inbounds i8, ptr %0, i64 312
  %128 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %127, i64 noundef %1)
          to label %129 unwind label %113

129:                                              ; preds = %126
  %130 = sitofp i32 %125 to double
  %131 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSEd(ptr noundef nonnull align 8 dereferenceable(17) %128, double noundef %130)
          to label %132 unwind label %113

132:                                              ; preds = %129
  %133 = getelementptr inbounds i8, ptr %0, i64 288
  %134 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %133, i64 noundef %1)
          to label %135 unwind label %113

135:                                              ; preds = %132
  %136 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %134, ptr noundef nonnull align 8 dereferenceable(17) %9)
          to label %137 unwind label %113

137:                                              ; preds = %135
  %138 = getelementptr inbounds i8, ptr %0, i64 384
  %139 = load i8, ptr %138, align 8, !tbaa !9, !range !21, !noundef !22
  %140 = trunc nuw i8 %139 to i1
  br i1 %140, label %141, label %165

141:                                              ; preds = %137
  %142 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %127, i64 noundef %1)
          to label %143 unwind label %113

143:                                              ; preds = %141
  %144 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %133, i64 noundef %1)
          to label %145 unwind label %113

145:                                              ; preds = %143
  invoke void @_ZNK9NOMAD_4_35GMesh23checkFrameSizeIntegrityERKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(17) %142, ptr noundef nonnull align 8 dereferenceable(17) %144)
          to label %146 unwind label %113

146:                                              ; preds = %145
  invoke void @_ZNK9NOMAD_4_35GMesh14checkSetDeltasEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %1, ptr noundef nonnull align 8 dereferenceable(17) %2, ptr noundef nonnull align 8 dereferenceable(17) %3)
          to label %147 unwind label %113

147:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %29) #6
  %148 = load ptr, ptr %0, align 8, !tbaa !23
  %149 = getelementptr inbounds i8, ptr %148, i64 88
  %150 = load ptr, ptr %149, align 8
  invoke void %150(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %29, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %1)
          to label %151 unwind label %157

151:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %30) #6
  %152 = load ptr, ptr %0, align 8, !tbaa !23
  %153 = getelementptr inbounds i8, ptr %152, i64 104
  %154 = load ptr, ptr %153, align 8
  invoke void %154(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %30, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %1)
          to label %155 unwind label %159

155:                                              ; preds = %151
  invoke void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %1, ptr noundef nonnull align 8 dereferenceable(17) %29, ptr noundef nonnull align 8 dereferenceable(17) %30)
          to label %156 unwind label %161

156:                                              ; preds = %155
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %30) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %29) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #6
  br label %165

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

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

161:                                              ; preds = %155
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %30) #6
  br label %163

163:                                              ; preds = %161, %159
  %.pn49 = phi { ptr, i32 } [ %162, %161 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %29) #6
  br label %164

164:                                              ; preds = %163, %157
  %.pn49.pn = phi { ptr, i32 } [ %.pn49, %163 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #6
  br label %166

165:                                              ; preds = %156, %137
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %27) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %25) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %23) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %19) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  ret void

166:                                              ; preds = %164, %113
  %.pn49.pn.pn = phi { ptr, i32 } [ %.pn49.pn, %164 ], [ %114, %113 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %27) #6
  br label %167

167:                                              ; preds = %166, %111
  %.pn49.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn, %166 ], [ %112, %111 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %25) #6
  br label %168

168:                                              ; preds = %167, %109
  %.pn49.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn.pn, %167 ], [ %110, %109 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %23) #6
  br label %169

169:                                              ; preds = %168, %107
  %.pn49.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn.pn.pn, %168 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %19) #6
  br label %170

170:                                              ; preds = %169, %106
  %.pn49.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn.pn.pn.pn, %169 ], [ %.pn46.pn, %106 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #6
  br label %171

171:                                              ; preds = %170, %98
  %.pn49.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn.pn.pn.pn.pn, %170 ], [ %.pn43.pn, %98 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #6
  br label %172

172:                                              ; preds = %171, %90
  %.pn49.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn.pn.pn.pn.pn.pn, %171 ], [ %.pn40.pn, %90 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #6
  br label %173

173:                                              ; preds = %172, %81
  %.pn49.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn.pn.pn.pn.pn.pn.pn, %172 ], [ %82, %81 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9) #6
  br label %174

174:                                              ; preds = %173, %79
  %.pn49.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn.pn.pn.pn.pn.pn.pn.pn, %173 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  br label %175

175:                                              ; preds = %174, %46, %45
  %.pn49.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn49.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %174 ], [ %47, %46 ], [ %.pn, %45 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  resume { ptr, i32 } %.pn49.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare noundef zeroext i1 @_ZNK9NOMAD_4_36Double9isIntegerEv(ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK9NOMAD_4_35GMesh14checkSetDeltasEmRKNS_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 #3 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !19, i64 384}
!10 = !{!"_ZTSN9NOMAD_4_35GMeshE", !11, i64 0, !17, i64 264, !17, i64 288, !17, i64 312, !17, i64 336, !17, i64 360, !19, i64 384, !19, i64 385, !20, i64 392, !19, i64 416}
!11 = !{!"_ZTSN9NOMAD_4_38MeshBaseE", !12, i64 8, !13, i64 16, !17, i64 32, !17, i64 56, !17, i64 80, !17, i64 104, !17, i64 128, !17, i64 152, !17, i64 176, !17, i64 200, !17, i64 224, !18, i64 248, !18, i64 252, !19, i64 256}
!12 = !{!"long", !7, i64 0}
!13 = !{!"_ZTSSt10shared_ptrIN9NOMAD_4_312PbParametersEE", !14, i64 0}
!14 = !{!"_ZTSSt12__shared_ptrIN9NOMAD_4_312PbParametersELN9__gnu_cxx12_Lock_policyE2EE", !15, i64 0, !16, i64 8}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !15, i64 0}
!17 = !{!"_ZTSN9NOMAD_4_313ArrayOfDoubleE", !12, i64 8, !15, i64 16}
!18 = !{!"int", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{!"_ZTSN9NOMAD_4_36DoubleE", !6, i64 8, !19, i64 16}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!24, !24, i64 0}
!24 = !{!"vtable pointer", !8, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass