; LLVM IR from aap/librw :: src/ps2 (ps2)

; 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::ps2::InstMeshInfo" = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [10 x i32] }
%"struct.rw::Mesh" = type { ptr, i32, ptr }
%"class.rw::ps2::MatPipeline" = type { %"class.rw::Pipeline", i32, i32, i32, i32, [10 x ptr], ptr, ptr, ptr, ptr }
%"class.rw::Pipeline" = type { i32, i32, i32 }
%"struct.rw::ps2::PipeAttribute" = type { ptr, i32 }
%"struct.rw::ps2::InstanceData" = type { i32, ptr, ptr, ptr }
%"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::MeshHeader" = type { i32, i16, i16, i32, i32 }

@stderr = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._ZN2rw3ps211MatPipeline11collectDataEPNS_8GeometryEPNS0_12InstanceDataEPNS_4MeshEPPh = external hidden unnamed_addr constant [87 x i8], align 1

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

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN2rw14mustmalloc_LOCEmjPKc(i64 noundef, i32 noundef, ptr noundef) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN2rw3ps215getInstMeshInfoEPNS0_11MatPipelineEPNS_8GeometryEPNS_4MeshE(ptr dead_on_unwind noalias writable sret(%"struct.rw::ps2::InstMeshInfo") align 4, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef) #5

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN2rw3ps211MatPipeline11collectDataEPNS_8GeometryEPNS0_12InstanceDataEPNS_4MeshEPPh(ptr noundef nonnull align 8 dereferenceable(144) %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #4 align 2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca %"struct.rw::ps2::InstMeshInfo", align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca [10 x ptr], align 16
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  %25 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 80, ptr %12) #7
  %26 = load ptr, ptr %7, align 8, !tbaa !5
  %27 = load ptr, ptr %9, align 8, !tbaa !5
  call void @_ZN2rw3ps215getInstMeshInfoEPNS0_11MatPipelineEPNS_8GeometryEPNS_4MeshE(ptr dead_on_unwind writable sret(%"struct.rw::ps2::InstMeshInfo") align 4 %12, ptr noundef %25, ptr noundef %26, ptr noundef %27)
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %28 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %12, i32 0, i32 9
  %29 = load i32, ptr %28, align 4, !tbaa !9
  %30 = load ptr, ptr %9, align 8, !tbaa !5
  %31 = getelementptr inbounds %"struct.rw::Mesh", ptr %30, i32 0, i32 1
  %32 = load i32, ptr %31, align 8, !tbaa !12
  %33 = mul i32 %29, %32
  %34 = zext i32 %33 to i64
  %35 = mul i64 %34, 1
  %36 = call noundef ptr @_ZN2rw14mustmalloc_LOCEmjPKc(i64 noundef %35, i32 noundef 196623, ptr noundef @.str.27)
  store ptr %36, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %37 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %37, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  store i32 0, ptr %15, align 4, !tbaa !14
  br label %38

38:                                               ; preds = %91, %5
  %39 = load i32, ptr %15, align 4, !tbaa !14
  %40 = zext i32 %39 to i64
  %41 = icmp ult i64 %40, 10
  br i1 %41, label %43, label %42

42:                                               ; preds = %38
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %94

43:                                               ; preds = %38
  %44 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %25, i32 0, i32 5
  %45 = load i32, ptr %15, align 4, !tbaa !14
  %46 = zext i32 %45 to i64
  %47 = getelementptr inbounds [10 x ptr], ptr %44, i64 0, i64 %46
  %48 = load ptr, ptr %47, align 8, !tbaa !5
  store ptr %48, ptr %11, align 8, !tbaa !5
  %49 = icmp ne ptr %48, null
  br i1 %49, label %50, label %90

50:                                               ; preds = %43
  %51 = load ptr, ptr %11, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %51, i32 0, i32 1
  %53 = load i32, ptr %52, align 8, !tbaa !15
  %54 = and i32 %53, 6
  %55 = icmp ne i32 %54, 0
  br i1 %55, label %56, label %72

56:                                               ; preds = %50
  %57 = load ptr, ptr %8, align 8, !tbaa !5
  %58 = getelementptr inbounds %"struct.rw::ps2::InstanceData", ptr %57, i32 0, i32 2
  %59 = load ptr, ptr %58, align 8, !tbaa !17
  %60 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %12, i32 0, i32 10
  %61 = load i32, ptr %15, align 4, !tbaa !14
  %62 = zext i32 %61 to i64
  %63 = getelementptr inbounds [10 x i32], ptr %60, i64 0, i64 %62
  %64 = load i32, ptr %63, align 4, !tbaa !14
  %65 = mul i32 %64, 16
  %66 = zext i32 %65 to i64
  %67 = getelementptr inbounds i8, ptr %59, i64 %66
  %68 = load ptr, ptr %10, align 8, !tbaa !5
  %69 = load i32, ptr %15, align 4, !tbaa !14
  %70 = zext i32 %69 to i64
  %71 = getelementptr inbounds ptr, ptr %68, i64 %70
  store ptr %67, ptr %71, align 8, !tbaa !5
  br label %89

72:                                               ; preds = %50
  %73 = load ptr, ptr %14, align 8, !tbaa !5
  %74 = load ptr, ptr %10, align 8, !tbaa !5
  %75 = load i32, ptr %15, align 4, !tbaa !14
  %76 = zext i32 %75 to i64
  %77 = getelementptr inbounds ptr, ptr %74, i64 %76
  store ptr %73, ptr %77, align 8, !tbaa !5
  %78 = load ptr, ptr %9, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.rw::Mesh", ptr %78, i32 0, i32 1
  %80 = load i32, ptr %79, align 8, !tbaa !12
  %81 = load ptr, ptr %11, align 8, !tbaa !5
  %82 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %81, i32 0, i32 1
  %83 = load i32, ptr %82, align 8, !tbaa !15
  %84 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %83)
  %85 = mul i32 %80, %84
  %86 = load ptr, ptr %14, align 8, !tbaa !5
  %87 = zext i32 %85 to i64
  %88 = getelementptr inbounds i8, ptr %86, i64 %87
  store ptr %88, ptr %14, align 8, !tbaa !5
  br label %89

89:                                               ; preds = %72, %56
  br label %90

90:                                               ; preds = %89, %43
  br label %91

91:                                               ; preds = %90
  %92 = load i32, ptr %15, align 4, !tbaa !14
  %93 = add i32 %92, 1
  store i32 %93, ptr %15, align 4, !tbaa !14
  br label %38, !llvm.loop !19

94:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 80, ptr %16) #7
  %95 = getelementptr inbounds [10 x ptr], ptr %16, i64 0, i64 0
  %96 = load ptr, ptr %10, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %95, ptr align 8 %96, i64 80, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %97 = load ptr, ptr %7, align 8, !tbaa !5
  %98 = getelementptr inbounds %"struct.rw::Geometry", ptr %97, i32 0, i32 12
  %99 = load ptr, ptr %98, align 8, !tbaa !21
  %100 = getelementptr inbounds %"struct.rw::MeshHeader", ptr %99, i32 0, i32 0
  %101 = load i32, ptr %100, align 4, !tbaa !26
  %102 = icmp eq i32 %101, 1
  %103 = zext i1 %102 to i64
  %104 = select i1 %102, i32 2, i32 0
  store i32 %104, ptr %17, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %105 = load ptr, ptr %8, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.rw::ps2::InstanceData", ptr %105, i32 0, i32 2
  %107 = load ptr, ptr %106, align 8, !tbaa !17
  store ptr %107, ptr %18, align 8, !tbaa !5
  %108 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %12, i32 0, i32 1
  %109 = load i32, ptr %108, align 4, !tbaa !28
  %110 = icmp eq i32 %109, 0
  br i1 %110, label %111, label %114

111:                                              ; preds = %94
  %112 = load ptr, ptr %18, align 8, !tbaa !5
  %113 = getelementptr inbounds i32, ptr %112, i64 4
  store ptr %113, ptr %18, align 8, !tbaa !5
  br label %114

114:                                              ; preds = %111, %94
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !14
  br label %115

115:                                              ; preds = %247, %114
  %116 = load i32, ptr %19, align 4, !tbaa !14
  %117 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %12, i32 0, i32 4
  %118 = load i32, ptr %117, align 4, !tbaa !29
  %119 = icmp ult i32 %116, %118
  br i1 %119, label %121, label %120

120:                                              ; preds = %115
  store i32 5, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %250

121:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %122 = load i32, ptr %19, align 4, !tbaa !14
  %123 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %12, i32 0, i32 4
  %124 = load i32, ptr %123, align 4, !tbaa !29
  %125 = sub i32 %124, 1
  %126 = icmp ult i32 %122, %125
  br i1 %126, label %127, label %130

127:                                              ; preds = %121
  %128 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %12, i32 0, i32 2
  %129 = load i32, ptr %128, align 4, !tbaa !30
  br label %133

130:                                              ; preds = %121
  %131 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %12, i32 0, i32 3
  %132 = load i32, ptr %131, align 4, !tbaa !31
  br label %133

133:                                              ; preds = %130, %127
  %134 = phi i32 [ %129, %127 ], [ %132, %130 ]
  store i32 %134, ptr %21, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !14
  br label %135

135:                                              ; preds = %157, %133
  %136 = load i32, ptr %22, align 4, !tbaa !14
  %137 = zext i32 %136 to i64
  %138 = icmp ult i64 %137, 10
  br i1 %138, label %140, label %139

139:                                              ; preds = %135
  store i32 8, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %160

140:                                              ; preds = %135
  %141 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %25, i32 0, i32 5
  %142 = load i32, ptr %22, align 4, !tbaa !14
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds [10 x ptr], ptr %141, i64 0, i64 %143
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  store ptr %145, ptr %11, align 8, !tbaa !5
  %146 = icmp ne ptr %145, null
  br i1 %146, label %147, label %156

147:                                              ; preds = %140
  %148 = load ptr, ptr %11, align 8, !tbaa !5
  %149 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %148, i32 0, i32 1
  %150 = load i32, ptr %149, align 8, !tbaa !15
  %151 = and i32 %150, 6
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %153, label %156

153:                                              ; preds = %147
  %154 = load ptr, ptr %18, align 8, !tbaa !5
  %155 = getelementptr inbounds i32, ptr %154, i64 8
  store ptr %155, ptr %18, align 8, !tbaa !5
  br label %156

156:                                              ; preds = %153, %147, %140
  br label %157

157:                                              ; preds = %156
  %158 = load i32, ptr %22, align 4, !tbaa !14
  %159 = add i32 %158, 1
  store i32 %159, ptr %22, align 4, !tbaa !14
  br label %135, !llvm.loop !32

160:                                              ; preds = %139
  %161 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %12, i32 0, i32 1
  %162 = load i32, ptr %161, align 4, !tbaa !28
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %167

164:                                              ; preds = %160
  %165 = load ptr, ptr %18, align 8, !tbaa !5
  %166 = getelementptr inbounds i32, ptr %165, i64 4
  store ptr %166, ptr %18, align 8, !tbaa !5
  br label %167

167:                                              ; preds = %164, %160
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 0, ptr %23, align 4, !tbaa !14
  br label %168

168:                                              ; preds = %241, %167
  %169 = load i32, ptr %23, align 4, !tbaa !14
  %170 = zext i32 %169 to i64
  %171 = icmp ult i64 %170, 10
  br i1 %171, label %173, label %172

172:                                              ; preds = %168
  store i32 11, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %244

173:                                              ; preds = %168
  %174 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %25, i32 0, i32 5
  %175 = load i32, ptr %23, align 4, !tbaa !14
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds [10 x ptr], ptr %174, i64 0, i64 %176
  %178 = load ptr, ptr %177, align 8, !tbaa !5
  store ptr %178, ptr %11, align 8, !tbaa !5
  %179 = icmp ne ptr %178, null
  br i1 %179, label %180, label %240

180:                                              ; preds = %173
  %181 = load ptr, ptr %11, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %181, i32 0, i32 1
  %183 = load i32, ptr %182, align 8, !tbaa !15
  %184 = and i32 %183, 6
  %185 = icmp eq i32 %184, 0
  br i1 %185, label %186, label %240

186:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %187 = load ptr, ptr %11, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %187, i32 0, i32 1
  %189 = load i32, ptr %188, align 8, !tbaa !15
  %190 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %189)
  store i32 %190, ptr %24, align 4, !tbaa !14
  %191 = load ptr, ptr %18, align 8, !tbaa !5
  %192 = getelementptr inbounds i32, ptr %191, i64 4
  store ptr %192, ptr %18, align 8, !tbaa !5
  %193 = load ptr, ptr %18, align 8, !tbaa !5
  %194 = getelementptr inbounds i32, ptr %193, i64 -1
  %195 = load i32, ptr %194, align 4, !tbaa !14
  %196 = and i32 %195, -16760832
  %197 = load ptr, ptr %11, align 8, !tbaa !5
  %198 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %197, i32 0, i32 1
  %199 = load i32, ptr %198, align 8, !tbaa !15
  %200 = icmp ne i32 %196, %199
  br i1 %200, label %201, label %210

201:                                              ; preds = %186
  %202 = load ptr, ptr @stderr, align 8, !tbaa !5
  %203 = load ptr, ptr %18, align 8, !tbaa !5
  %204 = getelementptr inbounds i32, ptr %203, i64 -1
  %205 = load i32, ptr %204, align 4, !tbaa !14
  %206 = load ptr, ptr %11, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %206, i32 0, i32 1
  %208 = load i32, ptr %207, align 8, !tbaa !15
  %209 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %202, ptr noundef @.str.28, i32 noundef %205, i32 noundef %208) #7
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.1, i32 noundef 802, ptr noundef @__PRETTY_FUNCTION__._ZN2rw3ps211MatPipeline11collectDataEPNS_8GeometryEPNS0_12InstanceDataEPNS_4MeshEPPh) #8
  unreachable

210:                                              ; preds = %186
  %211 = load i32, ptr %23, align 4, !tbaa !14
  %212 = zext i32 %211 to i64
  %213 = getelementptr inbounds [10 x ptr], ptr %16, i64 0, i64 %212
  %214 = load ptr, ptr %213, align 8, !tbaa !5
  %215 = load ptr, ptr %18, align 8, !tbaa !5
  %216 = load i32, ptr %24, align 4, !tbaa !14
  %217 = load i32, ptr %21, align 4, !tbaa !14
  %218 = mul i32 %216, %217
  %219 = zext i32 %218 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %214, ptr align 4 %215, i64 %219, i1 false)
  %220 = load i32, ptr %24, align 4, !tbaa !14
  %221 = load i32, ptr %21, align 4, !tbaa !14
  %222 = load i32, ptr %17, align 4, !tbaa !14
  %223 = sub i32 %221, %222
  %224 = mul i32 %220, %223
  %225 = load i32, ptr %23, align 4, !tbaa !14
  %226 = zext i32 %225 to i64
  %227 = getelementptr inbounds [10 x ptr], ptr %16, i64 0, i64 %226
  %228 = load ptr, ptr %227, align 8, !tbaa !5
  %229 = zext i32 %224 to i64
  %230 = getelementptr inbounds i8, ptr %228, i64 %229
  store ptr %230, ptr %227, align 8, !tbaa !5
  %231 = load i32, ptr %24, align 4, !tbaa !14
  %232 = load i32, ptr %21, align 4, !tbaa !14
  %233 = mul i32 %231, %232
  %234 = add i32 %233, 15
  %235 = lshr i32 %234, 4
  %236 = mul i32 %235, 4
  %237 = load ptr, ptr %18, align 8, !tbaa !5
  %238 = zext i32 %236 to i64
  %239 = getelementptr inbounds i32, ptr %237, i64 %238
  store ptr %239, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %240

240:                                              ; preds = %210, %180, %173
  br label %241

241:                                              ; preds = %240
  %242 = load i32, ptr %23, align 4, !tbaa !14
  %243 = add i32 %242, 1
  store i32 %243, ptr %23, align 4, !tbaa !14
  br label %168, !llvm.loop !33

244:                                              ; preds = %172
  %245 = load ptr, ptr %18, align 8, !tbaa !5
  %246 = getelementptr inbounds i32, ptr %245, i64 4
  store ptr %246, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %247

247:                                              ; preds = %244
  %248 = load i32, ptr %19, align 4, !tbaa !14
  %249 = add i32 %248, 1
  store i32 %249, ptr %19, align 4, !tbaa !14
  br label %115, !llvm.loop !34

250:                                              ; preds = %120
  %251 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 1, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  ret ptr %251
}

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress 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 #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nounwind }
attributes #8 = { 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, !11, i64 36}
!10 = !{!"_ZTSN2rw3ps212InstMeshInfoE", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !7, i64 40}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !11, i64 8}
!13 = !{!"_ZTSN2rw4MeshE", !6, i64 0, !11, i64 8, !6, i64 16}
!14 = !{!11, !11, i64 0}
!15 = !{!16, !11, i64 8}
!16 = !{!"_ZTSN2rw3ps213PipeAttributeE", !6, i64 0, !11, i64 8}
!17 = !{!18, !6, i64 16}
!18 = !{!"_ZTSN2rw3ps212InstanceDataE", !11, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !6, i64 144}
!22 = !{!"_ZTSN2rw8GeometryE", !23, i64 0, !11, i64 16, !24, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !6, i64 40, !6, i64 48, !7, i64 56, !6, i64 120, !25, i64 128, !6, i64 144, !6, i64 152, !11, i64 160}
!23 = !{!"_ZTSN2rw6ObjectE", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !6, i64 8}
!24 = !{!"short", !7, i64 0}
!25 = !{!"_ZTSN2rw12MaterialListE", !6, i64 0, !11, i64 8, !11, i64 12}
!26 = !{!27, !11, i64 0}
!27 = !{!"_ZTSN2rw10MeshHeaderE", !11, i64 0, !24, i64 4, !24, i64 6, !11, i64 8, !11, i64 12}
!28 = !{!10, !11, i64 4}
!29 = !{!10, !11, i64 16}
!30 = !{!10, !11, i64 8}
!31 = !{!10, !11, i64 12}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}


; 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::ps2::InstMeshInfo" = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [10 x i32] }

@stderr = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._ZN2rw3ps211MatPipeline11collectDataEPNS_8GeometryEPNS0_12InstanceDataEPNS_4MeshEPPh = external hidden unnamed_addr constant [87 x i8], align 1

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN2rw14mustmalloc_LOCEmjPKc(i64 noundef, i32 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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN2rw3ps215getInstMeshInfoEPNS0_11MatPipelineEPNS_8GeometryEPNS_4MeshE(ptr dead_on_unwind noalias writable sret(%"struct.rw::ps2::InstMeshInfo") align 4, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN2rw3ps211MatPipeline11collectDataEPNS_8GeometryEPNS0_12InstanceDataEPNS_4MeshEPPh(ptr noundef nonnull align 8 dereferenceable(144) %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr nocapture noundef %4) local_unnamed_addr #4 align 2 {
  %6 = alloca %"struct.rw::ps2::InstMeshInfo", align 4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %6) #7
  call void @_ZN2rw3ps215getInstMeshInfoEPNS0_11MatPipelineEPNS_8GeometryEPNS_4MeshE(ptr dead_on_unwind nonnull writable sret(%"struct.rw::ps2::InstMeshInfo") align 4 %6, ptr noundef nonnull %0, ptr noundef %1, ptr noundef %3)
  %7 = getelementptr inbounds i8, ptr %6, i64 36
  %8 = load i32, ptr %7, align 4, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %3, i64 8
  %10 = load i32, ptr %9, align 8, !tbaa !10
  %11 = mul i32 %10, %8
  %12 = zext i32 %11 to i64
  %13 = call noundef ptr @_ZN2rw14mustmalloc_LOCEmjPKc(i64 noundef %12, i32 noundef 196623, ptr noundef nonnull @.str.27)
  %14 = getelementptr inbounds i8, ptr %0, i64 32
  %15 = getelementptr inbounds i8, ptr %2, i64 16
  %16 = getelementptr inbounds i8, ptr %6, i64 40
  %17 = load ptr, ptr %14, align 8, !tbaa !13
  %.not72 = icmp eq ptr %17, null
  br i1 %.not72, label %39, label %23

.lr.ph:                                           ; preds = %233
  %.sroa.21.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 72
  %.sroa.21.0.copyload = load ptr, ptr %.sroa.21.0..sroa_idx, align 8
  %.sroa.19.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 64
  %.sroa.19.0.copyload = load ptr, ptr %.sroa.19.0..sroa_idx, align 8
  %.sroa.17.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 56
  %.sroa.17.0.copyload = load ptr, ptr %.sroa.17.0..sroa_idx, align 8
  %.sroa.15.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 48
  %.sroa.15.0.copyload = load ptr, ptr %.sroa.15.0..sroa_idx, align 8
  %.sroa.13.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 40
  %.sroa.13.0.copyload = load ptr, ptr %.sroa.13.0..sroa_idx, align 8
  %.sroa.11.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 32
  %.sroa.11.0.copyload = load ptr, ptr %.sroa.11.0..sroa_idx, align 8
  %.sroa.9.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 24
  %.sroa.9.0.copyload = load ptr, ptr %.sroa.9.0..sroa_idx, align 8
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 16
  %.sroa.7.0.copyload = load ptr, ptr %.sroa.7.0..sroa_idx, align 8
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 8
  %.sroa.5.0.copyload = load ptr, ptr %.sroa.5.0..sroa_idx, align 8
  %.sroa.0.0.copyload = load ptr, ptr %4, align 8
  %18 = load ptr, ptr %15, align 8, !tbaa !14
  %19 = load i32, ptr %238, align 4, !tbaa !16
  %20 = icmp eq i32 %19, 0
  %spec.select.idx = select i1 %20, i64 16, i64 0
  %spec.select = getelementptr inbounds i8, ptr %18, i64 %spec.select.idx
  %21 = getelementptr inbounds i8, ptr %6, i64 8
  %22 = getelementptr inbounds i8, ptr %6, i64 12
  br label %241

23:                                               ; preds = %5
  %24 = getelementptr inbounds i8, ptr %17, i64 8
  %25 = load i32, ptr %24, align 8, !tbaa !17
  %26 = and i32 %25, 6
  %.not73 = icmp eq i32 %26, 0
  br i1 %.not73, label %33, label %27

27:                                               ; preds = %23
  %28 = load ptr, ptr %15, align 8, !tbaa !14
  %29 = load i32, ptr %16, align 4, !tbaa !19
  %30 = shl i32 %29, 4
  %31 = zext i32 %30 to i64
  %32 = getelementptr inbounds i8, ptr %28, i64 %31
  store ptr %32, ptr %4, align 8, !tbaa !13
  br label %39

33:                                               ; preds = %23
  store ptr %13, ptr %4, align 8, !tbaa !13
  %34 = load i32, ptr %9, align 8, !tbaa !10
  %35 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %25)
  %36 = mul i32 %35, %34
  %37 = zext i32 %36 to i64
  %38 = getelementptr inbounds i8, ptr %13, i64 %37
  br label %39

39:                                               ; preds = %5, %33, %27
  %.1 = phi ptr [ %13, %27 ], [ %38, %33 ], [ %13, %5 ]
  %40 = getelementptr inbounds i8, ptr %0, i64 40
  %41 = load ptr, ptr %40, align 8, !tbaa !13
  %.not72.1 = icmp eq ptr %41, null
  br i1 %.not72.1, label %61, label %42

42:                                               ; preds = %39
  %43 = getelementptr inbounds i8, ptr %41, i64 8
  %44 = load i32, ptr %43, align 8, !tbaa !17
  %45 = and i32 %44, 6
  %.not73.1 = icmp eq i32 %45, 0
  br i1 %.not73.1, label %54, label %46

46:                                               ; preds = %42
  %47 = load ptr, ptr %15, align 8, !tbaa !14
  %48 = getelementptr inbounds i8, ptr %6, i64 44
  %49 = load i32, ptr %48, align 4, !tbaa !19
  %50 = shl i32 %49, 4
  %51 = zext i32 %50 to i64
  %52 = getelementptr inbounds i8, ptr %47, i64 %51
  %53 = getelementptr inbounds i8, ptr %4, i64 8
  store ptr %52, ptr %53, align 8, !tbaa !13
  br label %61

54:                                               ; preds = %42
  %55 = getelementptr inbounds i8, ptr %4, i64 8
  store ptr %.1, ptr %55, align 8, !tbaa !13
  %56 = load i32, ptr %9, align 8, !tbaa !10
  %57 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %44)
  %58 = mul i32 %57, %56
  %59 = zext i32 %58 to i64
  %60 = getelementptr inbounds i8, ptr %.1, i64 %59
  br label %61

61:                                               ; preds = %54, %46, %39
  %.1.1 = phi ptr [ %.1, %46 ], [ %60, %54 ], [ %.1, %39 ]
  %62 = getelementptr inbounds i8, ptr %0, i64 48
  %63 = load ptr, ptr %62, align 8, !tbaa !13
  %.not72.2 = icmp eq ptr %63, null
  br i1 %.not72.2, label %83, label %64

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %63, i64 8
  %66 = load i32, ptr %65, align 8, !tbaa !17
  %67 = and i32 %66, 6
  %.not73.2 = icmp eq i32 %67, 0
  br i1 %.not73.2, label %76, label %68

68:                                               ; preds = %64
  %69 = load ptr, ptr %15, align 8, !tbaa !14
  %70 = getelementptr inbounds i8, ptr %6, i64 48
  %71 = load i32, ptr %70, align 4, !tbaa !19
  %72 = shl i32 %71, 4
  %73 = zext i32 %72 to i64
  %74 = getelementptr inbounds i8, ptr %69, i64 %73
  %75 = getelementptr inbounds i8, ptr %4, i64 16
  store ptr %74, ptr %75, align 8, !tbaa !13
  br label %83

76:                                               ; preds = %64
  %77 = getelementptr inbounds i8, ptr %4, i64 16
  store ptr %.1.1, ptr %77, align 8, !tbaa !13
  %78 = load i32, ptr %9, align 8, !tbaa !10
  %79 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %66)
  %80 = mul i32 %79, %78
  %81 = zext i32 %80 to i64
  %82 = getelementptr inbounds i8, ptr %.1.1, i64 %81
  br label %83

83:                                               ; preds = %76, %68, %61
  %.1.2 = phi ptr [ %.1.1, %68 ], [ %82, %76 ], [ %.1.1, %61 ]
  %84 = getelementptr inbounds i8, ptr %0, i64 56
  %85 = load ptr, ptr %84, align 8, !tbaa !13
  %.not72.3 = icmp eq ptr %85, null
  br i1 %.not72.3, label %105, label %86

86:                                               ; preds = %83
  %87 = getelementptr inbounds i8, ptr %85, i64 8
  %88 = load i32, ptr %87, align 8, !tbaa !17
  %89 = and i32 %88, 6
  %.not73.3 = icmp eq i32 %89, 0
  br i1 %.not73.3, label %98, label %90

90:                                               ; preds = %86
  %91 = load ptr, ptr %15, align 8, !tbaa !14
  %92 = getelementptr inbounds i8, ptr %6, i64 52
  %93 = load i32, ptr %92, align 4, !tbaa !19
  %94 = shl i32 %93, 4
  %95 = zext i32 %94 to i64
  %96 = getelementptr inbounds i8, ptr %91, i64 %95
  %97 = getelementptr inbounds i8, ptr %4, i64 24
  store ptr %96, ptr %97, align 8, !tbaa !13
  br label %105

98:                                               ; preds = %86
  %99 = getelementptr inbounds i8, ptr %4, i64 24
  store ptr %.1.2, ptr %99, align 8, !tbaa !13
  %100 = load i32, ptr %9, align 8, !tbaa !10
  %101 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %88)
  %102 = mul i32 %101, %100
  %103 = zext i32 %102 to i64
  %104 = getelementptr inbounds i8, ptr %.1.2, i64 %103
  br label %105

105:                                              ; preds = %98, %90, %83
  %.1.3 = phi ptr [ %.1.2, %90 ], [ %104, %98 ], [ %.1.2, %83 ]
  %106 = getelementptr inbounds i8, ptr %0, i64 64
  %107 = load ptr, ptr %106, align 8, !tbaa !13
  %.not72.4 = icmp eq ptr %107, null
  br i1 %.not72.4, label %127, label %108

108:                                              ; preds = %105
  %109 = getelementptr inbounds i8, ptr %107, i64 8
  %110 = load i32, ptr %109, align 8, !tbaa !17
  %111 = and i32 %110, 6
  %.not73.4 = icmp eq i32 %111, 0
  br i1 %.not73.4, label %120, label %112

112:                                              ; preds = %108
  %113 = load ptr, ptr %15, align 8, !tbaa !14
  %114 = getelementptr inbounds i8, ptr %6, i64 56
  %115 = load i32, ptr %114, align 4, !tbaa !19
  %116 = shl i32 %115, 4
  %117 = zext i32 %116 to i64
  %118 = getelementptr inbounds i8, ptr %113, i64 %117
  %119 = getelementptr inbounds i8, ptr %4, i64 32
  store ptr %118, ptr %119, align 8, !tbaa !13
  br label %127

120:                                              ; preds = %108
  %121 = getelementptr inbounds i8, ptr %4, i64 32
  store ptr %.1.3, ptr %121, align 8, !tbaa !13
  %122 = load i32, ptr %9, align 8, !tbaa !10
  %123 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %110)
  %124 = mul i32 %123, %122
  %125 = zext i32 %124 to i64
  %126 = getelementptr inbounds i8, ptr %.1.3, i64 %125
  br label %127

127:                                              ; preds = %120, %112, %105
  %.1.4 = phi ptr [ %.1.3, %112 ], [ %126, %120 ], [ %.1.3, %105 ]
  %128 = getelementptr inbounds i8, ptr %0, i64 72
  %129 = load ptr, ptr %128, align 8, !tbaa !13
  %.not72.5 = icmp eq ptr %129, null
  br i1 %.not72.5, label %149, label %130

130:                                              ; preds = %127
  %131 = getelementptr inbounds i8, ptr %129, i64 8
  %132 = load i32, ptr %131, align 8, !tbaa !17
  %133 = and i32 %132, 6
  %.not73.5 = icmp eq i32 %133, 0
  br i1 %.not73.5, label %142, label %134

134:                                              ; preds = %130
  %135 = load ptr, ptr %15, align 8, !tbaa !14
  %136 = getelementptr inbounds i8, ptr %6, i64 60
  %137 = load i32, ptr %136, align 4, !tbaa !19
  %138 = shl i32 %137, 4
  %139 = zext i32 %138 to i64
  %140 = getelementptr inbounds i8, ptr %135, i64 %139
  %141 = getelementptr inbounds i8, ptr %4, i64 40
  store ptr %140, ptr %141, align 8, !tbaa !13
  br label %149

142:                                              ; preds = %130
  %143 = getelementptr inbounds i8, ptr %4, i64 40
  store ptr %.1.4, ptr %143, align 8, !tbaa !13
  %144 = load i32, ptr %9, align 8, !tbaa !10
  %145 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %132)
  %146 = mul i32 %145, %144
  %147 = zext i32 %146 to i64
  %148 = getelementptr inbounds i8, ptr %.1.4, i64 %147
  br label %149

149:                                              ; preds = %142, %134, %127
  %.1.5 = phi ptr [ %.1.4, %134 ], [ %148, %142 ], [ %.1.4, %127 ]
  %150 = getelementptr inbounds i8, ptr %0, i64 80
  %151 = load ptr, ptr %150, align 8, !tbaa !13
  %.not72.6 = icmp eq ptr %151, null
  br i1 %.not72.6, label %171, label %152

152:                                              ; preds = %149
  %153 = getelementptr inbounds i8, ptr %151, i64 8
  %154 = load i32, ptr %153, align 8, !tbaa !17
  %155 = and i32 %154, 6
  %.not73.6 = icmp eq i32 %155, 0
  br i1 %.not73.6, label %164, label %156

156:                                              ; preds = %152
  %157 = load ptr, ptr %15, align 8, !tbaa !14
  %158 = getelementptr inbounds i8, ptr %6, i64 64
  %159 = load i32, ptr %158, align 4, !tbaa !19
  %160 = shl i32 %159, 4
  %161 = zext i32 %160 to i64
  %162 = getelementptr inbounds i8, ptr %157, i64 %161
  %163 = getelementptr inbounds i8, ptr %4, i64 48
  store ptr %162, ptr %163, align 8, !tbaa !13
  br label %171

164:                                              ; preds = %152
  %165 = getelementptr inbounds i8, ptr %4, i64 48
  store ptr %.1.5, ptr %165, align 8, !tbaa !13
  %166 = load i32, ptr %9, align 8, !tbaa !10
  %167 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %154)
  %168 = mul i32 %167, %166
  %169 = zext i32 %168 to i64
  %170 = getelementptr inbounds i8, ptr %.1.5, i64 %169
  br label %171

171:                                              ; preds = %164, %156, %149
  %.1.6 = phi ptr [ %.1.5, %156 ], [ %170, %164 ], [ %.1.5, %149 ]
  %172 = getelementptr inbounds i8, ptr %0, i64 88
  %173 = load ptr, ptr %172, align 8, !tbaa !13
  %.not72.7 = icmp eq ptr %173, null
  br i1 %.not72.7, label %193, label %174

174:                                              ; preds = %171
  %175 = getelementptr inbounds i8, ptr %173, i64 8
  %176 = load i32, ptr %175, align 8, !tbaa !17
  %177 = and i32 %176, 6
  %.not73.7 = icmp eq i32 %177, 0
  br i1 %.not73.7, label %186, label %178

178:                                              ; preds = %174
  %179 = load ptr, ptr %15, align 8, !tbaa !14
  %180 = getelementptr inbounds i8, ptr %6, i64 68
  %181 = load i32, ptr %180, align 4, !tbaa !19
  %182 = shl i32 %181, 4
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds i8, ptr %179, i64 %183
  %185 = getelementptr inbounds i8, ptr %4, i64 56
  store ptr %184, ptr %185, align 8, !tbaa !13
  br label %193

186:                                              ; preds = %174
  %187 = getelementptr inbounds i8, ptr %4, i64 56
  store ptr %.1.6, ptr %187, align 8, !tbaa !13
  %188 = load i32, ptr %9, align 8, !tbaa !10
  %189 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %176)
  %190 = mul i32 %189, %188
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds i8, ptr %.1.6, i64 %191
  br label %193

193:                                              ; preds = %186, %178, %171
  %.1.7 = phi ptr [ %.1.6, %178 ], [ %192, %186 ], [ %.1.6, %171 ]
  %194 = getelementptr inbounds i8, ptr %0, i64 96
  %195 = load ptr, ptr %194, align 8, !tbaa !13
  %.not72.8 = icmp eq ptr %195, null
  br i1 %.not72.8, label %215, label %196

196:                                              ; preds = %193
  %197 = getelementptr inbounds i8, ptr %195, i64 8
  %198 = load i32, ptr %197, align 8, !tbaa !17
  %199 = and i32 %198, 6
  %.not73.8 = icmp eq i32 %199, 0
  br i1 %.not73.8, label %208, label %200

200:                                              ; preds = %196
  %201 = load ptr, ptr %15, align 8, !tbaa !14
  %202 = getelementptr inbounds i8, ptr %6, i64 72
  %203 = load i32, ptr %202, align 4, !tbaa !19
  %204 = shl i32 %203, 4
  %205 = zext i32 %204 to i64
  %206 = getelementptr inbounds i8, ptr %201, i64 %205
  %207 = getelementptr inbounds i8, ptr %4, i64 64
  store ptr %206, ptr %207, align 8, !tbaa !13
  br label %215

208:                                              ; preds = %196
  %209 = getelementptr inbounds i8, ptr %4, i64 64
  store ptr %.1.7, ptr %209, align 8, !tbaa !13
  %210 = load i32, ptr %9, align 8, !tbaa !10
  %211 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %198)
  %212 = mul i32 %211, %210
  %213 = zext i32 %212 to i64
  %214 = getelementptr inbounds i8, ptr %.1.7, i64 %213
  br label %215

215:                                              ; preds = %208, %200, %193
  %.1.8 = phi ptr [ %.1.7, %200 ], [ %214, %208 ], [ %.1.7, %193 ]
  %216 = getelementptr inbounds i8, ptr %0, i64 104
  %217 = load ptr, ptr %216, align 8, !tbaa !13
  %.not72.9 = icmp eq ptr %217, null
  br i1 %.not72.9, label %233, label %218

218:                                              ; preds = %215
  %219 = getelementptr inbounds i8, ptr %217, i64 8
  %220 = load i32, ptr %219, align 8, !tbaa !17
  %221 = and i32 %220, 6
  %.not73.9 = icmp eq i32 %221, 0
  br i1 %.not73.9, label %230, label %222

222:                                              ; preds = %218
  %223 = load ptr, ptr %15, align 8, !tbaa !14
  %224 = getelementptr inbounds i8, ptr %6, i64 76
  %225 = load i32, ptr %224, align 4, !tbaa !19
  %226 = shl i32 %225, 4
  %227 = zext i32 %226 to i64
  %228 = getelementptr inbounds i8, ptr %223, i64 %227
  %229 = getelementptr inbounds i8, ptr %4, i64 72
  store ptr %228, ptr %229, align 8, !tbaa !13
  br label %233

230:                                              ; preds = %218
  %231 = getelementptr inbounds i8, ptr %4, i64 72
  store ptr %.1.8, ptr %231, align 8, !tbaa !13
  %232 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %220)
  br label %233

233:                                              ; preds = %230, %222, %215
  %234 = getelementptr inbounds i8, ptr %1, i64 144
  %235 = load ptr, ptr %234, align 8, !tbaa !20
  %236 = load i32, ptr %235, align 4, !tbaa !25
  %237 = icmp eq i32 %236, 1
  %.neg = select i1 %237, i32 -2, i32 0
  %238 = getelementptr inbounds i8, ptr %6, i64 4
  %239 = getelementptr inbounds i8, ptr %6, i64 16
  %240 = load i32, ptr %239, align 4, !tbaa !27
  %.not86 = icmp eq i32 %240, 0
  br i1 %.not86, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %561, %233
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %6) #7
  ret ptr %13

241:                                              ; preds = %.lr.ph, %561
  %.sroa.21.0 = phi ptr [ %.sroa.21.0.copyload, %.lr.ph ], [ %.sroa.21.1, %561 ]
  %.sroa.19.0 = phi ptr [ %.sroa.19.0.copyload, %.lr.ph ], [ %.sroa.19.1, %561 ]
  %.sroa.17.0 = phi ptr [ %.sroa.17.0.copyload, %.lr.ph ], [ %.sroa.17.1, %561 ]
  %.sroa.15.0 = phi ptr [ %.sroa.15.0.copyload, %.lr.ph ], [ %.sroa.15.1, %561 ]
  %.sroa.13.0 = phi ptr [ %.sroa.13.0.copyload, %.lr.ph ], [ %.sroa.13.1, %561 ]
  %.sroa.11.0 = phi ptr [ %.sroa.11.0.copyload, %.lr.ph ], [ %.sroa.11.1, %561 ]
  %.sroa.9.0 = phi ptr [ %.sroa.9.0.copyload, %.lr.ph ], [ %.sroa.9.1, %561 ]
  %.sroa.7.0 = phi ptr [ %.sroa.7.0.copyload, %.lr.ph ], [ %.sroa.7.1, %561 ]
  %.sroa.5.0 = phi ptr [ %.sroa.5.0.copyload, %.lr.ph ], [ %.sroa.5.1, %561 ]
  %.sroa.0.0 = phi ptr [ %.sroa.0.0.copyload, %.lr.ph ], [ %.sroa.0.1, %561 ]
  %242 = phi i32 [ %240, %.lr.ph ], [ %564, %561 ]
  %.05685 = phi i32 [ 0, %.lr.ph ], [ %563, %561 ]
  %.15884 = phi ptr [ %spec.select, %.lr.ph ], [ %562, %561 ]
  %243 = add i32 %242, -1
  %244 = load i32, ptr %21, align 4
  %245 = load i32, ptr %22, align 4
  %246 = load ptr, ptr %14, align 8, !tbaa !13
  %.not70 = icmp eq ptr %246, null
  br i1 %.not70, label %251, label %247

247:                                              ; preds = %241
  %248 = getelementptr inbounds i8, ptr %246, i64 8
  %249 = load i32, ptr %248, align 8, !tbaa !17
  %250 = and i32 %249, 6
  %.not71 = icmp eq i32 %250, 0
  %spec.select75.idx = select i1 %.not71, i64 0, i64 32
  %spec.select75 = getelementptr inbounds i8, ptr %.15884, i64 %spec.select75.idx
  br label %251

251:                                              ; preds = %247, %241
  %.3 = phi ptr [ %.15884, %241 ], [ %spec.select75, %247 ]
  %252 = load ptr, ptr %40, align 8, !tbaa !13
  %.not70.1 = icmp eq ptr %252, null
  br i1 %.not70.1, label %257, label %253

253:                                              ; preds = %251
  %254 = getelementptr inbounds i8, ptr %252, i64 8
  %255 = load i32, ptr %254, align 8, !tbaa !17
  %256 = and i32 %255, 6
  %.not71.1 = icmp eq i32 %256, 0
  %spec.select75.idx.1 = select i1 %.not71.1, i64 0, i64 32
  %spec.select75.1 = getelementptr inbounds i8, ptr %.3, i64 %spec.select75.idx.1
  br label %257

257:                                              ; preds = %253, %251
  %.3.1 = phi ptr [ %.3, %251 ], [ %spec.select75.1, %253 ]
  %258 = load ptr, ptr %62, align 8, !tbaa !13
  %.not70.2 = icmp eq ptr %258, null
  br i1 %.not70.2, label %263, label %259

259:                                              ; preds = %257
  %260 = getelementptr inbounds i8, ptr %258, i64 8
  %261 = load i32, ptr %260, align 8, !tbaa !17
  %262 = and i32 %261, 6
  %.not71.2 = icmp eq i32 %262, 0
  %spec.select75.idx.2 = select i1 %.not71.2, i64 0, i64 32
  %spec.select75.2 = getelementptr inbounds i8, ptr %.3.1, i64 %spec.select75.idx.2
  br label %263

263:                                              ; preds = %259, %257
  %.3.2 = phi ptr [ %.3.1, %257 ], [ %spec.select75.2, %259 ]
  %264 = load ptr, ptr %84, align 8, !tbaa !13
  %.not70.3 = icmp eq ptr %264, null
  br i1 %.not70.3, label %269, label %265

265:                                              ; preds = %263
  %266 = getelementptr inbounds i8, ptr %264, i64 8
  %267 = load i32, ptr %266, align 8, !tbaa !17
  %268 = and i32 %267, 6
  %.not71.3 = icmp eq i32 %268, 0
  %spec.select75.idx.3 = select i1 %.not71.3, i64 0, i64 32
  %spec.select75.3 = getelementptr inbounds i8, ptr %.3.2, i64 %spec.select75.idx.3
  br label %269

269:                                              ; preds = %265, %263
  %.3.3 = phi ptr [ %.3.2, %263 ], [ %spec.select75.3, %265 ]
  %270 = load ptr, ptr %106, align 8, !tbaa !13
  %.not70.4 = icmp eq ptr %270, null
  br i1 %.not70.4, label %275, label %271

271:                                              ; preds = %269
  %272 = getelementptr inbounds i8, ptr %270, i64 8
  %273 = load i32, ptr %272, align 8, !tbaa !17
  %274 = and i32 %273, 6
  %.not71.4 = icmp eq i32 %274, 0
  %spec.select75.idx.4 = select i1 %.not71.4, i64 0, i64 32
  %spec.select75.4 = getelementptr inbounds i8, ptr %.3.3, i64 %spec.select75.idx.4
  br label %275

275:                                              ; preds = %271, %269
  %.3.4 = phi ptr [ %.3.3, %269 ], [ %spec.select75.4, %271 ]
  %276 = load ptr, ptr %128, align 8, !tbaa !13
  %.not70.5 = icmp eq ptr %276, null
  br i1 %.not70.5, label %281, label %277

277:                                              ; preds = %275
  %278 = getelementptr inbounds i8, ptr %276, i64 8
  %279 = load i32, ptr %278, align 8, !tbaa !17
  %280 = and i32 %279, 6
  %.not71.5 = icmp eq i32 %280, 0
  %spec.select75.idx.5 = select i1 %.not71.5, i64 0, i64 32
  %spec.select75.5 = getelementptr inbounds i8, ptr %.3.4, i64 %spec.select75.idx.5
  br label %281

281:                                              ; preds = %277, %275
  %.3.5 = phi ptr [ %.3.4, %275 ], [ %spec.select75.5, %277 ]
  %282 = load ptr, ptr %150, align 8, !tbaa !13
  %.not70.6 = icmp eq ptr %282, null
  br i1 %.not70.6, label %287, label %283

283:                                              ; preds = %281
  %284 = getelementptr inbounds i8, ptr %282, i64 8
  %285 = load i32, ptr %284, align 8, !tbaa !17
  %286 = and i32 %285, 6
  %.not71.6 = icmp eq i32 %286, 0
  %spec.select75.idx.6 = select i1 %.not71.6, i64 0, i64 32
  %spec.select75.6 = getelementptr inbounds i8, ptr %.3.5, i64 %spec.select75.idx.6
  br label %287

287:                                              ; preds = %283, %281
  %.3.6 = phi ptr [ %.3.5, %281 ], [ %spec.select75.6, %283 ]
  %288 = load ptr, ptr %172, align 8, !tbaa !13
  %.not70.7 = icmp eq ptr %288, null
  br i1 %.not70.7, label %293, label %289

289:                                              ; preds = %287
  %290 = getelementptr inbounds i8, ptr %288, i64 8
  %291 = load i32, ptr %290, align 8, !tbaa !17
  %292 = and i32 %291, 6
  %.not71.7 = icmp eq i32 %292, 0
  %spec.select75.idx.7 = select i1 %.not71.7, i64 0, i64 32
  %spec.select75.7 = getelementptr inbounds i8, ptr %.3.6, i64 %spec.select75.idx.7
  br label %293

293:                                              ; preds = %289, %287
  %.3.7 = phi ptr [ %.3.6, %287 ], [ %spec.select75.7, %289 ]
  %294 = load ptr, ptr %194, align 8, !tbaa !13
  %.not70.8 = icmp eq ptr %294, null
  br i1 %.not70.8, label %299, label %295

295:                                              ; preds = %293
  %296 = getelementptr inbounds i8, ptr %294, i64 8
  %297 = load i32, ptr %296, align 8, !tbaa !17
  %298 = and i32 %297, 6
  %.not71.8 = icmp eq i32 %298, 0
  %spec.select75.idx.8 = select i1 %.not71.8, i64 0, i64 32
  %spec.select75.8 = getelementptr inbounds i8, ptr %.3.7, i64 %spec.select75.idx.8
  br label %299

299:                                              ; preds = %295, %293
  %.3.8 = phi ptr [ %.3.7, %293 ], [ %spec.select75.8, %295 ]
  %300 = load ptr, ptr %216, align 8, !tbaa !13
  %.not70.9 = icmp eq ptr %300, null
  br i1 %.not70.9, label %305, label %301

301:                                              ; preds = %299
  %302 = getelementptr inbounds i8, ptr %300, i64 8
  %303 = load i32, ptr %302, align 8, !tbaa !17
  %304 = and i32 %303, 6
  %.not71.9 = icmp eq i32 %304, 0
  %spec.select75.idx.9 = select i1 %.not71.9, i64 0, i64 32
  %spec.select75.9 = getelementptr inbounds i8, ptr %.3.8, i64 %spec.select75.idx.9
  br label %305

305:                                              ; preds = %301, %299
  %.3.9 = phi ptr [ %.3.8, %299 ], [ %spec.select75.9, %301 ]
  %306 = icmp ult i32 %.05685, %243
  %307 = select i1 %306, i32 %244, i32 %245
  %308 = load i32, ptr %238, align 4, !tbaa !16
  %.not = icmp eq i32 %308, 0
  %spec.select74.idx = select i1 %.not, i64 0, i64 16
  %spec.select74 = getelementptr inbounds i8, ptr %.3.9, i64 %spec.select74.idx
  %309 = add i32 %307, %.neg
  br i1 %.not70, label %336, label %310

310:                                              ; preds = %305
  %311 = getelementptr inbounds i8, ptr %246, i64 8
  %312 = load i32, ptr %311, align 8, !tbaa !17
  %313 = and i32 %312, 6
  %314 = icmp eq i32 %313, 0
  br i1 %314, label %315, label %336

315:                                              ; preds = %310
  %316 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %312)
  %317 = getelementptr inbounds i8, ptr %spec.select74, i64 12
  %318 = load i32, ptr %317, align 4, !tbaa !19
  %319 = and i32 %318, -16760832
  %320 = load i32, ptr %311, align 8, !tbaa !17
  %.not69 = icmp eq i32 %319, %320
  br i1 %.not69, label %324, label %321

321:                                              ; preds = %543, %518, %493, %468, %443, %418, %393, %368, %343, %315
  %.lcssa87 = phi i32 [ %318, %315 ], [ %346, %343 ], [ %371, %368 ], [ %396, %393 ], [ %421, %418 ], [ %446, %443 ], [ %471, %468 ], [ %496, %493 ], [ %521, %518 ], [ %546, %543 ]
  %.lcssa = phi i32 [ %320, %315 ], [ %348, %343 ], [ %373, %368 ], [ %398, %393 ], [ %423, %418 ], [ %448, %443 ], [ %473, %468 ], [ %498, %493 ], [ %523, %518 ], [ %548, %543 ]
  %322 = load ptr, ptr @stderr, align 8, !tbaa !13
  %323 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %322, ptr noundef nonnull @.str.28, i32 noundef %.lcssa87, i32 noundef %.lcssa) #8
  call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.1, i32 noundef 802, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN2rw3ps211MatPipeline11collectDataEPNS_8GeometryEPNS0_12InstanceDataEPNS_4MeshEPPh) #9
  unreachable

324:                                              ; preds = %315
  %325 = getelementptr inbounds i8, ptr %spec.select74, i64 16
  %326 = mul i32 %316, %307
  %327 = zext i32 %326 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.0.0, ptr nonnull align 4 %325, i64 %327, i1 false)
  %328 = mul i32 %316, %309
  %329 = zext i32 %328 to i64
  %330 = getelementptr inbounds i8, ptr %.sroa.0.0, i64 %329
  %331 = add i32 %326, 15
  %332 = lshr i32 %331, 2
  %333 = and i32 %332, 1073741820
  %334 = zext nneg i32 %333 to i64
  %335 = getelementptr inbounds i32, ptr %325, i64 %334
  %.pre = load ptr, ptr %40, align 8, !tbaa !13
  br label %336

336:                                              ; preds = %305, %310, %324
  %337 = phi ptr [ %252, %305 ], [ %.pre, %324 ], [ %252, %310 ]
  %.sroa.0.1 = phi ptr [ %.sroa.0.0, %305 ], [ %330, %324 ], [ %.sroa.0.0, %310 ]
  %.6 = phi ptr [ %spec.select74, %305 ], [ %335, %324 ], [ %spec.select74, %310 ]
  %.not68.1 = icmp eq ptr %337, null
  br i1 %.not68.1, label %361, label %338

338:                                              ; preds = %336
  %339 = getelementptr inbounds i8, ptr %337, i64 8
  %340 = load i32, ptr %339, align 8, !tbaa !17
  %341 = and i32 %340, 6
  %342 = icmp eq i32 %341, 0
  br i1 %342, label %343, label %361

343:                                              ; preds = %338
  %344 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %340)
  %345 = getelementptr inbounds i8, ptr %.6, i64 12
  %346 = load i32, ptr %345, align 4, !tbaa !19
  %347 = and i32 %346, -16760832
  %348 = load i32, ptr %339, align 8, !tbaa !17
  %.not69.1 = icmp eq i32 %347, %348
  br i1 %.not69.1, label %349, label %321

349:                                              ; preds = %343
  %350 = getelementptr inbounds i8, ptr %.6, i64 16
  %351 = mul i32 %344, %307
  %352 = zext i32 %351 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.5.0, ptr nonnull align 4 %350, i64 %352, i1 false)
  %353 = mul i32 %344, %309
  %354 = zext i32 %353 to i64
  %355 = getelementptr inbounds i8, ptr %.sroa.5.0, i64 %354
  %356 = add i32 %351, 15
  %357 = lshr i32 %356, 2
  %358 = and i32 %357, 1073741820
  %359 = zext nneg i32 %358 to i64
  %360 = getelementptr inbounds i32, ptr %350, i64 %359
  br label %361

361:                                              ; preds = %349, %338, %336
  %.sroa.5.1 = phi ptr [ %.sroa.5.0, %336 ], [ %355, %349 ], [ %.sroa.5.0, %338 ]
  %.6.1 = phi ptr [ %.6, %336 ], [ %360, %349 ], [ %.6, %338 ]
  %362 = load ptr, ptr %62, align 8, !tbaa !13
  %.not68.2 = icmp eq ptr %362, null
  br i1 %.not68.2, label %386, label %363

363:                                              ; preds = %361
  %364 = getelementptr inbounds i8, ptr %362, i64 8
  %365 = load i32, ptr %364, align 8, !tbaa !17
  %366 = and i32 %365, 6
  %367 = icmp eq i32 %366, 0
  br i1 %367, label %368, label %386

368:                                              ; preds = %363
  %369 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %365)
  %370 = getelementptr inbounds i8, ptr %.6.1, i64 12
  %371 = load i32, ptr %370, align 4, !tbaa !19
  %372 = and i32 %371, -16760832
  %373 = load i32, ptr %364, align 8, !tbaa !17
  %.not69.2 = icmp eq i32 %372, %373
  br i1 %.not69.2, label %374, label %321

374:                                              ; preds = %368
  %375 = getelementptr inbounds i8, ptr %.6.1, i64 16
  %376 = mul i32 %369, %307
  %377 = zext i32 %376 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.7.0, ptr nonnull align 4 %375, i64 %377, i1 false)
  %378 = mul i32 %369, %309
  %379 = zext i32 %378 to i64
  %380 = getelementptr inbounds i8, ptr %.sroa.7.0, i64 %379
  %381 = add i32 %376, 15
  %382 = lshr i32 %381, 2
  %383 = and i32 %382, 1073741820
  %384 = zext nneg i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %375, i64 %384
  br label %386

386:                                              ; preds = %374, %363, %361
  %.sroa.7.1 = phi ptr [ %.sroa.7.0, %361 ], [ %380, %374 ], [ %.sroa.7.0, %363 ]
  %.6.2 = phi ptr [ %.6.1, %361 ], [ %385, %374 ], [ %.6.1, %363 ]
  %387 = load ptr, ptr %84, align 8, !tbaa !13
  %.not68.3 = icmp eq ptr %387, null
  br i1 %.not68.3, label %411, label %388

388:                                              ; preds = %386
  %389 = getelementptr inbounds i8, ptr %387, i64 8
  %390 = load i32, ptr %389, align 8, !tbaa !17
  %391 = and i32 %390, 6
  %392 = icmp eq i32 %391, 0
  br i1 %392, label %393, label %411

393:                                              ; preds = %388
  %394 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %390)
  %395 = getelementptr inbounds i8, ptr %.6.2, i64 12
  %396 = load i32, ptr %395, align 4, !tbaa !19
  %397 = and i32 %396, -16760832
  %398 = load i32, ptr %389, align 8, !tbaa !17
  %.not69.3 = icmp eq i32 %397, %398
  br i1 %.not69.3, label %399, label %321

399:                                              ; preds = %393
  %400 = getelementptr inbounds i8, ptr %.6.2, i64 16
  %401 = mul i32 %394, %307
  %402 = zext i32 %401 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.9.0, ptr nonnull align 4 %400, i64 %402, i1 false)
  %403 = mul i32 %394, %309
  %404 = zext i32 %403 to i64
  %405 = getelementptr inbounds i8, ptr %.sroa.9.0, i64 %404
  %406 = add i32 %401, 15
  %407 = lshr i32 %406, 2
  %408 = and i32 %407, 1073741820
  %409 = zext nneg i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %400, i64 %409
  br label %411

411:                                              ; preds = %399, %388, %386
  %.sroa.9.1 = phi ptr [ %.sroa.9.0, %386 ], [ %405, %399 ], [ %.sroa.9.0, %388 ]
  %.6.3 = phi ptr [ %.6.2, %386 ], [ %410, %399 ], [ %.6.2, %388 ]
  %412 = load ptr, ptr %106, align 8, !tbaa !13
  %.not68.4 = icmp eq ptr %412, null
  br i1 %.not68.4, label %436, label %413

413:                                              ; preds = %411
  %414 = getelementptr inbounds i8, ptr %412, i64 8
  %415 = load i32, ptr %414, align 8, !tbaa !17
  %416 = and i32 %415, 6
  %417 = icmp eq i32 %416, 0
  br i1 %417, label %418, label %436

418:                                              ; preds = %413
  %419 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %415)
  %420 = getelementptr inbounds i8, ptr %.6.3, i64 12
  %421 = load i32, ptr %420, align 4, !tbaa !19
  %422 = and i32 %421, -16760832
  %423 = load i32, ptr %414, align 8, !tbaa !17
  %.not69.4 = icmp eq i32 %422, %423
  br i1 %.not69.4, label %424, label %321

424:                                              ; preds = %418
  %425 = getelementptr inbounds i8, ptr %.6.3, i64 16
  %426 = mul i32 %419, %307
  %427 = zext i32 %426 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.11.0, ptr nonnull align 4 %425, i64 %427, i1 false)
  %428 = mul i32 %419, %309
  %429 = zext i32 %428 to i64
  %430 = getelementptr inbounds i8, ptr %.sroa.11.0, i64 %429
  %431 = add i32 %426, 15
  %432 = lshr i32 %431, 2
  %433 = and i32 %432, 1073741820
  %434 = zext nneg i32 %433 to i64
  %435 = getelementptr inbounds i32, ptr %425, i64 %434
  br label %436

436:                                              ; preds = %424, %413, %411
  %.sroa.11.1 = phi ptr [ %.sroa.11.0, %411 ], [ %430, %424 ], [ %.sroa.11.0, %413 ]
  %.6.4 = phi ptr [ %.6.3, %411 ], [ %435, %424 ], [ %.6.3, %413 ]
  %437 = load ptr, ptr %128, align 8, !tbaa !13
  %.not68.5 = icmp eq ptr %437, null
  br i1 %.not68.5, label %461, label %438

438:                                              ; preds = %436
  %439 = getelementptr inbounds i8, ptr %437, i64 8
  %440 = load i32, ptr %439, align 8, !tbaa !17
  %441 = and i32 %440, 6
  %442 = icmp eq i32 %441, 0
  br i1 %442, label %443, label %461

443:                                              ; preds = %438
  %444 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %440)
  %445 = getelementptr inbounds i8, ptr %.6.4, i64 12
  %446 = load i32, ptr %445, align 4, !tbaa !19
  %447 = and i32 %446, -16760832
  %448 = load i32, ptr %439, align 8, !tbaa !17
  %.not69.5 = icmp eq i32 %447, %448
  br i1 %.not69.5, label %449, label %321

449:                                              ; preds = %443
  %450 = getelementptr inbounds i8, ptr %.6.4, i64 16
  %451 = mul i32 %444, %307
  %452 = zext i32 %451 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.13.0, ptr nonnull align 4 %450, i64 %452, i1 false)
  %453 = mul i32 %444, %309
  %454 = zext i32 %453 to i64
  %455 = getelementptr inbounds i8, ptr %.sroa.13.0, i64 %454
  %456 = add i32 %451, 15
  %457 = lshr i32 %456, 2
  %458 = and i32 %457, 1073741820
  %459 = zext nneg i32 %458 to i64
  %460 = getelementptr inbounds i32, ptr %450, i64 %459
  br label %461

461:                                              ; preds = %449, %438, %436
  %.sroa.13.1 = phi ptr [ %.sroa.13.0, %436 ], [ %455, %449 ], [ %.sroa.13.0, %438 ]
  %.6.5 = phi ptr [ %.6.4, %436 ], [ %460, %449 ], [ %.6.4, %438 ]
  %462 = load ptr, ptr %150, align 8, !tbaa !13
  %.not68.6 = icmp eq ptr %462, null
  br i1 %.not68.6, label %486, label %463

463:                                              ; preds = %461
  %464 = getelementptr inbounds i8, ptr %462, i64 8
  %465 = load i32, ptr %464, align 8, !tbaa !17
  %466 = and i32 %465, 6
  %467 = icmp eq i32 %466, 0
  br i1 %467, label %468, label %486

468:                                              ; preds = %463
  %469 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %465)
  %470 = getelementptr inbounds i8, ptr %.6.5, i64 12
  %471 = load i32, ptr %470, align 4, !tbaa !19
  %472 = and i32 %471, -16760832
  %473 = load i32, ptr %464, align 8, !tbaa !17
  %.not69.6 = icmp eq i32 %472, %473
  br i1 %.not69.6, label %474, label %321

474:                                              ; preds = %468
  %475 = getelementptr inbounds i8, ptr %.6.5, i64 16
  %476 = mul i32 %469, %307
  %477 = zext i32 %476 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.15.0, ptr nonnull align 4 %475, i64 %477, i1 false)
  %478 = mul i32 %469, %309
  %479 = zext i32 %478 to i64
  %480 = getelementptr inbounds i8, ptr %.sroa.15.0, i64 %479
  %481 = add i32 %476, 15
  %482 = lshr i32 %481, 2
  %483 = and i32 %482, 1073741820
  %484 = zext nneg i32 %483 to i64
  %485 = getelementptr inbounds i32, ptr %475, i64 %484
  br label %486

486:                                              ; preds = %474, %463, %461
  %.sroa.15.1 = phi ptr [ %.sroa.15.0, %461 ], [ %480, %474 ], [ %.sroa.15.0, %463 ]
  %.6.6 = phi ptr [ %.6.5, %461 ], [ %485, %474 ], [ %.6.5, %463 ]
  %487 = load ptr, ptr %172, align 8, !tbaa !13
  %.not68.7 = icmp eq ptr %487, null
  br i1 %.not68.7, label %511, label %488

488:                                              ; preds = %486
  %489 = getelementptr inbounds i8, ptr %487, i64 8
  %490 = load i32, ptr %489, align 8, !tbaa !17
  %491 = and i32 %490, 6
  %492 = icmp eq i32 %491, 0
  br i1 %492, label %493, label %511

493:                                              ; preds = %488
  %494 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %490)
  %495 = getelementptr inbounds i8, ptr %.6.6, i64 12
  %496 = load i32, ptr %495, align 4, !tbaa !19
  %497 = and i32 %496, -16760832
  %498 = load i32, ptr %489, align 8, !tbaa !17
  %.not69.7 = icmp eq i32 %497, %498
  br i1 %.not69.7, label %499, label %321

499:                                              ; preds = %493
  %500 = getelementptr inbounds i8, ptr %.6.6, i64 16
  %501 = mul i32 %494, %307
  %502 = zext i32 %501 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.17.0, ptr nonnull align 4 %500, i64 %502, i1 false)
  %503 = mul i32 %494, %309
  %504 = zext i32 %503 to i64
  %505 = getelementptr inbounds i8, ptr %.sroa.17.0, i64 %504
  %506 = add i32 %501, 15
  %507 = lshr i32 %506, 2
  %508 = and i32 %507, 1073741820
  %509 = zext nneg i32 %508 to i64
  %510 = getelementptr inbounds i32, ptr %500, i64 %509
  br label %511

511:                                              ; preds = %499, %488, %486
  %.sroa.17.1 = phi ptr [ %.sroa.17.0, %486 ], [ %505, %499 ], [ %.sroa.17.0, %488 ]
  %.6.7 = phi ptr [ %.6.6, %486 ], [ %510, %499 ], [ %.6.6, %488 ]
  %512 = load ptr, ptr %194, align 8, !tbaa !13
  %.not68.8 = icmp eq ptr %512, null
  br i1 %.not68.8, label %536, label %513

513:                                              ; preds = %511
  %514 = getelementptr inbounds i8, ptr %512, i64 8
  %515 = load i32, ptr %514, align 8, !tbaa !17
  %516 = and i32 %515, 6
  %517 = icmp eq i32 %516, 0
  br i1 %517, label %518, label %536

518:                                              ; preds = %513
  %519 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %515)
  %520 = getelementptr inbounds i8, ptr %.6.7, i64 12
  %521 = load i32, ptr %520, align 4, !tbaa !19
  %522 = and i32 %521, -16760832
  %523 = load i32, ptr %514, align 8, !tbaa !17
  %.not69.8 = icmp eq i32 %522, %523
  br i1 %.not69.8, label %524, label %321

524:                                              ; preds = %518
  %525 = getelementptr inbounds i8, ptr %.6.7, i64 16
  %526 = mul i32 %519, %307
  %527 = zext i32 %526 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.19.0, ptr nonnull align 4 %525, i64 %527, i1 false)
  %528 = mul i32 %519, %309
  %529 = zext i32 %528 to i64
  %530 = getelementptr inbounds i8, ptr %.sroa.19.0, i64 %529
  %531 = add i32 %526, 15
  %532 = lshr i32 %531, 2
  %533 = and i32 %532, 1073741820
  %534 = zext nneg i32 %533 to i64
  %535 = getelementptr inbounds i32, ptr %525, i64 %534
  br label %536

536:                                              ; preds = %524, %513, %511
  %.sroa.19.1 = phi ptr [ %.sroa.19.0, %511 ], [ %530, %524 ], [ %.sroa.19.0, %513 ]
  %.6.8 = phi ptr [ %.6.7, %511 ], [ %535, %524 ], [ %.6.7, %513 ]
  %537 = load ptr, ptr %216, align 8, !tbaa !13
  %.not68.9 = icmp eq ptr %537, null
  br i1 %.not68.9, label %561, label %538

538:                                              ; preds = %536
  %539 = getelementptr inbounds i8, ptr %537, i64 8
  %540 = load i32, ptr %539, align 8, !tbaa !17
  %541 = and i32 %540, 6
  %542 = icmp eq i32 %541, 0
  br i1 %542, label %543, label %561

543:                                              ; preds = %538
  %544 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %540)
  %545 = getelementptr inbounds i8, ptr %.6.8, i64 12
  %546 = load i32, ptr %545, align 4, !tbaa !19
  %547 = and i32 %546, -16760832
  %548 = load i32, ptr %539, align 8, !tbaa !17
  %.not69.9 = icmp eq i32 %547, %548
  br i1 %.not69.9, label %549, label %321

549:                                              ; preds = %543
  %550 = getelementptr inbounds i8, ptr %.6.8, i64 16
  %551 = mul i32 %544, %307
  %552 = zext i32 %551 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sroa.21.0, ptr nonnull align 4 %550, i64 %552, i1 false)
  %553 = mul i32 %544, %309
  %554 = zext i32 %553 to i64
  %555 = getelementptr inbounds i8, ptr %.sroa.21.0, i64 %554
  %556 = add i32 %551, 15
  %557 = lshr i32 %556, 2
  %558 = and i32 %557, 1073741820
  %559 = zext nneg i32 %558 to i64
  %560 = getelementptr inbounds i32, ptr %550, i64 %559
  br label %561

561:                                              ; preds = %549, %538, %536
  %.sroa.21.1 = phi ptr [ %.sroa.21.0, %536 ], [ %555, %549 ], [ %.sroa.21.0, %538 ]
  %.6.9 = phi ptr [ %.6.8, %536 ], [ %560, %549 ], [ %.6.8, %538 ]
  %562 = getelementptr inbounds i8, ptr %.6.9, i64 16
  %563 = add nuw i32 %.05685, 1
  %564 = load i32, ptr %239, align 4, !tbaa !27
  %565 = icmp ult i32 %563, %564
  br i1 %565, label %241, label %._crit_edge, !llvm.loop !28
}

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress 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 #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nounwind }
attributes #8 = { cold nounwind }
attributes #9 = { 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, !7, i64 36}
!6 = !{!"_ZTSN2rw3ps212InstMeshInfoE", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !8, i64 40}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !7, i64 8}
!11 = !{!"_ZTSN2rw4MeshE", !12, i64 0, !7, i64 8, !12, i64 16}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!12, !12, i64 0}
!14 = !{!15, !12, i64 16}
!15 = !{!"_ZTSN2rw3ps212InstanceDataE", !7, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!16 = !{!6, !7, i64 4}
!17 = !{!18, !7, i64 8}
!18 = !{!"_ZTSN2rw3ps213PipeAttributeE", !12, i64 0, !7, i64 8}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !12, i64 144}
!21 = !{!"_ZTSN2rw8GeometryE", !22, i64 0, !7, i64 16, !23, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !12, i64 40, !12, i64 48, !8, i64 56, !12, i64 120, !24, i64 128, !12, i64 144, !12, i64 152, !7, i64 160}
!22 = !{!"_ZTSN2rw6ObjectE", !8, i64 0, !8, i64 1, !8, i64 2, !8, i64 3, !12, i64 8}
!23 = !{!"short", !8, i64 0}
!24 = !{!"_ZTSN2rw12MaterialListE", !12, i64 0, !7, i64 8, !7, i64 12}
!25 = !{!26, !7, i64 0}
!26 = !{!"_ZTSN2rw10MeshHeaderE", !7, i64 0, !23, i64 4, !23, i64 6, !7, i64 8, !7, i64 12}
!27 = !{!6, !7, i64 16}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}


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