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

; 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] }
%"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::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 }
%"struct.rw::Mesh" = type { ptr, i32, ptr }

; 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: mustprogress uwtable
define dso_local void @_ZN2rw3ps215getInstMeshInfoEPNS0_11MatPipelineEPNS_8GeometryEPNS_4MeshE(ptr dead_on_unwind noalias writable sret(%"struct.rw::ps2::InstMeshInfo") align 4 %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #1 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  store ptr %3, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %11 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 0
  store i32 0, ptr %11, align 4, !tbaa !9
  %12 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 1
  store i32 0, ptr %12, align 4, !tbaa !12
  %13 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 9
  store i32 0, ptr %13, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %14

14:                                               ; preds = %50, %4
  %15 = load i32, ptr %9, align 4, !tbaa !14
  %16 = zext i32 %15 to i64
  %17 = icmp ult i64 %16, 10
  br i1 %17, label %19, label %18

18:                                               ; preds = %14
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  br label %53

19:                                               ; preds = %14
  %20 = load ptr, ptr %5, align 8, !tbaa !5
  %21 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %20, i32 0, i32 5
  %22 = load i32, ptr %9, align 4, !tbaa !14
  %23 = zext i32 %22 to i64
  %24 = getelementptr inbounds [10 x ptr], ptr %21, i64 0, i64 %23
  %25 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %25, ptr %8, align 8, !tbaa !5
  %26 = icmp ne ptr %25, null
  br i1 %26, label %27, label %49

27:                                               ; preds = %19
  %28 = load ptr, ptr %8, align 8, !tbaa !5
  %29 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %28, i32 0, i32 1
  %30 = load i32, ptr %29, align 8, !tbaa !15
  %31 = and i32 %30, 6
  %32 = icmp ne i32 %31, 0
  br i1 %32, label %33, label %37

33:                                               ; preds = %27
  %34 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 1
  %35 = load i32, ptr %34, align 4, !tbaa !12
  %36 = add i32 %35, 1
  store i32 %36, ptr %34, align 4, !tbaa !12
  br label %48

37:                                               ; preds = %27
  %38 = load ptr, ptr %8, align 8, !tbaa !5
  %39 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %38, i32 0, i32 1
  %40 = load i32, ptr %39, align 8, !tbaa !15
  %41 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %40)
  %42 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 9
  %43 = load i32, ptr %42, align 4, !tbaa !13
  %44 = add i32 %43, %41
  store i32 %44, ptr %42, align 4, !tbaa !13
  %45 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 0
  %46 = load i32, ptr %45, align 4, !tbaa !9
  %47 = add i32 %46, 1
  store i32 %47, ptr %45, align 4, !tbaa !9
  br label %48

48:                                               ; preds = %37, %33
  br label %49

49:                                               ; preds = %48, %19
  br label %50

50:                                               ; preds = %49
  %51 = load i32, ptr %9, align 4, !tbaa !14
  %52 = add i32 %51, 1
  store i32 %52, ptr %9, align 4, !tbaa !14
  br label %14, !llvm.loop !17

53:                                               ; preds = %18
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds %"struct.rw::Geometry", ptr %54, i32 0, i32 12
  %56 = load ptr, ptr %55, align 8, !tbaa !19
  %57 = getelementptr inbounds %"struct.rw::MeshHeader", ptr %56, i32 0, i32 0
  %58 = load i32, ptr %57, align 4, !tbaa !24
  %59 = icmp eq i32 %58, 1
  br i1 %59, label %60, label %96

60:                                               ; preds = %53
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = getelementptr inbounds %"struct.rw::Mesh", ptr %61, i32 0, i32 1
  %63 = load i32, ptr %62, align 8, !tbaa !26
  %64 = sub i32 %63, 2
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %65, i32 0, i32 3
  %67 = load i32, ptr %66, align 4, !tbaa !28
  %68 = sub i32 %67, 2
  %69 = udiv i32 %64, %68
  %70 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 4
  store i32 %69, ptr %70, align 4, !tbaa !31
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %71, i32 0, i32 3
  %73 = load i32, ptr %72, align 4, !tbaa !28
  %74 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 2
  store i32 %73, ptr %74, align 4, !tbaa !32
  %75 = load ptr, ptr %7, align 8, !tbaa !5
  %76 = getelementptr inbounds %"struct.rw::Mesh", ptr %75, i32 0, i32 1
  %77 = load i32, ptr %76, align 8, !tbaa !26
  %78 = sub i32 %77, 2
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %79, i32 0, i32 3
  %81 = load i32, ptr %80, align 4, !tbaa !28
  %82 = sub i32 %81, 2
  %83 = urem i32 %78, %82
  %84 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 3
  store i32 %83, ptr %84, align 4, !tbaa !33
  %85 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 3
  %86 = load i32, ptr %85, align 4, !tbaa !33
  %87 = icmp ne i32 %86, 0
  br i1 %87, label %88, label %95

88:                                               ; preds = %60
  %89 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 4
  %90 = load i32, ptr %89, align 4, !tbaa !31
  %91 = add i32 %90, 1
  store i32 %91, ptr %89, align 4, !tbaa !31
  %92 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 3
  %93 = load i32, ptr %92, align 4, !tbaa !33
  %94 = add i32 %93, 2
  store i32 %94, ptr %92, align 4, !tbaa !33
  br label %95

95:                                               ; preds = %88, %60
  br label %122

96:                                               ; preds = %53
  %97 = load ptr, ptr %7, align 8, !tbaa !5
  %98 = getelementptr inbounds %"struct.rw::Mesh", ptr %97, i32 0, i32 1
  %99 = load i32, ptr %98, align 8, !tbaa !26
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %100, i32 0, i32 4
  %102 = load i32, ptr %101, align 8, !tbaa !34
  %103 = add i32 %99, %102
  %104 = sub i32 %103, 1
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %105, i32 0, i32 4
  %107 = load i32, ptr %106, align 8, !tbaa !34
  %108 = udiv i32 %104, %107
  %109 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 4
  store i32 %108, ptr %109, align 4, !tbaa !31
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %110, i32 0, i32 4
  %112 = load i32, ptr %111, align 8, !tbaa !34
  %113 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 2
  store i32 %112, ptr %113, align 4, !tbaa !32
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.rw::Mesh", ptr %114, i32 0, i32 1
  %116 = load i32, ptr %115, align 8, !tbaa !26
  %117 = load ptr, ptr %5, align 8, !tbaa !5
  %118 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %117, i32 0, i32 4
  %119 = load i32, ptr %118, align 8, !tbaa !34
  %120 = urem i32 %116, %119
  %121 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 3
  store i32 %120, ptr %121, align 4, !tbaa !33
  br label %122

122:                                              ; preds = %96, %95
  %123 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 3
  %124 = load i32, ptr %123, align 4, !tbaa !33
  %125 = icmp eq i32 %124, 0
  br i1 %125, label %126, label %130

126:                                              ; preds = %122
  %127 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 2
  %128 = load i32, ptr %127, align 4, !tbaa !32
  %129 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 3
  store i32 %128, ptr %129, align 4, !tbaa !33
  br label %130

130:                                              ; preds = %126, %122
  %131 = load ptr, ptr %5, align 8, !tbaa !5
  %132 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 2
  %133 = load i32, ptr %132, align 4, !tbaa !32
  %134 = call noundef i32 @_ZN2rw3ps2L12getBatchSizeEPNS0_11MatPipelineEj(ptr noundef %131, i32 noundef %133)
  %135 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 5
  store i32 %134, ptr %135, align 4, !tbaa !35
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 3
  %138 = load i32, ptr %137, align 4, !tbaa !33
  %139 = call noundef i32 @_ZN2rw3ps2L12getBatchSizeEPNS0_11MatPipelineEj(ptr noundef %136, i32 noundef %138)
  %140 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 6
  store i32 %139, ptr %140, align 4, !tbaa !36
  %141 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 1
  %142 = load i32, ptr %141, align 4, !tbaa !12
  %143 = icmp eq i32 %142, 0
  br i1 %143, label %144, label %156

144:                                              ; preds = %130
  %145 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 5
  %146 = load i32, ptr %145, align 4, !tbaa !35
  %147 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 4
  %148 = load i32, ptr %147, align 4, !tbaa !31
  %149 = sub i32 %148, 1
  %150 = mul i32 %146, %149
  %151 = add i32 1, %150
  %152 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 6
  %153 = load i32, ptr %152, align 4, !tbaa !36
  %154 = add i32 %151, %153
  %155 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 7
  store i32 %154, ptr %155, align 4, !tbaa !37
  br label %176

156:                                              ; preds = %130
  %157 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 1
  %158 = load i32, ptr %157, align 4, !tbaa !12
  %159 = mul i32 2, %158
  %160 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 4
  %161 = load i32, ptr %160, align 4, !tbaa !31
  %162 = mul i32 %159, %161
  %163 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 5
  %164 = load i32, ptr %163, align 4, !tbaa !35
  %165 = add i32 1, %164
  %166 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 4
  %167 = load i32, ptr %166, align 4, !tbaa !31
  %168 = sub i32 %167, 1
  %169 = mul i32 %165, %168
  %170 = add i32 %162, %169
  %171 = add i32 %170, 1
  %172 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 6
  %173 = load i32, ptr %172, align 4, !tbaa !36
  %174 = add i32 %171, %173
  %175 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 7
  store i32 %174, ptr %175, align 4, !tbaa !37
  br label %176

176:                                              ; preds = %156, %144
  %177 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 8
  store i32 0, ptr %177, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  store i32 0, ptr %10, align 4, !tbaa !14
  br label %178

178:                                              ; preds = %221, %176
  %179 = load i32, ptr %10, align 4, !tbaa !14
  %180 = zext i32 %179 to i64
  %181 = icmp ult i64 %180, 10
  br i1 %181, label %183, label %182

182:                                              ; preds = %178
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  br label %224

183:                                              ; preds = %178
  %184 = load ptr, ptr %5, align 8, !tbaa !5
  %185 = getelementptr inbounds %"class.rw::ps2::MatPipeline", ptr %184, i32 0, i32 5
  %186 = load i32, ptr %10, align 4, !tbaa !14
  %187 = zext i32 %186 to i64
  %188 = getelementptr inbounds [10 x ptr], ptr %185, i64 0, i64 %187
  %189 = load ptr, ptr %188, align 8, !tbaa !5
  store ptr %189, ptr %8, align 8, !tbaa !5
  %190 = icmp ne ptr %189, null
  br i1 %190, label %191, label %220

191:                                              ; preds = %183
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %192, i32 0, i32 1
  %194 = load i32, ptr %193, align 8, !tbaa !15
  %195 = and i32 %194, 6
  %196 = icmp ne i32 %195, 0
  br i1 %196, label %197, label %220

197:                                              ; preds = %191
  %198 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 8
  %199 = load i32, ptr %198, align 4, !tbaa !38
  %200 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 7
  %201 = load i32, ptr %200, align 4, !tbaa !37
  %202 = add i32 %199, %201
  %203 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 10
  %204 = load i32, ptr %10, align 4, !tbaa !14
  %205 = zext i32 %204 to i64
  %206 = getelementptr inbounds [10 x i32], ptr %203, i64 0, i64 %205
  store i32 %202, ptr %206, align 4, !tbaa !14
  %207 = load ptr, ptr %7, align 8, !tbaa !5
  %208 = getelementptr inbounds %"struct.rw::Mesh", ptr %207, i32 0, i32 1
  %209 = load i32, ptr %208, align 8, !tbaa !26
  %210 = load ptr, ptr %8, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.rw::ps2::PipeAttribute", ptr %210, i32 0, i32 1
  %212 = load i32, ptr %211, align 8, !tbaa !15
  %213 = call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %212)
  %214 = mul i32 %209, %213
  %215 = add i32 %214, 15
  %216 = lshr i32 %215, 4
  %217 = getelementptr inbounds %"struct.rw::ps2::InstMeshInfo", ptr %0, i32 0, i32 8
  %218 = load i32, ptr %217, align 4, !tbaa !38
  %219 = add i32 %218, %216
  store i32 %219, ptr %217, align 4, !tbaa !38
  br label %220

220:                                              ; preds = %197, %191, %183
  br label %221

221:                                              ; preds = %220
  %222 = load i32, ptr %10, align 4, !tbaa !14
  %223 = add i32 %222, 1
  store i32 %223, ptr %10, align 4, !tbaa !14
  br label %178, !llvm.loop !39

224:                                              ; preds = %182
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN2rw3ps2L12getBatchSizeEPNS0_11MatPipelineEj(ptr noundef, i32 noundef) #2

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


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

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN2rw3ps215getInstMeshInfoEPNS0_11MatPipelineEPNS_8GeometryEPNS_4MeshE(ptr dead_on_unwind noalias nocapture writable writeonly sret(%"struct.rw::ps2::InstMeshInfo") align 4 %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3) local_unnamed_addr #0 {
  store i32 0, ptr %0, align 4, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 4
  store i32 0, ptr %5, align 4, !tbaa !10
  %6 = getelementptr inbounds i8, ptr %0, i64 36
  store i32 0, ptr %6, align 4, !tbaa !11
  %7 = getelementptr inbounds i8, ptr %1, i64 32
  %8 = load ptr, ptr %7, align 8, !tbaa !12
  %.not35 = icmp eq ptr %8, null
  br i1 %.not35, label %15, label %9

9:                                                ; preds = %4
  %10 = getelementptr inbounds i8, ptr %8, i64 8
  %11 = load i32, ptr %10, align 8, !tbaa !14
  %12 = and i32 %11, 6
  %.not36 = icmp eq i32 %12, 0
  br i1 %.not36, label %13, label %15

13:                                               ; preds = %9
  %14 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %11)
  br label %15

15:                                               ; preds = %9, %4, %13
  %16 = phi i32 [ 0, %4 ], [ 1, %13 ], [ 0, %9 ]
  %17 = phi i32 [ 0, %4 ], [ %14, %13 ], [ 0, %9 ]
  %18 = phi i32 [ 0, %4 ], [ 0, %13 ], [ 1, %9 ]
  %19 = getelementptr inbounds i8, ptr %1, i64 40
  %20 = load ptr, ptr %19, align 8, !tbaa !12
  %.not35.1 = icmp eq ptr %20, null
  br i1 %.not35.1, label %31, label %21

21:                                               ; preds = %15
  %22 = getelementptr inbounds i8, ptr %20, i64 8
  %23 = load i32, ptr %22, align 8, !tbaa !14
  %24 = and i32 %23, 6
  %.not36.1 = icmp eq i32 %24, 0
  br i1 %.not36.1, label %27, label %25

25:                                               ; preds = %21
  %26 = add nuw nsw i32 %18, 1
  br label %31

27:                                               ; preds = %21
  %28 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %23)
  %29 = add i32 %17, %28
  %30 = add nuw nsw i32 %16, 1
  br label %31

31:                                               ; preds = %27, %25, %15
  %32 = phi i32 [ %16, %15 ], [ %30, %27 ], [ %16, %25 ]
  %33 = phi i32 [ %17, %15 ], [ %29, %27 ], [ %17, %25 ]
  %34 = phi i32 [ %18, %15 ], [ %18, %27 ], [ %26, %25 ]
  %35 = getelementptr inbounds i8, ptr %1, i64 48
  %36 = load ptr, ptr %35, align 8, !tbaa !12
  %.not35.2 = icmp eq ptr %36, null
  br i1 %.not35.2, label %47, label %37

37:                                               ; preds = %31
  %38 = getelementptr inbounds i8, ptr %36, i64 8
  %39 = load i32, ptr %38, align 8, !tbaa !14
  %40 = and i32 %39, 6
  %.not36.2 = icmp eq i32 %40, 0
  br i1 %.not36.2, label %43, label %41

41:                                               ; preds = %37
  %42 = add nuw nsw i32 %34, 1
  br label %47

43:                                               ; preds = %37
  %44 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %39)
  %45 = add i32 %33, %44
  %46 = add nuw nsw i32 %32, 1
  br label %47

47:                                               ; preds = %43, %41, %31
  %48 = phi i32 [ %32, %31 ], [ %46, %43 ], [ %32, %41 ]
  %49 = phi i32 [ %33, %31 ], [ %45, %43 ], [ %33, %41 ]
  %50 = phi i32 [ %34, %31 ], [ %34, %43 ], [ %42, %41 ]
  %51 = getelementptr inbounds i8, ptr %1, i64 56
  %52 = load ptr, ptr %51, align 8, !tbaa !12
  %.not35.3 = icmp eq ptr %52, null
  br i1 %.not35.3, label %63, label %53

53:                                               ; preds = %47
  %54 = getelementptr inbounds i8, ptr %52, i64 8
  %55 = load i32, ptr %54, align 8, !tbaa !14
  %56 = and i32 %55, 6
  %.not36.3 = icmp eq i32 %56, 0
  br i1 %.not36.3, label %59, label %57

57:                                               ; preds = %53
  %58 = add nuw nsw i32 %50, 1
  br label %63

59:                                               ; preds = %53
  %60 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %55)
  %61 = add i32 %49, %60
  %62 = add nuw nsw i32 %48, 1
  br label %63

63:                                               ; preds = %59, %57, %47
  %64 = phi i32 [ %48, %47 ], [ %62, %59 ], [ %48, %57 ]
  %65 = phi i32 [ %49, %47 ], [ %61, %59 ], [ %49, %57 ]
  %66 = phi i32 [ %50, %47 ], [ %50, %59 ], [ %58, %57 ]
  %67 = getelementptr inbounds i8, ptr %1, i64 64
  %68 = load ptr, ptr %67, align 8, !tbaa !12
  %.not35.4 = icmp eq ptr %68, null
  br i1 %.not35.4, label %79, label %69

69:                                               ; preds = %63
  %70 = getelementptr inbounds i8, ptr %68, i64 8
  %71 = load i32, ptr %70, align 8, !tbaa !14
  %72 = and i32 %71, 6
  %.not36.4 = icmp eq i32 %72, 0
  br i1 %.not36.4, label %75, label %73

73:                                               ; preds = %69
  %74 = add nuw nsw i32 %66, 1
  br label %79

75:                                               ; preds = %69
  %76 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %71)
  %77 = add i32 %65, %76
  %78 = add nuw nsw i32 %64, 1
  br label %79

79:                                               ; preds = %75, %73, %63
  %80 = phi i32 [ %64, %63 ], [ %78, %75 ], [ %64, %73 ]
  %81 = phi i32 [ %65, %63 ], [ %77, %75 ], [ %65, %73 ]
  %82 = phi i32 [ %66, %63 ], [ %66, %75 ], [ %74, %73 ]
  %83 = getelementptr inbounds i8, ptr %1, i64 72
  %84 = load ptr, ptr %83, align 8, !tbaa !12
  %.not35.5 = icmp eq ptr %84, null
  br i1 %.not35.5, label %95, label %85

85:                                               ; preds = %79
  %86 = getelementptr inbounds i8, ptr %84, i64 8
  %87 = load i32, ptr %86, align 8, !tbaa !14
  %88 = and i32 %87, 6
  %.not36.5 = icmp eq i32 %88, 0
  br i1 %.not36.5, label %91, label %89

89:                                               ; preds = %85
  %90 = add nuw nsw i32 %82, 1
  br label %95

91:                                               ; preds = %85
  %92 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %87)
  %93 = add i32 %81, %92
  %94 = add nuw nsw i32 %80, 1
  br label %95

95:                                               ; preds = %91, %89, %79
  %96 = phi i32 [ %80, %79 ], [ %94, %91 ], [ %80, %89 ]
  %97 = phi i32 [ %81, %79 ], [ %93, %91 ], [ %81, %89 ]
  %98 = phi i32 [ %82, %79 ], [ %82, %91 ], [ %90, %89 ]
  %99 = getelementptr inbounds i8, ptr %1, i64 80
  %100 = load ptr, ptr %99, align 8, !tbaa !12
  %.not35.6 = icmp eq ptr %100, null
  br i1 %.not35.6, label %111, label %101

101:                                              ; preds = %95
  %102 = getelementptr inbounds i8, ptr %100, i64 8
  %103 = load i32, ptr %102, align 8, !tbaa !14
  %104 = and i32 %103, 6
  %.not36.6 = icmp eq i32 %104, 0
  br i1 %.not36.6, label %107, label %105

105:                                              ; preds = %101
  %106 = add nuw nsw i32 %98, 1
  br label %111

107:                                              ; preds = %101
  %108 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %103)
  %109 = add i32 %97, %108
  %110 = add nuw nsw i32 %96, 1
  br label %111

111:                                              ; preds = %107, %105, %95
  %112 = phi i32 [ %96, %95 ], [ %110, %107 ], [ %96, %105 ]
  %113 = phi i32 [ %97, %95 ], [ %109, %107 ], [ %97, %105 ]
  %114 = phi i32 [ %98, %95 ], [ %98, %107 ], [ %106, %105 ]
  %115 = getelementptr inbounds i8, ptr %1, i64 88
  %116 = load ptr, ptr %115, align 8, !tbaa !12
  %.not35.7 = icmp eq ptr %116, null
  br i1 %.not35.7, label %127, label %117

117:                                              ; preds = %111
  %118 = getelementptr inbounds i8, ptr %116, i64 8
  %119 = load i32, ptr %118, align 8, !tbaa !14
  %120 = and i32 %119, 6
  %.not36.7 = icmp eq i32 %120, 0
  br i1 %.not36.7, label %123, label %121

121:                                              ; preds = %117
  %122 = add nuw nsw i32 %114, 1
  br label %127

123:                                              ; preds = %117
  %124 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %119)
  %125 = add i32 %113, %124
  %126 = add nuw nsw i32 %112, 1
  br label %127

127:                                              ; preds = %123, %121, %111
  %128 = phi i32 [ %112, %111 ], [ %126, %123 ], [ %112, %121 ]
  %129 = phi i32 [ %113, %111 ], [ %125, %123 ], [ %113, %121 ]
  %130 = phi i32 [ %114, %111 ], [ %114, %123 ], [ %122, %121 ]
  %131 = getelementptr inbounds i8, ptr %1, i64 96
  %132 = load ptr, ptr %131, align 8, !tbaa !12
  %.not35.8 = icmp eq ptr %132, null
  br i1 %.not35.8, label %143, label %133

133:                                              ; preds = %127
  %134 = getelementptr inbounds i8, ptr %132, i64 8
  %135 = load i32, ptr %134, align 8, !tbaa !14
  %136 = and i32 %135, 6
  %.not36.8 = icmp eq i32 %136, 0
  br i1 %.not36.8, label %139, label %137

137:                                              ; preds = %133
  %138 = add nuw nsw i32 %130, 1
  br label %143

139:                                              ; preds = %133
  %140 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %135)
  %141 = add i32 %129, %140
  %142 = add nuw nsw i32 %128, 1
  br label %143

143:                                              ; preds = %139, %137, %127
  %144 = phi i32 [ %128, %127 ], [ %142, %139 ], [ %128, %137 ]
  %145 = phi i32 [ %129, %127 ], [ %141, %139 ], [ %129, %137 ]
  %146 = phi i32 [ %130, %127 ], [ %130, %139 ], [ %138, %137 ]
  %147 = getelementptr inbounds i8, ptr %1, i64 104
  %148 = load ptr, ptr %147, align 8, !tbaa !12
  %.not35.9 = icmp eq ptr %148, null
  br i1 %.not35.9, label %159, label %149

149:                                              ; preds = %143
  %150 = getelementptr inbounds i8, ptr %148, i64 8
  %151 = load i32, ptr %150, align 8, !tbaa !14
  %152 = and i32 %151, 6
  %.not36.9 = icmp eq i32 %152, 0
  br i1 %.not36.9, label %155, label %153

153:                                              ; preds = %149
  %154 = add nuw nsw i32 %146, 1
  br label %159

155:                                              ; preds = %149
  %156 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %151)
  %157 = add i32 %145, %156
  %158 = add nuw nsw i32 %144, 1
  br label %159

159:                                              ; preds = %155, %153, %143
  %160 = phi i32 [ %144, %143 ], [ %158, %155 ], [ %144, %153 ]
  %161 = phi i32 [ %145, %143 ], [ %157, %155 ], [ %145, %153 ]
  %162 = phi i32 [ %146, %143 ], [ %146, %155 ], [ %154, %153 ]
  store i32 %162, ptr %5, align 4, !tbaa !10
  store i32 %161, ptr %6, align 4, !tbaa !11
  store i32 %160, ptr %0, align 4, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %2, i64 144
  %164 = load ptr, ptr %163, align 8, !tbaa !16
  %165 = load i32, ptr %164, align 4, !tbaa !21
  %166 = icmp eq i32 %165, 1
  %167 = getelementptr inbounds i8, ptr %3, i64 8
  %168 = load i32, ptr %167, align 8, !tbaa !23
  %169 = getelementptr inbounds i8, ptr %0, i64 16
  %170 = getelementptr inbounds i8, ptr %0, i64 8
  %171 = getelementptr inbounds i8, ptr %0, i64 12
  br i1 %166, label %172, label %182

172:                                              ; preds = %159
  %173 = add i32 %168, -2
  %174 = getelementptr inbounds i8, ptr %1, i64 20
  %175 = load i32, ptr %174, align 4, !tbaa !25
  %176 = add i32 %175, -2
  %177 = udiv i32 %173, %176
  store i32 %177, ptr %169, align 4, !tbaa !28
  store i32 %175, ptr %170, align 4, !tbaa !29
  %178 = urem i32 %173, %176
  %.not = icmp eq i32 %178, 0
  br i1 %.not, label %.thread, label %179

179:                                              ; preds = %172
  %180 = add i32 %177, 1
  store i32 %180, ptr %169, align 4, !tbaa !28
  %181 = add i32 %178, 2
  br label %189

182:                                              ; preds = %159
  %183 = getelementptr inbounds i8, ptr %1, i64 24
  %184 = load i32, ptr %183, align 8, !tbaa !30
  %185 = add i32 %168, -1
  %186 = add i32 %185, %184
  %187 = udiv i32 %186, %184
  store i32 %187, ptr %169, align 4, !tbaa !28
  store i32 %184, ptr %170, align 4, !tbaa !29
  %188 = urem i32 %168, %184
  br label %189

189:                                              ; preds = %179, %182
  %.sink50 = phi i32 [ %181, %179 ], [ %188, %182 ]
  %190 = phi i32 [ %180, %179 ], [ %187, %182 ]
  %191 = phi i32 [ %175, %179 ], [ %184, %182 ]
  store i32 %.sink50, ptr %171, align 4, !tbaa !31
  %192 = icmp eq i32 %.sink50, 0
  br i1 %192, label %.thread, label %196

.thread:                                          ; preds = %172, %189
  %193 = phi i32 [ %191, %189 ], [ %175, %172 ]
  %194 = phi i32 [ %190, %189 ], [ %177, %172 ]
  %195 = getelementptr inbounds i8, ptr %0, i64 12
  store i32 %193, ptr %195, align 4, !tbaa !31
  br label %196

196:                                              ; preds = %.thread, %189
  %197 = phi i32 [ %193, %.thread ], [ %191, %189 ]
  %198 = phi i32 [ %194, %.thread ], [ %190, %189 ]
  %199 = phi i32 [ %193, %.thread ], [ %.sink50, %189 ]
  %200 = tail call noundef i32 @_ZN2rw3ps2L12getBatchSizeEPNS0_11MatPipelineEj(ptr noundef nonnull %1, i32 noundef %197)
  %201 = getelementptr inbounds i8, ptr %0, i64 20
  store i32 %200, ptr %201, align 4, !tbaa !32
  %202 = tail call noundef i32 @_ZN2rw3ps2L12getBatchSizeEPNS0_11MatPipelineEj(ptr noundef nonnull %1, i32 noundef %199)
  %203 = getelementptr inbounds i8, ptr %0, i64 24
  store i32 %202, ptr %203, align 4, !tbaa !33
  %204 = icmp eq i32 %162, 0
  br i1 %204, label %205, label %210

205:                                              ; preds = %196
  %206 = add i32 %198, -1
  %207 = mul i32 %206, %200
  %208 = add i32 %202, 1
  %209 = add i32 %208, %207
  br label %219

210:                                              ; preds = %196
  %211 = shl nuw nsw i32 %162, 1
  %212 = mul i32 %211, %198
  %213 = add i32 %200, 1
  %214 = add i32 %198, -1
  %215 = mul i32 %214, %213
  %216 = add i32 %202, 1
  %217 = add i32 %216, %212
  %218 = add i32 %217, %215
  br label %219

219:                                              ; preds = %210, %205
  %.sink = phi i32 [ %209, %205 ], [ %218, %210 ]
  %220 = getelementptr inbounds i8, ptr %0, i64 28
  store i32 %.sink, ptr %220, align 4
  %221 = getelementptr inbounds i8, ptr %0, i64 32
  store i32 0, ptr %221, align 4, !tbaa !34
  %222 = getelementptr inbounds i8, ptr %0, i64 40
  %223 = getelementptr inbounds i8, ptr %3, i64 8
  %224 = load ptr, ptr %7, align 8, !tbaa !12
  %.not33 = icmp eq ptr %224, null
  br i1 %.not33, label %235, label %225

225:                                              ; preds = %219
  %226 = getelementptr inbounds i8, ptr %224, i64 8
  %227 = load i32, ptr %226, align 8, !tbaa !14
  %228 = and i32 %227, 6
  %.not34 = icmp eq i32 %228, 0
  br i1 %.not34, label %235, label %229

229:                                              ; preds = %225
  store i32 %.sink, ptr %222, align 4, !tbaa !35
  %230 = load i32, ptr %223, align 8, !tbaa !23
  %231 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %227)
  %232 = mul i32 %231, %230
  %233 = add i32 %232, 15
  %234 = lshr i32 %233, 4
  br label %235

235:                                              ; preds = %219, %225, %229
  %236 = phi i32 [ 0, %219 ], [ 0, %225 ], [ %234, %229 ]
  %237 = load ptr, ptr %19, align 8, !tbaa !12
  %.not33.1 = icmp eq ptr %237, null
  br i1 %.not33.1, label %251, label %238

238:                                              ; preds = %235
  %239 = getelementptr inbounds i8, ptr %237, i64 8
  %240 = load i32, ptr %239, align 8, !tbaa !14
  %241 = and i32 %240, 6
  %.not34.1 = icmp eq i32 %241, 0
  br i1 %.not34.1, label %251, label %242

242:                                              ; preds = %238
  %243 = add i32 %.sink, %236
  %244 = getelementptr inbounds i8, ptr %0, i64 44
  store i32 %243, ptr %244, align 4, !tbaa !35
  %245 = load i32, ptr %223, align 8, !tbaa !23
  %246 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %240)
  %247 = mul i32 %246, %245
  %248 = add i32 %247, 15
  %249 = lshr i32 %248, 4
  %250 = add nuw nsw i32 %249, %236
  br label %251

251:                                              ; preds = %242, %238, %235
  %252 = phi i32 [ %236, %235 ], [ %236, %238 ], [ %250, %242 ]
  %253 = load ptr, ptr %35, align 8, !tbaa !12
  %.not33.2 = icmp eq ptr %253, null
  br i1 %.not33.2, label %267, label %254

254:                                              ; preds = %251
  %255 = getelementptr inbounds i8, ptr %253, i64 8
  %256 = load i32, ptr %255, align 8, !tbaa !14
  %257 = and i32 %256, 6
  %.not34.2 = icmp eq i32 %257, 0
  br i1 %.not34.2, label %267, label %258

258:                                              ; preds = %254
  %259 = add i32 %.sink, %252
  %260 = getelementptr inbounds i8, ptr %0, i64 48
  store i32 %259, ptr %260, align 4, !tbaa !35
  %261 = load i32, ptr %223, align 8, !tbaa !23
  %262 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %256)
  %263 = mul i32 %262, %261
  %264 = add i32 %263, 15
  %265 = lshr i32 %264, 4
  %266 = add nuw nsw i32 %265, %252
  br label %267

267:                                              ; preds = %258, %254, %251
  %268 = phi i32 [ %252, %251 ], [ %252, %254 ], [ %266, %258 ]
  %269 = load ptr, ptr %51, align 8, !tbaa !12
  %.not33.3 = icmp eq ptr %269, null
  br i1 %.not33.3, label %283, label %270

270:                                              ; preds = %267
  %271 = getelementptr inbounds i8, ptr %269, i64 8
  %272 = load i32, ptr %271, align 8, !tbaa !14
  %273 = and i32 %272, 6
  %.not34.3 = icmp eq i32 %273, 0
  br i1 %.not34.3, label %283, label %274

274:                                              ; preds = %270
  %275 = add i32 %.sink, %268
  %276 = getelementptr inbounds i8, ptr %0, i64 52
  store i32 %275, ptr %276, align 4, !tbaa !35
  %277 = load i32, ptr %223, align 8, !tbaa !23
  %278 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %272)
  %279 = mul i32 %278, %277
  %280 = add i32 %279, 15
  %281 = lshr i32 %280, 4
  %282 = add nuw nsw i32 %281, %268
  br label %283

283:                                              ; preds = %274, %270, %267
  %284 = phi i32 [ %268, %267 ], [ %268, %270 ], [ %282, %274 ]
  %285 = load ptr, ptr %67, align 8, !tbaa !12
  %.not33.4 = icmp eq ptr %285, null
  br i1 %.not33.4, label %299, label %286

286:                                              ; preds = %283
  %287 = getelementptr inbounds i8, ptr %285, i64 8
  %288 = load i32, ptr %287, align 8, !tbaa !14
  %289 = and i32 %288, 6
  %.not34.4 = icmp eq i32 %289, 0
  br i1 %.not34.4, label %299, label %290

290:                                              ; preds = %286
  %291 = add i32 %.sink, %284
  %292 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 %291, ptr %292, align 4, !tbaa !35
  %293 = load i32, ptr %223, align 8, !tbaa !23
  %294 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %288)
  %295 = mul i32 %294, %293
  %296 = add i32 %295, 15
  %297 = lshr i32 %296, 4
  %298 = add nuw nsw i32 %297, %284
  br label %299

299:                                              ; preds = %290, %286, %283
  %300 = phi i32 [ %284, %283 ], [ %284, %286 ], [ %298, %290 ]
  %301 = load ptr, ptr %83, align 8, !tbaa !12
  %.not33.5 = icmp eq ptr %301, null
  br i1 %.not33.5, label %315, label %302

302:                                              ; preds = %299
  %303 = getelementptr inbounds i8, ptr %301, i64 8
  %304 = load i32, ptr %303, align 8, !tbaa !14
  %305 = and i32 %304, 6
  %.not34.5 = icmp eq i32 %305, 0
  br i1 %.not34.5, label %315, label %306

306:                                              ; preds = %302
  %307 = add i32 %.sink, %300
  %308 = getelementptr inbounds i8, ptr %0, i64 60
  store i32 %307, ptr %308, align 4, !tbaa !35
  %309 = load i32, ptr %223, align 8, !tbaa !23
  %310 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %304)
  %311 = mul i32 %310, %309
  %312 = add i32 %311, 15
  %313 = lshr i32 %312, 4
  %314 = add nuw nsw i32 %313, %300
  br label %315

315:                                              ; preds = %306, %302, %299
  %316 = phi i32 [ %300, %299 ], [ %300, %302 ], [ %314, %306 ]
  %317 = load ptr, ptr %99, align 8, !tbaa !12
  %.not33.6 = icmp eq ptr %317, null
  br i1 %.not33.6, label %331, label %318

318:                                              ; preds = %315
  %319 = getelementptr inbounds i8, ptr %317, i64 8
  %320 = load i32, ptr %319, align 8, !tbaa !14
  %321 = and i32 %320, 6
  %.not34.6 = icmp eq i32 %321, 0
  br i1 %.not34.6, label %331, label %322

322:                                              ; preds = %318
  %323 = add i32 %.sink, %316
  %324 = getelementptr inbounds i8, ptr %0, i64 64
  store i32 %323, ptr %324, align 4, !tbaa !35
  %325 = load i32, ptr %223, align 8, !tbaa !23
  %326 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %320)
  %327 = mul i32 %326, %325
  %328 = add i32 %327, 15
  %329 = lshr i32 %328, 4
  %330 = add nuw nsw i32 %329, %316
  br label %331

331:                                              ; preds = %322, %318, %315
  %332 = phi i32 [ %316, %315 ], [ %316, %318 ], [ %330, %322 ]
  %333 = load ptr, ptr %115, align 8, !tbaa !12
  %.not33.7 = icmp eq ptr %333, null
  br i1 %.not33.7, label %347, label %334

334:                                              ; preds = %331
  %335 = getelementptr inbounds i8, ptr %333, i64 8
  %336 = load i32, ptr %335, align 8, !tbaa !14
  %337 = and i32 %336, 6
  %.not34.7 = icmp eq i32 %337, 0
  br i1 %.not34.7, label %347, label %338

338:                                              ; preds = %334
  %339 = add i32 %.sink, %332
  %340 = getelementptr inbounds i8, ptr %0, i64 68
  store i32 %339, ptr %340, align 4, !tbaa !35
  %341 = load i32, ptr %223, align 8, !tbaa !23
  %342 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %336)
  %343 = mul i32 %342, %341
  %344 = add i32 %343, 15
  %345 = lshr i32 %344, 4
  %346 = add nuw nsw i32 %345, %332
  br label %347

347:                                              ; preds = %338, %334, %331
  %348 = phi i32 [ %332, %331 ], [ %332, %334 ], [ %346, %338 ]
  %349 = load ptr, ptr %131, align 8, !tbaa !12
  %.not33.8 = icmp eq ptr %349, null
  br i1 %.not33.8, label %363, label %350

350:                                              ; preds = %347
  %351 = getelementptr inbounds i8, ptr %349, i64 8
  %352 = load i32, ptr %351, align 8, !tbaa !14
  %353 = and i32 %352, 6
  %.not34.8 = icmp eq i32 %353, 0
  br i1 %.not34.8, label %363, label %354

354:                                              ; preds = %350
  %355 = add i32 %.sink, %348
  %356 = getelementptr inbounds i8, ptr %0, i64 72
  store i32 %355, ptr %356, align 4, !tbaa !35
  %357 = load i32, ptr %223, align 8, !tbaa !23
  %358 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %352)
  %359 = mul i32 %358, %357
  %360 = add i32 %359, 15
  %361 = lshr i32 %360, 4
  %362 = add nuw i32 %361, %348
  br label %363

363:                                              ; preds = %354, %350, %347
  %364 = phi i32 [ %348, %347 ], [ %348, %350 ], [ %362, %354 ]
  %365 = load ptr, ptr %147, align 8, !tbaa !12
  %.not33.9 = icmp eq ptr %365, null
  br i1 %.not33.9, label %379, label %366

366:                                              ; preds = %363
  %367 = getelementptr inbounds i8, ptr %365, i64 8
  %368 = load i32, ptr %367, align 8, !tbaa !14
  %369 = and i32 %368, 6
  %.not34.9 = icmp eq i32 %369, 0
  br i1 %.not34.9, label %379, label %370

370:                                              ; preds = %366
  %371 = add i32 %.sink, %364
  %372 = getelementptr inbounds i8, ptr %0, i64 76
  store i32 %371, ptr %372, align 4, !tbaa !35
  %373 = load i32, ptr %223, align 8, !tbaa !23
  %374 = tail call noundef i32 @_ZN2rw3ps2L10attribSizeEj(i32 noundef %368)
  %375 = mul i32 %374, %373
  %376 = add i32 %375, 15
  %377 = lshr i32 %376, 4
  %378 = add nuw i32 %377, %364
  br label %379

379:                                              ; preds = %370, %366, %363
  %380 = phi i32 [ %364, %363 ], [ %364, %366 ], [ %378, %370 ]
  store i32 %380, ptr %221, align 4, !tbaa !34
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN2rw3ps2L12getBatchSizeEPNS0_11MatPipelineEj(ptr noundef, i32 noundef) local_unnamed_addr #0

attributes #0 = { 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" }

!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 0}
!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 = !{!6, !7, i64 4}
!11 = !{!6, !7, i64 36}
!12 = !{!13, !13, i64 0}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!15, !7, i64 8}
!15 = !{!"_ZTSN2rw3ps213PipeAttributeE", !13, i64 0, !7, i64 8}
!16 = !{!17, !13, i64 144}
!17 = !{!"_ZTSN2rw8GeometryE", !18, i64 0, !7, i64 16, !19, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !13, i64 40, !13, i64 48, !8, i64 56, !13, i64 120, !20, i64 128, !13, i64 144, !13, i64 152, !7, i64 160}
!18 = !{!"_ZTSN2rw6ObjectE", !8, i64 0, !8, i64 1, !8, i64 2, !8, i64 3, !13, i64 8}
!19 = !{!"short", !8, i64 0}
!20 = !{!"_ZTSN2rw12MaterialListE", !13, i64 0, !7, i64 8, !7, i64 12}
!21 = !{!22, !7, i64 0}
!22 = !{!"_ZTSN2rw10MeshHeaderE", !7, i64 0, !19, i64 4, !19, i64 6, !7, i64 8, !7, i64 12}
!23 = !{!24, !7, i64 8}
!24 = !{!"_ZTSN2rw4MeshE", !13, i64 0, !7, i64 8, !13, i64 16}
!25 = !{!26, !7, i64 20}
!26 = !{!"_ZTSN2rw3ps211MatPipelineE", !27, i64 0, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !8, i64 32, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136}
!27 = !{!"_ZTSN2rw8PipelineE", !7, i64 0, !7, i64 4, !7, i64 8}
!28 = !{!6, !7, i64 16}
!29 = !{!6, !7, i64 8}
!30 = !{!26, !7, i64 24}
!31 = !{!6, !7, i64 12}
!32 = !{!6, !7, i64 20}
!33 = !{!6, !7, i64 24}
!34 = !{!6, !7, i64 32}
!35 = !{!7, !7, i64 0}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass