; LLVM IR from aap/librw :: src/d3d/d3d9.ll (ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi)

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

%"struct.rw::d3d9::VertexElement" = type { i16, i16, i8, i8, i8, i8 }
%"struct.rw::d3d9::InstanceDataHeader" = type { %"struct.rw::InstanceDataHeader", i32, i32, ptr, i32, [2 x %"struct.rw::d3d9::VertexStream"], i32, ptr, i32, i32, ptr }
%"struct.rw::InstanceDataHeader" = type { i32 }
%"struct.rw::d3d9::VertexStream" = type { ptr, i32, i32, i16, i8, i8 }
%"struct.rw::Geometry" = type { %"struct.rw::Object", i32, i16, i32, i32, i32, i32, ptr, ptr, [8 x ptr], ptr, %"struct.rw::MaterialList", ptr, ptr, i32 }
%"struct.rw::Object" = type { i8, i8, i8, i8, ptr }
%"struct.rw::MaterialList" = type { ptr, i32, i32 }
%"struct.rw::MorphTarget" = type { ptr, %"struct.rw::Sphere", ptr, ptr }
%"struct.rw::Sphere" = type { %"struct.rw::V3d", float }
%"struct.rw::V3d" = type { float, float, float }
%"struct.rw::d3d9::InstanceData" = type { i32, i32, ptr, i32, ptr, i32, i32, i32, i32 }
%"struct.rw::RGBA" = type { i8, i8, i8, i8 }

@.str.2 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__._ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi = external hidden unnamed_addr constant [75 x i8], align 1
@_ZN2rw4d3d9L11_d3ddec_endE = external hidden global %"struct.rw::d3d9::VertexElement", align 2
@.str.12 = external hidden unnamed_addr constant [33 x i8], align 1
@_ZN2rw3d3d13vertFormatMapE = external global [0 x i32], align 4

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN2rw4d3d923createVertexDeclarationEPNS0_13VertexElementE(ptr noundef) #0

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN2rw4d3d914getDeclarationEPvPNS0_13VertexElementE(ptr noundef, ptr noundef) #3

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

declare noundef ptr @_ZN2rw3d3d18createVertexBufferEjjb(i32 noundef, i32 noundef, i1 noundef zeroext) #5

declare noundef ptr @_ZN2rw3d3d12lockVerticesEPvjjj(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #5

declare void @_ZN2rw3d3d14unlockVerticesEPv(ptr noundef) #5

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi(ptr noundef %0, ptr noundef %1, i32 noundef %2) #0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca [12 x %"struct.rw::d3d9::VertexElement"], align 16
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i16, align 2
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  store i32 0, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 96, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %19 = load ptr, ptr %5, align 8, !tbaa !5
  %20 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %19, i32 0, i32 5
  %21 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %20, i64 0, i64 0
  store ptr %21, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #6
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = getelementptr inbounds %"struct.rw::Geometry", ptr %22, i32 0, i32 1
  %24 = load i32, ptr %23, align 8, !tbaa !11
  %25 = and i32 %24, 8
  %26 = icmp ne i32 %25, 0
  %27 = zext i1 %26 to i8
  store i8 %27, ptr %10, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #6
  %28 = load ptr, ptr %4, align 8, !tbaa !5
  %29 = getelementptr inbounds %"struct.rw::Geometry", ptr %28, i32 0, i32 1
  %30 = load i32, ptr %29, align 8, !tbaa !11
  %31 = and i32 %30, 16
  %32 = icmp ne i32 %31, 0
  %33 = zext i1 %32 to i8
  store i8 %33, ptr %11, align 1, !tbaa !16
  %34 = load i32, ptr %6, align 4, !tbaa !9
  %35 = icmp ne i32 %34, 0
  br i1 %35, label %319, label %36

36:                                               ; preds = %3
  %37 = load ptr, ptr %9, align 8, !tbaa !5
  %38 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %37, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !18
  %40 = icmp eq ptr %39, null
  br i1 %40, label %41, label %42

41:                                               ; preds = %36
  br label %44

42:                                               ; preds = %36
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 502, ptr noundef @__PRETTY_FUNCTION__._ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi) #7
  unreachable

43:                                               ; No predecessors!
  br label %44

44:                                               ; preds = %43, %41
  %45 = load ptr, ptr %9, align 8, !tbaa !5
  %46 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %45, i32 0, i32 1
  store i32 0, ptr %46, align 8, !tbaa !20
  %47 = load ptr, ptr %9, align 8, !tbaa !5
  %48 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %47, i32 0, i32 4
  store i8 1, ptr %48, align 2, !tbaa !21
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %49, i32 0, i32 3
  store i16 0, ptr %50, align 8, !tbaa !22
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %51, i32 0, i32 5
  store i8 0, ptr %52, align 1, !tbaa !23
  %53 = load i32, ptr %7, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %54
  %56 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %55, i32 0, i32 0
  store i16 0, ptr %56, align 8, !tbaa !24
  %57 = load i32, ptr %7, align 4, !tbaa !9
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %58
  %60 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %59, i32 0, i32 1
  store i16 0, ptr %60, align 2, !tbaa !26
  %61 = load i32, ptr %7, align 4, !tbaa !9
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %62
  %64 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %63, i32 0, i32 2
  store i8 2, ptr %64, align 4, !tbaa !27
  %65 = load i32, ptr %7, align 4, !tbaa !9
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %66
  %68 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %67, i32 0, i32 3
  store i8 0, ptr %68, align 1, !tbaa !28
  %69 = load i32, ptr %7, align 4, !tbaa !9
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %70
  %72 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %71, i32 0, i32 4
  store i8 0, ptr %72, align 2, !tbaa !29
  %73 = load i32, ptr %7, align 4, !tbaa !9
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %74
  %76 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %75, i32 0, i32 5
  store i8 0, ptr %76, align 1, !tbaa !30
  %77 = load i32, ptr %7, align 4, !tbaa !9
  %78 = add nsw i32 %77, 1
  store i32 %78, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %12) #6
  store i16 12, ptr %12, align 2, !tbaa !31
  %79 = load ptr, ptr %9, align 8, !tbaa !5
  %80 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %79, i32 0, i32 3
  %81 = load i16, ptr %80, align 8, !tbaa !22
  %82 = zext i16 %81 to i32
  %83 = or i32 %82, 2
  %84 = trunc i32 %83 to i16
  store i16 %84, ptr %80, align 8, !tbaa !22
  %85 = load i8, ptr %10, align 1, !tbaa !16, !range !32, !noundef !33
  %86 = trunc i8 %85 to i1
  br i1 %86, label %87, label %125

87:                                               ; preds = %44
  %88 = load i32, ptr %7, align 4, !tbaa !9
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %89
  %91 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %90, i32 0, i32 0
  store i16 0, ptr %91, align 8, !tbaa !24
  %92 = load i16, ptr %12, align 2, !tbaa !31
  %93 = load i32, ptr %7, align 4, !tbaa !9
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %94
  %96 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %95, i32 0, i32 1
  store i16 %92, ptr %96, align 2, !tbaa !26
  %97 = load i32, ptr %7, align 4, !tbaa !9
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %98
  %100 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %99, i32 0, i32 2
  store i8 4, ptr %100, align 4, !tbaa !27
  %101 = load i32, ptr %7, align 4, !tbaa !9
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %102
  %104 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %103, i32 0, i32 3
  store i8 0, ptr %104, align 1, !tbaa !28
  %105 = load i32, ptr %7, align 4, !tbaa !9
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %106
  %108 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %107, i32 0, i32 4
  store i8 10, ptr %108, align 2, !tbaa !29
  %109 = load i32, ptr %7, align 4, !tbaa !9
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %110
  %112 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %111, i32 0, i32 5
  store i8 0, ptr %112, align 1, !tbaa !30
  %113 = load i32, ptr %7, align 4, !tbaa !9
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr %7, align 4, !tbaa !9
  %115 = load ptr, ptr %9, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %115, i32 0, i32 3
  %117 = load i16, ptr %116, align 8, !tbaa !22
  %118 = zext i16 %117 to i32
  %119 = or i32 %118, 8
  %120 = trunc i32 %119 to i16
  store i16 %120, ptr %116, align 8, !tbaa !22
  %121 = load i16, ptr %12, align 2, !tbaa !31
  %122 = zext i16 %121 to i32
  %123 = add nsw i32 %122, 4
  %124 = trunc i32 %123 to i16
  store i16 %124, ptr %12, align 2, !tbaa !31
  br label %125

125:                                              ; preds = %87, %44
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %175, %125
  %127 = load i32, ptr %13, align 4, !tbaa !9
  %128 = load ptr, ptr %4, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.rw::Geometry", ptr %128, i32 0, i32 6
  %130 = load i32, ptr %129, align 4, !tbaa !34
  %131 = icmp slt i32 %127, %130
  br i1 %131, label %133, label %132

132:                                              ; preds = %126
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  br label %178

133:                                              ; preds = %126
  %134 = load i32, ptr %7, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %135
  %137 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %136, i32 0, i32 0
  store i16 0, ptr %137, align 8, !tbaa !24
  %138 = load i16, ptr %12, align 2, !tbaa !31
  %139 = load i32, ptr %7, align 4, !tbaa !9
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %140
  %142 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %141, i32 0, i32 1
  store i16 %138, ptr %142, align 2, !tbaa !26
  %143 = load i32, ptr %7, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %144
  %146 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %145, i32 0, i32 2
  store i8 1, ptr %146, align 4, !tbaa !27
  %147 = load i32, ptr %7, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %148
  %150 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %149, i32 0, i32 3
  store i8 0, ptr %150, align 1, !tbaa !28
  %151 = load i32, ptr %7, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %152
  %154 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %153, i32 0, i32 4
  store i8 5, ptr %154, align 2, !tbaa !29
  %155 = load i32, ptr %13, align 4, !tbaa !9
  %156 = trunc i32 %155 to i8
  %157 = load i32, ptr %7, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %158
  %160 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %159, i32 0, i32 5
  store i8 %156, ptr %160, align 1, !tbaa !30
  %161 = load i32, ptr %7, align 4, !tbaa !9
  %162 = add nsw i32 %161, 1
  store i32 %162, ptr %7, align 4, !tbaa !9
  %163 = load i32, ptr %13, align 4, !tbaa !9
  %164 = shl i32 16, %163
  %165 = load ptr, ptr %9, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %165, i32 0, i32 3
  %167 = load i16, ptr %166, align 8, !tbaa !22
  %168 = zext i16 %167 to i32
  %169 = or i32 %168, %164
  %170 = trunc i32 %169 to i16
  store i16 %170, ptr %166, align 8, !tbaa !22
  %171 = load i16, ptr %12, align 2, !tbaa !31
  %172 = zext i16 %171 to i32
  %173 = add nsw i32 %172, 8
  %174 = trunc i32 %173 to i16
  store i16 %174, ptr %12, align 2, !tbaa !31
  br label %175

175:                                              ; preds = %133
  %176 = load i32, ptr %13, align 4, !tbaa !9
  %177 = add nsw i32 %176, 1
  store i32 %177, ptr %13, align 4, !tbaa !9
  br label %126, !llvm.loop !35

178:                                              ; preds = %132
  %179 = load i8, ptr %11, align 1, !tbaa !16, !range !32, !noundef !33
  %180 = trunc i8 %179 to i1
  br i1 %180, label %181, label %219

181:                                              ; preds = %178
  %182 = load i32, ptr %7, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %183
  %185 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %184, i32 0, i32 0
  store i16 0, ptr %185, align 8, !tbaa !24
  %186 = load i16, ptr %12, align 2, !tbaa !31
  %187 = load i32, ptr %7, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %188
  %190 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %189, i32 0, i32 1
  store i16 %186, ptr %190, align 2, !tbaa !26
  %191 = load i32, ptr %7, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %192
  %194 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %193, i32 0, i32 2
  store i8 2, ptr %194, align 4, !tbaa !27
  %195 = load i32, ptr %7, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %196
  %198 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %197, i32 0, i32 3
  store i8 0, ptr %198, align 1, !tbaa !28
  %199 = load i32, ptr %7, align 4, !tbaa !9
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %200
  %202 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %201, i32 0, i32 4
  store i8 3, ptr %202, align 2, !tbaa !29
  %203 = load i32, ptr %7, align 4, !tbaa !9
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %204
  %206 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %205, i32 0, i32 5
  store i8 0, ptr %206, align 1, !tbaa !30
  %207 = load i32, ptr %7, align 4, !tbaa !9
  %208 = add nsw i32 %207, 1
  store i32 %208, ptr %7, align 4, !tbaa !9
  %209 = load ptr, ptr %9, align 8, !tbaa !5
  %210 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %209, i32 0, i32 3
  %211 = load i16, ptr %210, align 8, !tbaa !22
  %212 = zext i16 %211 to i32
  %213 = or i32 %212, 4
  %214 = trunc i32 %213 to i16
  store i16 %214, ptr %210, align 8, !tbaa !22
  %215 = load i16, ptr %12, align 2, !tbaa !31
  %216 = zext i16 %215 to i32
  %217 = add nsw i32 %216, 12
  %218 = trunc i32 %217 to i16
  store i16 %218, ptr %12, align 2, !tbaa !31
  br label %219

219:                                              ; preds = %181, %178
  %220 = load i8, ptr %10, align 1, !tbaa !16, !range !32, !noundef !33
  %221 = trunc i8 %220 to i1
  br i1 %221, label %249, label %222

222:                                              ; preds = %219
  %223 = load i32, ptr %7, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %224
  %226 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %225, i32 0, i32 0
  store i16 2, ptr %226, align 8, !tbaa !24
  %227 = load i32, ptr %7, align 4, !tbaa !9
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %228
  %230 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %229, i32 0, i32 1
  store i16 12, ptr %230, align 2, !tbaa !26
  %231 = load i32, ptr %7, align 4, !tbaa !9
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %232
  %234 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %233, i32 0, i32 2
  store i8 4, ptr %234, align 4, !tbaa !27
  %235 = load i32, ptr %7, align 4, !tbaa !9
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %236
  %238 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %237, i32 0, i32 3
  store i8 0, ptr %238, align 1, !tbaa !28
  %239 = load i32, ptr %7, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %240
  %242 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %241, i32 0, i32 4
  store i8 10, ptr %242, align 2, !tbaa !29
  %243 = load i32, ptr %7, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %244
  %246 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %245, i32 0, i32 5
  store i8 0, ptr %246, align 1, !tbaa !30
  %247 = load i32, ptr %7, align 4, !tbaa !9
  %248 = add nsw i32 %247, 1
  store i32 %248, ptr %7, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %222, %219
  %250 = load ptr, ptr %4, align 8, !tbaa !5
  %251 = getelementptr inbounds %"struct.rw::Geometry", ptr %250, i32 0, i32 6
  %252 = load i32, ptr %251, align 4, !tbaa !34
  %253 = icmp eq i32 %252, 0
  br i1 %253, label %254, label %281

254:                                              ; preds = %249
  %255 = load i32, ptr %7, align 4, !tbaa !9
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %256
  %258 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %257, i32 0, i32 0
  store i16 2, ptr %258, align 8, !tbaa !24
  %259 = load i32, ptr %7, align 4, !tbaa !9
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %260
  %262 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %261, i32 0, i32 1
  store i16 16, ptr %262, align 2, !tbaa !26
  %263 = load i32, ptr %7, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %264
  %266 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %265, i32 0, i32 2
  store i8 1, ptr %266, align 4, !tbaa !27
  %267 = load i32, ptr %7, align 4, !tbaa !9
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %268
  %270 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %269, i32 0, i32 3
  store i8 0, ptr %270, align 1, !tbaa !28
  %271 = load i32, ptr %7, align 4, !tbaa !9
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %272
  %274 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %273, i32 0, i32 4
  store i8 5, ptr %274, align 2, !tbaa !29
  %275 = load i32, ptr %7, align 4, !tbaa !9
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %276
  %278 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %277, i32 0, i32 5
  store i8 0, ptr %278, align 1, !tbaa !30
  %279 = load i32, ptr %7, align 4, !tbaa !9
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %7, align 4, !tbaa !9
  br label %281

281:                                              ; preds = %254, %249
  %282 = load i32, ptr %7, align 4, !tbaa !9
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %283
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %284, ptr align 2 @_ZN2rw4d3d9L11_d3ddec_endE, i64 8, i1 false), !tbaa.struct !37
  %285 = load i16, ptr %12, align 2, !tbaa !31
  %286 = zext i16 %285 to i32
  %287 = load ptr, ptr %9, align 8, !tbaa !5
  %288 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %287, i32 0, i32 2
  store i32 %286, ptr %288, align 4, !tbaa !39
  %289 = load ptr, ptr %5, align 8, !tbaa !5
  %290 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %289, i32 0, i32 7
  %291 = load ptr, ptr %290, align 8, !tbaa !40
  %292 = icmp eq ptr %291, null
  br i1 %292, label %293, label %294

293:                                              ; preds = %281
  br label %296

294:                                              ; preds = %281
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.2, i32 noundef 577, ptr noundef @__PRETTY_FUNCTION__._ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi) #7
  unreachable

295:                                              ; No predecessors!
  br label %296

296:                                              ; preds = %295, %293
  %297 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 0
  %298 = call noundef ptr @_ZN2rw4d3d923createVertexDeclarationEPNS0_13VertexElementE(ptr noundef %297)
  %299 = load ptr, ptr %5, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %299, i32 0, i32 7
  store ptr %298, ptr %300, align 8, !tbaa !40
  %301 = load ptr, ptr %9, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %301, i32 0, i32 0
  %303 = load ptr, ptr %302, align 8, !tbaa !18
  %304 = icmp eq ptr %303, null
  br i1 %304, label %305, label %306

305:                                              ; preds = %296
  br label %308

306:                                              ; preds = %296
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 580, ptr noundef @__PRETTY_FUNCTION__._ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi) #7
  unreachable

307:                                              ; No predecessors!
  br label %308

308:                                              ; preds = %307, %305
  %309 = load ptr, ptr %5, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %309, i32 0, i32 9
  %311 = load i32, ptr %310, align 4, !tbaa !43
  %312 = load ptr, ptr %9, align 8, !tbaa !5
  %313 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %312, i32 0, i32 2
  %314 = load i32, ptr %313, align 4, !tbaa !39
  %315 = mul i32 %311, %314
  %316 = call noundef ptr @_ZN2rw3d3d18createVertexBufferEjjb(i32 noundef %315, i32 noundef 0, i1 noundef zeroext false)
  %317 = load ptr, ptr %9, align 8, !tbaa !5
  %318 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %317, i32 0, i32 0
  store ptr %316, ptr %318, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #6
  br label %325

319:                                              ; preds = %3
  %320 = load ptr, ptr %5, align 8, !tbaa !5
  %321 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %320, i32 0, i32 7
  %322 = load ptr, ptr %321, align 8, !tbaa !40
  %323 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 0
  %324 = call noundef i32 @_ZN2rw4d3d914getDeclarationEPvPNS0_13VertexElementE(ptr noundef %322, ptr noundef %323)
  br label %325

325:                                              ; preds = %319, %308
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %326 = load ptr, ptr %9, align 8, !tbaa !5
  %327 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %326, i32 0, i32 0
  %328 = load ptr, ptr %327, align 8, !tbaa !18
  %329 = call noundef ptr @_ZN2rw3d3d12lockVerticesEPvjjj(ptr noundef %328, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  store ptr %329, ptr %14, align 8, !tbaa !5
  %330 = load i32, ptr %6, align 4, !tbaa !9
  %331 = icmp ne i32 %330, 0
  br i1 %331, label %332, label %339

332:                                              ; preds = %325
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  %334 = getelementptr inbounds %"struct.rw::Geometry", ptr %333, i32 0, i32 2
  %335 = load i16, ptr %334, align 4, !tbaa !44
  %336 = zext i16 %335 to i32
  %337 = and i32 %336, 2
  %338 = icmp ne i32 %337, 0
  br i1 %338, label %339, label %400

339:                                              ; preds = %332, %325
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %340

340:                                              ; preds = %359, %339
  %341 = load i32, ptr %7, align 4, !tbaa !9
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %342
  %344 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %343, i32 0, i32 4
  %345 = load i8, ptr %344, align 2, !tbaa !29
  %346 = zext i8 %345 to i32
  %347 = icmp ne i32 %346, 0
  br i1 %347, label %356, label %348

348:                                              ; preds = %340
  %349 = load i32, ptr %7, align 4, !tbaa !9
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %350
  %352 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %351, i32 0, i32 5
  %353 = load i8, ptr %352, align 1, !tbaa !30
  %354 = zext i8 %353 to i32
  %355 = icmp ne i32 %354, 0
  br label %356

356:                                              ; preds = %348, %340
  %357 = phi i1 [ true, %340 ], [ %355, %348 ]
  br i1 %357, label %358, label %362

358:                                              ; preds = %356
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %7, align 4, !tbaa !9
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %7, align 4, !tbaa !9
  br label %340, !llvm.loop !45

362:                                              ; preds = %356
  %363 = load i32, ptr %7, align 4, !tbaa !9
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %364
  %366 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %365, i32 0, i32 2
  %367 = load i8, ptr %366, align 4, !tbaa !27
  %368 = zext i8 %367 to i64
  %369 = getelementptr inbounds [0 x i32], ptr @_ZN2rw3d3d13vertFormatMapE, i64 0, i64 %368
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = load ptr, ptr %14, align 8, !tbaa !5
  %372 = load i32, ptr %7, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %373
  %375 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %374, i32 0, i32 1
  %376 = load i16, ptr %375, align 2, !tbaa !26
  %377 = zext i16 %376 to i32
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds i8, ptr %371, i64 %378
  %380 = load ptr, ptr %4, align 8, !tbaa !5
  %381 = getelementptr inbounds %"struct.rw::Geometry", ptr %380, i32 0, i32 10
  %382 = load ptr, ptr %381, align 8, !tbaa !46
  %383 = getelementptr inbounds %"struct.rw::MorphTarget", ptr %382, i64 0
  %384 = getelementptr inbounds %"struct.rw::MorphTarget", ptr %383, i32 0, i32 2
  %385 = load ptr, ptr %384, align 8, !tbaa !47
  %386 = load ptr, ptr %5, align 8, !tbaa !5
  %387 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %386, i32 0, i32 9
  %388 = load i32, ptr %387, align 4, !tbaa !43
  %389 = load ptr, ptr %5, align 8, !tbaa !5
  %390 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %389, i32 0, i32 5
  %391 = load i32, ptr %7, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %392
  %394 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %393, i32 0, i32 0
  %395 = load i16, ptr %394, align 8, !tbaa !24
  %396 = zext i16 %395 to i64
  %397 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %390, i64 0, i64 %396
  %398 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %397, i32 0, i32 2
  %399 = load i32, ptr %398, align 4, !tbaa !39
  call void @_ZN2rw7instV3dEiPhPNS_3V3dEjj(i32 noundef %370, ptr noundef %379, ptr noundef %385, i32 noundef %388, i32 noundef %399)
  br label %400

400:                                              ; preds = %362, %332
  %401 = load i8, ptr %10, align 1, !tbaa !16, !range !32, !noundef !33
  %402 = trunc i8 %401 to i1
  br i1 %402, label %403, label %501

403:                                              ; preds = %400
  %404 = load i32, ptr %6, align 4, !tbaa !9
  %405 = icmp ne i32 %404, 0
  br i1 %405, label %406, label %413

406:                                              ; preds = %403
  %407 = load ptr, ptr %4, align 8, !tbaa !5
  %408 = getelementptr inbounds %"struct.rw::Geometry", ptr %407, i32 0, i32 2
  %409 = load i16, ptr %408, align 4, !tbaa !44
  %410 = zext i16 %409 to i32
  %411 = and i32 %410, 8
  %412 = icmp ne i32 %411, 0
  br i1 %412, label %413, label %501

413:                                              ; preds = %406, %403
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %414

414:                                              ; preds = %433, %413
  %415 = load i32, ptr %7, align 4, !tbaa !9
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %416
  %418 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %417, i32 0, i32 4
  %419 = load i8, ptr %418, align 2, !tbaa !29
  %420 = zext i8 %419 to i32
  %421 = icmp ne i32 %420, 10
  br i1 %421, label %430, label %422

422:                                              ; preds = %414
  %423 = load i32, ptr %7, align 4, !tbaa !9
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %424
  %426 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %425, i32 0, i32 5
  %427 = load i8, ptr %426, align 1, !tbaa !30
  %428 = zext i8 %427 to i32
  %429 = icmp ne i32 %428, 0
  br label %430

430:                                              ; preds = %422, %414
  %431 = phi i1 [ true, %414 ], [ %429, %422 ]
  br i1 %431, label %432, label %436

432:                                              ; preds = %430
  br label %433

433:                                              ; preds = %432
  %434 = load i32, ptr %7, align 4, !tbaa !9
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %7, align 4, !tbaa !9
  br label %414, !llvm.loop !52

436:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %437 = load ptr, ptr %5, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %437, i32 0, i32 10
  %439 = load ptr, ptr %438, align 8, !tbaa !53
  store ptr %439, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  %440 = load ptr, ptr %5, align 8, !tbaa !5
  %441 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %440, i32 0, i32 2
  %442 = load i32, ptr %441, align 8, !tbaa !54
  store i32 %442, ptr %16, align 4, !tbaa !9
  br label %443

443:                                              ; preds = %447, %436
  %444 = load i32, ptr %16, align 4, !tbaa !9
  %445 = add i32 %444, -1
  store i32 %445, ptr %16, align 4, !tbaa !9
  %446 = icmp ne i32 %444, 0
  br i1 %446, label %447, label %500

447:                                              ; preds = %443
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %448 = load ptr, ptr %5, align 8, !tbaa !5
  %449 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %448, i32 0, i32 5
  %450 = load i32, ptr %7, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %451
  %453 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %452, i32 0, i32 0
  %454 = load i16, ptr %453, align 8, !tbaa !24
  %455 = zext i16 %454 to i64
  %456 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %449, i64 0, i64 %455
  %457 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %456, i32 0, i32 2
  %458 = load i32, ptr %457, align 4, !tbaa !39
  store i32 %458, ptr %17, align 4, !tbaa !9
  %459 = load i32, ptr %7, align 4, !tbaa !9
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %460
  %462 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %461, i32 0, i32 2
  %463 = load i8, ptr %462, align 4, !tbaa !27
  %464 = zext i8 %463 to i64
  %465 = getelementptr inbounds [0 x i32], ptr @_ZN2rw3d3d13vertFormatMapE, i64 0, i64 %464
  %466 = load i32, ptr %465, align 4, !tbaa !9
  %467 = load ptr, ptr %14, align 8, !tbaa !5
  %468 = load i32, ptr %7, align 4, !tbaa !9
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %469
  %471 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %470, i32 0, i32 1
  %472 = load i16, ptr %471, align 2, !tbaa !26
  %473 = zext i16 %472 to i32
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds i8, ptr %467, i64 %474
  %476 = load i32, ptr %17, align 4, !tbaa !9
  %477 = load ptr, ptr %15, align 8, !tbaa !5
  %478 = getelementptr inbounds %"struct.rw::d3d9::InstanceData", ptr %477, i32 0, i32 1
  %479 = load i32, ptr %478, align 4, !tbaa !55
  %480 = mul i32 %476, %479
  %481 = zext i32 %480 to i64
  %482 = getelementptr inbounds i8, ptr %475, i64 %481
  %483 = load ptr, ptr %4, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.rw::Geometry", ptr %483, i32 0, i32 8
  %485 = load ptr, ptr %484, align 8, !tbaa !57
  %486 = load ptr, ptr %15, align 8, !tbaa !5
  %487 = getelementptr inbounds %"struct.rw::d3d9::InstanceData", ptr %486, i32 0, i32 1
  %488 = load i32, ptr %487, align 4, !tbaa !55
  %489 = zext i32 %488 to i64
  %490 = getelementptr inbounds %"struct.rw::RGBA", ptr %485, i64 %489
  %491 = load ptr, ptr %15, align 8, !tbaa !5
  %492 = getelementptr inbounds %"struct.rw::d3d9::InstanceData", ptr %491, i32 0, i32 6
  %493 = load i32, ptr %492, align 4, !tbaa !58
  %494 = load i32, ptr %17, align 4, !tbaa !9
  %495 = call noundef i32 @_ZN2rw9instColorEiPhPNS_4RGBAEjj(i32 noundef %466, ptr noundef %482, ptr noundef %490, i32 noundef %493, i32 noundef %494)
  %496 = load ptr, ptr %15, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.rw::d3d9::InstanceData", ptr %496, i32 0, i32 3
  store i32 %495, ptr %497, align 8, !tbaa !59
  %498 = load ptr, ptr %15, align 8, !tbaa !5
  %499 = getelementptr inbounds %"struct.rw::d3d9::InstanceData", ptr %498, i32 1
  store ptr %499, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %443, !llvm.loop !60

500:                                              ; preds = %443
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %501

501:                                              ; preds = %500, %406, %400
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %502

502:                                              ; preds = %584, %501
  %503 = load i32, ptr %18, align 4, !tbaa !9
  %504 = load ptr, ptr %4, align 8, !tbaa !5
  %505 = getelementptr inbounds %"struct.rw::Geometry", ptr %504, i32 0, i32 6
  %506 = load i32, ptr %505, align 4, !tbaa !34
  %507 = icmp slt i32 %503, %506
  br i1 %507, label %509, label %508

508:                                              ; preds = %502
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %587

509:                                              ; preds = %502
  %510 = load i32, ptr %6, align 4, !tbaa !9
  %511 = icmp ne i32 %510, 0
  br i1 %511, label %512, label %521

512:                                              ; preds = %509
  %513 = load ptr, ptr %4, align 8, !tbaa !5
  %514 = getelementptr inbounds %"struct.rw::Geometry", ptr %513, i32 0, i32 2
  %515 = load i16, ptr %514, align 4, !tbaa !44
  %516 = zext i16 %515 to i32
  %517 = load i32, ptr %18, align 4, !tbaa !9
  %518 = shl i32 16, %517
  %519 = and i32 %516, %518
  %520 = icmp ne i32 %519, 0
  br i1 %520, label %521, label %583

521:                                              ; preds = %512, %509
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %522

522:                                              ; preds = %542, %521
  %523 = load i32, ptr %7, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %524
  %526 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %525, i32 0, i32 4
  %527 = load i8, ptr %526, align 2, !tbaa !29
  %528 = zext i8 %527 to i32
  %529 = icmp ne i32 %528, 5
  br i1 %529, label %539, label %530

530:                                              ; preds = %522
  %531 = load i32, ptr %7, align 4, !tbaa !9
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %532
  %534 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %533, i32 0, i32 5
  %535 = load i8, ptr %534, align 1, !tbaa !30
  %536 = zext i8 %535 to i32
  %537 = load i32, ptr %18, align 4, !tbaa !9
  %538 = icmp ne i32 %536, %537
  br label %539

539:                                              ; preds = %530, %522
  %540 = phi i1 [ true, %522 ], [ %538, %530 ]
  br i1 %540, label %541, label %545

541:                                              ; preds = %539
  br label %542

542:                                              ; preds = %541
  %543 = load i32, ptr %7, align 4, !tbaa !9
  %544 = add nsw i32 %543, 1
  store i32 %544, ptr %7, align 4, !tbaa !9
  br label %522, !llvm.loop !61

545:                                              ; preds = %539
  %546 = load i32, ptr %7, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %547
  %549 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %548, i32 0, i32 2
  %550 = load i8, ptr %549, align 4, !tbaa !27
  %551 = zext i8 %550 to i64
  %552 = getelementptr inbounds [0 x i32], ptr @_ZN2rw3d3d13vertFormatMapE, i64 0, i64 %551
  %553 = load i32, ptr %552, align 4, !tbaa !9
  %554 = load ptr, ptr %14, align 8, !tbaa !5
  %555 = load i32, ptr %7, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %556
  %558 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %557, i32 0, i32 1
  %559 = load i16, ptr %558, align 2, !tbaa !26
  %560 = zext i16 %559 to i32
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds i8, ptr %554, i64 %561
  %563 = load ptr, ptr %4, align 8, !tbaa !5
  %564 = getelementptr inbounds %"struct.rw::Geometry", ptr %563, i32 0, i32 9
  %565 = load i32, ptr %18, align 4, !tbaa !9
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds [8 x ptr], ptr %564, i64 0, i64 %566
  %568 = load ptr, ptr %567, align 8, !tbaa !5
  %569 = load ptr, ptr %5, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %569, i32 0, i32 9
  %571 = load i32, ptr %570, align 4, !tbaa !43
  %572 = load ptr, ptr %5, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %572, i32 0, i32 5
  %574 = load i32, ptr %7, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %575
  %577 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %576, i32 0, i32 0
  %578 = load i16, ptr %577, align 8, !tbaa !24
  %579 = zext i16 %578 to i64
  %580 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %573, i64 0, i64 %579
  %581 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %580, i32 0, i32 2
  %582 = load i32, ptr %581, align 4, !tbaa !39
  call void @_ZN2rw13instTexCoordsEiPhPNS_9TexCoordsEjj(i32 noundef %553, ptr noundef %562, ptr noundef %568, i32 noundef %571, i32 noundef %582)
  br label %583

583:                                              ; preds = %545, %512
  br label %584

584:                                              ; preds = %583
  %585 = load i32, ptr %18, align 4, !tbaa !9
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %18, align 4, !tbaa !9
  br label %502, !llvm.loop !62

587:                                              ; preds = %508
  %588 = load i8, ptr %11, align 1, !tbaa !16, !range !32, !noundef !33
  %589 = trunc i8 %588 to i1
  br i1 %589, label %590, label %661

590:                                              ; preds = %587
  %591 = load i32, ptr %6, align 4, !tbaa !9
  %592 = icmp ne i32 %591, 0
  br i1 %592, label %593, label %600

593:                                              ; preds = %590
  %594 = load ptr, ptr %4, align 8, !tbaa !5
  %595 = getelementptr inbounds %"struct.rw::Geometry", ptr %594, i32 0, i32 2
  %596 = load i16, ptr %595, align 4, !tbaa !44
  %597 = zext i16 %596 to i32
  %598 = and i32 %597, 4
  %599 = icmp ne i32 %598, 0
  br i1 %599, label %600, label %661

600:                                              ; preds = %593, %590
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %601

601:                                              ; preds = %620, %600
  %602 = load i32, ptr %7, align 4, !tbaa !9
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %603
  %605 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %604, i32 0, i32 4
  %606 = load i8, ptr %605, align 2, !tbaa !29
  %607 = zext i8 %606 to i32
  %608 = icmp ne i32 %607, 3
  br i1 %608, label %617, label %609

609:                                              ; preds = %601
  %610 = load i32, ptr %7, align 4, !tbaa !9
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %611
  %613 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %612, i32 0, i32 5
  %614 = load i8, ptr %613, align 1, !tbaa !30
  %615 = zext i8 %614 to i32
  %616 = icmp ne i32 %615, 0
  br label %617

617:                                              ; preds = %609, %601
  %618 = phi i1 [ true, %601 ], [ %616, %609 ]
  br i1 %618, label %619, label %623

619:                                              ; preds = %617
  br label %620

620:                                              ; preds = %619
  %621 = load i32, ptr %7, align 4, !tbaa !9
  %622 = add nsw i32 %621, 1
  store i32 %622, ptr %7, align 4, !tbaa !9
  br label %601, !llvm.loop !63

623:                                              ; preds = %617
  %624 = load i32, ptr %7, align 4, !tbaa !9
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %625
  %627 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %626, i32 0, i32 2
  %628 = load i8, ptr %627, align 4, !tbaa !27
  %629 = zext i8 %628 to i64
  %630 = getelementptr inbounds [0 x i32], ptr @_ZN2rw3d3d13vertFormatMapE, i64 0, i64 %629
  %631 = load i32, ptr %630, align 4, !tbaa !9
  %632 = load ptr, ptr %14, align 8, !tbaa !5
  %633 = load i32, ptr %7, align 4, !tbaa !9
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %634
  %636 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %635, i32 0, i32 1
  %637 = load i16, ptr %636, align 2, !tbaa !26
  %638 = zext i16 %637 to i32
  %639 = sext i32 %638 to i64
  %640 = getelementptr inbounds i8, ptr %632, i64 %639
  %641 = load ptr, ptr %4, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.rw::Geometry", ptr %641, i32 0, i32 10
  %643 = load ptr, ptr %642, align 8, !tbaa !46
  %644 = getelementptr inbounds %"struct.rw::MorphTarget", ptr %643, i64 0
  %645 = getelementptr inbounds %"struct.rw::MorphTarget", ptr %644, i32 0, i32 3
  %646 = load ptr, ptr %645, align 8, !tbaa !64
  %647 = load ptr, ptr %5, align 8, !tbaa !5
  %648 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %647, i32 0, i32 9
  %649 = load i32, ptr %648, align 4, !tbaa !43
  %650 = load ptr, ptr %5, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.rw::d3d9::InstanceDataHeader", ptr %650, i32 0, i32 5
  %652 = load i32, ptr %7, align 4, !tbaa !9
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %8, i64 0, i64 %653
  %655 = getelementptr inbounds %"struct.rw::d3d9::VertexElement", ptr %654, i32 0, i32 0
  %656 = load i16, ptr %655, align 8, !tbaa !24
  %657 = zext i16 %656 to i64
  %658 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %651, i64 0, i64 %657
  %659 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %658, i32 0, i32 2
  %660 = load i32, ptr %659, align 4, !tbaa !39
  call void @_ZN2rw7instV3dEiPhPNS_3V3dEjj(i32 noundef %631, ptr noundef %640, ptr noundef %646, i32 noundef %649, i32 noundef %660)
  br label %661

661:                                              ; preds = %623, %593, %587
  %662 = load ptr, ptr %9, align 8, !tbaa !5
  %663 = getelementptr inbounds %"struct.rw::d3d9::VertexStream", ptr %662, i32 0, i32 0
  %664 = load ptr, ptr %663, align 8, !tbaa !18
  call void @_ZN2rw3d3d14unlockVerticesEPv(ptr noundef %664)
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  ret void
}

declare void @_ZN2rw7instV3dEiPhPNS_3V3dEjj(i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #5

declare noundef i32 @_ZN2rw9instColorEiPhPNS_4RGBAEjj(i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #5

declare void @_ZN2rw13instTexCoordsEiPhPNS_9TexCoordsEjj(i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #5

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { noreturn 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, !10, i64 16}
!12 = !{!"_ZTSN2rw8GeometryE", !13, i64 0, !10, i64 16, !14, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !6, i64 40, !6, i64 48, !7, i64 56, !6, i64 120, !15, i64 128, !6, i64 144, !6, i64 152, !10, i64 160}
!13 = !{!"_ZTSN2rw6ObjectE", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !6, i64 8}
!14 = !{!"short", !7, i64 0}
!15 = !{!"_ZTSN2rw12MaterialListE", !6, i64 0, !10, i64 8, !10, i64 12}
!16 = !{!17, !17, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = !{!19, !6, i64 0}
!19 = !{!"_ZTSN2rw4d3d912VertexStreamE", !6, i64 0, !10, i64 8, !10, i64 12, !14, i64 16, !7, i64 18, !7, i64 19}
!20 = !{!19, !10, i64 8}
!21 = !{!19, !7, i64 18}
!22 = !{!19, !14, i64 16}
!23 = !{!19, !7, i64 19}
!24 = !{!25, !14, i64 0}
!25 = !{!"_ZTSN2rw4d3d913VertexElementE", !14, i64 0, !14, i64 2, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7}
!26 = !{!25, !14, i64 2}
!27 = !{!25, !7, i64 4}
!28 = !{!25, !7, i64 5}
!29 = !{!25, !7, i64 6}
!30 = !{!25, !7, i64 7}
!31 = !{!14, !14, i64 0}
!32 = !{i8 0, i8 2}
!33 = !{}
!34 = !{!12, !10, i64 36}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{i64 0, i64 2, !31, i64 2, i64 2, !31, i64 4, i64 1, !38, i64 5, i64 1, !38, i64 6, i64 1, !38, i64 7, i64 1, !38}
!38 = !{!7, !7, i64 0}
!39 = !{!19, !10, i64 12}
!40 = !{!41, !6, i64 88}
!41 = !{!"_ZTSN2rw4d3d918InstanceDataHeaderE", !42, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !10, i64 24, !7, i64 32, !10, i64 80, !6, i64 88, !10, i64 96, !10, i64 100, !6, i64 104}
!42 = !{!"_ZTSN2rw18InstanceDataHeaderE", !10, i64 0}
!43 = !{!41, !10, i64 100}
!44 = !{!12, !14, i64 20}
!45 = distinct !{!45, !36}
!46 = !{!12, !6, i64 120}
!47 = !{!48, !6, i64 24}
!48 = !{!"_ZTSN2rw11MorphTargetE", !6, i64 0, !49, i64 8, !6, i64 24, !6, i64 32}
!49 = !{!"_ZTSN2rw6SphereE", !50, i64 0, !51, i64 12}
!50 = !{!"_ZTSN2rw3V3dE", !51, i64 0, !51, i64 4, !51, i64 8}
!51 = !{!"float", !7, i64 0}
!52 = distinct !{!52, !36}
!53 = !{!41, !6, i64 104}
!54 = !{!41, !10, i64 8}
!55 = !{!56, !10, i64 4}
!56 = !{!"_ZTSN2rw4d3d912InstanceDataE", !10, i64 0, !10, i64 4, !6, i64 8, !10, i64 16, !6, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44}
!57 = !{!12, !6, i64 48}
!58 = !{!56, !10, i64 36}
!59 = !{!56, !10, i64 16}
!60 = distinct !{!60, !36}
!61 = distinct !{!61, !36}
!62 = distinct !{!62, !36}
!63 = distinct !{!63, !36}
!64 = !{!48, !6, i64 32}


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

%"struct.rw::d3d9::VertexElement" = type { i16, i16, i8, i8, i8, i8 }
%"struct.rw::d3d9::VertexStream" = type { ptr, i32, i32, i16, i8, i8 }
%"struct.rw::RGBA" = type { i8, i8, i8, i8 }

@.str.2 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__._ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi = external hidden unnamed_addr constant [75 x i8], align 1
@_ZN2rw4d3d9L11_d3ddec_endE = external hidden local_unnamed_addr global %"struct.rw::d3d9::VertexElement", align 2
@.str.12 = external hidden unnamed_addr constant [33 x i8], align 1
@_ZN2rw3d3d13vertFormatMapE = external local_unnamed_addr global [0 x i32], align 4

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN2rw4d3d923createVertexDeclarationEPNS0_13VertexElementE(ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN2rw4d3d914getDeclarationEPvPNS0_13VertexElementE(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare noundef ptr @_ZN2rw3d3d18createVertexBufferEjjb(i32 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #4

declare noundef ptr @_ZN2rw3d3d12lockVerticesEPvjjj(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @_ZN2rw3d3d14unlockVerticesEPv(ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi(ptr nocapture noundef readonly %0, ptr nocapture noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = alloca [12 x %"struct.rw::d3d9::VertexElement"], align 16
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %4) #5
  %5 = getelementptr inbounds i8, ptr %1, i64 32
  %6 = getelementptr inbounds i8, ptr %0, i64 16
  %7 = load i32, ptr %6, align 8, !tbaa !5
  %8 = and i32 %7, 8
  %.not = icmp eq i32 %8, 0
  %9 = and i32 %7, 16
  %.not159 = icmp eq i32 %9, 0
  %.not160 = icmp eq i32 %2, 0
  br i1 %.not160, label %10, label %.thread

10:                                               ; preds = %3
  %11 = load ptr, ptr %5, align 8, !tbaa !14
  %12 = icmp eq ptr %11, null
  br i1 %12, label %14, label %13

13:                                               ; preds = %10
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 502, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi) #6
  unreachable

14:                                               ; preds = %10
  %15 = getelementptr inbounds i8, ptr %1, i64 40
  store i32 0, ptr %15, align 8, !tbaa !16
  %16 = getelementptr inbounds i8, ptr %1, i64 50
  store i8 1, ptr %16, align 2, !tbaa !17
  %17 = getelementptr inbounds i8, ptr %1, i64 48
  %18 = getelementptr inbounds i8, ptr %1, i64 51
  store i8 0, ptr %18, align 1, !tbaa !18
  store i16 0, ptr %4, align 16, !tbaa !19
  %19 = getelementptr inbounds i8, ptr %4, i64 2
  store i16 0, ptr %19, align 2, !tbaa !21
  %20 = getelementptr inbounds i8, ptr %4, i64 4
  store <4 x i8> <i8 2, i8 0, i8 0, i8 0>, ptr %20, align 4, !tbaa !22
  store i16 2, ptr %17, align 8, !tbaa !23
  br i1 %.not, label %25, label %21

21:                                               ; preds = %14
  %22 = getelementptr inbounds i8, ptr %4, i64 8
  store i16 0, ptr %22, align 8, !tbaa !19
  %23 = getelementptr inbounds i8, ptr %4, i64 10
  store i16 12, ptr %23, align 2, !tbaa !21
  %24 = getelementptr inbounds i8, ptr %4, i64 12
  store <4 x i8> <i8 4, i8 0, i8 10, i8 0>, ptr %24, align 4, !tbaa !22
  store i16 10, ptr %17, align 8, !tbaa !23
  br label %25

25:                                               ; preds = %21, %14
  %.promoted = phi i16 [ 10, %21 ], [ 2, %14 ]
  %.0155 = phi i16 [ 16, %21 ], [ 12, %14 ]
  %.0152 = phi i32 [ 2, %21 ], [ 1, %14 ]
  %26 = getelementptr inbounds i8, ptr %0, i64 36
  %27 = load i32, ptr %26, align 4, !tbaa !24
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %.lr.ph, label %43

.lr.ph:                                           ; preds = %25
  %29 = zext nneg i32 %.0152 to i64
  %xtraiter = and i32 %27, 1
  %30 = icmp eq i32 %27, 1
  br i1 %30, label %._crit_edge.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i32 %27, 2147483646
  br label %45

._crit_edge.unr-lcssa:                            ; preds = %45, %.lr.ph
  %indvars.iv.next.lcssa.ph = phi i64 [ poison, %.lr.ph ], [ %indvars.iv.next.1, %45 ]
  %.lcssa233.ph = phi i16 [ poison, %.lr.ph ], [ %68, %45 ]
  %.lcssa232.ph = phi i16 [ poison, %.lr.ph ], [ %69, %45 ]
  %indvars.iv.unr = phi i64 [ %29, %.lr.ph ], [ %indvars.iv.next.1, %45 ]
  %.unr = phi i16 [ %.promoted, %.lr.ph ], [ %68, %45 ]
  %.1156181.unr = phi i16 [ %.0155, %.lr.ph ], [ %69, %45 ]
  %.0158180.unr = phi i32 [ 0, %.lr.ph ], [ %70, %45 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %._crit_edge.epilog-lcssa

._crit_edge.epilog-lcssa:                         ; preds = %._crit_edge.unr-lcssa
  %31 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %indvars.iv.unr
  store i16 0, ptr %31, align 8, !tbaa !19
  %32 = getelementptr inbounds i8, ptr %31, i64 2
  store i16 %.1156181.unr, ptr %32, align 2, !tbaa !21
  %33 = getelementptr inbounds i8, ptr %31, i64 4
  store i8 1, ptr %33, align 4, !tbaa !25
  %34 = getelementptr inbounds i8, ptr %31, i64 5
  store i8 0, ptr %34, align 1, !tbaa !26
  %35 = getelementptr inbounds i8, ptr %31, i64 6
  store i8 5, ptr %35, align 2, !tbaa !27
  %36 = trunc i32 %.0158180.unr to i8
  %37 = getelementptr inbounds i8, ptr %31, i64 7
  store i8 %36, ptr %37, align 1, !tbaa !28
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.unr, 1
  %38 = shl i32 16, %.0158180.unr
  %39 = trunc i32 %38 to i16
  %40 = or i16 %.unr, %39
  %41 = add i16 %.1156181.unr, 8
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.unr-lcssa, %._crit_edge.epilog-lcssa
  %indvars.iv.next.lcssa = phi i64 [ %indvars.iv.next.lcssa.ph, %._crit_edge.unr-lcssa ], [ %indvars.iv.next.epil, %._crit_edge.epilog-lcssa ]
  %.lcssa233 = phi i16 [ %.lcssa233.ph, %._crit_edge.unr-lcssa ], [ %40, %._crit_edge.epilog-lcssa ]
  %.lcssa232 = phi i16 [ %.lcssa232.ph, %._crit_edge.unr-lcssa ], [ %41, %._crit_edge.epilog-lcssa ]
  %42 = trunc nuw i64 %indvars.iv.next.lcssa to i32
  store i16 %.lcssa233, ptr %17, align 8, !tbaa !23
  br label %43

43:                                               ; preds = %._crit_edge, %25
  %44 = phi i16 [ %.lcssa233, %._crit_edge ], [ %.promoted, %25 ]
  %.1156.lcssa = phi i16 [ %.lcssa232, %._crit_edge ], [ %.0155, %25 ]
  %.1.lcssa = phi i32 [ %42, %._crit_edge ], [ %.0152, %25 ]
  br i1 %.not159, label %79, label %71

45:                                               ; preds = %45, %.lr.ph.new
  %indvars.iv = phi i64 [ %29, %.lr.ph.new ], [ %indvars.iv.next.1, %45 ]
  %46 = phi i16 [ %.promoted, %.lr.ph.new ], [ %68, %45 ]
  %.1156181 = phi i16 [ %.0155, %.lr.ph.new ], [ %69, %45 ]
  %.0158180 = phi i32 [ 0, %.lr.ph.new ], [ %70, %45 ]
  %niter = phi i32 [ 0, %.lr.ph.new ], [ %niter.next.1, %45 ]
  %47 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %indvars.iv
  store i16 0, ptr %47, align 8, !tbaa !19
  %48 = getelementptr inbounds i8, ptr %47, i64 2
  store i16 %.1156181, ptr %48, align 2, !tbaa !21
  %49 = getelementptr inbounds i8, ptr %47, i64 4
  store i8 1, ptr %49, align 4, !tbaa !25
  %50 = getelementptr inbounds i8, ptr %47, i64 5
  store i8 0, ptr %50, align 1, !tbaa !26
  %51 = getelementptr inbounds i8, ptr %47, i64 6
  store i8 5, ptr %51, align 2, !tbaa !27
  %52 = trunc i32 %.0158180 to i8
  %53 = getelementptr inbounds i8, ptr %47, i64 7
  store i8 %52, ptr %53, align 1, !tbaa !28
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %54 = shl i32 16, %.0158180
  %55 = trunc i32 %54 to i16
  %56 = or i16 %46, %55
  %57 = add i16 %.1156181, 8
  %58 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %indvars.iv.next
  store i16 0, ptr %58, align 8, !tbaa !19
  %59 = getelementptr inbounds i8, ptr %58, i64 2
  store i16 %57, ptr %59, align 2, !tbaa !21
  %60 = getelementptr inbounds i8, ptr %58, i64 4
  store i8 1, ptr %60, align 4, !tbaa !25
  %61 = getelementptr inbounds i8, ptr %58, i64 5
  store i8 0, ptr %61, align 1, !tbaa !26
  %62 = getelementptr inbounds i8, ptr %58, i64 6
  store i8 5, ptr %62, align 2, !tbaa !27
  %63 = trunc i32 %.0158180 to i8
  %64 = or disjoint i8 %63, 1
  %65 = getelementptr inbounds i8, ptr %58, i64 7
  store i8 %64, ptr %65, align 1, !tbaa !28
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %66 = shl i32 32, %.0158180
  %67 = trunc i32 %66 to i16
  %68 = or i16 %56, %67
  %69 = add i16 %.1156181, 16
  %70 = add nuw nsw i32 %.0158180, 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.unr-lcssa, label %45, !llvm.loop !29

71:                                               ; preds = %43
  %72 = zext nneg i32 %.1.lcssa to i64
  %73 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %72
  store i16 0, ptr %73, align 8, !tbaa !19
  %74 = getelementptr inbounds i8, ptr %73, i64 2
  store i16 %.1156.lcssa, ptr %74, align 2, !tbaa !21
  %75 = getelementptr inbounds i8, ptr %73, i64 4
  store <4 x i8> <i8 2, i8 0, i8 3, i8 0>, ptr %75, align 4, !tbaa !22
  %76 = add nuw nsw i32 %.1.lcssa, 1
  %77 = or i16 %44, 4
  store i16 %77, ptr %17, align 8, !tbaa !23
  %78 = add i16 %.1156.lcssa, 12
  br label %79

79:                                               ; preds = %71, %43
  %.2157 = phi i16 [ %78, %71 ], [ %.1156.lcssa, %43 ]
  %.2 = phi i32 [ %76, %71 ], [ %.1.lcssa, %43 ]
  br i1 %.not, label %80, label %86

80:                                               ; preds = %79
  %81 = sext i32 %.2 to i64
  %82 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %81
  store i16 2, ptr %82, align 8, !tbaa !19
  %83 = getelementptr inbounds i8, ptr %82, i64 2
  store i16 12, ptr %83, align 2, !tbaa !21
  %84 = getelementptr inbounds i8, ptr %82, i64 4
  store <4 x i8> <i8 4, i8 0, i8 10, i8 0>, ptr %84, align 4, !tbaa !22
  %85 = add nsw i32 %.2, 1
  br label %86

86:                                               ; preds = %80, %79
  %.3 = phi i32 [ %.2, %79 ], [ %85, %80 ]
  %87 = icmp eq i32 %27, 0
  br i1 %87, label %88, label %94

88:                                               ; preds = %86
  %89 = sext i32 %.3 to i64
  %90 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %89
  store i16 2, ptr %90, align 8, !tbaa !19
  %91 = getelementptr inbounds i8, ptr %90, i64 2
  store i16 16, ptr %91, align 2, !tbaa !21
  %92 = getelementptr inbounds i8, ptr %90, i64 4
  store <4 x i8> <i8 1, i8 0, i8 5, i8 0>, ptr %92, align 4, !tbaa !22
  %93 = add nsw i32 %.3, 1
  br label %94

94:                                               ; preds = %88, %86
  %.4 = phi i32 [ %93, %88 ], [ %.3, %86 ]
  %95 = sext i32 %.4 to i64
  %96 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %95
  %97 = load i64, ptr @_ZN2rw4d3d9L11_d3ddec_endE, align 2
  store i64 %97, ptr %96, align 8
  %98 = zext i16 %.2157 to i32
  %99 = getelementptr inbounds i8, ptr %1, i64 44
  store i32 %98, ptr %99, align 4, !tbaa !31
  %100 = getelementptr inbounds i8, ptr %1, i64 88
  %101 = load ptr, ptr %100, align 8, !tbaa !32
  %102 = icmp eq ptr %101, null
  br i1 %102, label %104, label %103

103:                                              ; preds = %94
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.2, i32 noundef 577, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi) #6
  unreachable

104:                                              ; preds = %94
  %105 = call noundef ptr @_ZN2rw4d3d923createVertexDeclarationEPNS0_13VertexElementE(ptr noundef nonnull %4)
  store ptr %105, ptr %100, align 8, !tbaa !32
  %106 = load ptr, ptr %5, align 8, !tbaa !14
  %107 = icmp eq ptr %106, null
  br i1 %107, label %117, label %108

108:                                              ; preds = %104
  call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 580, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN2rw4d3d917defaultInstanceCBEPNS_8GeometryEPNS0_18InstanceDataHeaderEi) #6
  unreachable

.thread:                                          ; preds = %3
  %109 = getelementptr inbounds i8, ptr %1, i64 88
  %110 = load ptr, ptr %109, align 8, !tbaa !32
  %111 = call noundef i32 @_ZN2rw4d3d914getDeclarationEPvPNS0_13VertexElementE(ptr noundef %110, ptr noundef nonnull %4)
  %112 = load ptr, ptr %5, align 8, !tbaa !14
  %113 = call noundef ptr @_ZN2rw3d3d12lockVerticesEPvjjj(ptr noundef %112, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %114 = getelementptr inbounds i8, ptr %0, i64 20
  %115 = load i16, ptr %114, align 4, !tbaa !35
  %116 = and i16 %115, 2
  %.not161 = icmp eq i16 %116, 0
  br i1 %.not161, label %.thread174, label %124

117:                                              ; preds = %104
  %118 = getelementptr inbounds i8, ptr %1, i64 100
  %119 = load i32, ptr %118, align 4, !tbaa !36
  %120 = load i32, ptr %99, align 4, !tbaa !31
  %121 = mul i32 %120, %119
  %122 = call noundef ptr @_ZN2rw3d3d18createVertexBufferEjjb(i32 noundef %121, i32 noundef 0, i1 noundef zeroext false)
  store ptr %122, ptr %5, align 8, !tbaa !14
  %123 = call noundef ptr @_ZN2rw3d3d12lockVerticesEPvjjj(ptr noundef %122, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %124

124:                                              ; preds = %117, %.thread
  %125 = phi ptr [ %113, %.thread ], [ %123, %117 ]
  br label %126

126:                                              ; preds = %.critedge, %124
  %indvars.iv201 = phi i64 [ %indvars.iv.next202, %.critedge ], [ 0, %124 ]
  %127 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %indvars.iv201
  %128 = getelementptr inbounds i8, ptr %127, i64 6
  %129 = load i8, ptr %128, align 2, !tbaa !27
  %.not162 = icmp eq i8 %129, 0
  br i1 %.not162, label %130, label %.critedge

130:                                              ; preds = %126
  %131 = getelementptr inbounds i8, ptr %127, i64 7
  %132 = load i8, ptr %131, align 1, !tbaa !28
  %.not163 = icmp eq i8 %132, 0
  br i1 %.not163, label %133, label %.critedge

.critedge:                                        ; preds = %126, %130
  %indvars.iv.next202 = add nuw nsw i64 %indvars.iv201, 1
  br label %126, !llvm.loop !37

133:                                              ; preds = %130
  %134 = getelementptr inbounds i8, ptr %127, i64 4
  %135 = load i8, ptr %134, align 4, !tbaa !25
  %136 = zext i8 %135 to i64
  %137 = getelementptr inbounds [0 x i32], ptr @_ZN2rw3d3d13vertFormatMapE, i64 0, i64 %136
  %138 = load i32, ptr %137, align 4, !tbaa !38
  %139 = getelementptr inbounds i8, ptr %127, i64 2
  %140 = load i16, ptr %139, align 2, !tbaa !21
  %141 = zext i16 %140 to i64
  %142 = getelementptr inbounds i8, ptr %125, i64 %141
  %143 = getelementptr inbounds i8, ptr %0, i64 120
  %144 = load ptr, ptr %143, align 8, !tbaa !39
  %145 = getelementptr inbounds i8, ptr %144, i64 24
  %146 = load ptr, ptr %145, align 8, !tbaa !40
  %147 = getelementptr inbounds i8, ptr %1, i64 100
  %148 = load i32, ptr %147, align 4, !tbaa !36
  %149 = load i16, ptr %127, align 8, !tbaa !19
  %150 = zext i16 %149 to i64
  %151 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %5, i64 0, i64 %150, i32 2
  %152 = load i32, ptr %151, align 4, !tbaa !31
  call void @_ZN2rw7instV3dEiPhPNS_3V3dEjj(i32 noundef %138, ptr noundef %142, ptr noundef %146, i32 noundef %148, i32 noundef %152)
  br i1 %.not, label %.loopexit, label %153

.thread174:                                       ; preds = %.thread
  br i1 %.not, label %.loopexit, label %.thread175

153:                                              ; preds = %133
  br i1 %.not160, label %157, label %..thread175_crit_edge

..thread175_crit_edge:                            ; preds = %153
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 20
  %.pre = load i16, ptr %.phi.trans.insert, align 4, !tbaa !35
  br label %.thread175

.thread175:                                       ; preds = %..thread175_crit_edge, %.thread174
  %154 = phi i16 [ %.pre, %..thread175_crit_edge ], [ %115, %.thread174 ]
  %155 = phi ptr [ %125, %..thread175_crit_edge ], [ %113, %.thread174 ]
  %156 = and i16 %154, 8
  %.not164 = icmp eq i16 %156, 0
  br i1 %.not164, label %.loopexit, label %157

157:                                              ; preds = %.thread175, %153
  %158 = phi ptr [ %155, %.thread175 ], [ %125, %153 ]
  br label %159

159:                                              ; preds = %.critedge2, %157
  %indvars.iv204 = phi i64 [ %indvars.iv.next205, %.critedge2 ], [ 0, %157 ]
  %160 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %indvars.iv204
  %161 = getelementptr inbounds i8, ptr %160, i64 6
  %162 = load i8, ptr %161, align 2, !tbaa !27
  %.not165 = icmp eq i8 %162, 10
  br i1 %.not165, label %163, label %.critedge2

163:                                              ; preds = %159
  %164 = getelementptr inbounds i8, ptr %160, i64 7
  %165 = load i8, ptr %164, align 1, !tbaa !28
  %.not166 = icmp eq i8 %165, 0
  br i1 %.not166, label %166, label %.critedge2

.critedge2:                                       ; preds = %159, %163
  %indvars.iv.next205 = add nuw nsw i64 %indvars.iv204, 1
  br label %159, !llvm.loop !45

166:                                              ; preds = %163
  %167 = getelementptr inbounds i8, ptr %1, i64 8
  %168 = load i32, ptr %167, align 8, !tbaa !46
  %.not167186 = icmp eq i32 %168, 0
  br i1 %.not167186, label %.loopexit, label %.lr.ph190

.lr.ph190:                                        ; preds = %166
  %169 = getelementptr inbounds i8, ptr %1, i64 104
  %170 = load ptr, ptr %169, align 8, !tbaa !47
  %171 = getelementptr inbounds i8, ptr %160, i64 4
  %172 = getelementptr inbounds i8, ptr %160, i64 2
  %173 = getelementptr inbounds i8, ptr %0, i64 48
  br label %174

174:                                              ; preds = %.lr.ph190, %174
  %.0153188 = phi i32 [ %168, %.lr.ph190 ], [ %175, %174 ]
  %.0154187 = phi ptr [ %170, %.lr.ph190 ], [ %199, %174 ]
  %175 = add i32 %.0153188, -1
  %176 = load i16, ptr %160, align 8, !tbaa !19
  %177 = zext i16 %176 to i64
  %178 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %5, i64 0, i64 %177, i32 2
  %179 = load i32, ptr %178, align 4, !tbaa !31
  %180 = load i8, ptr %171, align 4, !tbaa !25
  %181 = zext i8 %180 to i64
  %182 = getelementptr inbounds [0 x i32], ptr @_ZN2rw3d3d13vertFormatMapE, i64 0, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !38
  %184 = load i16, ptr %172, align 2, !tbaa !21
  %185 = zext i16 %184 to i64
  %186 = getelementptr inbounds i8, ptr %158, i64 %185
  %187 = getelementptr inbounds i8, ptr %.0154187, i64 4
  %188 = load i32, ptr %187, align 4, !tbaa !48
  %189 = mul i32 %188, %179
  %190 = zext i32 %189 to i64
  %191 = getelementptr inbounds i8, ptr %186, i64 %190
  %192 = load ptr, ptr %173, align 8, !tbaa !50
  %193 = zext i32 %188 to i64
  %194 = getelementptr inbounds %"struct.rw::RGBA", ptr %192, i64 %193
  %195 = getelementptr inbounds i8, ptr %.0154187, i64 36
  %196 = load i32, ptr %195, align 4, !tbaa !51
  %197 = call noundef i32 @_ZN2rw9instColorEiPhPNS_4RGBAEjj(i32 noundef %183, ptr noundef %191, ptr noundef %194, i32 noundef %196, i32 noundef %179)
  %198 = getelementptr inbounds i8, ptr %.0154187, i64 16
  store i32 %197, ptr %198, align 8, !tbaa !52
  %199 = getelementptr inbounds i8, ptr %.0154187, i64 48
  %.not167 = icmp eq i32 %175, 0
  br i1 %.not167, label %.loopexit, label %174, !llvm.loop !53

.loopexit:                                        ; preds = %174, %166, %.thread174, %.thread175, %133
  %200 = phi ptr [ %113, %.thread174 ], [ %155, %.thread175 ], [ %125, %133 ], [ %158, %166 ], [ %158, %174 ]
  %201 = getelementptr inbounds i8, ptr %0, i64 36
  %202 = load i32, ptr %201, align 4, !tbaa !24
  %203 = icmp sgt i32 %202, 0
  br i1 %203, label %.lr.ph193, label %._crit_edge194

.lr.ph193:                                        ; preds = %.loopexit
  %204 = getelementptr inbounds i8, ptr %0, i64 20
  %205 = getelementptr inbounds i8, ptr %0, i64 56
  %206 = getelementptr inbounds i8, ptr %1, i64 100
  br label %207

._crit_edge194:                                   ; preds = %240, %.loopexit
  br i1 %.not159, label %276, label %244

207:                                              ; preds = %.lr.ph193, %240
  %208 = phi i32 [ %202, %.lr.ph193 ], [ %241, %240 ]
  %indvars.iv210 = phi i64 [ 0, %.lr.ph193 ], [ %indvars.iv.next211, %240 ]
  br i1 %.not160, label %.preheader228, label %209

209:                                              ; preds = %207
  %210 = load i16, ptr %204, align 4, !tbaa !35
  %211 = zext i16 %210 to i32
  %212 = trunc nuw nsw i64 %indvars.iv210 to i32
  %213 = shl i32 16, %212
  %214 = and i32 %213, %211
  %.not171 = icmp eq i32 %214, 0
  br i1 %.not171, label %240, label %.preheader228

.preheader228:                                    ; preds = %209, %207
  br label %215

215:                                              ; preds = %.preheader228, %.critedge4
  %indvars.iv207 = phi i64 [ %indvars.iv.next208, %.critedge4 ], [ 0, %.preheader228 ]
  %216 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %indvars.iv207
  %217 = getelementptr inbounds i8, ptr %216, i64 6
  %218 = load i8, ptr %217, align 2, !tbaa !27
  %.not172 = icmp eq i8 %218, 5
  br i1 %.not172, label %219, label %.critedge4

219:                                              ; preds = %215
  %220 = getelementptr inbounds i8, ptr %216, i64 7
  %221 = load i8, ptr %220, align 1, !tbaa !28
  %222 = zext i8 %221 to i64
  %.not173 = icmp eq i64 %indvars.iv210, %222
  br i1 %.not173, label %223, label %.critedge4

.critedge4:                                       ; preds = %215, %219
  %indvars.iv.next208 = add nuw nsw i64 %indvars.iv207, 1
  br label %215, !llvm.loop !54

223:                                              ; preds = %219
  %224 = getelementptr inbounds i8, ptr %216, i64 4
  %225 = load i8, ptr %224, align 4, !tbaa !25
  %226 = zext i8 %225 to i64
  %227 = getelementptr inbounds [0 x i32], ptr @_ZN2rw3d3d13vertFormatMapE, i64 0, i64 %226
  %228 = load i32, ptr %227, align 4, !tbaa !38
  %229 = getelementptr inbounds i8, ptr %216, i64 2
  %230 = load i16, ptr %229, align 2, !tbaa !21
  %231 = zext i16 %230 to i64
  %232 = getelementptr inbounds i8, ptr %200, i64 %231
  %233 = getelementptr inbounds [8 x ptr], ptr %205, i64 0, i64 %indvars.iv210
  %234 = load ptr, ptr %233, align 8, !tbaa !55
  %235 = load i32, ptr %206, align 4, !tbaa !36
  %236 = load i16, ptr %216, align 8, !tbaa !19
  %237 = zext i16 %236 to i64
  %238 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %5, i64 0, i64 %237, i32 2
  %239 = load i32, ptr %238, align 4, !tbaa !31
  call void @_ZN2rw13instTexCoordsEiPhPNS_9TexCoordsEjj(i32 noundef %228, ptr noundef %232, ptr noundef %234, i32 noundef %235, i32 noundef %239)
  %.pre217 = load i32, ptr %201, align 4, !tbaa !24
  br label %240

240:                                              ; preds = %209, %223
  %241 = phi i32 [ %208, %209 ], [ %.pre217, %223 ]
  %indvars.iv.next211 = add nuw nsw i64 %indvars.iv210, 1
  %242 = sext i32 %241 to i64
  %243 = icmp slt i64 %indvars.iv.next211, %242
  br i1 %243, label %207, label %._crit_edge194, !llvm.loop !56

244:                                              ; preds = %._crit_edge194
  br i1 %.not160, label %.preheader, label %245

245:                                              ; preds = %244
  %246 = getelementptr inbounds i8, ptr %0, i64 20
  %247 = load i16, ptr %246, align 4, !tbaa !35
  %248 = and i16 %247, 4
  %.not168 = icmp eq i16 %248, 0
  br i1 %.not168, label %276, label %.preheader

.preheader:                                       ; preds = %245, %244
  br label %249

249:                                              ; preds = %.preheader, %.critedge6
  %indvars.iv213 = phi i64 [ %indvars.iv.next214, %.critedge6 ], [ 0, %.preheader ]
  %250 = getelementptr inbounds [12 x %"struct.rw::d3d9::VertexElement"], ptr %4, i64 0, i64 %indvars.iv213
  %251 = getelementptr inbounds i8, ptr %250, i64 6
  %252 = load i8, ptr %251, align 2, !tbaa !27
  %.not169 = icmp eq i8 %252, 3
  br i1 %.not169, label %253, label %.critedge6

253:                                              ; preds = %249
  %254 = getelementptr inbounds i8, ptr %250, i64 7
  %255 = load i8, ptr %254, align 1, !tbaa !28
  %.not170 = icmp eq i8 %255, 0
  br i1 %.not170, label %256, label %.critedge6

.critedge6:                                       ; preds = %249, %253
  %indvars.iv.next214 = add nuw nsw i64 %indvars.iv213, 1
  br label %249, !llvm.loop !57

256:                                              ; preds = %253
  %257 = getelementptr inbounds i8, ptr %250, i64 4
  %258 = load i8, ptr %257, align 4, !tbaa !25
  %259 = zext i8 %258 to i64
  %260 = getelementptr inbounds [0 x i32], ptr @_ZN2rw3d3d13vertFormatMapE, i64 0, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !38
  %262 = getelementptr inbounds i8, ptr %250, i64 2
  %263 = load i16, ptr %262, align 2, !tbaa !21
  %264 = zext i16 %263 to i64
  %265 = getelementptr inbounds i8, ptr %200, i64 %264
  %266 = getelementptr inbounds i8, ptr %0, i64 120
  %267 = load ptr, ptr %266, align 8, !tbaa !39
  %268 = getelementptr inbounds i8, ptr %267, i64 32
  %269 = load ptr, ptr %268, align 8, !tbaa !58
  %270 = getelementptr inbounds i8, ptr %1, i64 100
  %271 = load i32, ptr %270, align 4, !tbaa !36
  %272 = load i16, ptr %250, align 8, !tbaa !19
  %273 = zext i16 %272 to i64
  %274 = getelementptr inbounds [2 x %"struct.rw::d3d9::VertexStream"], ptr %5, i64 0, i64 %273, i32 2
  %275 = load i32, ptr %274, align 4, !tbaa !31
  call void @_ZN2rw7instV3dEiPhPNS_3V3dEjj(i32 noundef %261, ptr noundef %265, ptr noundef %269, i32 noundef %271, i32 noundef %275)
  br label %276

276:                                              ; preds = %256, %245, %._crit_edge194
  %277 = load ptr, ptr %5, align 8, !tbaa !14
  call void @_ZN2rw3d3d14unlockVerticesEPv(ptr noundef %277)
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %4) #5
  ret void
}

declare void @_ZN2rw7instV3dEiPhPNS_3V3dEjj(i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare noundef i32 @_ZN2rw9instColorEiPhPNS_4RGBAEjj(i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @_ZN2rw13instTexCoordsEiPhPNS_9TexCoordsEjj(i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { nounwind }
attributes #6 = { noreturn 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, !11, i64 16}
!6 = !{!"_ZTSN2rw8GeometryE", !7, i64 0, !11, i64 16, !12, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !10, i64 40, !10, i64 48, !8, i64 56, !10, i64 120, !13, i64 128, !10, i64 144, !10, i64 152, !11, i64 160}
!7 = !{!"_ZTSN2rw6ObjectE", !8, i64 0, !8, i64 1, !8, i64 2, !8, i64 3, !10, i64 8}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"short", !8, i64 0}
!13 = !{!"_ZTSN2rw12MaterialListE", !10, i64 0, !11, i64 8, !11, i64 12}
!14 = !{!15, !10, i64 0}
!15 = !{!"_ZTSN2rw4d3d912VertexStreamE", !10, i64 0, !11, i64 8, !11, i64 12, !12, i64 16, !8, i64 18, !8, i64 19}
!16 = !{!15, !11, i64 8}
!17 = !{!15, !8, i64 18}
!18 = !{!15, !8, i64 19}
!19 = !{!20, !12, i64 0}
!20 = !{!"_ZTSN2rw4d3d913VertexElementE", !12, i64 0, !12, i64 2, !8, i64 4, !8, i64 5, !8, i64 6, !8, i64 7}
!21 = !{!20, !12, i64 2}
!22 = !{!8, !8, i64 0}
!23 = !{!15, !12, i64 16}
!24 = !{!6, !11, i64 36}
!25 = !{!20, !8, i64 4}
!26 = !{!20, !8, i64 5}
!27 = !{!20, !8, i64 6}
!28 = !{!20, !8, i64 7}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!15, !11, i64 12}
!32 = !{!33, !10, i64 88}
!33 = !{!"_ZTSN2rw4d3d918InstanceDataHeaderE", !34, i64 0, !11, i64 4, !11, i64 8, !10, i64 16, !11, i64 24, !8, i64 32, !11, i64 80, !10, i64 88, !11, i64 96, !11, i64 100, !10, i64 104}
!34 = !{!"_ZTSN2rw18InstanceDataHeaderE", !11, i64 0}
!35 = !{!6, !12, i64 20}
!36 = !{!33, !11, i64 100}
!37 = distinct !{!37, !30}
!38 = !{!11, !11, i64 0}
!39 = !{!6, !10, i64 120}
!40 = !{!41, !10, i64 24}
!41 = !{!"_ZTSN2rw11MorphTargetE", !10, i64 0, !42, i64 8, !10, i64 24, !10, i64 32}
!42 = !{!"_ZTSN2rw6SphereE", !43, i64 0, !44, i64 12}
!43 = !{!"_ZTSN2rw3V3dE", !44, i64 0, !44, i64 4, !44, i64 8}
!44 = !{!"float", !8, i64 0}
!45 = distinct !{!45, !30}
!46 = !{!33, !11, i64 8}
!47 = !{!33, !10, i64 104}
!48 = !{!49, !11, i64 4}
!49 = !{!"_ZTSN2rw4d3d912InstanceDataE", !11, i64 0, !11, i64 4, !10, i64 8, !11, i64 16, !10, i64 24, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44}
!50 = !{!6, !10, i64 48}
!51 = !{!49, !11, i64 36}
!52 = !{!49, !11, i64 16}
!53 = distinct !{!53, !30}
!54 = distinct !{!54, !30}
!55 = !{!10, !10, i64 0}
!56 = distinct !{!56, !30}
!57 = distinct !{!57, !30}
!58 = !{!41, !10, i64 32}


; Effective O3 passes: BDCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass