; LLVM IR from aparis69/Desertscapes-Simulation :: Code/Source/desert.ll (ZN12DuneSedimentC2ERK5Box2DffRK7Vector2)

; 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.ScalarField2D = type { %class.Box2D, i32, i32, %"class.std::vector" }
%class.Box2D = type { %struct.Vector2, %struct.Vector2 }
%struct.Vector2 = type { float, float }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.Vector3 = type { float, float, float }
%class.DuneSediment = type { float, float, float, float, i8, i8, %class.ScalarField2D, %class.ScalarField2D, %class.ScalarField2D, %class.Box2D, i32, i32, float, float, %struct.Vector2 }

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13ScalarField2DC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Box2DC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7Vector2C2Ev(ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7Vector2C2Eff(ptr noundef nonnull align 4 dereferenceable(8), float noundef, float noundef) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13ScalarField2DC2EiiRK5Box2Df(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(16), float noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN13ScalarField2DaSERKS_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZNK5Box2D8TopRightEv(ptr noundef nonnull align 4 dereferenceable(16)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_ZNK7Vector2plERKS_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #6 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZNK5Box2D4SizeEv(ptr noundef nonnull align 4 dereferenceable(16)) #7 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN12DuneSedimentC2ERK5Box2DffRK7Vector2(ptr noundef nonnull align 8 dereferenceable(208) %0, ptr noundef nonnull align 4 dereferenceable(16) %1, float noundef %2, float noundef %3, ptr noundef nonnull align 4 dereferenceable(8) %4) unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca float, align 4
  %9 = alloca float, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %class.ScalarField2D, align 8
  %14 = alloca %class.ScalarField2D, align 8
  %15 = alloca %class.ScalarField2D, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %struct.Vector2, align 4
  %20 = alloca float, align 4
  %21 = alloca %struct.Vector3, align 4
  %22 = alloca %struct.Vector2, align 4
  %23 = alloca %struct.Vector2, align 4
  %24 = alloca %struct.Vector2, align 4
  %25 = alloca %struct.Vector2, align 4
  %26 = alloca %struct.Vector2, align 4
  %27 = alloca %struct.Vector2, align 4
  %28 = alloca %class.Box2D, align 4
  %29 = alloca %struct.Vector2, align 4
  %30 = alloca %struct.Vector2, align 4
  %31 = alloca %struct.Vector2, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store float %2, ptr %8, align 4, !tbaa !9
  store float %3, ptr %9, align 4, !tbaa !9
  store ptr %4, ptr %10, align 8, !tbaa !5
  %32 = load ptr, ptr %6, align 8
  %33 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 0
  store float 0x3FE3333340000000, ptr %33, align 8, !tbaa !11
  %34 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 1
  store float 0x3FB47AE140000000, ptr %34, align 4, !tbaa !22
  %35 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 2
  store float 0x3FD0A3D700000000, ptr %35, align 8, !tbaa !23
  %36 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 3
  store float 2.500000e+00, ptr %36, align 4, !tbaa !24
  %37 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 4
  store i8 0, ptr %37, align 8, !tbaa !25
  %38 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 5
  store i8 0, ptr %38, align 1, !tbaa !26
  %39 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 6
  call void @_ZN13ScalarField2DC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %39)
  %40 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 7
  invoke void @_ZN13ScalarField2DC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %40)
          to label %41 unwind label %87

41:                                               ; preds = %5
  %42 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 8
  invoke void @_ZN13ScalarField2DC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %42)
          to label %43 unwind label %91

43:                                               ; preds = %41
  %44 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  invoke void @_ZN5Box2DC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %44)
          to label %45 unwind label %95

45:                                               ; preds = %43
  %46 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 14
  invoke void @_ZN7Vector2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %46)
          to label %47 unwind label %95

47:                                               ; preds = %45
  %48 = load ptr, ptr %7, align 8, !tbaa !5
  %49 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %49, ptr align 4 %48, i64 16, i1 false), !tbaa.struct !27
  %50 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 11
  store i32 256, ptr %50, align 4, !tbaa !28
  %51 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 10
  store i32 256, ptr %51, align 8, !tbaa !29
  %52 = load ptr, ptr %10, align 8, !tbaa !5
  %53 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 14
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %53, ptr align 4 %52, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.start.p0(i64 48, ptr %13) #8
  %54 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 10
  %55 = load i32, ptr %54, align 8, !tbaa !29
  %56 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 11
  %57 = load i32, ptr %56, align 4, !tbaa !28
  %58 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  invoke void @_ZN13ScalarField2DC2EiiRK5Box2Df(ptr noundef nonnull align 8 dereferenceable(48) %13, i32 noundef %55, i32 noundef %57, ptr noundef nonnull align 4 dereferenceable(16) %58, float noundef 0.000000e+00)
          to label %59 unwind label %99

59:                                               ; preds = %47
  %60 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 6
  %61 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN13ScalarField2DaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %60, ptr noundef nonnull align 8 dereferenceable(48) %13)
          to label %62 unwind label %103

62:                                               ; preds = %59
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %14) #8
  %63 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 10
  %64 = load i32, ptr %63, align 8, !tbaa !29
  %65 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 11
  %66 = load i32, ptr %65, align 4, !tbaa !28
  %67 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  invoke void @_ZN13ScalarField2DC2EiiRK5Box2Df(ptr noundef nonnull align 8 dereferenceable(48) %14, i32 noundef %64, i32 noundef %66, ptr noundef nonnull align 4 dereferenceable(16) %67, float noundef 0.000000e+00)
          to label %68 unwind label %108

68:                                               ; preds = %62
  %69 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 8
  %70 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN13ScalarField2DaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %69, ptr noundef nonnull align 8 dereferenceable(48) %14)
          to label %71 unwind label %112

71:                                               ; preds = %68
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %14) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %15) #8
  %72 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 10
  %73 = load i32, ptr %72, align 8, !tbaa !29
  %74 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 11
  %75 = load i32, ptr %74, align 4, !tbaa !28
  %76 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  invoke void @_ZN13ScalarField2DC2EiiRK5Box2Df(ptr noundef nonnull align 8 dereferenceable(48) %15, i32 noundef %73, i32 noundef %75, ptr noundef nonnull align 4 dereferenceable(16) %76, float noundef 0.000000e+00)
          to label %77 unwind label %117

77:                                               ; preds = %71
  %78 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 7
  %79 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN13ScalarField2DaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %78, ptr noundef nonnull align 8 dereferenceable(48) %15)
          to label %80 unwind label %121

80:                                               ; preds = %77
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  store i32 0, ptr %16, align 4, !tbaa !31
  br label %81

81:                                               ; preds = %183, %80
  %82 = load i32, ptr %16, align 4, !tbaa !31
  %83 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 10
  %84 = load i32, ptr %83, align 8, !tbaa !29
  %85 = icmp slt i32 %82, %84
  br i1 %85, label %126, label %86

86:                                               ; preds = %81
  store i32 2, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %186

87:                                               ; preds = %5
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %11, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %12, align 4
  br label %272

91:                                               ; preds = %41
  %92 = landingpad { ptr, i32 }
          cleanup
  %93 = extractvalue { ptr, i32 } %92, 0
  store ptr %93, ptr %11, align 8
  %94 = extractvalue { ptr, i32 } %92, 1
  store i32 %94, ptr %12, align 4
  br label %271

95:                                               ; preds = %45, %43
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %11, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %12, align 4
  br label %270

99:                                               ; preds = %47
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %11, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %12, align 4
  br label %107

103:                                              ; preds = %59
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %11, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %12, align 4
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #8
  br label %107

107:                                              ; preds = %103, %99
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #8
  br label %270

108:                                              ; preds = %62
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %11, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %12, align 4
  br label %116

112:                                              ; preds = %68
  %113 = landingpad { ptr, i32 }
          cleanup
  %114 = extractvalue { ptr, i32 } %113, 0
  store ptr %114, ptr %11, align 8
  %115 = extractvalue { ptr, i32 } %113, 1
  store i32 %115, ptr %12, align 4
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %14) #8
  br label %116

116:                                              ; preds = %112, %108
  call void @llvm.lifetime.end.p0(i64 48, ptr %14) #8
  br label %270

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

121:                                              ; preds = %77
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %11, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %12, align 4
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #8
  br label %125

125:                                              ; preds = %121, %117
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #8
  br label %270

126:                                              ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  store i32 0, ptr %18, align 4, !tbaa !31
  br label %127

127:                                              ; preds = %177, %126
  %128 = load i32, ptr %18, align 4, !tbaa !31
  %129 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 11
  %130 = load i32, ptr %129, align 4, !tbaa !28
  %131 = icmp slt i32 %128, %130
  br i1 %131, label %133, label %132

132:                                              ; preds = %127
  store i32 5, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %182

133:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %134 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 6
  %135 = load i32, ptr %16, align 4, !tbaa !31
  %136 = load i32, ptr %18, align 4, !tbaa !31
  %137 = invoke <2 x float> @_ZNK13ScalarField2D11ArrayVertexEii(ptr noundef nonnull align 8 dereferenceable(48) %134, i32 noundef %135, i32 noundef %136)
          to label %138 unwind label %156

138:                                              ; preds = %133
  store <2 x float> %137, ptr %19, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr %21) #8
  %139 = load i32, ptr %16, align 4, !tbaa !31
  %140 = sitofp i32 %139 to float
  %141 = fmul float %140, 0x401FA65E80000000
  %142 = load i32, ptr %18, align 4, !tbaa !31
  %143 = sitofp i32 %142 to float
  %144 = fmul float %143, 0x401FA65E80000000
  invoke void @_ZN7Vector3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %21, float noundef %141, float noundef %144, float noundef 0.000000e+00)
          to label %145 unwind label %160

145:                                              ; preds = %138
  %146 = invoke noundef float @_ZN11PerlinNoise3fBmERK7Vector3ffi(ptr noundef nonnull align 4 dereferenceable(12) %21, float noundef 1.000000e+00, float noundef 0x3F60624DE0000000, i32 noundef 3)
          to label %147 unwind label %160

147:                                              ; preds = %145
  %148 = fdiv float %146, 1.750000e+00
  call void @llvm.lifetime.end.p0(i64 12, ptr %21) #8
  store float %148, ptr %20, align 4, !tbaa !9
  %149 = load float, ptr %20, align 4, !tbaa !9
  %150 = fcmp ogt float %149, 0x3FDCCCCCC0000000
  br i1 %150, label %151, label %168

151:                                              ; preds = %147
  %152 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 8
  %153 = load i32, ptr %16, align 4, !tbaa !31
  %154 = load i32, ptr %18, align 4, !tbaa !31
  invoke void @_ZN13ScalarField2D3SetEiif(ptr noundef nonnull align 8 dereferenceable(48) %152, i32 noundef %153, i32 noundef %154, float noundef 0x3FEB333340000000)
          to label %155 unwind label %164

155:                                              ; preds = %151
  br label %168

156:                                              ; preds = %133
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %11, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %12, align 4
  br label %181

160:                                              ; preds = %145, %138
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %11, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %21) #8
  br label %180

164:                                              ; preds = %175, %168, %151
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %11, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %12, align 4
  br label %180

168:                                              ; preds = %155, %147
  %169 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 7
  %170 = load i32, ptr %16, align 4, !tbaa !31
  %171 = load i32, ptr %18, align 4, !tbaa !31
  %172 = load float, ptr %8, align 4, !tbaa !9
  %173 = load float, ptr %9, align 4, !tbaa !9
  %174 = invoke noundef float @_ZN6Random7UniformEff(float noundef %172, float noundef %173)
          to label %175 unwind label %164

175:                                              ; preds = %168
  invoke void @_ZN13ScalarField2D3SetEiif(ptr noundef nonnull align 8 dereferenceable(48) %169, i32 noundef %170, i32 noundef %171, float noundef %174)
          to label %176 unwind label %164

176:                                              ; preds = %175
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %177

177:                                              ; preds = %176
  %178 = load i32, ptr %18, align 4, !tbaa !31
  %179 = add nsw i32 %178, 1
  store i32 %179, ptr %18, align 4, !tbaa !31
  br label %127, !llvm.loop !32

180:                                              ; preds = %164, %160
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  br label %181

181:                                              ; preds = %180, %156
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %270

182:                                              ; preds = %132
  br label %183

183:                                              ; preds = %182
  %184 = load i32, ptr %16, align 4, !tbaa !31
  %185 = add nsw i32 %184, 1
  store i32 %185, ptr %16, align 4, !tbaa !31
  br label %81, !llvm.loop !34

186:                                              ; preds = %86
  %187 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 4
  store i8 0, ptr %187, align 8, !tbaa !25
  %188 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 5
  store i8 0, ptr %188, align 1, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %189 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  %190 = invoke <2 x float> @_ZNK5Box2D8TopRightEv(ptr noundef nonnull align 4 dereferenceable(16) %189)
          to label %191 unwind label %241

191:                                              ; preds = %186
  store <2 x float> %190, ptr %23, align 4
  %192 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8) %23, i32 noundef 0)
          to label %193 unwind label %241

193:                                              ; preds = %191
  %194 = load float, ptr %192, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %195 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  %196 = invoke <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16) %195)
          to label %197 unwind label %245

197:                                              ; preds = %193
  store <2 x float> %196, ptr %24, align 4
  %198 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8) %24, i32 noundef 0)
          to label %199 unwind label %245

199:                                              ; preds = %197
  %200 = load float, ptr %198, align 4, !tbaa !9
  %201 = fsub float %194, %200
  %202 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 10
  %203 = load i32, ptr %202, align 8, !tbaa !29
  %204 = sub nsw i32 %203, 1
  %205 = sitofp i32 %204 to float
  %206 = fdiv float %201, %205
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %207 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  %208 = invoke <2 x float> @_ZNK5Box2D8TopRightEv(ptr noundef nonnull align 4 dereferenceable(16) %207)
          to label %209 unwind label %249

209:                                              ; preds = %199
  store <2 x float> %208, ptr %25, align 4
  %210 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8) %25, i32 noundef 1)
          to label %211 unwind label %249

211:                                              ; preds = %209
  %212 = load float, ptr %210, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %213 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  %214 = invoke <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16) %213)
          to label %215 unwind label %253

215:                                              ; preds = %211
  store <2 x float> %214, ptr %26, align 4
  %216 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8) %26, i32 noundef 1)
          to label %217 unwind label %253

217:                                              ; preds = %215
  %218 = load float, ptr %216, align 4, !tbaa !9
  %219 = fsub float %212, %218
  %220 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 11
  %221 = load i32, ptr %220, align 4, !tbaa !28
  %222 = sub nsw i32 %221, 1
  %223 = sitofp i32 %222 to float
  %224 = fdiv float %219, %223
  invoke void @_ZN7Vector2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %22, float noundef %206, float noundef %224)
          to label %225 unwind label %253

225:                                              ; preds = %217
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %226 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  %227 = invoke <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16) %226)
          to label %228 unwind label %260

228:                                              ; preds = %225
  store <2 x float> %227, ptr %29, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %229 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 9
  %230 = invoke <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16) %229)
          to label %231 unwind label %264

231:                                              ; preds = %228
  store <2 x float> %230, ptr %31, align 4
  %232 = invoke <2 x float> @_ZNK7Vector2plERKS_(ptr noundef nonnull align 4 dereferenceable(8) %31, ptr noundef nonnull align 4 dereferenceable(8) %22)
          to label %233 unwind label %264

233:                                              ; preds = %231
  store <2 x float> %232, ptr %30, align 4
  invoke void @_ZN5Box2DC2ERK7Vector2S2_(ptr noundef nonnull align 4 dereferenceable(16) %28, ptr noundef nonnull align 4 dereferenceable(8) %29, ptr noundef nonnull align 4 dereferenceable(8) %30)
          to label %234 unwind label %264

234:                                              ; preds = %233
  %235 = invoke <2 x float> @_ZNK5Box2D4SizeEv(ptr noundef nonnull align 4 dereferenceable(16) %28)
          to label %236 unwind label %264

236:                                              ; preds = %234
  store <2 x float> %235, ptr %27, align 4
  %237 = getelementptr inbounds %struct.Vector2, ptr %27, i32 0, i32 0
  %238 = load float, ptr %237, align 4, !tbaa !35
  %239 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 13
  store float %238, ptr %239, align 4, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  %240 = getelementptr inbounds %class.DuneSediment, ptr %32, i32 0, i32 12
  store float 0x3FB99999A0000000, ptr %240, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  ret void

241:                                              ; preds = %191, %186
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %11, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %12, align 4
  br label %259

245:                                              ; preds = %197, %193
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %11, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %12, align 4
  br label %258

249:                                              ; preds = %209, %199
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %11, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %12, align 4
  br label %257

253:                                              ; preds = %217, %215, %211
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %11, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %257

257:                                              ; preds = %253, %249
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %258

258:                                              ; preds = %257, %245
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %259

259:                                              ; preds = %258, %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %269

260:                                              ; preds = %225
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %11, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %12, align 4
  br label %268

264:                                              ; preds = %234, %233, %231, %228
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %11, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %268

268:                                              ; preds = %264, %260
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %269

269:                                              ; preds = %268, %259
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %270

270:                                              ; preds = %269, %181, %125, %116, %107, %95
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %42) #8
  br label %271

271:                                              ; preds = %270, %91
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %40) #8
  br label %272

272:                                              ; preds = %271, %87
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %39) #8
  br label %273

273:                                              ; preds = %272
  %274 = load ptr, ptr %11, align 8
  %275 = load i32, ptr %12, align 4
  %276 = insertvalue { ptr, i32 } poison, ptr %274, 0
  %277 = insertvalue { ptr, i32 } %276, i32 %275, 1
  resume { ptr, i32 } %277
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZNK13ScalarField2D11ArrayVertexEii(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i32 noundef) #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN11PerlinNoise3fBmERK7Vector3ffi(ptr noundef nonnull align 4 dereferenceable(12), float noundef, float noundef, i32 noundef) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7Vector3C2Efff(ptr noundef nonnull align 4 dereferenceable(12), float noundef, float noundef, float noundef) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13ScalarField2D3SetEiif(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i32 noundef, float noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN6Random7UniformEff(float noundef, float noundef) #2 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="64" "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 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 = !{!"float", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTS12DuneSediment", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !13, i64 16, !13, i64 17, !14, i64 24, !14, i64 72, !14, i64 120, !15, i64 168, !17, i64 184, !17, i64 188, !10, i64 192, !10, i64 196, !16, i64 200}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTS13ScalarField2D", !15, i64 0, !17, i64 16, !17, i64 20, !18, i64 24}
!15 = !{!"_ZTS5Box2D", !16, i64 0, !16, i64 8}
!16 = !{!"_ZTS7Vector2", !10, i64 0, !10, i64 4}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSSt6vectorIfSaIfEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIfSaIfEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!12, !10, i64 4}
!23 = !{!12, !10, i64 8}
!24 = !{!12, !10, i64 12}
!25 = !{!12, !13, i64 16}
!26 = !{!12, !13, i64 17}
!27 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9}
!28 = !{!12, !17, i64 188}
!29 = !{!12, !17, i64 184}
!30 = !{i64 0, i64 4, !9, i64 4, i64 4, !9}
!31 = !{!17, !17, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = !{!16, !10, i64 0}
!36 = !{!12, !10, i64 196}
!37 = !{!12, !10, i64 192}


; 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.ScalarField2D = type { %class.Box2D, i32, i32, %"class.std::vector" }
%class.Box2D = type { %struct.Vector2, %struct.Vector2 }
%struct.Vector2 = type { float, float }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.Vector3 = type { float, float, float }

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13ScalarField2DC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Box2DC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7Vector2C2Ev(ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7Vector2C2Eff(ptr noundef nonnull align 4 dereferenceable(8), float noundef, float noundef) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13ScalarField2DC2EiiRK5Box2Df(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(16), float noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN13ScalarField2DaSERKS_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZNK5Box2D8TopRightEv(ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_ZNK7Vector2plERKS_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #6 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZNK5Box2D4SizeEv(ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN12DuneSedimentC2ERK5Box2DffRK7Vector2(ptr noundef nonnull align 8 dereferenceable(208) %0, ptr nocapture noundef nonnull readonly align 4 dereferenceable(16) %1, float noundef %2, float noundef %3, ptr nocapture noundef nonnull readonly align 4 dereferenceable(8) %4) unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %class.ScalarField2D, align 8
  %7 = alloca %class.ScalarField2D, align 8
  %8 = alloca %class.ScalarField2D, align 8
  %9 = alloca %struct.Vector3, align 4
  %10 = alloca %struct.Vector2, align 4
  %11 = alloca %struct.Vector2, align 8
  %12 = alloca %struct.Vector2, align 8
  %13 = alloca %struct.Vector2, align 8
  %14 = alloca %struct.Vector2, align 8
  %15 = alloca %class.Box2D, align 4
  %16 = alloca %struct.Vector2, align 8
  %17 = alloca %struct.Vector2, align 8
  %18 = alloca %struct.Vector2, align 8
  store <4 x float> <float 0x3FE3333340000000, float 0x3FB47AE140000000, float 0x3FD0A3D700000000, float 2.500000e+00>, ptr %0, align 8, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %0, i64 16
  store i8 0, ptr %19, align 8, !tbaa !9
  %20 = getelementptr inbounds i8, ptr %0, i64 17
  store i8 0, ptr %20, align 1, !tbaa !21
  %21 = getelementptr inbounds i8, ptr %0, i64 24
  tail call void @_ZN13ScalarField2DC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21)
  %22 = getelementptr inbounds i8, ptr %0, i64 72
  invoke void @_ZN13ScalarField2DC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %22)
          to label %23 unwind label %79

23:                                               ; preds = %5
  %24 = getelementptr inbounds i8, ptr %0, i64 120
  invoke void @_ZN13ScalarField2DC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %25 unwind label %81

25:                                               ; preds = %23
  %26 = getelementptr inbounds i8, ptr %0, i64 168
  invoke void @_ZN5Box2DC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %26)
          to label %27 unwind label %83

27:                                               ; preds = %25
  %28 = getelementptr inbounds i8, ptr %0, i64 200
  tail call void @_ZN7Vector2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %28)
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef nonnull align 4 dereferenceable(16) %1, i64 16, i1 false), !tbaa.struct !22
  %29 = getelementptr inbounds i8, ptr %0, i64 188
  store i32 256, ptr %29, align 4, !tbaa !23
  %30 = getelementptr inbounds i8, ptr %0, i64 184
  store i32 256, ptr %30, align 8, !tbaa !24
  %31 = load i64, ptr %4, align 4
  store i64 %31, ptr %28, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #8
  invoke void @_ZN13ScalarField2DC2EiiRK5Box2Df(ptr noundef nonnull align 8 dereferenceable(48) %6, i32 noundef 256, i32 noundef 256, ptr noundef nonnull align 4 dereferenceable(16) %26, float noundef 0.000000e+00)
          to label %32 unwind label %85

32:                                               ; preds = %27
  %33 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN13ScalarField2DaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %21, ptr noundef nonnull align 8 dereferenceable(48) %6)
          to label %34 unwind label %87

34:                                               ; preds = %32
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7) #8
  %35 = load i32, ptr %30, align 8, !tbaa !24
  %36 = load i32, ptr %29, align 4, !tbaa !23
  invoke void @_ZN13ScalarField2DC2EiiRK5Box2Df(ptr noundef nonnull align 8 dereferenceable(48) %7, i32 noundef %35, i32 noundef %36, ptr noundef nonnull align 4 dereferenceable(16) %26, float noundef 0.000000e+00)
          to label %37 unwind label %90

37:                                               ; preds = %34
  %38 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN13ScalarField2DaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %24, ptr noundef nonnull align 8 dereferenceable(48) %7)
          to label %39 unwind label %92

39:                                               ; preds = %37
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #8
  %40 = load i32, ptr %30, align 8, !tbaa !24
  %41 = load i32, ptr %29, align 4, !tbaa !23
  invoke void @_ZN13ScalarField2DC2EiiRK5Box2Df(ptr noundef nonnull align 8 dereferenceable(48) %8, i32 noundef %40, i32 noundef %41, ptr noundef nonnull align 4 dereferenceable(16) %26, float noundef 0.000000e+00)
          to label %42 unwind label %95

42:                                               ; preds = %39
  %43 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN13ScalarField2DaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %22, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %44 unwind label %97

44:                                               ; preds = %42
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %8) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #8
  %45 = load i32, ptr %30, align 8, !tbaa !24
  %46 = icmp sgt i32 %45, 0
  %47 = load i32, ptr %29, align 4
  %48 = icmp sgt i32 %47, 0
  %or.cond = select i1 %46, i1 %48, i1 false
  br i1 %or.cond, label %.preheader, label %._crit_edge43

.preheader:                                       ; preds = %44, %._crit_edge
  %49 = phi i32 [ %100, %._crit_edge ], [ %45, %44 ]
  %50 = phi i32 [ %101, %._crit_edge ], [ %47, %44 ]
  %.02842 = phi i32 [ %102, %._crit_edge ], [ 0, %44 ]
  %51 = icmp sgt i32 %50, 0
  br i1 %51, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader
  %52 = uitofp nneg i32 %.02842 to float
  %53 = fmul float %52, 0x401FA65E80000000
  br label %104

._crit_edge43:                                    ; preds = %._crit_edge, %44
  store i8 0, ptr %19, align 8, !tbaa !9
  store i8 0, ptr %20, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %54 = call <2 x float> @_ZNK5Box2D8TopRightEv(ptr noundef nonnull align 4 dereferenceable(16) %26)
  store <2 x float> %54, ptr %11, align 8
  %55 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8) %11, i32 noundef 0)
  %56 = load float, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  %57 = call <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16) %26)
  store <2 x float> %57, ptr %12, align 8
  %58 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8) %12, i32 noundef 0)
  %59 = load float, ptr %58, align 4, !tbaa !5
  %60 = fsub float %56, %59
  %61 = load i32, ptr %30, align 8, !tbaa !24
  %62 = add nsw i32 %61, -1
  %63 = sitofp i32 %62 to float
  %64 = fdiv float %60, %63
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %65 = call <2 x float> @_ZNK5Box2D8TopRightEv(ptr noundef nonnull align 4 dereferenceable(16) %26)
  store <2 x float> %65, ptr %13, align 8
  %66 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8) %13, i32 noundef 1)
  %67 = load float, ptr %66, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  %68 = call <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16) %26)
  store <2 x float> %68, ptr %14, align 8
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Vector2ixEi(ptr noundef nonnull align 4 dereferenceable(8) %14, i32 noundef 1)
  %70 = load float, ptr %69, align 4, !tbaa !5
  %71 = fsub float %67, %70
  %72 = load i32, ptr %29, align 4, !tbaa !23
  %73 = add nsw i32 %72, -1
  %74 = sitofp i32 %73 to float
  %75 = fdiv float %71, %74
  call void @_ZN7Vector2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %10, float noundef %64, float noundef %75)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  %76 = call <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16) %26)
  store <2 x float> %76, ptr %16, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #8
  %77 = call <2 x float> @_ZNK5Box2D10BottomLeftEv(ptr noundef nonnull align 4 dereferenceable(16) %26)
  store <2 x float> %77, ptr %18, align 8
  %78 = invoke <2 x float> @_ZNK7Vector2plERKS_(ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 4 dereferenceable(8) %10)
          to label %127 unwind label %132

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

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

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

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

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

89:                                               ; preds = %87, %85
  %.pn = phi { ptr, i32 } [ %88, %87 ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #8
  br label %134

90:                                               ; preds = %34
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %94

92:                                               ; preds = %37
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #8
  br label %94

94:                                               ; preds = %92, %90
  %.pn31 = phi { ptr, i32 } [ %93, %92 ], [ %91, %90 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #8
  br label %134

95:                                               ; preds = %39
  %96 = landingpad { ptr, i32 }
          cleanup
  br label %99

97:                                               ; preds = %42
  %98 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %8) #8
  br label %99

99:                                               ; preds = %97, %95
  %.pn33 = phi { ptr, i32 } [ %98, %97 ], [ %96, %95 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #8
  br label %134

._crit_edge.loopexit:                             ; preds = %123
  %.pre = load i32, ptr %30, align 8, !tbaa !24
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader
  %100 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %49, %.preheader ]
  %101 = phi i32 [ %125, %._crit_edge.loopexit ], [ %50, %.preheader ]
  %102 = add nuw nsw i32 %.02842, 1
  %103 = icmp slt i32 %102, %100
  br i1 %103, label %.preheader, label %._crit_edge43, !llvm.loop !25

104:                                              ; preds = %.lr.ph, %123
  %.02941 = phi i32 [ 0, %.lr.ph ], [ %124, %123 ]
  %105 = invoke <2 x float> @_ZNK13ScalarField2D11ArrayVertexEii(ptr noundef nonnull align 8 dereferenceable(48) %21, i32 noundef %.02842, i32 noundef %.02941)
          to label %106 unwind label %114

106:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %9) #8
  %107 = uitofp nneg i32 %.02941 to float
  %108 = fmul float %107, 0x401FA65E80000000
  call void @_ZN7Vector3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %9, float noundef %53, float noundef %108, float noundef 0.000000e+00)
  %109 = invoke noundef float @_ZN11PerlinNoise3fBmERK7Vector3ffi(ptr noundef nonnull align 4 dereferenceable(12) %9, float noundef 1.000000e+00, float noundef 0x3F60624DE0000000, i32 noundef 3)
          to label %110 unwind label %116

110:                                              ; preds = %106
  %111 = fdiv float %109, 1.750000e+00
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #8
  %112 = fcmp ogt float %111, 0x3FDCCCCCC0000000
  br i1 %112, label %113, label %120

113:                                              ; preds = %110
  invoke void @_ZN13ScalarField2D3SetEiif(ptr noundef nonnull align 8 dereferenceable(48) %24, i32 noundef %.02842, i32 noundef %.02941, float noundef 0x3FEB333340000000)
          to label %120 unwind label %118

114:                                              ; preds = %104
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %134

116:                                              ; preds = %106
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #8
  br label %134

118:                                              ; preds = %122, %120, %113
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %134

120:                                              ; preds = %113, %110
  %121 = invoke noundef float @_ZN6Random7UniformEff(float noundef %2, float noundef %3)
          to label %122 unwind label %118

122:                                              ; preds = %120
  invoke void @_ZN13ScalarField2D3SetEiif(ptr noundef nonnull align 8 dereferenceable(48) %22, i32 noundef %.02842, i32 noundef %.02941, float noundef %121)
          to label %123 unwind label %118

123:                                              ; preds = %122
  %124 = add nuw nsw i32 %.02941, 1
  %125 = load i32, ptr %29, align 4, !tbaa !23
  %126 = icmp slt i32 %124, %125
  br i1 %126, label %104, label %._crit_edge.loopexit, !llvm.loop !28

127:                                              ; preds = %._crit_edge43
  store <2 x float> %78, ptr %17, align 8
  call void @_ZN5Box2DC2ERK7Vector2S2_(ptr noundef nonnull align 4 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(8) %16, ptr noundef nonnull align 4 dereferenceable(8) %17)
  %128 = invoke <2 x float> @_ZNK5Box2D4SizeEv(ptr noundef nonnull align 4 dereferenceable(16) %15)
          to label %129 unwind label %132

129:                                              ; preds = %127
  %.sroa.0.0.vec.extract = extractelement <2 x float> %128, i64 0
  %130 = getelementptr inbounds i8, ptr %0, i64 196
  store float %.sroa.0.0.vec.extract, ptr %130, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  %131 = getelementptr inbounds i8, ptr %0, i64 192
  store float 0x3FB99999A0000000, ptr %131, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  ret void

132:                                              ; preds = %127, %._crit_edge43
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %134

134:                                              ; preds = %114, %118, %116, %132, %99, %94, %89, %83
  %.pn35.pn.pn = phi { ptr, i32 } [ %133, %132 ], [ %.pn33, %99 ], [ %.pn31, %94 ], [ %.pn, %89 ], [ %84, %83 ], [ %115, %114 ], [ %119, %118 ], [ %117, %116 ]
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %24) #8
  br label %135

135:                                              ; preds = %134, %81
  %.pn35.pn.pn.pn = phi { ptr, i32 } [ %.pn35.pn.pn, %134 ], [ %82, %81 ]
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #8
  br label %136

136:                                              ; preds = %135, %79
  %.pn35.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn35.pn.pn.pn, %135 ], [ %80, %79 ]
  call void @_ZN13ScalarField2DD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #8
  resume { ptr, i32 } %.pn35.pn.pn.pn.pn
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZNK13ScalarField2D11ArrayVertexEii(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i32 noundef) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN11PerlinNoise3fBmERK7Vector3ffi(ptr noundef nonnull align 4 dereferenceable(12), float noundef, float noundef, i32 noundef) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7Vector3C2Efff(ptr noundef nonnull align 4 dereferenceable(12), float noundef, float noundef, float noundef) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13ScalarField2D3SetEiif(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i32 noundef, float noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN6Random7UniformEff(float noundef, float noundef) local_unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="64" "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 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 16}
!10 = !{!"_ZTS12DuneSediment", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !11, i64 16, !11, i64 17, !12, i64 24, !12, i64 72, !12, i64 120, !13, i64 168, !15, i64 184, !15, i64 188, !6, i64 192, !6, i64 196, !14, i64 200}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"_ZTS13ScalarField2D", !13, i64 0, !15, i64 16, !15, i64 20, !16, i64 24}
!13 = !{!"_ZTS5Box2D", !14, i64 0, !14, i64 8}
!14 = !{!"_ZTS7Vector2", !6, i64 0, !6, i64 4}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIfSaIfEE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIfSaIfEE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataE", !20, i64 0, !20, i64 8, !20, i64 16}
!20 = !{!"any pointer", !7, i64 0}
!21 = !{!10, !11, i64 17}
!22 = !{i64 0, i64 4, !5, i64 4, i64 4, !5, i64 8, i64 4, !5, i64 12, i64 4, !5}
!23 = !{!10, !15, i64 188}
!24 = !{!10, !15, i64 184}
!25 = distinct !{!25, !26, !27}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!"llvm.loop.unswitch.partial.disable"}
!28 = distinct !{!28, !26}
!29 = !{!10, !6, i64 196}
!30 = !{!10, !6, i64 192}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass