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

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

; 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

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZN9NOMAD_4_313ArrayOfDoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #2

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

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

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

; 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_3leERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) #3

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9NOMAD_4_35GMesh20refineDeltaFrameSizeEv(ptr noundef nonnull align 8 dereferenceable(417) %0) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i64, align 8
  %4 = alloca %"class.NOMAD_4_3::Double", align 8
  %5 = alloca %"class.NOMAD_4_3::Double", align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %"class.NOMAD_4_3::Double", 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 %"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 %"class.NOMAD_4_3::Double", align 8
  %16 = alloca %"class.NOMAD_4_3::ArrayOfDouble", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %17 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  store i64 0, ptr %3, align 8, !tbaa !9
  br label %18

18:                                               ; preds = %209, %1
  %19 = load i64, ptr %3, align 8, !tbaa !9
  %20 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 1
  %21 = load i64, ptr %20, align 8, !tbaa !11
  %22 = icmp ult i64 %19, %21
  br i1 %22, label %24, label %23

23:                                               ; preds = %18
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %216

24:                                               ; preds = %18
  call void @llvm.lifetime.start.p0(i64 24, ptr %4) #5
  %25 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 3
  %26 = load i64, ptr %3, align 8, !tbaa !9
  %27 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %26)
  call void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %4, ptr noundef nonnull align 8 dereferenceable(17) %27)
  call void @llvm.lifetime.start.p0(i64 24, ptr %5) #5
  %28 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 4
  %29 = load i64, ptr %3, align 8, !tbaa !9
  %30 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %29)
          to label %31 unwind label %72

31:                                               ; preds = %24
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %5, ptr noundef nonnull align 8 dereferenceable(17) %30)
          to label %32 unwind label %72

32:                                               ; preds = %31
  %33 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 6
  %34 = load i64, ptr %3, align 8, !tbaa !9
  %35 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %34)
          to label %36 unwind label %76

36:                                               ; preds = %32
  invoke void @_ZNK9NOMAD_4_35GMesh20refineDeltaFrameSizeERNS_6DoubleES2_RKS1_(ptr noundef nonnull align 8 dereferenceable(417) %17, ptr noundef nonnull align 8 dereferenceable(17) %4, ptr noundef nonnull align 8 dereferenceable(17) %5, ptr noundef nonnull align 8 dereferenceable(17) %35)
          to label %37 unwind label %76

37:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #5
  %38 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 4
  %39 = load i64, ptr %3, align 8, !tbaa !9
  %40 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %39)
          to label %41 unwind label %80

41:                                               ; preds = %37
  %42 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 2
  %43 = load i64, ptr %3, 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 %80

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

49:                                               ; preds = %45
  invoke void @_ZNK9NOMAD_4_35GMesh16getdeltaMeshSizeERKNS_6DoubleES3_S3_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %8, ptr noundef nonnull align 8 dereferenceable(417) %17, ptr noundef nonnull align 8 dereferenceable(17) %40, ptr noundef nonnull align 8 dereferenceable(17) %44, ptr noundef nonnull align 8 dereferenceable(17) %48)
          to label %50 unwind label %80

50:                                               ; preds = %49
  %51 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 4
  %52 = load i64, ptr %3, align 8, !tbaa !9
  %53 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %52)
          to label %54 unwind label %84

54:                                               ; preds = %50
  %55 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3leERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %53, ptr noundef nonnull align 8 dereferenceable(17) %8)
          to label %56 unwind label %84

56:                                               ; preds = %54
  br i1 %55, label %57, label %168

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

61:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  store double 0.000000e+00, ptr %10, align 8, !tbaa !19
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %9, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %62 unwind label %88

62:                                               ; preds = %61
  %63 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %60, ptr noundef nonnull align 8 dereferenceable(17) %9)
          to label %64 unwind label %92

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

65:                                               ; preds = %64
  %66 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 9
  %67 = load i64, ptr %3, align 8, !tbaa !9
  %68 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %66, i64 noundef %67)
          to label %69 unwind label %84

69:                                               ; preds = %65
  %70 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoublemmEv(ptr noundef nonnull align 8 dereferenceable(17) %68)
          to label %71 unwind label %84

71:                                               ; preds = %69
  br label %119

72:                                               ; preds = %31, %24
  %73 = landingpad { ptr, i32 }
          cleanup
  %74 = extractvalue { ptr, i32 } %73, 0
  store ptr %74, ptr %6, align 8
  %75 = extractvalue { ptr, i32 } %73, 1
  store i32 %75, ptr %7, align 4
  br label %215

76:                                               ; preds = %36, %32
  %77 = landingpad { ptr, i32 }
          cleanup
  %78 = extractvalue { ptr, i32 } %77, 0
  store ptr %78, ptr %6, align 8
  %79 = extractvalue { ptr, i32 } %77, 1
  store i32 %79, ptr %7, align 4
  br label %214

80:                                               ; preds = %49, %45, %41, %37
  %81 = landingpad { ptr, i32 }
          cleanup
  %82 = extractvalue { ptr, i32 } %81, 0
  store ptr %82, ptr %6, align 8
  %83 = extractvalue { ptr, i32 } %81, 1
  store i32 %83, ptr %7, align 4
  br label %213

84:                                               ; preds = %180, %176, %172, %146, %142, %140, %136, %115, %111, %108, %104, %101, %97, %69, %65, %57, %54, %50
  %85 = landingpad { ptr, i32 }
          cleanup
  %86 = extractvalue { ptr, i32 } %85, 0
  store ptr %86, ptr %6, align 8
  %87 = extractvalue { ptr, i32 } %85, 1
  store i32 %87, ptr %7, align 4
  br label %212

88:                                               ; preds = %61
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %6, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %7, align 4
  br label %96

92:                                               ; preds = %62
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %6, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %7, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %9) #5
  br label %96

96:                                               ; preds = %92, %88
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #5
  br label %212

97:                                               ; preds = %64
  %98 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 3
  %99 = load i64, ptr %3, align 8, !tbaa !9
  %100 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %98, i64 noundef %99)
          to label %101 unwind label %84

101:                                              ; preds = %97
  %102 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %100, ptr noundef nonnull align 8 dereferenceable(17) %4)
          to label %103 unwind label %84

103:                                              ; preds = %101
  br i1 %102, label %104, label %111

104:                                              ; preds = %103
  %105 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 4
  %106 = load i64, ptr %3, align 8, !tbaa !9
  %107 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %105, i64 noundef %106)
          to label %108 unwind label %84

108:                                              ; preds = %104
  %109 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %107, ptr noundef nonnull align 8 dereferenceable(17) %5)
          to label %110 unwind label %84

110:                                              ; preds = %108
  br i1 %109, label %118, label %111

111:                                              ; preds = %110, %103
  %112 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 9
  %113 = load i64, ptr %3, align 8, !tbaa !9
  %114 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %112, i64 noundef %113)
          to label %115 unwind label %84

115:                                              ; preds = %111
  %116 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoublemmEv(ptr noundef nonnull align 8 dereferenceable(17) %114)
          to label %117 unwind label %84

117:                                              ; preds = %115
  br label %118

118:                                              ; preds = %117, %110
  br label %119

119:                                              ; preds = %118, %71
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #5
  %120 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 9
  %121 = load i64, ptr %3, align 8, !tbaa !9
  %122 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %120, i64 noundef %121)
          to label %123 unwind label %149

123:                                              ; preds = %119
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %12, ptr noundef nonnull align 8 dereferenceable(17) %122)
          to label %124 unwind label %149

124:                                              ; preds = %123
  %125 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 10
  %126 = load i64, ptr %3, align 8, !tbaa !9
  %127 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %125, i64 noundef %126)
          to label %128 unwind label %153

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

129:                                              ; preds = %128
  invoke void @_ZN9NOMAD_4_33minENS_6DoubleES0_(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %11, ptr noundef %12, ptr noundef %13)
          to label %130 unwind label %157

130:                                              ; preds = %129
  %131 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 10
  %132 = load i64, ptr %3, align 8, !tbaa !9
  %133 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %131, i64 noundef %132)
          to label %134 unwind label %161

134:                                              ; preds = %130
  %135 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %133, ptr noundef nonnull align 8 dereferenceable(17) %11)
          to label %136 unwind label %161

136:                                              ; preds = %134
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  %137 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 3
  %138 = load i64, ptr %3, align 8, !tbaa !9
  %139 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %137, i64 noundef %138)
          to label %140 unwind label %84

140:                                              ; preds = %136
  %141 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %139, ptr noundef nonnull align 8 dereferenceable(17) %4)
          to label %142 unwind label %84

142:                                              ; preds = %140
  %143 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 4
  %144 = load i64, ptr %3, align 8, !tbaa !9
  %145 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %143, i64 noundef %144)
          to label %146 unwind label %84

146:                                              ; preds = %142
  %147 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %145, ptr noundef nonnull align 8 dereferenceable(17) %5)
          to label %148 unwind label %84

148:                                              ; preds = %146
  br label %168

149:                                              ; preds = %123, %119
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %6, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %7, align 4
  br label %167

153:                                              ; preds = %128, %124
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %6, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %7, align 4
  br label %166

157:                                              ; preds = %129
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %6, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %7, align 4
  br label %165

161:                                              ; preds = %134, %130
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %6, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %7, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %11) #5
  br label %165

165:                                              ; preds = %161, %157
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %13) #5
  br label %166

166:                                              ; preds = %165, %153
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %12) #5
  br label %167

167:                                              ; preds = %166, %149
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #5
  br label %212

168:                                              ; preds = %148, %56
  %169 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 7
  %170 = load i8, ptr %169, align 8, !tbaa !21, !range !24, !noundef !25
  %171 = trunc i8 %170 to i1
  br i1 %171, label %172, label %208

172:                                              ; preds = %168
  %173 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 4
  %174 = load i64, ptr %3, align 8, !tbaa !9
  %175 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %173, i64 noundef %174)
          to label %176 unwind label %84

176:                                              ; preds = %172
  %177 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 3
  %178 = load i64, ptr %3, align 8, !tbaa !9
  %179 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %177, i64 noundef %178)
          to label %180 unwind label %84

180:                                              ; preds = %176
  invoke void @_ZNK9NOMAD_4_35GMesh23checkFrameSizeIntegrityERKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %17, ptr noundef nonnull align 8 dereferenceable(17) %175, ptr noundef nonnull align 8 dereferenceable(17) %179)
          to label %181 unwind label %84

181:                                              ; preds = %180
  %182 = load i64, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #5
  %183 = load i64, ptr %3, align 8, !tbaa !9
  %184 = load ptr, ptr %17, align 8, !tbaa !26
  %185 = getelementptr inbounds ptr, ptr %184, i64 11
  %186 = load ptr, ptr %185, align 8
  invoke void %186(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %14, ptr noundef nonnull align 8 dereferenceable(417) %17, i64 noundef %183)
          to label %187 unwind label %194

187:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #5
  %188 = load i64, ptr %3, align 8, !tbaa !9
  %189 = load ptr, ptr %17, align 8, !tbaa !26
  %190 = getelementptr inbounds ptr, ptr %189, i64 13
  %191 = load ptr, ptr %190, align 8
  invoke void %191(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::Double") align 8 %15, ptr noundef nonnull align 8 dereferenceable(417) %17, i64 noundef %188)
          to label %192 unwind label %198

192:                                              ; preds = %187
  invoke void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %17, i64 noundef %182, ptr noundef nonnull align 8 dereferenceable(17) %14, ptr noundef nonnull align 8 dereferenceable(17) %15)
          to label %193 unwind label %202

193:                                              ; preds = %192
  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) %14) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #5
  br label %208

194:                                              ; preds = %181
  %195 = landingpad { ptr, i32 }
          cleanup
  %196 = extractvalue { ptr, i32 } %195, 0
  store ptr %196, ptr %6, align 8
  %197 = extractvalue { ptr, i32 } %195, 1
  store i32 %197, ptr %7, align 4
  br label %207

198:                                              ; preds = %187
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %6, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %7, align 4
  br label %206

202:                                              ; preds = %192
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %6, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %7, align 4
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %15) #5
  br label %206

206:                                              ; preds = %202, %198
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %14) #5
  br label %207

207:                                              ; preds = %206, %194
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #5
  br label %212

208:                                              ; preds = %193, %168
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %8) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %5) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %4) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #5
  br label %209

209:                                              ; preds = %208
  %210 = load i64, ptr %3, align 8, !tbaa !9
  %211 = add i64 %210, 1
  store i64 %211, ptr %3, align 8, !tbaa !9
  br label %18, !llvm.loop !28

212:                                              ; preds = %207, %167, %96, %84
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %8) #5
  br label %213

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

214:                                              ; preds = %213, %76
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %5) #5
  br label %215

215:                                              ; preds = %214, %72
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %4) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %235

216:                                              ; preds = %23
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #5
  %217 = load ptr, ptr %17, align 8, !tbaa !26
  %218 = getelementptr inbounds ptr, ptr %217, i64 12
  %219 = load ptr, ptr %218, align 8
  call void %219(ptr dead_on_unwind writable sret(%"class.NOMAD_4_3::ArrayOfDouble") align 8 %16, ptr noundef nonnull align 8 dereferenceable(417) %17)
  %220 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 5
  %221 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDoubleleERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %220)
          to label %222 unwind label %228

222:                                              ; preds = %216
  br i1 %221, label %223, label %232

223:                                              ; preds = %222
  %224 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 14
  store i8 1, ptr %224, align 8, !tbaa !30
  %225 = getelementptr inbounds %"class.NOMAD_4_3::GMesh", ptr %17, i32 0, i32 5
  %226 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN9NOMAD_4_313ArrayOfDoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %225, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %227 unwind label %228

227:                                              ; preds = %223
  br label %234

228:                                              ; preds = %223, %216
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %6, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %7, align 4
  call void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #5
  br label %235

232:                                              ; preds = %222
  %233 = getelementptr inbounds %"class.NOMAD_4_3::MeshBase", ptr %17, i32 0, i32 14
  store i8 0, ptr %233, align 8, !tbaa !30
  br label %234

234:                                              ; preds = %232, %227
  call void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #5
  ret void

235:                                              ; preds = %228, %215
  %236 = load ptr, ptr %6, align 8
  %237 = load i32, ptr %7, align 4
  %238 = insertvalue { ptr, i32 } poison, ptr %236, 0
  %239 = insertvalue { ptr, i32 } %238, i32 %237, 1
  resume { ptr, i32 } %239
}

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

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

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

; 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

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZN9NOMAD_4_313ArrayOfDoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2

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

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

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

; 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_3leERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(17)) local_unnamed_addr #3

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9NOMAD_4_35GMesh20refineDeltaFrameSizeEv(ptr noundef nonnull align 8 dereferenceable(417) %0) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.NOMAD_4_3::Double", align 8
  %3 = alloca %"class.NOMAD_4_3::Double", align 8
  %4 = alloca %"class.NOMAD_4_3::Double", align 8
  %5 = alloca %"class.NOMAD_4_3::Double", align 8
  %6 = alloca double, align 8
  %7 = alloca %"class.NOMAD_4_3::Double", align 8
  %8 = alloca %"class.NOMAD_4_3::Double", align 8
  %9 = alloca %"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::ArrayOfDouble", align 8
  %13 = getelementptr inbounds i8, ptr %0, i64 8
  %14 = load i64, ptr %13, align 8, !tbaa !5
  %.not = icmp eq i64 %14, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %1
  %15 = getelementptr inbounds i8, ptr %0, i64 288
  %16 = getelementptr inbounds i8, ptr %0, i64 312
  %17 = getelementptr inbounds i8, ptr %0, i64 360
  %18 = getelementptr inbounds i8, ptr %0, i64 264
  %19 = getelementptr inbounds i8, ptr %0, i64 56
  %20 = getelementptr inbounds i8, ptr %0, i64 176
  %21 = getelementptr inbounds i8, ptr %0, i64 200
  %22 = getelementptr inbounds i8, ptr %0, i64 384
  br label %28

._crit_edge:                                      ; preds = %134, %1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #5
  %23 = load ptr, ptr %0, align 8, !tbaa !17
  %24 = getelementptr inbounds i8, ptr %23, i64 96
  %25 = load ptr, ptr %24, align 8
  call void %25(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::ArrayOfDouble") align 8 %12, ptr noundef nonnull align 8 dereferenceable(417) %0)
  %26 = getelementptr inbounds i8, ptr %0, i64 336
  %27 = invoke noundef zeroext i1 @_ZNK9NOMAD_4_313ArrayOfDoubleleERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %142 unwind label %146

28:                                               ; preds = %.lr.ph, %134
  %.03751 = phi i64 [ 0, %.lr.ph ], [ %135, %134 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #5
  %29 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %.03751)
  call void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %2, ptr noundef nonnull align 8 dereferenceable(17) %29)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #5
  %30 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %.03751)
          to label %31 unwind label %53

31:                                               ; preds = %28
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %3, ptr noundef nonnull align 8 dereferenceable(17) %30)
          to label %32 unwind label %53

32:                                               ; preds = %31
  %33 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %.03751)
          to label %34 unwind label %55

34:                                               ; preds = %32
  invoke void @_ZNK9NOMAD_4_35GMesh20refineDeltaFrameSizeERNS_6DoubleES2_RKS1_(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(17) %2, ptr noundef nonnull align 8 dereferenceable(17) %3, ptr noundef nonnull align 8 dereferenceable(17) %33)
          to label %35 unwind label %55

35:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #5
  %36 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %.03751)
          to label %37 unwind label %57

37:                                               ; preds = %35
  %38 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %.03751)
          to label %39 unwind label %57

39:                                               ; preds = %37
  %40 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %.03751)
          to label %41 unwind label %57

41:                                               ; preds = %39
  invoke void @_ZNK9NOMAD_4_35GMesh16getdeltaMeshSizeERKNS_6DoubleES3_S3_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %4, ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(17) %36, ptr noundef nonnull align 8 dereferenceable(17) %38, ptr noundef nonnull align 8 dereferenceable(17) %40)
          to label %42 unwind label %57

42:                                               ; preds = %41
  %43 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %.03751)
          to label %44 unwind label %59

44:                                               ; preds = %42
  %45 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3leERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %43, ptr noundef nonnull align 8 dereferenceable(17) %4)
          to label %46 unwind label %59

46:                                               ; preds = %44
  br i1 %45, label %47, label %108

47:                                               ; preds = %46
  %48 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %.03751)
          to label %49 unwind label %59

49:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  store double 0.000000e+00, ptr %6, align 8, !tbaa !19
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKd(ptr noundef nonnull align 8 dereferenceable(17) %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %50 unwind label %61

50:                                               ; preds = %49
  %51 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %48, ptr noundef nonnull align 8 dereferenceable(17) %5)
          to label %52 unwind label %63

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

53:                                               ; preds = %31, %28
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %141

55:                                               ; preds = %34, %32
  %56 = landingpad { ptr, i32 }
          cleanup
  br label %140

57:                                               ; preds = %41, %39, %37, %35
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %139

59:                                               ; preds = %.invoke52, %.invoke, %115, %113, %111, %95, %93, %91, %89, %73, %71, %68, %66, %47, %44, %42
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %138

61:                                               ; preds = %49
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %65

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

65:                                               ; preds = %63, %61
  %.pn = phi { ptr, i32 } [ %64, %63 ], [ %62, %61 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #5
  br label %138

66:                                               ; preds = %52
  %67 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %.03751)
          to label %68 unwind label %59

68:                                               ; preds = %66
  %69 = invoke noundef zeroext i1 @_ZN9NOMAD_4_3eqERKNS_6DoubleES2_(ptr noundef nonnull align 8 dereferenceable(17) %67, ptr noundef nonnull align 8 dereferenceable(17) %2)
          to label %70 unwind label %59

70:                                               ; preds = %68
  br i1 %69, label %71, label %.invoke52

71:                                               ; preds = %70
  %72 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %.03751)
          to label %73 unwind label %59

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

75:                                               ; preds = %73
  br i1 %74, label %78, label %.invoke52

.invoke52:                                        ; preds = %52, %70, %75
  %76 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef %.03751)
          to label %.invoke unwind label %59

.invoke:                                          ; preds = %.invoke52
  %77 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoublemmEv(ptr noundef nonnull align 8 dereferenceable(17) %76)
          to label %78 unwind label %59

78:                                               ; preds = %.invoke, %75
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #5
  %79 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef %.03751)
          to label %80 unwind label %97

80:                                               ; preds = %78
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %8, ptr noundef nonnull align 8 dereferenceable(17) %79)
          to label %81 unwind label %97

81:                                               ; preds = %80
  %82 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %.03751)
          to label %83 unwind label %99

83:                                               ; preds = %81
  invoke void @_ZN9NOMAD_4_36DoubleC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %9, ptr noundef nonnull align 8 dereferenceable(17) %82)
          to label %84 unwind label %99

84:                                               ; preds = %83
  invoke void @_ZN9NOMAD_4_33minENS_6DoubleES0_(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %7, ptr noundef nonnull %8, ptr noundef nonnull %9)
          to label %85 unwind label %101

85:                                               ; preds = %84
  %86 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %.03751)
          to label %87 unwind label %103

87:                                               ; preds = %85
  %88 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %86, ptr noundef nonnull align 8 dereferenceable(17) %7)
          to label %89 unwind label %103

89:                                               ; preds = %87
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %7) #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) %8) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  %90 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %.03751)
          to label %91 unwind label %59

91:                                               ; preds = %89
  %92 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %90, ptr noundef nonnull align 8 dereferenceable(17) %2)
          to label %93 unwind label %59

93:                                               ; preds = %91
  %94 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %.03751)
          to label %95 unwind label %59

95:                                               ; preds = %93
  %96 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN9NOMAD_4_36DoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(17) %94, ptr noundef nonnull align 8 dereferenceable(17) %3)
          to label %108 unwind label %59

97:                                               ; preds = %80, %78
  %98 = landingpad { ptr, i32 }
          cleanup
  br label %107

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

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

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

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

106:                                              ; preds = %105, %99
  %.pn39.pn = phi { ptr, i32 } [ %.pn39, %105 ], [ %100, %99 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %8) #5
  br label %107

107:                                              ; preds = %106, %97
  %.pn39.pn.pn = phi { ptr, i32 } [ %.pn39.pn, %106 ], [ %98, %97 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  br label %138

108:                                              ; preds = %95, %46
  %109 = load i8, ptr %22, align 8, !tbaa !21, !range !24, !noundef !25
  %110 = trunc nuw i8 %109 to i1
  br i1 %110, label %111, label %134

111:                                              ; preds = %108
  %112 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %.03751)
          to label %113 unwind label %59

113:                                              ; preds = %111
  %114 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZNK9NOMAD_4_313ArrayOfDoubleixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %.03751)
          to label %115 unwind label %59

115:                                              ; preds = %113
  invoke void @_ZNK9NOMAD_4_35GMesh23checkFrameSizeIntegrityERKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, ptr noundef nonnull align 8 dereferenceable(17) %112, ptr noundef nonnull align 8 dereferenceable(17) %114)
          to label %116 unwind label %59

116:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #5
  %117 = load ptr, ptr %0, align 8, !tbaa !17
  %118 = getelementptr inbounds i8, ptr %117, i64 88
  %119 = load ptr, ptr %118, align 8
  invoke void %119(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %10, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.03751)
          to label %120 unwind label %126

120:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #5
  %121 = load ptr, ptr %0, align 8, !tbaa !17
  %122 = getelementptr inbounds i8, ptr %121, i64 104
  %123 = load ptr, ptr %122, align 8
  invoke void %123(ptr dead_on_unwind nonnull writable sret(%"class.NOMAD_4_3::Double") align 8 %11, ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.03751)
          to label %124 unwind label %128

124:                                              ; preds = %120
  invoke void @_ZNK9NOMAD_4_35GMesh22checkDeltasGranularityEmRKNS_6DoubleES3_(ptr noundef nonnull align 8 dereferenceable(417) %0, i64 noundef %.03751, ptr noundef nonnull align 8 dereferenceable(17) %10, ptr noundef nonnull align 8 dereferenceable(17) %11)
          to label %125 unwind label %130

125:                                              ; preds = %124
  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 @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #5
  br label %134

126:                                              ; preds = %116
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %133

128:                                              ; preds = %120
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %132

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

132:                                              ; preds = %130, %128
  %.pn43 = phi { ptr, i32 } [ %131, %130 ], [ %129, %128 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %10) #5
  br label %133

133:                                              ; preds = %132, %126
  %.pn43.pn = phi { ptr, i32 } [ %.pn43, %132 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #5
  br label %138

134:                                              ; preds = %125, %108
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %4) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #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
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %2) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #5
  %135 = add nuw i64 %.03751, 1
  %136 = load i64, ptr %13, align 8, !tbaa !5
  %137 = icmp ult i64 %135, %136
  br i1 %137, label %28, label %._crit_edge, !llvm.loop !26

138:                                              ; preds = %133, %107, %65, %59
  %.pn43.pn.pn = phi { ptr, i32 } [ %.pn43.pn, %133 ], [ %60, %59 ], [ %.pn39.pn.pn, %107 ], [ %.pn, %65 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %4) #5
  br label %139

139:                                              ; preds = %138, %57
  %.pn43.pn.pn.pn = phi { ptr, i32 } [ %.pn43.pn.pn, %138 ], [ %58, %57 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #5
  br label %140

140:                                              ; preds = %139, %55
  %.pn43.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn43.pn.pn.pn, %139 ], [ %56, %55 ]
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %3) #5
  br label %141

141:                                              ; preds = %140, %53
  %.pn43.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn43.pn.pn.pn.pn, %140 ], [ %54, %53 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #5
  call void @_ZN9NOMAD_4_36DoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(17) %2) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #5
  br label %150

142:                                              ; preds = %._crit_edge
  %143 = getelementptr inbounds i8, ptr %0, i64 256
  br i1 %27, label %144, label %148

144:                                              ; preds = %142
  store i8 1, ptr %143, align 8, !tbaa !28
  %145 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN9NOMAD_4_313ArrayOfDoubleaSERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %149 unwind label %146

146:                                              ; preds = %144, %._crit_edge
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #5
  br label %150

148:                                              ; preds = %142
  store i8 0, ptr %143, align 8, !tbaa !28
  br label %149

149:                                              ; preds = %144, %148
  call void @_ZN9NOMAD_4_313ArrayOfDoubleD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #5
  ret void

150:                                              ; preds = %146, %141
  %.pn43.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn43.pn.pn.pn.pn.pn, %141 ], [ %147, %146 ]
  resume { ptr, i32 } %.pn43.pn.pn.pn.pn.pn.pn
}

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "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 = { 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 #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 = !{!"vtable pointer", !9, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"double", !8, i64 0}
!21 = !{!22, !16, i64 384}
!22 = !{!"_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, !23, i64 392, !16, i64 416}
!23 = !{!"_ZTSN9NOMAD_4_36DoubleE", !20, i64 8, !16, i64 16}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!6, !16, i64 256}


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