; LLVM IR from achilles288/robot-monitor-graphics :: src/base/cube.ll (ZN3rmg6Cube3D10createMeshEv)

; 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.rmg::Mesh" = type <{ ptr, ptr, ptr, ptr, i32, [4 x i8], ptr, i32, [4 x i8] }>
%"struct.rmg::Vec3" = type { %union.anon.0 }
%union.anon.0 = type { %struct.anon }
%struct.anon = type { float, float, float }
%"struct.rmg::Vec2" = type { %union.anon.1 }
%union.anon.1 = type { %struct.anon.2 }
%struct.anon.2 = type { float, float }
%"class.rmg::Cube3D" = type <{ %"class.rmg::Object3D", float, float, float, [4 x i8] }>
%"class.rmg::Object3D" = type { %"class.rmg::Object", %"struct.rmg::Mat4", %"struct.rmg::Vec3", ptr, float, float, float, ptr, ptr, %"class.rmg::internal::Pending", ptr, ptr, %"class.rmg::internal::Pending" }
%"class.rmg::Object" = type { ptr, i64, ptr, %"struct.rmg::ColorRGBA", i8, i32 }
%"struct.rmg::ColorRGBA" = type { float, float, float, float }
%"struct.rmg::Mat4" = type { %union.anon }
%union.anon = type { [4 x [4 x float]] }
%"class.rmg::internal::Pending" = type { ptr, ptr }

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3rmg6Cube3D10createMeshEv(ptr dead_on_unwind noalias writable sret(%"class.rmg::Mesh") align 8 %0, ptr noundef nonnull align 8 dereferenceable(228) %1) #1 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca [6 x [4 x %"struct.rmg::Vec3"]], align 16
  %6 = alloca [6 x [4 x %"struct.rmg::Vec3"]], align 16
  %7 = alloca [6 x [4 x %"struct.rmg::Vec2"]], align 16
  %8 = alloca [6 x [6 x i32]], align 16
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"struct.rmg::Vec3", align 4
  %13 = alloca %"struct.rmg::Vec3", align 4
  %14 = alloca %"struct.rmg::Vec3", align 4
  %15 = alloca %"struct.rmg::Vec3", align 4
  %16 = alloca %"struct.rmg::Vec3", align 4
  %17 = alloca i32, align 4
  %18 = alloca float, align 4
  %19 = alloca %"struct.rmg::Vec2", align 4
  %20 = alloca %"struct.rmg::Vec2", align 4
  %21 = alloca %"struct.rmg::Vec2", align 4
  %22 = alloca %"struct.rmg::Vec2", align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca %"struct.rmg::Vec3", align 4
  %26 = alloca %"struct.rmg::Vec3", align 4
  %27 = alloca %"struct.rmg::Vec3", align 4
  %28 = alloca %"struct.rmg::Vec3", align 4
  %29 = alloca %"struct.rmg::Vec3", align 4
  %30 = alloca i32, align 4
  %31 = alloca float, align 4
  %32 = alloca %"struct.rmg::Vec2", align 4
  %33 = alloca %"struct.rmg::Vec2", align 4
  %34 = alloca %"struct.rmg::Vec2", align 4
  %35 = alloca %"struct.rmg::Vec2", align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca %"struct.rmg::Vec3", align 4
  %39 = alloca %"struct.rmg::Vec3", align 4
  %40 = alloca %"struct.rmg::Vec3", align 4
  %41 = alloca %"struct.rmg::Vec3", align 4
  %42 = alloca %"struct.rmg::Vec3", align 4
  %43 = alloca i32, align 4
  %44 = alloca float, align 4
  %45 = alloca %"struct.rmg::Vec2", align 4
  %46 = alloca %"struct.rmg::Vec2", align 4
  %47 = alloca %"struct.rmg::Vec2", align 4
  %48 = alloca %"struct.rmg::Vec2", align 4
  %49 = alloca float, align 4
  %50 = alloca float, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca %"struct.rmg::Vec2", align 4
  %55 = alloca %"struct.rmg::Vec2", align 4
  %56 = alloca %"struct.rmg::Vec2", align 4
  %57 = alloca %"struct.rmg::Vec2", align 4
  %58 = alloca i32, align 4
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %59 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 288, ptr %5) #6
  %60 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i32 0, i32 0, i32 0
  %61 = getelementptr inbounds %"struct.rmg::Vec3", ptr %60, i64 24
  br label %62

62:                                               ; preds = %62, %2
  %63 = phi ptr [ %60, %2 ], [ %64, %62 ]
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %63)
  %64 = getelementptr inbounds %"struct.rmg::Vec3", ptr %63, i64 1
  %65 = icmp eq ptr %64, %61
  br i1 %65, label %66, label %62

66:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 288, ptr %6) #6
  %67 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %6, i32 0, i32 0, i32 0
  %68 = getelementptr inbounds %"struct.rmg::Vec3", ptr %67, i64 24
  br label %69

69:                                               ; preds = %69, %66
  %70 = phi ptr [ %67, %66 ], [ %71, %69 ]
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %70)
  %71 = getelementptr inbounds %"struct.rmg::Vec3", ptr %70, i64 1
  %72 = icmp eq ptr %71, %68
  br i1 %72, label %73, label %69

73:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 192, ptr %7) #6
  %74 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i32 0, i32 0, i32 0
  %75 = getelementptr inbounds %"struct.rmg::Vec2", ptr %74, i64 24
  br label %76

76:                                               ; preds = %76, %73
  %77 = phi ptr [ %74, %73 ], [ %78, %76 ]
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %77)
  %78 = getelementptr inbounds %"struct.rmg::Vec2", ptr %77, i64 1
  %79 = icmp eq ptr %78, %75
  br i1 %79, label %80, label %76

80:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 144, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 -1, ptr %9, align 4, !tbaa !9
  br label %81

81:                                               ; preds = %242, %80
  %82 = load i32, ptr %9, align 4, !tbaa !9
  %83 = icmp sle i32 %82, 1
  br i1 %83, label %85, label %84

84:                                               ; preds = %81
  store i32 2, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  br label %245

85:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  %86 = load i32, ptr %9, align 4, !tbaa !9
  %87 = icmp eq i32 %86, -1
  %88 = zext i1 %87 to i64
  %89 = select i1 %87, i32 0, i32 1
  store i32 %89, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %12) #6
  %90 = load i32, ptr %9, align 4, !tbaa !9
  %91 = sitofp i32 %90 to float
  %92 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %93 = load float, ptr %92, align 8, !tbaa !11
  %94 = fmul float %91, %93
  %95 = fdiv float %94, 2.000000e+00
  %96 = load i32, ptr %9, align 4, !tbaa !9
  %97 = sitofp i32 %96 to float
  %98 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %99 = load float, ptr %98, align 4, !tbaa !23
  %100 = fmul float %97, %99
  %101 = fdiv float %100, 2.000000e+00
  %102 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %103 = load float, ptr %102, align 8, !tbaa !24
  %104 = fneg float %103
  %105 = fdiv float %104, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %12, float noundef %95, float noundef %101, float noundef %105)
  %106 = load i32, ptr %11, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %107
  %109 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %108, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %109, ptr align 4 %12, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %13) #6
  %110 = load i32, ptr %9, align 4, !tbaa !9
  %111 = sitofp i32 %110 to float
  %112 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %113 = load float, ptr %112, align 8, !tbaa !11
  %114 = fmul float %111, %113
  %115 = fdiv float %114, 2.000000e+00
  %116 = load i32, ptr %9, align 4, !tbaa !9
  %117 = sitofp i32 %116 to float
  %118 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %119 = load float, ptr %118, align 4, !tbaa !23
  %120 = fmul float %117, %119
  %121 = fdiv float %120, 2.000000e+00
  %122 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %123 = load float, ptr %122, align 8, !tbaa !24
  %124 = fdiv float %123, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %13, float noundef %115, float noundef %121, float noundef %124)
  %125 = load i32, ptr %11, align 4, !tbaa !9
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %126
  %128 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %127, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %128, ptr align 4 %13, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %14) #6
  %129 = load i32, ptr %9, align 4, !tbaa !9
  %130 = sitofp i32 %129 to float
  %131 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %132 = load float, ptr %131, align 8, !tbaa !11
  %133 = fmul float %130, %132
  %134 = fdiv float %133, 2.000000e+00
  %135 = load i32, ptr %9, align 4, !tbaa !9
  %136 = sub nsw i32 0, %135
  %137 = sitofp i32 %136 to float
  %138 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %139 = load float, ptr %138, align 4, !tbaa !23
  %140 = fmul float %137, %139
  %141 = fdiv float %140, 2.000000e+00
  %142 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %143 = load float, ptr %142, align 8, !tbaa !24
  %144 = fdiv float %143, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %14, float noundef %134, float noundef %141, float noundef %144)
  %145 = load i32, ptr %11, align 4, !tbaa !9
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %146
  %148 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %147, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %148, ptr align 4 %14, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %15) #6
  %149 = load i32, ptr %9, align 4, !tbaa !9
  %150 = sitofp i32 %149 to float
  %151 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %152 = load float, ptr %151, align 8, !tbaa !11
  %153 = fmul float %150, %152
  %154 = fdiv float %153, 2.000000e+00
  %155 = load i32, ptr %9, align 4, !tbaa !9
  %156 = sub nsw i32 0, %155
  %157 = sitofp i32 %156 to float
  %158 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %159 = load float, ptr %158, align 4, !tbaa !23
  %160 = fmul float %157, %159
  %161 = fdiv float %160, 2.000000e+00
  %162 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %163 = load float, ptr %162, align 8, !tbaa !24
  %164 = fneg float %163
  %165 = fdiv float %164, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %15, float noundef %154, float noundef %161, float noundef %165)
  %166 = load i32, ptr %11, align 4, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %167
  %169 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %168, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %169, ptr align 4 %15, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %16) #6
  %170 = load i32, ptr %9, align 4, !tbaa !9
  %171 = sitofp i32 %170 to float
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %16, float noundef %171, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %172

172:                                              ; preds = %183, %85
  %173 = load i32, ptr %17, align 4, !tbaa !9
  %174 = icmp slt i32 %173, 4
  br i1 %174, label %176, label %175

175:                                              ; preds = %172
  store i32 5, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %186

176:                                              ; preds = %172
  %177 = load i32, ptr %11, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %6, i64 0, i64 %178
  %180 = load i32, ptr %17, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %179, i64 0, i64 %181
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %182, ptr align 4 %16, i64 12, i1 false), !tbaa.struct !25
  br label %183

183:                                              ; preds = %176
  %184 = load i32, ptr %17, align 4, !tbaa !9
  %185 = add nsw i32 %184, 1
  store i32 %185, ptr %17, align 4, !tbaa !9
  br label %172, !llvm.loop !27

186:                                              ; preds = %175
  %187 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %59)
  %188 = icmp eq ptr %187, null
  br i1 %188, label %189, label %241

189:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  %190 = load i32, ptr %9, align 4, !tbaa !9
  %191 = icmp eq i32 %190, -1
  br i1 %191, label %192, label %193

192:                                              ; preds = %189
  br label %199

193:                                              ; preds = %189
  %194 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %195 = load float, ptr %194, align 8, !tbaa !11
  %196 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %197 = load float, ptr %196, align 4, !tbaa !23
  %198 = fadd float %195, %197
  br label %199

199:                                              ; preds = %193, %192
  %200 = phi float [ 0.000000e+00, %192 ], [ %198, %193 ]
  store float %200, ptr %18, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %201 = load float, ptr %18, align 4, !tbaa !29
  %202 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %203 = load float, ptr %202, align 4, !tbaa !23
  %204 = fadd float %201, %203
  %205 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %206 = load float, ptr %205, align 4, !tbaa !23
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %19, float noundef %204, float noundef %206)
  %207 = load i32, ptr %11, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %208
  %210 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %209, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %210, ptr align 4 %19, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %211 = load float, ptr %18, align 4, !tbaa !29
  %212 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %213 = load float, ptr %212, align 4, !tbaa !23
  %214 = fadd float %211, %213
  %215 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %216 = load float, ptr %215, align 4, !tbaa !23
  %217 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %218 = load float, ptr %217, align 8, !tbaa !24
  %219 = fadd float %216, %218
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %20, float noundef %214, float noundef %219)
  %220 = load i32, ptr %11, align 4, !tbaa !9
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %221
  %223 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %222, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %223, ptr align 4 %20, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %224 = load float, ptr %18, align 4, !tbaa !29
  %225 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %226 = load float, ptr %225, align 4, !tbaa !23
  %227 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %228 = load float, ptr %227, align 8, !tbaa !24
  %229 = fadd float %226, %228
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %21, float noundef %224, float noundef %229)
  %230 = load i32, ptr %11, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %231
  %233 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %232, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %233, ptr align 4 %21, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %234 = load float, ptr %18, align 4, !tbaa !29
  %235 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %236 = load float, ptr %235, align 4, !tbaa !23
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %22, float noundef %234, float noundef %236)
  %237 = load i32, ptr %11, align 4, !tbaa !9
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %238
  %240 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %239, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %240, ptr align 4 %22, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %241

241:                                              ; preds = %199, %186
  call void @llvm.lifetime.end.p0(i64 12, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %242

242:                                              ; preds = %241
  %243 = load i32, ptr %9, align 4, !tbaa !9
  %244 = add nsw i32 %243, 2
  store i32 %244, ptr %9, align 4, !tbaa !9
  br label %81, !llvm.loop !31

245:                                              ; preds = %84
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 -1, ptr %23, align 4, !tbaa !9
  br label %246

246:                                              ; preds = %409, %245
  %247 = load i32, ptr %23, align 4, !tbaa !9
  %248 = icmp sle i32 %247, 1
  br i1 %248, label %250, label %249

249:                                              ; preds = %246
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %412

250:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %251 = load i32, ptr %23, align 4, !tbaa !9
  %252 = icmp eq i32 %251, -1
  %253 = zext i1 %252 to i64
  %254 = select i1 %252, i32 2, i32 3
  store i32 %254, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %25) #6
  %255 = load i32, ptr %23, align 4, !tbaa !9
  %256 = sub nsw i32 0, %255
  %257 = sitofp i32 %256 to float
  %258 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %259 = load float, ptr %258, align 8, !tbaa !11
  %260 = fmul float %257, %259
  %261 = fdiv float %260, 2.000000e+00
  %262 = load i32, ptr %23, align 4, !tbaa !9
  %263 = sitofp i32 %262 to float
  %264 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %265 = load float, ptr %264, align 4, !tbaa !23
  %266 = fmul float %263, %265
  %267 = fdiv float %266, 2.000000e+00
  %268 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %269 = load float, ptr %268, align 8, !tbaa !24
  %270 = fneg float %269
  %271 = fdiv float %270, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %25, float noundef %261, float noundef %267, float noundef %271)
  %272 = load i32, ptr %24, align 4, !tbaa !9
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %273
  %275 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %274, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %275, ptr align 4 %25, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %26) #6
  %276 = load i32, ptr %23, align 4, !tbaa !9
  %277 = sub nsw i32 0, %276
  %278 = sitofp i32 %277 to float
  %279 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %280 = load float, ptr %279, align 8, !tbaa !11
  %281 = fmul float %278, %280
  %282 = fdiv float %281, 2.000000e+00
  %283 = load i32, ptr %23, align 4, !tbaa !9
  %284 = sitofp i32 %283 to float
  %285 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %286 = load float, ptr %285, align 4, !tbaa !23
  %287 = fmul float %284, %286
  %288 = fdiv float %287, 2.000000e+00
  %289 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %290 = load float, ptr %289, align 8, !tbaa !24
  %291 = fdiv float %290, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %26, float noundef %282, float noundef %288, float noundef %291)
  %292 = load i32, ptr %24, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %293
  %295 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %294, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %295, ptr align 4 %26, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %27) #6
  %296 = load i32, ptr %23, align 4, !tbaa !9
  %297 = sitofp i32 %296 to float
  %298 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %299 = load float, ptr %298, align 8, !tbaa !11
  %300 = fmul float %297, %299
  %301 = fdiv float %300, 2.000000e+00
  %302 = load i32, ptr %23, align 4, !tbaa !9
  %303 = sitofp i32 %302 to float
  %304 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %305 = load float, ptr %304, align 4, !tbaa !23
  %306 = fmul float %303, %305
  %307 = fdiv float %306, 2.000000e+00
  %308 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %309 = load float, ptr %308, align 8, !tbaa !24
  %310 = fdiv float %309, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %27, float noundef %301, float noundef %307, float noundef %310)
  %311 = load i32, ptr %24, align 4, !tbaa !9
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %312
  %314 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %313, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %314, ptr align 4 %27, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %28) #6
  %315 = load i32, ptr %23, align 4, !tbaa !9
  %316 = sitofp i32 %315 to float
  %317 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %318 = load float, ptr %317, align 8, !tbaa !11
  %319 = fmul float %316, %318
  %320 = fdiv float %319, 2.000000e+00
  %321 = load i32, ptr %23, align 4, !tbaa !9
  %322 = sitofp i32 %321 to float
  %323 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %324 = load float, ptr %323, align 4, !tbaa !23
  %325 = fmul float %322, %324
  %326 = fdiv float %325, 2.000000e+00
  %327 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %328 = load float, ptr %327, align 8, !tbaa !24
  %329 = fneg float %328
  %330 = fdiv float %329, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %28, float noundef %320, float noundef %326, float noundef %330)
  %331 = load i32, ptr %24, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %332
  %334 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %333, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %334, ptr align 4 %28, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %29) #6
  %335 = load i32, ptr %23, align 4, !tbaa !9
  %336 = sitofp i32 %335 to float
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %29, float noundef 0.000000e+00, float noundef %336, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %337

337:                                              ; preds = %348, %250
  %338 = load i32, ptr %30, align 4, !tbaa !9
  %339 = icmp slt i32 %338, 4
  br i1 %339, label %341, label %340

340:                                              ; preds = %337
  store i32 11, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  br label %351

341:                                              ; preds = %337
  %342 = load i32, ptr %24, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %6, i64 0, i64 %343
  %345 = load i32, ptr %30, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %344, i64 0, i64 %346
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %347, ptr align 4 %29, i64 12, i1 false), !tbaa.struct !25
  br label %348

348:                                              ; preds = %341
  %349 = load i32, ptr %30, align 4, !tbaa !9
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %30, align 4, !tbaa !9
  br label %337, !llvm.loop !32

351:                                              ; preds = %340
  %352 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %59)
  %353 = icmp eq ptr %352, null
  br i1 %353, label %354, label %408

354:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %355 = load i32, ptr %23, align 4, !tbaa !9
  %356 = icmp eq i32 %355, -1
  br i1 %356, label %357, label %360

357:                                              ; preds = %354
  %358 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %359 = load float, ptr %358, align 4, !tbaa !23
  br label %366

360:                                              ; preds = %354
  %361 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %362 = load float, ptr %361, align 8, !tbaa !11
  %363 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %364 = load float, ptr %363, align 4, !tbaa !23
  %365 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %364, float %362)
  br label %366

366:                                              ; preds = %360, %357
  %367 = phi float [ %359, %357 ], [ %365, %360 ]
  store float %367, ptr %31, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %368 = load float, ptr %31, align 4, !tbaa !29
  %369 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %370 = load float, ptr %369, align 8, !tbaa !11
  %371 = fadd float %368, %370
  %372 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %373 = load float, ptr %372, align 4, !tbaa !23
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %32, float noundef %371, float noundef %373)
  %374 = load i32, ptr %24, align 4, !tbaa !9
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %375
  %377 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %376, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %377, ptr align 4 %32, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %378 = load float, ptr %31, align 4, !tbaa !29
  %379 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %380 = load float, ptr %379, align 8, !tbaa !11
  %381 = fadd float %378, %380
  %382 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %383 = load float, ptr %382, align 4, !tbaa !23
  %384 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %385 = load float, ptr %384, align 8, !tbaa !24
  %386 = fadd float %383, %385
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %33, float noundef %381, float noundef %386)
  %387 = load i32, ptr %24, align 4, !tbaa !9
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %388
  %390 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %389, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %390, ptr align 4 %33, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %391 = load float, ptr %31, align 4, !tbaa !29
  %392 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %393 = load float, ptr %392, align 4, !tbaa !23
  %394 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %395 = load float, ptr %394, align 8, !tbaa !24
  %396 = fadd float %393, %395
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef %391, float noundef %396)
  %397 = load i32, ptr %24, align 4, !tbaa !9
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %398
  %400 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %399, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %400, ptr align 4 %34, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %401 = load float, ptr %31, align 4, !tbaa !29
  %402 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %403 = load float, ptr %402, align 4, !tbaa !23
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef %401, float noundef %403)
  %404 = load i32, ptr %24, align 4, !tbaa !9
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %405
  %407 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %406, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %407, ptr align 4 %35, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %408

408:                                              ; preds = %366, %351
  call void @llvm.lifetime.end.p0(i64 12, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %409

409:                                              ; preds = %408
  %410 = load i32, ptr %23, align 4, !tbaa !9
  %411 = add nsw i32 %410, 2
  store i32 %411, ptr %23, align 4, !tbaa !9
  br label %246, !llvm.loop !33

412:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store i32 -1, ptr %36, align 4, !tbaa !9
  br label %413

413:                                              ; preds = %576, %412
  %414 = load i32, ptr %36, align 4, !tbaa !9
  %415 = icmp sle i32 %414, 1
  br i1 %415, label %417, label %416

416:                                              ; preds = %413
  store i32 14, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %579

417:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  %418 = load i32, ptr %36, align 4, !tbaa !9
  %419 = icmp eq i32 %418, -1
  %420 = zext i1 %419 to i64
  %421 = select i1 %419, i32 4, i32 5
  store i32 %421, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %38) #6
  %422 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %423 = load float, ptr %422, align 8, !tbaa !11
  %424 = fdiv float %423, 2.000000e+00
  %425 = load i32, ptr %36, align 4, !tbaa !9
  %426 = sub nsw i32 0, %425
  %427 = sitofp i32 %426 to float
  %428 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %429 = load float, ptr %428, align 4, !tbaa !23
  %430 = fmul float %427, %429
  %431 = fdiv float %430, 2.000000e+00
  %432 = load i32, ptr %36, align 4, !tbaa !9
  %433 = sitofp i32 %432 to float
  %434 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %435 = load float, ptr %434, align 8, !tbaa !24
  %436 = fmul float %433, %435
  %437 = fdiv float %436, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %38, float noundef %424, float noundef %431, float noundef %437)
  %438 = load i32, ptr %37, align 4, !tbaa !9
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %439
  %441 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %440, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %441, ptr align 4 %38, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %39) #6
  %442 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %443 = load float, ptr %442, align 8, !tbaa !11
  %444 = fdiv float %443, 2.000000e+00
  %445 = load i32, ptr %36, align 4, !tbaa !9
  %446 = sitofp i32 %445 to float
  %447 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %448 = load float, ptr %447, align 4, !tbaa !23
  %449 = fmul float %446, %448
  %450 = fdiv float %449, 2.000000e+00
  %451 = load i32, ptr %36, align 4, !tbaa !9
  %452 = sitofp i32 %451 to float
  %453 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %454 = load float, ptr %453, align 8, !tbaa !24
  %455 = fmul float %452, %454
  %456 = fdiv float %455, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %39, float noundef %444, float noundef %450, float noundef %456)
  %457 = load i32, ptr %37, align 4, !tbaa !9
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %458
  %460 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %459, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %460, ptr align 4 %39, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %40) #6
  %461 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %462 = load float, ptr %461, align 8, !tbaa !11
  %463 = fneg float %462
  %464 = fdiv float %463, 2.000000e+00
  %465 = load i32, ptr %36, align 4, !tbaa !9
  %466 = sitofp i32 %465 to float
  %467 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %468 = load float, ptr %467, align 4, !tbaa !23
  %469 = fmul float %466, %468
  %470 = fdiv float %469, 2.000000e+00
  %471 = load i32, ptr %36, align 4, !tbaa !9
  %472 = sitofp i32 %471 to float
  %473 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %474 = load float, ptr %473, align 8, !tbaa !24
  %475 = fmul float %472, %474
  %476 = fdiv float %475, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %40, float noundef %464, float noundef %470, float noundef %476)
  %477 = load i32, ptr %37, align 4, !tbaa !9
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %478
  %480 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %479, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %480, ptr align 4 %40, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %40) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %41) #6
  %481 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %482 = load float, ptr %481, align 8, !tbaa !11
  %483 = fneg float %482
  %484 = fdiv float %483, 2.000000e+00
  %485 = load i32, ptr %36, align 4, !tbaa !9
  %486 = sub nsw i32 0, %485
  %487 = sitofp i32 %486 to float
  %488 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %489 = load float, ptr %488, align 4, !tbaa !23
  %490 = fmul float %487, %489
  %491 = fdiv float %490, 2.000000e+00
  %492 = load i32, ptr %36, align 4, !tbaa !9
  %493 = sitofp i32 %492 to float
  %494 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %495 = load float, ptr %494, align 8, !tbaa !24
  %496 = fmul float %493, %495
  %497 = fdiv float %496, 2.000000e+00
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %41, float noundef %484, float noundef %491, float noundef %497)
  %498 = load i32, ptr %37, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 %499
  %501 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %500, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %501, ptr align 4 %41, i64 12, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 12, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr %42) #6
  %502 = load i32, ptr %36, align 4, !tbaa !9
  %503 = sitofp i32 %502 to float
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %42, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef %503)
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %504

504:                                              ; preds = %515, %417
  %505 = load i32, ptr %43, align 4, !tbaa !9
  %506 = icmp slt i32 %505, 4
  br i1 %506, label %508, label %507

507:                                              ; preds = %504
  store i32 17, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  br label %518

508:                                              ; preds = %504
  %509 = load i32, ptr %37, align 4, !tbaa !9
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %6, i64 0, i64 %510
  %512 = load i32, ptr %43, align 4, !tbaa !9
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %511, i64 0, i64 %513
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %514, ptr align 4 %42, i64 12, i1 false), !tbaa.struct !25
  br label %515

515:                                              ; preds = %508
  %516 = load i32, ptr %43, align 4, !tbaa !9
  %517 = add nsw i32 %516, 1
  store i32 %517, ptr %43, align 4, !tbaa !9
  br label %504, !llvm.loop !34

518:                                              ; preds = %507
  %519 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %59)
  %520 = icmp eq ptr %519, null
  br i1 %520, label %521, label %575

521:                                              ; preds = %518
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  %522 = load i32, ptr %36, align 4, !tbaa !9
  %523 = icmp eq i32 %522, -1
  br i1 %523, label %524, label %527

524:                                              ; preds = %521
  %525 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %526 = load float, ptr %525, align 4, !tbaa !23
  br label %533

527:                                              ; preds = %521
  %528 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %529 = load float, ptr %528, align 4, !tbaa !23
  %530 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %531 = load float, ptr %530, align 8, !tbaa !11
  %532 = fadd float %529, %531
  br label %533

533:                                              ; preds = %527, %524
  %534 = phi float [ %526, %524 ], [ %532, %527 ]
  store float %534, ptr %44, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %535 = load float, ptr %44, align 4, !tbaa !29
  %536 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %537 = load float, ptr %536, align 8, !tbaa !11
  %538 = fadd float %535, %537
  %539 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %540 = load float, ptr %539, align 8, !tbaa !24
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %45, float noundef %538, float noundef %540)
  %541 = load i32, ptr %37, align 4, !tbaa !9
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %542
  %544 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %543, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %544, ptr align 4 %45, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %545 = load float, ptr %44, align 4, !tbaa !29
  %546 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %547 = load float, ptr %546, align 8, !tbaa !11
  %548 = fadd float %545, %547
  %549 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %550 = load float, ptr %549, align 8, !tbaa !24
  %551 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %552 = load float, ptr %551, align 4, !tbaa !23
  %553 = fadd float %550, %552
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %46, float noundef %548, float noundef %553)
  %554 = load i32, ptr %37, align 4, !tbaa !9
  %555 = sext i32 %554 to i64
  %556 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %555
  %557 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %556, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %557, ptr align 4 %46, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %558 = load float, ptr %44, align 4, !tbaa !29
  %559 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %560 = load float, ptr %559, align 8, !tbaa !24
  %561 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %562 = load float, ptr %561, align 4, !tbaa !23
  %563 = fadd float %560, %562
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %47, float noundef %558, float noundef %563)
  %564 = load i32, ptr %37, align 4, !tbaa !9
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %565
  %567 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %566, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %567, ptr align 4 %47, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  %568 = load float, ptr %44, align 4, !tbaa !29
  %569 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %570 = load float, ptr %569, align 8, !tbaa !24
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %48, float noundef %568, float noundef %570)
  %571 = load i32, ptr %37, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %572
  %574 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %573, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %574, ptr align 4 %48, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  br label %575

575:                                              ; preds = %533, %518
  call void @llvm.lifetime.end.p0(i64 12, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  br label %576

576:                                              ; preds = %575
  %577 = load i32, ptr %36, align 4, !tbaa !9
  %578 = add nsw i32 %577, 2
  store i32 %578, ptr %36, align 4, !tbaa !9
  br label %413, !llvm.loop !35

579:                                              ; preds = %416
  %580 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %59)
  %581 = icmp eq ptr %580, null
  br i1 %581, label %582, label %634

582:                                              ; preds = %579
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  %583 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %584 = load float, ptr %583, align 4, !tbaa !23
  %585 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 1
  %586 = load float, ptr %585, align 8, !tbaa !11
  %587 = fadd float %584, %586
  %588 = fmul float 2.000000e+00, %587
  store float %588, ptr %49, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  %589 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 3
  %590 = load float, ptr %589, align 8, !tbaa !24
  %591 = getelementptr inbounds %"class.rmg::Cube3D", ptr %59, i32 0, i32 2
  %592 = load float, ptr %591, align 4, !tbaa !23
  %593 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %592, float %590)
  store float %593, ptr %50, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  store i32 0, ptr %51, align 4, !tbaa !9
  br label %594

594:                                              ; preds = %630, %582
  %595 = load i32, ptr %51, align 4, !tbaa !9
  %596 = icmp slt i32 %595, 6
  br i1 %596, label %598, label %597

597:                                              ; preds = %594
  store i32 20, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  br label %633

598:                                              ; preds = %594
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  store i32 0, ptr %52, align 4, !tbaa !9
  br label %599

599:                                              ; preds = %626, %598
  %600 = load i32, ptr %52, align 4, !tbaa !9
  %601 = icmp slt i32 %600, 4
  br i1 %601, label %603, label %602

602:                                              ; preds = %599
  store i32 23, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  br label %629

603:                                              ; preds = %599
  %604 = load float, ptr %49, align 4, !tbaa !29
  %605 = load i32, ptr %51, align 4, !tbaa !9
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %606
  %608 = load i32, ptr %52, align 4, !tbaa !9
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %607, i64 0, i64 %609
  %611 = getelementptr inbounds %"struct.rmg::Vec2", ptr %610, i32 0, i32 0
  %612 = getelementptr inbounds %struct.anon.2, ptr %611, i32 0, i32 0
  %613 = load float, ptr %612, align 8, !tbaa !26
  %614 = fdiv float %613, %604
  store float %614, ptr %612, align 8, !tbaa !26
  %615 = load float, ptr %50, align 4, !tbaa !29
  %616 = load i32, ptr %51, align 4, !tbaa !9
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %617
  %619 = load i32, ptr %52, align 4, !tbaa !9
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %618, i64 0, i64 %620
  %622 = getelementptr inbounds %"struct.rmg::Vec2", ptr %621, i32 0, i32 0
  %623 = getelementptr inbounds %struct.anon.2, ptr %622, i32 0, i32 1
  %624 = load float, ptr %623, align 4, !tbaa !26
  %625 = fdiv float %624, %615
  store float %625, ptr %623, align 4, !tbaa !26
  br label %626

626:                                              ; preds = %603
  %627 = load i32, ptr %52, align 4, !tbaa !9
  %628 = add nsw i32 %627, 1
  store i32 %628, ptr %52, align 4, !tbaa !9
  br label %599, !llvm.loop !36

629:                                              ; preds = %602
  br label %630

630:                                              ; preds = %629
  %631 = load i32, ptr %51, align 4, !tbaa !9
  %632 = add nsw i32 %631, 1
  store i32 %632, ptr %51, align 4, !tbaa !9
  br label %594, !llvm.loop !37

633:                                              ; preds = %597
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  br label %634

634:                                              ; preds = %633, %579
  %635 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %59)
  %636 = icmp ne ptr %635, null
  br i1 %636, label %637, label %663

637:                                              ; preds = %634
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %638

638:                                              ; preds = %659, %637
  %639 = load i32, ptr %53, align 4, !tbaa !9
  %640 = icmp slt i32 %639, 6
  br i1 %640, label %642, label %641

641:                                              ; preds = %638
  store i32 26, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  br label %662

642:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %54, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %643 = load i32, ptr %53, align 4, !tbaa !9
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %644
  %646 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %645, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %646, ptr align 4 %54, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %55, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %647 = load i32, ptr %53, align 4, !tbaa !9
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %648
  %650 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %649, i64 0, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %650, ptr align 4 %55, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %56, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %651 = load i32, ptr %53, align 4, !tbaa !9
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %652
  %654 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %653, i64 0, i64 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %654, ptr align 4 %56, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %57, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %655 = load i32, ptr %53, align 4, !tbaa !9
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 %656
  %658 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %657, i64 0, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %658, ptr align 4 %57, i64 8, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  br label %659

659:                                              ; preds = %642
  %660 = load i32, ptr %53, align 4, !tbaa !9
  %661 = add nsw i32 %660, 1
  store i32 %661, ptr %53, align 4, !tbaa !9
  br label %638, !llvm.loop !38

662:                                              ; preds = %641
  br label %663

663:                                              ; preds = %662, %634
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %664

664:                                              ; preds = %711, %663
  %665 = load i32, ptr %58, align 4, !tbaa !9
  %666 = icmp slt i32 %665, 6
  br i1 %666, label %668, label %667

667:                                              ; preds = %664
  store i32 29, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  br label %714

668:                                              ; preds = %664
  %669 = load i32, ptr %58, align 4, !tbaa !9
  %670 = mul nsw i32 %669, 4
  %671 = add nsw i32 %670, 0
  %672 = load i32, ptr %58, align 4, !tbaa !9
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds [6 x [6 x i32]], ptr %8, i64 0, i64 %673
  %675 = getelementptr inbounds [6 x i32], ptr %674, i64 0, i64 0
  store i32 %671, ptr %675, align 8, !tbaa !9
  %676 = load i32, ptr %58, align 4, !tbaa !9
  %677 = mul nsw i32 %676, 4
  %678 = add nsw i32 %677, 1
  %679 = load i32, ptr %58, align 4, !tbaa !9
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds [6 x [6 x i32]], ptr %8, i64 0, i64 %680
  %682 = getelementptr inbounds [6 x i32], ptr %681, i64 0, i64 1
  store i32 %678, ptr %682, align 4, !tbaa !9
  %683 = load i32, ptr %58, align 4, !tbaa !9
  %684 = mul nsw i32 %683, 4
  %685 = add nsw i32 %684, 2
  %686 = load i32, ptr %58, align 4, !tbaa !9
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds [6 x [6 x i32]], ptr %8, i64 0, i64 %687
  %689 = getelementptr inbounds [6 x i32], ptr %688, i64 0, i64 2
  store i32 %685, ptr %689, align 8, !tbaa !9
  %690 = load i32, ptr %58, align 4, !tbaa !9
  %691 = mul nsw i32 %690, 4
  %692 = add nsw i32 %691, 2
  %693 = load i32, ptr %58, align 4, !tbaa !9
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds [6 x [6 x i32]], ptr %8, i64 0, i64 %694
  %696 = getelementptr inbounds [6 x i32], ptr %695, i64 0, i64 3
  store i32 %692, ptr %696, align 4, !tbaa !9
  %697 = load i32, ptr %58, align 4, !tbaa !9
  %698 = mul nsw i32 %697, 4
  %699 = add nsw i32 %698, 3
  %700 = load i32, ptr %58, align 4, !tbaa !9
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds [6 x [6 x i32]], ptr %8, i64 0, i64 %701
  %703 = getelementptr inbounds [6 x i32], ptr %702, i64 0, i64 4
  store i32 %699, ptr %703, align 8, !tbaa !9
  %704 = load i32, ptr %58, align 4, !tbaa !9
  %705 = mul nsw i32 %704, 4
  %706 = add nsw i32 %705, 0
  %707 = load i32, ptr %58, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds [6 x [6 x i32]], ptr %8, i64 0, i64 %708
  %710 = getelementptr inbounds [6 x i32], ptr %709, i64 0, i64 5
  store i32 %706, ptr %710, align 4, !tbaa !9
  br label %711

711:                                              ; preds = %668
  %712 = load i32, ptr %58, align 4, !tbaa !9
  %713 = add nsw i32 %712, 1
  store i32 %713, ptr %58, align 4, !tbaa !9
  br label %664, !llvm.loop !39

714:                                              ; preds = %667
  %715 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %5, i64 0, i64 0
  %716 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %715, i64 0, i64 0
  %717 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec3"]], ptr %6, i64 0, i64 0
  %718 = getelementptr inbounds [4 x %"struct.rmg::Vec3"], ptr %717, i64 0, i64 0
  %719 = getelementptr inbounds [6 x [4 x %"struct.rmg::Vec2"]], ptr %7, i64 0, i64 0
  %720 = getelementptr inbounds [4 x %"struct.rmg::Vec2"], ptr %719, i64 0, i64 0
  %721 = getelementptr inbounds [6 x [6 x i32]], ptr %8, i64 0, i64 0
  %722 = getelementptr inbounds [6 x i32], ptr %721, i64 0, i64 0
  call void @_ZN3rmg4MeshC1EPKNS_4Vec3ES3_PKNS_4Vec2EjPKjj(ptr noundef nonnull align 8 dereferenceable(52) %0, ptr noundef %716, ptr noundef %718, ptr noundef %720, i32 noundef 24, ptr noundef %722, i32 noundef 36)
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 144, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 192, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 288, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 288, ptr %5) #6
  ret void
}

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

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

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

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

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

declare noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216)) #4

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

declare void @_ZN3rmg4MeshC1EPKNS_4Vec3ES3_PKNS_4Vec2EjPKjj(ptr noundef nonnull align 8 dereferenceable(52), ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) unnamed_addr #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !17, i64 216}
!12 = !{!"_ZTSN3rmg6Cube3DE", !13, i64 0, !17, i64 216, !17, i64 220, !17, i64 224}
!13 = !{!"_ZTSN3rmg8Object3DE", !14, i64 0, !20, i64 48, !21, i64 112, !6, i64 128, !17, i64 136, !17, i64 140, !17, i64 144, !6, i64 152, !6, i64 160, !22, i64 168, !6, i64 184, !6, i64 192, !22, i64 200}
!14 = !{!"_ZTSN3rmg6ObjectE", !15, i64 8, !6, i64 16, !16, i64 24, !18, i64 40, !19, i64 44}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTSN3rmg9ColorRGBAE", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12}
!17 = !{!"float", !7, i64 0}
!18 = !{!"bool", !7, i64 0}
!19 = !{!"_ZTSN3rmg10ObjectTypeE", !7, i64 0}
!20 = !{!"_ZTSN3rmg4Mat4E", !7, i64 0}
!21 = !{!"_ZTSN3rmg4Vec3E", !7, i64 0}
!22 = !{!"_ZTSN3rmg8internal7PendingE", !6, i64 0, !6, i64 8}
!23 = !{!12, !17, i64 220}
!24 = !{!12, !17, i64 224}
!25 = !{i64 0, i64 12, !26}
!26 = !{!7, !7, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!17, !17, i64 0}
!30 = !{i64 0, i64 8, !26}
!31 = distinct !{!31, !28}
!32 = distinct !{!32, !28}
!33 = distinct !{!33, !28}
!34 = distinct !{!34, !28}
!35 = distinct !{!35, !28}
!36 = distinct !{!36, !28}
!37 = distinct !{!37, !28}
!38 = distinct !{!38, !28}
!39 = distinct !{!39, !28}


; 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.rmg::Mesh" = type <{ ptr, ptr, ptr, ptr, i32, [4 x i8], ptr, i32, [4 x i8] }>
%"struct.rmg::Vec3" = type { %union.anon.0 }
%union.anon.0 = type { %struct.anon }
%struct.anon = type { float, float, float }
%"struct.rmg::Vec2" = type { %union.anon.1 }
%union.anon.1 = type { %struct.anon.2 }
%struct.anon.2 = type { 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 uwtable
define dso_local void @_ZN3rmg6Cube3D10createMeshEv(ptr dead_on_unwind noalias writable sret(%"class.rmg::Mesh") align 8 %0, ptr noundef nonnull align 8 dereferenceable(228) %1) local_unnamed_addr #1 align 2 {
  %3 = alloca [6 x [4 x %"struct.rmg::Vec3"]], align 16
  %4 = alloca [6 x [4 x %"struct.rmg::Vec3"]], align 16
  %5 = alloca [6 x [4 x %"struct.rmg::Vec2"]], align 16
  %6 = alloca [6 x [6 x i32]], align 16
  %7 = alloca %"struct.rmg::Vec3", align 4
  %8 = alloca %"struct.rmg::Vec3", align 4
  %9 = alloca %"struct.rmg::Vec3", align 4
  %10 = alloca %"struct.rmg::Vec3", align 4
  %11 = alloca %"struct.rmg::Vec3", align 4
  %12 = alloca %"struct.rmg::Vec2", align 8
  %13 = alloca %"struct.rmg::Vec2", align 8
  %14 = alloca %"struct.rmg::Vec2", align 8
  %15 = alloca %"struct.rmg::Vec2", align 8
  %16 = alloca %"struct.rmg::Vec3", align 4
  %17 = alloca %"struct.rmg::Vec3", align 4
  %18 = alloca %"struct.rmg::Vec3", align 4
  %19 = alloca %"struct.rmg::Vec3", align 4
  %20 = alloca %"struct.rmg::Vec3", align 4
  %21 = alloca %"struct.rmg::Vec2", align 8
  %22 = alloca %"struct.rmg::Vec2", align 8
  %23 = alloca %"struct.rmg::Vec2", align 8
  %24 = alloca %"struct.rmg::Vec2", align 8
  %25 = alloca %"struct.rmg::Vec3", align 4
  %26 = alloca %"struct.rmg::Vec3", align 4
  %27 = alloca %"struct.rmg::Vec3", align 4
  %28 = alloca %"struct.rmg::Vec3", align 4
  %29 = alloca %"struct.rmg::Vec3", align 4
  %30 = alloca %"struct.rmg::Vec2", align 8
  %31 = alloca %"struct.rmg::Vec2", align 8
  %32 = alloca %"struct.rmg::Vec2", align 8
  %33 = alloca %"struct.rmg::Vec2", align 8
  %34 = alloca %"struct.rmg::Vec2", align 8
  %35 = alloca %"struct.rmg::Vec2", align 8
  %36 = alloca %"struct.rmg::Vec2", align 8
  %37 = alloca %"struct.rmg::Vec2", align 8
  call void @llvm.lifetime.start.p0(i64 288, ptr nonnull %3) #6
  %.sroa.sel.sroa.sel141.v.sroa.gep = getelementptr inbounds i8, ptr %5, i64 72
  %.sroa.sel.sroa.sel141.v.sroa.gep197 = getelementptr inbounds i8, ptr %5, i64 104
  %.sroa.sel.sroa.sel138.v.sroa.gep = getelementptr inbounds i8, ptr %5, i64 80
  %.sroa.sel.sroa.sel138.v.sroa.gep198 = getelementptr inbounds i8, ptr %5, i64 112
  %.sroa.sel.v.sroa.gep = getelementptr inbounds i8, ptr %5, i64 64
  %.sroa.sel.v.sroa.gep199 = getelementptr inbounds i8, ptr %5, i64 96
  %.sroa.sel.sroa.sel.v.sroa.gep = getelementptr inbounds i8, ptr %5, i64 88
  %.sroa.sel.sroa.sel.v.sroa.gep200 = getelementptr inbounds i8, ptr %5, i64 120
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %3)
  %.ptr.1 = getelementptr inbounds i8, ptr %3, i64 12
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.1)
  %.ptr.2 = getelementptr inbounds i8, ptr %3, i64 24
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.2)
  %.ptr.3 = getelementptr inbounds i8, ptr %3, i64 36
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.3)
  %.ptr.4 = getelementptr inbounds i8, ptr %3, i64 48
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.4)
  %.ptr.5 = getelementptr inbounds i8, ptr %3, i64 60
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.5)
  %.ptr.6 = getelementptr inbounds i8, ptr %3, i64 72
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.6)
  %.ptr.7 = getelementptr inbounds i8, ptr %3, i64 84
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.7)
  %.ptr.8 = getelementptr inbounds i8, ptr %3, i64 96
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.8)
  %.ptr.9 = getelementptr inbounds i8, ptr %3, i64 108
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.9)
  %.ptr.10 = getelementptr inbounds i8, ptr %3, i64 120
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.10)
  %.ptr.11 = getelementptr inbounds i8, ptr %3, i64 132
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.11)
  %.ptr.12 = getelementptr inbounds i8, ptr %3, i64 144
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.12)
  %.ptr.13 = getelementptr inbounds i8, ptr %3, i64 156
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.13)
  %.ptr.14 = getelementptr inbounds i8, ptr %3, i64 168
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.14)
  %.ptr.15 = getelementptr inbounds i8, ptr %3, i64 180
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.15)
  %.ptr.16 = getelementptr inbounds i8, ptr %3, i64 192
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.16)
  %.ptr.17 = getelementptr inbounds i8, ptr %3, i64 204
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.17)
  %.ptr.18 = getelementptr inbounds i8, ptr %3, i64 216
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.18)
  %.ptr.19 = getelementptr inbounds i8, ptr %3, i64 228
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.19)
  %.ptr.20 = getelementptr inbounds i8, ptr %3, i64 240
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.20)
  %.ptr.21 = getelementptr inbounds i8, ptr %3, i64 252
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.21)
  %.ptr.22 = getelementptr inbounds i8, ptr %3, i64 264
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.22)
  %.ptr.23 = getelementptr inbounds i8, ptr %3, i64 276
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.23)
  call void @llvm.lifetime.start.p0(i64 288, ptr nonnull %4) #6
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %4)
  %.ptr129.1 = getelementptr inbounds i8, ptr %4, i64 12
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.1)
  %.ptr129.2 = getelementptr inbounds i8, ptr %4, i64 24
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.2)
  %.ptr129.3 = getelementptr inbounds i8, ptr %4, i64 36
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.3)
  %.ptr129.4 = getelementptr inbounds i8, ptr %4, i64 48
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.4)
  %.ptr129.5 = getelementptr inbounds i8, ptr %4, i64 60
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.5)
  %.ptr129.6 = getelementptr inbounds i8, ptr %4, i64 72
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.6)
  %.ptr129.7 = getelementptr inbounds i8, ptr %4, i64 84
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.7)
  %.ptr129.8 = getelementptr inbounds i8, ptr %4, i64 96
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.8)
  %.ptr129.9 = getelementptr inbounds i8, ptr %4, i64 108
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.9)
  %.ptr129.10 = getelementptr inbounds i8, ptr %4, i64 120
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.10)
  %.ptr129.11 = getelementptr inbounds i8, ptr %4, i64 132
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.11)
  %.ptr129.12 = getelementptr inbounds i8, ptr %4, i64 144
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.12)
  %.ptr129.13 = getelementptr inbounds i8, ptr %4, i64 156
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.13)
  %.ptr129.14 = getelementptr inbounds i8, ptr %4, i64 168
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.14)
  %.ptr129.15 = getelementptr inbounds i8, ptr %4, i64 180
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.15)
  %.ptr129.16 = getelementptr inbounds i8, ptr %4, i64 192
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.16)
  %.ptr129.17 = getelementptr inbounds i8, ptr %4, i64 204
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.17)
  %.ptr129.18 = getelementptr inbounds i8, ptr %4, i64 216
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.18)
  %.ptr129.19 = getelementptr inbounds i8, ptr %4, i64 228
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.19)
  %.ptr129.20 = getelementptr inbounds i8, ptr %4, i64 240
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.20)
  %.ptr129.21 = getelementptr inbounds i8, ptr %4, i64 252
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.21)
  %.ptr129.22 = getelementptr inbounds i8, ptr %4, i64 264
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.22)
  %.ptr129.23 = getelementptr inbounds i8, ptr %4, i64 276
  call void @_ZN3rmg4Vec3C2Ev(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.23)
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %5) #6
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %5)
  %.ptr133.1 = getelementptr inbounds i8, ptr %5, i64 8
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.1)
  %.ptr133.2 = getelementptr inbounds i8, ptr %5, i64 16
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.2)
  %.ptr133.3 = getelementptr inbounds i8, ptr %5, i64 24
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.3)
  %.ptr133.4 = getelementptr inbounds i8, ptr %5, i64 32
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.4)
  %.ptr133.5 = getelementptr inbounds i8, ptr %5, i64 40
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.5)
  %.ptr133.6 = getelementptr inbounds i8, ptr %5, i64 48
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.6)
  %.ptr133.7 = getelementptr inbounds i8, ptr %5, i64 56
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.7)
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.sroa.sel.v.sroa.gep)
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.sroa.sel.sroa.sel141.v.sroa.gep)
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.sroa.sel.sroa.sel138.v.sroa.gep)
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.sroa.sel.sroa.sel.v.sroa.gep)
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.sroa.sel.v.sroa.gep199)
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.sroa.sel.sroa.sel141.v.sroa.gep197)
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.sroa.sel.sroa.sel138.v.sroa.gep198)
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.sroa.sel.sroa.sel.v.sroa.gep200)
  %.ptr133.16 = getelementptr inbounds i8, ptr %5, i64 128
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.16)
  %.ptr133.17 = getelementptr inbounds i8, ptr %5, i64 136
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.17)
  %.ptr133.18 = getelementptr inbounds i8, ptr %5, i64 144
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.18)
  %.ptr133.19 = getelementptr inbounds i8, ptr %5, i64 152
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.19)
  %.ptr133.20 = getelementptr inbounds i8, ptr %5, i64 160
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.20)
  %.ptr133.21 = getelementptr inbounds i8, ptr %5, i64 168
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.21)
  %.ptr133.22 = getelementptr inbounds i8, ptr %5, i64 176
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.22)
  %.ptr133.23 = getelementptr inbounds i8, ptr %5, i64 184
  call void @_ZN3rmg4Vec2C2Ev(ptr noundef nonnull align 4 dereferenceable(8) %.ptr133.23)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %6) #6
  %38 = getelementptr inbounds i8, ptr %1, i64 216
  %39 = getelementptr inbounds i8, ptr %1, i64 220
  %40 = getelementptr inbounds i8, ptr %1, i64 224
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %7) #6
  %41 = load float, ptr %38, align 8, !tbaa !5
  %42 = fmul float %41, -5.000000e-01
  %43 = load float, ptr %39, align 4, !tbaa !20
  %44 = fmul float %43, -5.000000e-01
  %45 = load float, ptr %40, align 8, !tbaa !21
  %46 = fmul float %45, -5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %7, float noundef %42, float noundef %44, float noundef %46)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(12) %3, ptr noundef nonnull align 4 dereferenceable(12) %7, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #6
  %47 = load float, ptr %38, align 8, !tbaa !5
  %48 = fmul float %47, -5.000000e-01
  %49 = load float, ptr %39, align 4, !tbaa !20
  %50 = fmul float %49, -5.000000e-01
  %51 = load float, ptr %40, align 8, !tbaa !21
  %52 = fmul float %51, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %8, float noundef %48, float noundef %50, float noundef %52)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.1, ptr noundef nonnull align 4 dereferenceable(12) %8, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %9) #6
  %53 = load float, ptr %38, align 8, !tbaa !5
  %54 = fmul float %53, -5.000000e-01
  %55 = load float, ptr %39, align 4, !tbaa !20
  %56 = fmul float %55, 5.000000e-01
  %57 = load float, ptr %40, align 8, !tbaa !21
  %58 = fmul float %57, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %9, float noundef %54, float noundef %56, float noundef %58)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %.ptr.2, ptr noundef nonnull align 4 dereferenceable(12) %9, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #6
  %59 = load float, ptr %38, align 8, !tbaa !5
  %60 = fmul float %59, -5.000000e-01
  %61 = load float, ptr %39, align 4, !tbaa !20
  %62 = fmul float %61, 5.000000e-01
  %63 = load float, ptr %40, align 8, !tbaa !21
  %64 = fmul float %63, -5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %10, float noundef %60, float noundef %62, float noundef %64)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.ptr.3, ptr noundef nonnull align 4 dereferenceable(12) %10, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #6
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %11, float noundef -1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(12) %4, ptr noundef nonnull align 4 dereferenceable(12) %11, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.1, ptr noundef nonnull align 4 dereferenceable(12) %11, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %.ptr129.2, ptr noundef nonnull align 4 dereferenceable(12) %11, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.3, ptr noundef nonnull align 4 dereferenceable(12) %11, i64 12, i1 false), !tbaa.struct !22
  %65 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %1)
  %66 = icmp eq ptr %65, null
  br i1 %66, label %67, label %82

67:                                               ; preds = %2
  %68 = load float, ptr %39, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %69 = fadd float %68, 0.000000e+00
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %12, float noundef %69, float noundef %68)
  %70 = load i64, ptr %12, align 8, !tbaa !23
  store i64 %70, ptr %5, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  %71 = load float, ptr %39, align 4, !tbaa !20
  %72 = fadd float %71, 0.000000e+00
  %73 = load float, ptr %40, align 8, !tbaa !21
  %74 = fadd float %71, %73
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %13, float noundef %72, float noundef %74)
  %75 = load i64, ptr %13, align 8, !tbaa !23
  store i64 %75, ptr %.ptr133.1, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  %76 = load float, ptr %39, align 4, !tbaa !20
  %77 = load float, ptr %40, align 8, !tbaa !21
  %78 = fadd float %76, %77
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %14, float noundef 0.000000e+00, float noundef %78)
  %79 = load i64, ptr %14, align 8, !tbaa !23
  store i64 %79, ptr %.ptr133.2, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  %80 = load float, ptr %39, align 4, !tbaa !20
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %15, float noundef 0.000000e+00, float noundef %80)
  %81 = load i64, ptr %15, align 8, !tbaa !23
  store i64 %81, ptr %.ptr133.3, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  br label %82

82:                                               ; preds = %67, %2
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %7) #6
  %83 = load float, ptr %38, align 8, !tbaa !5
  %84 = fmul float %83, 5.000000e-01
  %85 = load float, ptr %39, align 4, !tbaa !20
  %86 = fmul float %85, 5.000000e-01
  %87 = load float, ptr %40, align 8, !tbaa !21
  %88 = fmul float %87, -5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %7, float noundef %84, float noundef %86, float noundef %88)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(12) %.ptr.4, ptr noundef nonnull align 4 dereferenceable(12) %7, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #6
  %89 = load float, ptr %38, align 8, !tbaa !5
  %90 = fmul float %89, 5.000000e-01
  %91 = load float, ptr %39, align 4, !tbaa !20
  %92 = fmul float %91, 5.000000e-01
  %93 = load float, ptr %40, align 8, !tbaa !21
  %94 = fmul float %93, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %8, float noundef %90, float noundef %92, float noundef %94)
  %95 = getelementptr inbounds i8, ptr %3, i64 60
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %95, ptr noundef nonnull align 4 dereferenceable(12) %8, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %9) #6
  %96 = load float, ptr %38, align 8, !tbaa !5
  %97 = fmul float %96, 5.000000e-01
  %98 = load float, ptr %39, align 4, !tbaa !20
  %99 = fmul float %98, -5.000000e-01
  %100 = load float, ptr %40, align 8, !tbaa !21
  %101 = fmul float %100, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %9, float noundef %97, float noundef %99, float noundef %101)
  %102 = getelementptr inbounds i8, ptr %3, i64 72
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %102, ptr noundef nonnull align 4 dereferenceable(12) %9, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #6
  %103 = load float, ptr %38, align 8, !tbaa !5
  %104 = fmul float %103, 5.000000e-01
  %105 = load float, ptr %39, align 4, !tbaa !20
  %106 = fmul float %105, -5.000000e-01
  %107 = load float, ptr %40, align 8, !tbaa !21
  %108 = fmul float %107, -5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %10, float noundef %104, float noundef %106, float noundef %108)
  %109 = getelementptr inbounds i8, ptr %3, i64 84
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %109, ptr noundef nonnull align 4 dereferenceable(12) %10, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #6
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %11, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(12) %.ptr129.4, ptr noundef nonnull align 4 dereferenceable(12) %11, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.5, ptr noundef nonnull align 4 dereferenceable(12) %11, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %.ptr129.6, ptr noundef nonnull align 4 dereferenceable(12) %11, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.ptr129.7, ptr noundef nonnull align 4 dereferenceable(12) %11, i64 12, i1 false), !tbaa.struct !22
  %110 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %1)
  %111 = icmp eq ptr %110, null
  br i1 %111, label %112, label %.preheader172

112:                                              ; preds = %82
  %113 = load float, ptr %38, align 8
  %114 = load float, ptr %39, align 4
  %115 = fadd float %113, %114
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %116 = fadd float %114, %115
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %12, float noundef %116, float noundef %114)
  %117 = load i64, ptr %12, align 8, !tbaa !23
  store i64 %117, ptr %.ptr133.4, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  %118 = load float, ptr %39, align 4, !tbaa !20
  %119 = fadd float %115, %118
  %120 = load float, ptr %40, align 8, !tbaa !21
  %121 = fadd float %118, %120
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %13, float noundef %119, float noundef %121)
  %122 = getelementptr inbounds i8, ptr %5, i64 40
  %123 = load i64, ptr %13, align 8, !tbaa !23
  store i64 %123, ptr %122, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  %124 = load float, ptr %39, align 4, !tbaa !20
  %125 = load float, ptr %40, align 8, !tbaa !21
  %126 = fadd float %124, %125
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %14, float noundef %115, float noundef %126)
  %127 = getelementptr inbounds i8, ptr %5, i64 48
  %128 = load i64, ptr %14, align 8, !tbaa !23
  store i64 %128, ptr %127, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  %129 = load float, ptr %39, align 4, !tbaa !20
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %15, float noundef %115, float noundef %129)
  %130 = getelementptr inbounds i8, ptr %5, i64 56
  %131 = load i64, ptr %15, align 8, !tbaa !23
  store i64 %131, ptr %130, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  br label %.preheader172

.preheader172:                                    ; preds = %112, %82
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #6
  br label %132

132:                                              ; preds = %.preheader172, %196
  %.0123176 = phi i32 [ -1, %.preheader172 ], [ %197, %196 ]
  %133 = icmp eq i32 %.0123176, -1
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %16) #6
  %134 = sub nsw i32 0, %.0123176
  %135 = sitofp i32 %134 to float
  %136 = load float, ptr %38, align 8, !tbaa !5
  %137 = fmul float %136, %135
  %138 = fmul float %137, 5.000000e-01
  %139 = sitofp i32 %.0123176 to float
  %140 = load float, ptr %39, align 4, !tbaa !20
  %141 = fmul float %140, %139
  %142 = fmul float %141, 5.000000e-01
  %143 = load float, ptr %40, align 8, !tbaa !21
  %144 = fmul float %143, -5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %16, float noundef %138, float noundef %142, float noundef %144)
  %.sroa.sel153.v.sroa.sel = select i1 %133, ptr %.ptr.8, ptr %.ptr.12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(12) %.sroa.sel153.v.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %16, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %17) #6
  %145 = load float, ptr %38, align 8, !tbaa !5
  %146 = fmul float %145, %135
  %147 = fmul float %146, 5.000000e-01
  %148 = load float, ptr %39, align 4, !tbaa !20
  %149 = fmul float %148, %139
  %150 = fmul float %149, 5.000000e-01
  %151 = load float, ptr %40, align 8, !tbaa !21
  %152 = fmul float %151, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %17, float noundef %147, float noundef %150, float noundef %152)
  %.sroa.sel153.sroa.sel159.v.sroa.sel = select i1 %133, ptr %.ptr.9, ptr %.ptr.13
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.sroa.sel153.sroa.sel159.v.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %17, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %18) #6
  %153 = load float, ptr %38, align 8, !tbaa !5
  %154 = fmul float %153, %139
  %155 = fmul float %154, 5.000000e-01
  %156 = load float, ptr %39, align 4, !tbaa !20
  %157 = fmul float %156, %139
  %158 = fmul float %157, 5.000000e-01
  %159 = load float, ptr %40, align 8, !tbaa !21
  %160 = fmul float %159, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %18, float noundef %155, float noundef %158, float noundef %160)
  %.sroa.sel153.sroa.sel156.v.sroa.sel = select i1 %133, ptr %.ptr.10, ptr %.ptr.14
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %.sroa.sel153.sroa.sel156.v.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %18, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %19) #6
  %161 = load float, ptr %38, align 8, !tbaa !5
  %162 = fmul float %161, %139
  %163 = fmul float %162, 5.000000e-01
  %164 = load float, ptr %39, align 4, !tbaa !20
  %165 = fmul float %164, %139
  %166 = fmul float %165, 5.000000e-01
  %167 = load float, ptr %40, align 8, !tbaa !21
  %168 = fmul float %167, -5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %19, float noundef %163, float noundef %166, float noundef %168)
  %.sroa.sel153.sroa.sel.v.sroa.sel = select i1 %133, ptr %.ptr.11, ptr %.ptr.15
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.sroa.sel153.sroa.sel.v.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %19, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %20) #6
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %20, float noundef 0.000000e+00, float noundef %139, float noundef 0.000000e+00)
  %.sroa.sel205 = select i1 %133, ptr %.ptr129.8, ptr %.ptr129.12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(12) %.sroa.sel205, ptr noundef nonnull align 4 dereferenceable(12) %20, i64 12, i1 false), !tbaa.struct !22
  %.sroa.sel208 = select i1 %133, ptr %.ptr129.9, ptr %.ptr129.13
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.sroa.sel208, ptr noundef nonnull align 4 dereferenceable(12) %20, i64 12, i1 false), !tbaa.struct !22
  %.sroa.sel211 = select i1 %133, ptr %.ptr129.10, ptr %.ptr129.14
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %.sroa.sel211, ptr noundef nonnull align 4 dereferenceable(12) %20, i64 12, i1 false), !tbaa.struct !22
  %.sroa.sel214 = select i1 %133, ptr %.ptr129.11, ptr %.ptr129.15
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.sroa.sel214, ptr noundef nonnull align 4 dereferenceable(12) %20, i64 12, i1 false), !tbaa.struct !22
  %169 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %1)
  %170 = icmp eq ptr %169, null
  br i1 %170, label %171, label %196

171:                                              ; preds = %132
  br i1 %133, label %172, label %174

172:                                              ; preds = %171
  %173 = load float, ptr %39, align 4, !tbaa !20
  %.pre = load float, ptr %38, align 8, !tbaa !5
  br label %178

174:                                              ; preds = %171
  %175 = load float, ptr %38, align 8, !tbaa !5
  %176 = load float, ptr %39, align 4, !tbaa !20
  %177 = call float @llvm.fmuladd.f32(float %176, float 2.000000e+00, float %175)
  br label %178

178:                                              ; preds = %174, %172
  %179 = phi float [ %173, %172 ], [ %176, %174 ]
  %180 = phi float [ %.pre, %172 ], [ %175, %174 ]
  %.sroa.sel.sroa.sel.v.sroa.phi = phi ptr [ %.sroa.sel.sroa.sel.v.sroa.gep, %172 ], [ %.sroa.sel.sroa.sel.v.sroa.gep200, %174 ]
  %.sroa.sel.v.sroa.phi = phi ptr [ %.sroa.sel.v.sroa.gep, %172 ], [ %.sroa.sel.v.sroa.gep199, %174 ]
  %.sroa.sel.sroa.sel138.v.sroa.phi = phi ptr [ %.sroa.sel.sroa.sel138.v.sroa.gep, %172 ], [ %.sroa.sel.sroa.sel138.v.sroa.gep198, %174 ]
  %.sroa.sel.sroa.sel141.v.sroa.phi = phi ptr [ %.sroa.sel.sroa.sel141.v.sroa.gep, %172 ], [ %.sroa.sel.sroa.sel141.v.sroa.gep197, %174 ]
  %181 = phi float [ %173, %172 ], [ %177, %174 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #6
  %182 = fadd float %181, %180
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %21, float noundef %182, float noundef %179)
  %183 = load i64, ptr %21, align 8, !tbaa !23
  store i64 %183, ptr %.sroa.sel.v.sroa.phi, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #6
  %184 = load float, ptr %38, align 8, !tbaa !5
  %185 = fadd float %181, %184
  %186 = load float, ptr %39, align 4, !tbaa !20
  %187 = load float, ptr %40, align 8, !tbaa !21
  %188 = fadd float %186, %187
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %22, float noundef %185, float noundef %188)
  %189 = load i64, ptr %22, align 8, !tbaa !23
  store i64 %189, ptr %.sroa.sel.sroa.sel141.v.sroa.phi, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  %190 = load float, ptr %39, align 4, !tbaa !20
  %191 = load float, ptr %40, align 8, !tbaa !21
  %192 = fadd float %190, %191
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %23, float noundef %181, float noundef %192)
  %193 = load i64, ptr %23, align 8, !tbaa !23
  store i64 %193, ptr %.sroa.sel.sroa.sel138.v.sroa.phi, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  %194 = load float, ptr %39, align 4, !tbaa !20
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %24, float noundef %181, float noundef %194)
  %195 = load i64, ptr %24, align 8, !tbaa !23
  store i64 %195, ptr %.sroa.sel.sroa.sel.v.sroa.phi, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  br label %196

196:                                              ; preds = %178, %132
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %20) #6
  %197 = add nsw i32 %.0123176, 2
  %198 = icmp slt i32 %.0123176, 0
  br i1 %198, label %132, label %.preheader171, !llvm.loop !24

199:                                              ; preds = %260
  %200 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %1)
  %201 = icmp eq ptr %200, null
  br i1 %201, label %.preheader169, label %.loopexit170

.preheader171:                                    ; preds = %196, %260
  %.0124178 = phi i32 [ %261, %260 ], [ -1, %196 ]
  %202 = icmp eq i32 %.0124178, -1
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %25) #6
  %203 = load float, ptr %38, align 8, !tbaa !5
  %204 = fmul float %203, 5.000000e-01
  %205 = sub nsw i32 0, %.0124178
  %206 = sitofp i32 %205 to float
  %207 = load float, ptr %39, align 4, !tbaa !20
  %208 = fmul float %207, %206
  %209 = fmul float %208, 5.000000e-01
  %210 = sitofp i32 %.0124178 to float
  %211 = load float, ptr %40, align 8, !tbaa !21
  %212 = fmul float %211, %210
  %213 = fmul float %212, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %25, float noundef %204, float noundef %209, float noundef %213)
  %.sroa.sel162.v.sroa.sel = select i1 %202, ptr %.ptr.16, ptr %.ptr.20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(12) %.sroa.sel162.v.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %25, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %26) #6
  %214 = load float, ptr %38, align 8, !tbaa !5
  %215 = fmul float %214, 5.000000e-01
  %216 = load float, ptr %39, align 4, !tbaa !20
  %217 = fmul float %216, %210
  %218 = fmul float %217, 5.000000e-01
  %219 = load float, ptr %40, align 8, !tbaa !21
  %220 = fmul float %219, %210
  %221 = fmul float %220, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %26, float noundef %215, float noundef %218, float noundef %221)
  %.sroa.sel162.sroa.sel168.v.sroa.sel = select i1 %202, ptr %.ptr.17, ptr %.ptr.21
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.sroa.sel162.sroa.sel168.v.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %26, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %27) #6
  %222 = load float, ptr %38, align 8, !tbaa !5
  %223 = fmul float %222, -5.000000e-01
  %224 = load float, ptr %39, align 4, !tbaa !20
  %225 = fmul float %224, %210
  %226 = fmul float %225, 5.000000e-01
  %227 = load float, ptr %40, align 8, !tbaa !21
  %228 = fmul float %227, %210
  %229 = fmul float %228, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %27, float noundef %223, float noundef %226, float noundef %229)
  %.sroa.sel162.sroa.sel165.v.sroa.sel = select i1 %202, ptr %.ptr.18, ptr %.ptr.22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %.sroa.sel162.sroa.sel165.v.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %27, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %28) #6
  %230 = load float, ptr %38, align 8, !tbaa !5
  %231 = fmul float %230, -5.000000e-01
  %232 = load float, ptr %39, align 4, !tbaa !20
  %233 = fmul float %232, %206
  %234 = fmul float %233, 5.000000e-01
  %235 = load float, ptr %40, align 8, !tbaa !21
  %236 = fmul float %235, %210
  %237 = fmul float %236, 5.000000e-01
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %28, float noundef %231, float noundef %234, float noundef %237)
  %.sroa.sel162.sroa.sel.v.sroa.sel = select i1 %202, ptr %.ptr.19, ptr %.ptr.23
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.sroa.sel162.sroa.sel.v.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %28, i64 12, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %29) #6
  call void @_ZN3rmg4Vec3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %29, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef %210)
  %.sroa.sel = select i1 %202, ptr %.ptr129.16, ptr %.ptr129.20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(12) %.sroa.sel, ptr noundef nonnull align 4 dereferenceable(12) %29, i64 12, i1 false), !tbaa.struct !22
  %.sroa.sel217 = select i1 %202, ptr %.ptr129.17, ptr %.ptr129.21
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.sroa.sel217, ptr noundef nonnull align 4 dereferenceable(12) %29, i64 12, i1 false), !tbaa.struct !22
  %.sroa.sel220 = select i1 %202, ptr %.ptr129.18, ptr %.ptr129.22
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %.sroa.sel220, ptr noundef nonnull align 4 dereferenceable(12) %29, i64 12, i1 false), !tbaa.struct !22
  %.sroa.sel223 = select i1 %202, ptr %.ptr129.19, ptr %.ptr129.23
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %.sroa.sel223, ptr noundef nonnull align 4 dereferenceable(12) %29, i64 12, i1 false), !tbaa.struct !22
  %238 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %1)
  %239 = icmp eq ptr %238, null
  br i1 %239, label %240, label %260

240:                                              ; preds = %.preheader171
  %241 = load float, ptr %39, align 4
  %242 = load float, ptr %38, align 8
  %243 = fadd float %241, %242
  %244 = select i1 %202, float %241, float %243
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #6
  %245 = fadd float %242, %244
  %246 = load float, ptr %40, align 8, !tbaa !21
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %30, float noundef %245, float noundef %246)
  %.sroa.sel144.v.sroa.sel = select i1 %202, ptr %.ptr133.16, ptr %.ptr133.20
  %247 = load i64, ptr %30, align 8, !tbaa !23
  store i64 %247, ptr %.sroa.sel144.v.sroa.sel, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #6
  %248 = load float, ptr %38, align 8, !tbaa !5
  %249 = fadd float %244, %248
  %250 = load float, ptr %40, align 8, !tbaa !21
  %251 = load float, ptr %39, align 4, !tbaa !20
  %252 = fadd float %250, %251
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %31, float noundef %249, float noundef %252)
  %.sroa.sel144.sroa.sel150.v.sroa.sel = select i1 %202, ptr %.ptr133.17, ptr %.ptr133.21
  %253 = load i64, ptr %31, align 8, !tbaa !23
  store i64 %253, ptr %.sroa.sel144.sroa.sel150.v.sroa.sel, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #6
  %254 = load float, ptr %40, align 8, !tbaa !21
  %255 = load float, ptr %39, align 4, !tbaa !20
  %256 = fadd float %254, %255
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %32, float noundef %244, float noundef %256)
  %.sroa.sel144.sroa.sel147.v.sroa.sel = select i1 %202, ptr %.ptr133.18, ptr %.ptr133.22
  %257 = load i64, ptr %32, align 8, !tbaa !23
  store i64 %257, ptr %.sroa.sel144.sroa.sel147.v.sroa.sel, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  %258 = load float, ptr %40, align 8, !tbaa !21
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %33, float noundef %244, float noundef %258)
  %.sroa.sel144.sroa.sel.v.sroa.sel = select i1 %202, ptr %.ptr133.19, ptr %.ptr133.23
  %259 = load i64, ptr %33, align 8, !tbaa !23
  store i64 %259, ptr %.sroa.sel144.sroa.sel.v.sroa.sel, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  br label %260

260:                                              ; preds = %240, %.preheader171
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %29) #6
  %261 = add nsw i32 %.0124178, 2
  %262 = icmp slt i32 %.0124178, 0
  br i1 %262, label %.preheader171, label %199, !llvm.loop !26

.preheader169:                                    ; preds = %199
  %263 = load float, ptr %39, align 4, !tbaa !20
  %264 = load float, ptr %38, align 8, !tbaa !5
  %265 = fadd float %263, %264
  %266 = fmul float %265, 2.000000e+00
  %267 = load float, ptr %40, align 8, !tbaa !21
  %268 = call float @llvm.fmuladd.f32(float %263, float 2.000000e+00, float %267)
  %269 = load <4 x float>, ptr %5, align 16, !tbaa !23
  %270 = insertelement <4 x float> poison, float %266, i64 0
  %271 = insertelement <4 x float> %270, float %268, i64 1
  %272 = shufflevector <4 x float> %271, <4 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %273 = fdiv <4 x float> %269, %272
  store <4 x float> %273, ptr %5, align 16, !tbaa !23
  %274 = load <4 x float>, ptr %.ptr133.2, align 16, !tbaa !23
  %275 = fdiv <4 x float> %274, %272
  store <4 x float> %275, ptr %.ptr133.2, align 16, !tbaa !23
  %276 = load <4 x float>, ptr %.ptr133.4, align 16, !tbaa !23
  %277 = fdiv <4 x float> %276, %272
  store <4 x float> %277, ptr %.ptr133.4, align 16, !tbaa !23
  %278 = load <4 x float>, ptr %.ptr133.6, align 16, !tbaa !23
  %279 = fdiv <4 x float> %278, %272
  store <4 x float> %279, ptr %.ptr133.6, align 16, !tbaa !23
  %280 = load <4 x float>, ptr %.sroa.sel.v.sroa.gep, align 16, !tbaa !23
  %281 = fdiv <4 x float> %280, %272
  store <4 x float> %281, ptr %.sroa.sel.v.sroa.gep, align 16, !tbaa !23
  %282 = load <4 x float>, ptr %.sroa.sel.sroa.sel138.v.sroa.gep, align 16, !tbaa !23
  %283 = fdiv <4 x float> %282, %272
  store <4 x float> %283, ptr %.sroa.sel.sroa.sel138.v.sroa.gep, align 16, !tbaa !23
  %284 = load <4 x float>, ptr %.sroa.sel.v.sroa.gep199, align 16, !tbaa !23
  %285 = fdiv <4 x float> %284, %272
  store <4 x float> %285, ptr %.sroa.sel.v.sroa.gep199, align 16, !tbaa !23
  %286 = load <4 x float>, ptr %.sroa.sel.sroa.sel138.v.sroa.gep198, align 16, !tbaa !23
  %287 = fdiv <4 x float> %286, %272
  store <4 x float> %287, ptr %.sroa.sel.sroa.sel138.v.sroa.gep198, align 16, !tbaa !23
  %288 = load <4 x float>, ptr %.ptr133.16, align 16, !tbaa !23
  %289 = fdiv <4 x float> %288, %272
  store <4 x float> %289, ptr %.ptr133.16, align 16, !tbaa !23
  %290 = load <4 x float>, ptr %.ptr133.18, align 16, !tbaa !23
  %291 = fdiv <4 x float> %290, %272
  store <4 x float> %291, ptr %.ptr133.18, align 16, !tbaa !23
  %292 = load <4 x float>, ptr %.ptr133.20, align 16, !tbaa !23
  %293 = fdiv <4 x float> %292, %272
  store <4 x float> %293, ptr %.ptr133.20, align 16, !tbaa !23
  %294 = load <4 x float>, ptr %.ptr133.22, align 16, !tbaa !23
  %295 = fdiv <4 x float> %294, %272
  store <4 x float> %295, ptr %.ptr133.22, align 16, !tbaa !23
  br label %.loopexit170

.loopexit170:                                     ; preds = %.preheader169, %199
  %296 = call noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216) %1)
  %.not = icmp eq ptr %296, null
  br i1 %.not, label %.loopexit, label %.preheader.preheader

.preheader.preheader:                             ; preds = %.loopexit170
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %297 = load i64, ptr %34, align 8, !tbaa !23
  store i64 %297, ptr %5, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %298 = load i64, ptr %35, align 8, !tbaa !23
  store i64 %298, ptr %.ptr133.1, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %36, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %299 = load i64, ptr %36, align 8, !tbaa !23
  store i64 %299, ptr %.ptr133.2, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %300 = load i64, ptr %37, align 8, !tbaa !23
  store i64 %300, ptr %.ptr133.3, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %301 = load i64, ptr %34, align 8, !tbaa !23
  store i64 %301, ptr %.ptr133.4, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %302 = getelementptr inbounds i8, ptr %5, i64 40
  %303 = load i64, ptr %35, align 8, !tbaa !23
  store i64 %303, ptr %302, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %36, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %304 = getelementptr inbounds i8, ptr %5, i64 48
  %305 = load i64, ptr %36, align 8, !tbaa !23
  store i64 %305, ptr %304, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %306 = getelementptr inbounds i8, ptr %5, i64 56
  %307 = load i64, ptr %37, align 8, !tbaa !23
  store i64 %307, ptr %306, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %308 = load i64, ptr %34, align 8, !tbaa !23
  store i64 %308, ptr %.sroa.sel.v.sroa.gep, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %309 = getelementptr inbounds i8, ptr %5, i64 72
  %310 = load i64, ptr %35, align 8, !tbaa !23
  store i64 %310, ptr %309, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %36, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %311 = getelementptr inbounds i8, ptr %5, i64 80
  %312 = load i64, ptr %36, align 8, !tbaa !23
  store i64 %312, ptr %311, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %313 = getelementptr inbounds i8, ptr %5, i64 88
  %314 = load i64, ptr %37, align 8, !tbaa !23
  store i64 %314, ptr %313, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %315 = load i64, ptr %34, align 8, !tbaa !23
  store i64 %315, ptr %.sroa.sel.v.sroa.gep199, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %316 = getelementptr inbounds i8, ptr %5, i64 104
  %317 = load i64, ptr %35, align 8, !tbaa !23
  store i64 %317, ptr %316, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %36, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %318 = getelementptr inbounds i8, ptr %5, i64 112
  %319 = load i64, ptr %36, align 8, !tbaa !23
  store i64 %319, ptr %318, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %320 = getelementptr inbounds i8, ptr %5, i64 120
  %321 = load i64, ptr %37, align 8, !tbaa !23
  store i64 %321, ptr %320, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %322 = load i64, ptr %34, align 8, !tbaa !23
  store i64 %322, ptr %.ptr133.16, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %323 = getelementptr inbounds i8, ptr %5, i64 136
  %324 = load i64, ptr %35, align 8, !tbaa !23
  store i64 %324, ptr %323, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %36, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %325 = getelementptr inbounds i8, ptr %5, i64 144
  %326 = load i64, ptr %36, align 8, !tbaa !23
  store i64 %326, ptr %325, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %327 = getelementptr inbounds i8, ptr %5, i64 152
  %328 = load i64, ptr %37, align 8, !tbaa !23
  store i64 %328, ptr %327, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %329 = load i64, ptr %34, align 8, !tbaa !23
  store i64 %329, ptr %.ptr133.20, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %330 = getelementptr inbounds i8, ptr %5, i64 168
  %331 = load i64, ptr %35, align 8, !tbaa !23
  store i64 %331, ptr %330, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %36, float noundef 0.000000e+00, float noundef 1.000000e+00)
  %332 = getelementptr inbounds i8, ptr %5, i64 176
  %333 = load i64, ptr %36, align 8, !tbaa !23
  store i64 %333, ptr %332, align 16, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @_ZN3rmg4Vec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %334 = getelementptr inbounds i8, ptr %5, i64 184
  %335 = load i64, ptr %37, align 8, !tbaa !23
  store i64 %335, ptr %334, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader.preheader, %.loopexit170
  store <4 x i32> <i32 0, i32 1, i32 2, i32 2>, ptr %6, align 16, !tbaa !27
  %336 = getelementptr inbounds i8, ptr %6, i64 16
  store <4 x i32> <i32 3, i32 0, i32 4, i32 5>, ptr %336, align 16, !tbaa !27
  %337 = getelementptr inbounds i8, ptr %6, i64 32
  store <4 x i32> <i32 6, i32 6, i32 7, i32 4>, ptr %337, align 16, !tbaa !27
  %338 = getelementptr inbounds i8, ptr %6, i64 48
  store <4 x i32> <i32 8, i32 9, i32 10, i32 10>, ptr %338, align 16, !tbaa !27
  %339 = getelementptr inbounds i8, ptr %6, i64 64
  store <4 x i32> <i32 11, i32 8, i32 12, i32 13>, ptr %339, align 16, !tbaa !27
  %340 = getelementptr inbounds i8, ptr %6, i64 80
  store <4 x i32> <i32 14, i32 14, i32 15, i32 12>, ptr %340, align 16, !tbaa !27
  %341 = getelementptr inbounds i8, ptr %6, i64 96
  store <4 x i32> <i32 16, i32 17, i32 18, i32 18>, ptr %341, align 16, !tbaa !27
  %342 = getelementptr inbounds i8, ptr %6, i64 112
  store <4 x i32> <i32 19, i32 16, i32 20, i32 21>, ptr %342, align 16, !tbaa !27
  %343 = getelementptr inbounds i8, ptr %6, i64 128
  store <4 x i32> <i32 22, i32 22, i32 23, i32 20>, ptr %343, align 16, !tbaa !27
  call void @_ZN3rmg4MeshC1EPKNS_4Vec3ES3_PKNS_4Vec2EjPKjj(ptr noundef nonnull align 8 dereferenceable(52) %0, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, i32 noundef 24, ptr noundef nonnull %6, i32 noundef 36)
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 288, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 288, ptr nonnull %3) #6
  ret void
}

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

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

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

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

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

declare noundef ptr @_ZNK3rmg8Object3D11getMaterialEv(ptr noundef nonnull align 8 dereferenceable(216)) local_unnamed_addr #4

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

declare void @_ZN3rmg4MeshC1EPKNS_4Vec3ES3_PKNS_4Vec2EjPKjj(ptr noundef nonnull align 8 dereferenceable(52), ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) unnamed_addr #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !14, i64 216}
!6 = !{!"_ZTSN3rmg6Cube3DE", !7, i64 0, !14, i64 216, !14, i64 220, !14, i64 224}
!7 = !{!"_ZTSN3rmg8Object3DE", !8, i64 0, !17, i64 48, !18, i64 112, !12, i64 128, !14, i64 136, !14, i64 140, !14, i64 144, !12, i64 152, !12, i64 160, !19, i64 168, !12, i64 184, !12, i64 192, !19, i64 200}
!8 = !{!"_ZTSN3rmg6ObjectE", !9, i64 8, !12, i64 16, !13, i64 24, !15, i64 40, !16, i64 44}
!9 = !{!"long", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"any pointer", !10, i64 0}
!13 = !{!"_ZTSN3rmg9ColorRGBAE", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12}
!14 = !{!"float", !10, i64 0}
!15 = !{!"bool", !10, i64 0}
!16 = !{!"_ZTSN3rmg10ObjectTypeE", !10, i64 0}
!17 = !{!"_ZTSN3rmg4Mat4E", !10, i64 0}
!18 = !{!"_ZTSN3rmg4Vec3E", !10, i64 0}
!19 = !{!"_ZTSN3rmg8internal7PendingE", !12, i64 0, !12, i64 8}
!20 = !{!6, !14, i64 220}
!21 = !{!6, !14, i64 224}
!22 = !{i64 0, i64 12, !23}
!23 = !{!10, !10, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!28, !28, i64 0}
!28 = !{!"int", !10, i64 0}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass