; LLVM IR from Try/Tempest :: Engine/thirdparty/spirv_cross (spirv_hlsl)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.325", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.328", %"class.spirv_cross::TypedID.328", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.324" }>
%"class.spirv_cross::TypedID.324" = type { i32 }
%"class.spirv_cross::SmallVector.325" = type { %"class.spirv_cross::VectorView.326", i64, %"class.spirv_cross::AlignedBuffer.327" }
%"class.spirv_cross::VectorView.326" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.327" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.328", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.328" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.spirv_cross::SPIRAccessChain" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.328", i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, %"class.spirv_cross::TypedID.330", i32, i32, i8, i8, %"class.spirv_cross::SmallVector.10" }
%"class.spirv_cross::TypedID.330" = type { i32 }
%"class.spirv_cross::SmallVector.10" = type { %"class.spirv_cross::VectorView.11", i64, %"class.spirv_cross::AlignedBuffer.12" }
%"class.spirv_cross::VectorView.11" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.12" = type { [32 x i8] }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.324", [4 x i8] }>
%"class.spirv_cross::CompilerHLSL" = type { %"class.spirv_cross::CompilerGLSL", %"struct.spirv_cross::CompilerHLSL::Options", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, %"struct.spirv_cross::CompilerHLSL::TextureSizeVariants", i8, i8, %"class.spirv_cross::SmallVector.277", i32, i32, %"class.std::vector.280", i32, %"class.std::unordered_map.285", %"class.std::unordered_set.302", %struct.anon, %"class.std::vector.319" }
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.30", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.10"], %"class.spirv_cross::SmallVector.10", %"class.spirv_cross::SmallVector.10", %"class.std::unordered_map.13", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.spirv_cross::SmallVector.33", %"class.std::unordered_map.36", %"class.std::unordered_map.55", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.13" = type { %"class.std::_Hashtable.14" }
%"class.std::_Hashtable.14" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.33" = type { %"class.spirv_cross::VectorView.34", i64, %"class.spirv_cross::AlignedBuffer.35" }
%"class.spirv_cross::VectorView.34" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.35" = type { [8 x i8] }
%"class.std::unordered_map.36" = type { %"class.std::_Hashtable.37" }
%"class.std::_Hashtable.37" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.55" = type { %"class.std::_Hashtable.56" }
%"class.std::_Hashtable.56" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [256 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_map.213" = type { %"class.std::_Hashtable.214" }
%"class.std::_Hashtable.214" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set.245" = type { %"class.std::_Hashtable.246" }
%"class.std::_Hashtable.246" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.263" = type { %"class.std::_Hashtable.264" }
%"class.std::_Hashtable.264" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerHLSL::Options" = type <{ i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8] }>
%"struct.spirv_cross::CompilerHLSL::TextureSizeVariants" = type { i64, [3 x [4 x i64]] }
%"class.spirv_cross::SmallVector.277" = type { %"class.spirv_cross::VectorView.278", i64, %"class.spirv_cross::AlignedBuffer.279" }
%"class.spirv_cross::VectorView.278" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.279" = type { [320 x i8] }
%"class.std::vector.280" = type { %"struct.std::_Vector_base.281" }
%"struct.std::_Vector_base.281" = type { %"struct.std::_Vector_base<spirv_cross::RootConstants, std::allocator<spirv_cross::RootConstants>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::RootConstants, std::allocator<spirv_cross::RootConstants>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::RootConstants, std::allocator<spirv_cross::RootConstants>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::RootConstants, std::allocator<spirv_cross::RootConstants>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_map.285" = type { %"class.std::_Hashtable.286" }
%"class.std::_Hashtable.286" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set.302" = type { %"class.std::_Hashtable.303" }
%"class.std::_Hashtable.303" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%struct.anon = type <{ i32, i32, i8, i8, [2 x i8] }>
%"class.std::vector.319" = type { %"struct.std::_Vector_base.320" }
%"struct.std::_Vector_base.320" = type { %"struct.std::_Vector_base<spirv_cross::TypedID<spirv_cross::TypeType>, std::allocator<spirv_cross::TypedID<spirv_cross::TypeType>>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::TypedID<spirv_cross::TypeType>, std::allocator<spirv_cross::TypedID<spirv_cross::TypeType>>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::TypedID<spirv_cross::TypeType>, std::allocator<spirv_cross::TypedID<spirv_cross::TypeType>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::TypedID<spirv_cross::TypeType>, std::allocator<spirv_cross::TypedID<spirv_cross::TypeType>>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.341 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.379 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.406 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.417 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.530 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.531 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.537 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.542 = external hidden unnamed_addr constant [125 x i8], align 1
@.str.543 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.544 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.545 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.546 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.547 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.548 = external hidden unnamed_addr constant [3 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: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #1 align 2

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #3

declare ptr @__cxa_allocate_exception(i64)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #1 align 2

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) unnamed_addr #1 align 2

declare void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #1

declare void @_ZN11spirv_cross12CompilerGLSL21track_expression_readEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjS9_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_arrayERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528), ptr noundef nonnull align 8 dereferenceable(168), i32 noundef, ptr noundef nonnull align 8 dereferenceable(56)) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerHLSL18write_access_chainERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(168) %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3) #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca %"struct.spirv_cross::SPIRType", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.spirv_cross::TypedID.324", align 4
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"struct.spirv_cross::SPIRType", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca i32, align 4
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca %"struct.spirv_cross::SPIRType", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca i32, align 4
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca i32, align 4
  %42 = alloca %"struct.spirv_cross::SPIRType", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca ptr, align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  %53 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %54, i32 0, i32 1
  %56 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %55)
  %57 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %53, i32 noundef %56)
  store ptr %57, ptr %9, align 8, !tbaa !5
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %58, i32 0, i32 1
  %60 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %59)
  call void @_ZN11spirv_cross12CompilerGLSL21track_expression_readEj(ptr noundef nonnull align 8 dereferenceable(9848) %53, i32 noundef %60)
  call void @llvm.lifetime.start.p0(i64 336, ptr %10) #8
  %61 = load ptr, ptr %9, align 8, !tbaa !5
  %62 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %53, ptr noundef nonnull align 8 dereferenceable(336) %61)
  br i1 %62, label %63, label %64

63:                                               ; preds = %4
  br label %68

64:                                               ; preds = %4
  %65 = load ptr, ptr %9, align 8, !tbaa !5
  %66 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %65, i32 0, i32 1
  %67 = load i32, ptr %66, align 4, !tbaa !11
  br label %68

68:                                               ; preds = %64, %63
  %69 = phi i32 [ 21, %63 ], [ %67, %64 ]
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %10, i32 noundef %69)
  %70 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %10, i32 0, i32 2
  store i32 8, ptr %70, align 8, !tbaa !39
  %71 = load ptr, ptr %9, align 8, !tbaa !5
  %72 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %71, i32 0, i32 4
  %73 = load i32, ptr %72, align 8, !tbaa !40
  %74 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %10, i32 0, i32 4
  store i32 %73, ptr %74, align 8, !tbaa !40
  %75 = load ptr, ptr %9, align 8, !tbaa !5
  %76 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %75, i32 0, i32 5
  %77 = load i32, ptr %76, align 4, !tbaa !41
  %78 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %10, i32 0, i32 5
  store i32 %77, ptr %78, align 4, !tbaa !41
  %79 = load ptr, ptr %9, align 8, !tbaa !5
  %80 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %79, i32 0, i32 6
  %81 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %80) #8
  br i1 %81, label %96, label %82

82:                                               ; preds = %68
  %83 = load ptr, ptr %6, align 8, !tbaa !5
  %84 = load i32, ptr %7, align 4, !tbaa !9
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_arrayERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(168) %83, i32 noundef %84, ptr noundef nonnull align 8 dereferenceable(56) %85)
          to label %86 unwind label %92

86:                                               ; preds = %82
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %87, i32 0, i32 1
  %89 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %88)
          to label %90 unwind label %92

90:                                               ; preds = %86
  invoke void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %53, i32 noundef %89)
          to label %91 unwind label %92

91:                                               ; preds = %90
  store i32 1, ptr %13, align 4
  br label %612

92:                                               ; preds = %123, %109, %105, %101, %90, %86, %82
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %11, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %12, align 4
  br label %622

96:                                               ; preds = %68
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %97, i32 0, i32 2
  %99 = load i32, ptr %98, align 8, !tbaa !39
  %100 = icmp eq i32 %99, 15
  br i1 %100, label %101, label %111

101:                                              ; preds = %96
  %102 = load ptr, ptr %6, align 8, !tbaa !5
  %103 = load i32, ptr %7, align 4, !tbaa !9
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerHLSL25write_access_chain_structERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(168) %102, i32 noundef %103, ptr noundef nonnull align 8 dereferenceable(56) %104)
          to label %105 unwind label %92

105:                                              ; preds = %101
  %106 = load ptr, ptr %6, align 8, !tbaa !5
  %107 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %106, i32 0, i32 1
  %108 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %107)
          to label %109 unwind label %92

109:                                              ; preds = %105
  invoke void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %53, i32 noundef %108)
          to label %110 unwind label %92

110:                                              ; preds = %109
  store i32 1, ptr %13, align 4
  br label %612

111:                                              ; preds = %96
  %112 = load ptr, ptr %9, align 8, !tbaa !5
  %113 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %112, i32 0, i32 3
  %114 = load i32, ptr %113, align 4, !tbaa !42
  %115 = icmp ne i32 %114, 32
  br i1 %115, label %116, label %128

116:                                              ; preds = %111
  %117 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %53, i32 0, i32 1
  %118 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %117, i32 0, i32 6
  %119 = load i8, ptr %118, align 1, !tbaa !43, !range !157, !noundef !158
  %120 = trunc i8 %119 to i1
  br i1 %120, label %128, label %121

121:                                              ; preds = %116
  %122 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %122, ptr noundef @.str.542)
          to label %123 unwind label %124

123:                                              ; preds = %121
  invoke void @__cxa_throw(ptr %122, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %628 unwind label %92

124:                                              ; preds = %121
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %11, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %12, align 4
  call void @__cxa_free_exception(ptr %122) #8
  br label %622

128:                                              ; preds = %116, %111
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #8
  %131 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %53, i32 0, i32 1
  %132 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %131, i32 0, i32 0
  %133 = load i32, ptr %132, align 8, !tbaa !159
  %134 = icmp uge i32 %133, 62
  %135 = zext i1 %134 to i8
  store i8 %135, ptr %14, align 1, !tbaa !160
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #8
  %136 = load ptr, ptr %6, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %136, i32 0, i32 3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 8 dereferenceable(32) %137)
          to label %138 unwind label %151

138:                                              ; preds = %130
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %139, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 8 %140, i64 4, i1 false), !tbaa.struct !161
  %141 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %16, i32 0, i32 0
  %142 = load i32, ptr %141, align 4
  %143 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %53, i32 %142, i32 noundef 5300)
          to label %144 unwind label %155

144:                                              ; preds = %138
  br i1 %143, label %145, label %159

145:                                              ; preds = %144
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  %147 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %146, i32 0, i32 1
  %148 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %147)
          to label %149 unwind label %155

149:                                              ; preds = %145
  invoke void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848) %53, ptr noundef nonnull align 8 dereferenceable(32) %15, i32 noundef %148)
          to label %150 unwind label %155

150:                                              ; preds = %149
  br label %159

151:                                              ; preds = %130
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %11, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %12, align 4
  br label %621

155:                                              ; preds = %149, %145, %138
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %11, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %12, align 4
  br label %620

159:                                              ; preds = %150, %144
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  %160 = load i8, ptr %14, align 1, !tbaa !160, !range !157, !noundef !158
  %161 = trunc i8 %160 to i1
  br i1 %161, label %162, label %179

162:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #8
  %163 = load ptr, ptr %9, align 8, !tbaa !5
  %164 = load ptr, ptr %53, align 8, !tbaa !162
  %165 = getelementptr inbounds ptr, ptr %164, i64 19
  %166 = load ptr, ptr %165, align 8
  invoke void %166(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(336) %163, i32 noundef 0)
          to label %167 unwind label %170

167:                                              ; preds = %162
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 1 dereferenceable(2) @.str.17, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(2) @.str.7)
          to label %168 unwind label %174

168:                                              ; preds = %167
  %169 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #8
  br label %179

170:                                              ; preds = %162
  %171 = landingpad { ptr, i32 }
          cleanup
  %172 = extractvalue { ptr, i32 } %171, 0
  store ptr %172, ptr %11, align 8
  %173 = extractvalue { ptr, i32 } %171, 1
  store i32 %173, ptr %12, align 4
  br label %178

174:                                              ; preds = %167
  %175 = landingpad { ptr, i32 }
          cleanup
  %176 = extractvalue { ptr, i32 } %175, 0
  store ptr %176, ptr %11, align 8
  %177 = extractvalue { ptr, i32 } %175, 1
  store i32 %177, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  br label %178

178:                                              ; preds = %174, %170
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #8
  br label %619

179:                                              ; preds = %168, %159
  %180 = load ptr, ptr %9, align 8, !tbaa !5
  %181 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %180, i32 0, i32 5
  %182 = load i32, ptr %181, align 4, !tbaa !41
  %183 = icmp eq i32 %182, 1
  br i1 %183, label %184, label %252

184:                                              ; preds = %179
  %185 = load ptr, ptr %6, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %185, i32 0, i32 9
  %187 = load i8, ptr %186, align 8, !tbaa !164, !range !157, !noundef !158
  %188 = trunc i8 %187 to i1
  br i1 %188, label %252, label %189

189:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  store ptr null, ptr %20, align 8, !tbaa !5
  %190 = load ptr, ptr %9, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %190, i32 0, i32 4
  %192 = load i32, ptr %191, align 8, !tbaa !40
  switch i32 %192, label %197 [
    i32 1, label %193
    i32 2, label %194
    i32 3, label %195
    i32 4, label %196
  ]

193:                                              ; preds = %189
  store ptr @.str.543, ptr %20, align 8, !tbaa !5
  br label %208

194:                                              ; preds = %189
  store ptr @.str.544, ptr %20, align 8, !tbaa !5
  br label %208

195:                                              ; preds = %189
  store ptr @.str.545, ptr %20, align 8, !tbaa !5
  br label %208

196:                                              ; preds = %189
  store ptr @.str.546, ptr %20, align 8, !tbaa !5
  br label %208

197:                                              ; preds = %189
  %198 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %198, ptr noundef @.str.537)
          to label %199 unwind label %200

199:                                              ; preds = %197
  invoke void @__cxa_throw(ptr %198, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %628 unwind label %204

200:                                              ; preds = %197
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %11, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %12, align 4
  call void @__cxa_free_exception(ptr %198) #8
  br label %251

204:                                              ; preds = %199
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %11, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %12, align 4
  br label %251

208:                                              ; preds = %196, %195, %194, %193
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #8
  %209 = load i32, ptr %7, align 4, !tbaa !9
  %210 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(10528) %53, i32 noundef %209, ptr noundef nonnull align 8 dereferenceable(56) %210, i1 noundef zeroext false)
          to label %211 unwind label %224

211:                                              ; preds = %208
  %212 = load i8, ptr %14, align 1, !tbaa !160, !range !157, !noundef !158
  %213 = trunc i8 %212 to i1
  br i1 %213, label %238, label %214

214:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #8
  %215 = load ptr, ptr %9, align 8, !tbaa !5
  %216 = load ptr, ptr %53, align 8, !tbaa !162
  %217 = getelementptr inbounds ptr, ptr %216, i64 59
  %218 = load ptr, ptr %217, align 8
  invoke void %218(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(336) %10, ptr noundef nonnull align 8 dereferenceable(336) %215)
          to label %219 unwind label %228

219:                                              ; preds = %214
  %220 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br i1 %220, label %236, label %221

221:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %222 unwind label %232

222:                                              ; preds = %221
  %223 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #8
  br label %236

224:                                              ; preds = %208
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %11, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %12, align 4
  br label %250

228:                                              ; preds = %214
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %11, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %12, align 4
  br label %237

232:                                              ; preds = %221
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %11, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %237

236:                                              ; preds = %222, %219
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  br label %239

237:                                              ; preds = %232, %228
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  br label %249

238:                                              ; preds = %211
  store ptr @.str.543, ptr %20, align 8, !tbaa !5
  br label %239

239:                                              ; preds = %238, %236
  %240 = load ptr, ptr %6, align 8, !tbaa !5
  %241 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %240, i32 0, i32 4
  %242 = load ptr, ptr %6, align 8, !tbaa !5
  %243 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %242, i32 0, i32 5
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_RKiRA3_S9_S8_SJ_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %53, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.531, ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %241, ptr noundef nonnull align 4 dereferenceable(4) %243, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %244 unwind label %245

244:                                              ; preds = %239
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %606

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

249:                                              ; preds = %245, %237
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  br label %250

250:                                              ; preds = %249, %224
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  br label %251

251:                                              ; preds = %250, %204, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %619

252:                                              ; preds = %184, %179
  %253 = load ptr, ptr %9, align 8, !tbaa !5
  %254 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %253, i32 0, i32 5
  %255 = load i32, ptr %254, align 4, !tbaa !41
  %256 = icmp eq i32 %255, 1
  br i1 %256, label %257, label %365

257:                                              ; preds = %252
  %258 = load i8, ptr %14, align 1, !tbaa !160, !range !157, !noundef !158
  %259 = trunc i8 %258 to i1
  br i1 %259, label %260, label %285

260:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 336, ptr %24) #8
  %261 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %24, ptr noundef nonnull align 8 dereferenceable(336) %261)
          to label %262 unwind label %271

262:                                              ; preds = %260
  %263 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %24, i32 0, i32 4
  store i32 1, ptr %263, align 8, !tbaa !40
  %264 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %24, i32 0, i32 5
  store i32 1, ptr %264, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #8
  %265 = load ptr, ptr %53, align 8, !tbaa !162
  %266 = getelementptr inbounds ptr, ptr %265, i64 19
  %267 = load ptr, ptr %266, align 8
  invoke void %267(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(336) %24, i32 noundef 0)
          to label %268 unwind label %275

268:                                              ; preds = %262
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 1 dereferenceable(2) @.str.17, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.7)
          to label %269 unwind label %279

269:                                              ; preds = %268
  %270 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %24) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %24) #8
  br label %285

271:                                              ; preds = %260
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %11, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %12, align 4
  br label %284

275:                                              ; preds = %262
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %11, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %12, align 4
  br label %283

279:                                              ; preds = %268
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %11, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %283

283:                                              ; preds = %279, %275
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %24) #8
  br label %284

284:                                              ; preds = %283, %271
  call void @llvm.lifetime.end.p0(i64 336, ptr %24) #8
  br label %619

285:                                              ; preds = %269, %257
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %286

286:                                              ; preds = %355, %285
  %287 = load i32, ptr %27, align 4, !tbaa !9
  %288 = load ptr, ptr %9, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %288, i32 0, i32 4
  %290 = load i32, ptr %289, align 8, !tbaa !40
  %291 = icmp ult i32 %287, %290
  br i1 %291, label %293, label %292

292:                                              ; preds = %286
  store i32 3, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %364

293:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #8
  %294 = load i32, ptr %7, align 4, !tbaa !9
  %295 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(10528) %53, i32 noundef %294, ptr noundef nonnull align 8 dereferenceable(56) %295, i1 noundef zeroext true)
          to label %296 unwind label %309

296:                                              ; preds = %293
  %297 = load ptr, ptr %9, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %297, i32 0, i32 4
  %299 = load i32, ptr %298, align 8, !tbaa !40
  %300 = icmp ugt i32 %299, 1
  br i1 %300, label %301, label %317

301:                                              ; preds = %296
  %302 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.531)
          to label %303 unwind label %313

303:                                              ; preds = %301
  %304 = load i32, ptr %27, align 4, !tbaa !9
  %305 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %53, i32 noundef %304)
          to label %306 unwind label %313

306:                                              ; preds = %303
  %307 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef %305)
          to label %308 unwind label %313

308:                                              ; preds = %306
  br label %317

309:                                              ; preds = %293
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %11, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %12, align 4
  br label %363

313:                                              ; preds = %317, %306, %303, %301
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %11, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %12, align 4
  br label %362

317:                                              ; preds = %308, %296
  %318 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24remove_duplicate_swizzleERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %53, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %319 unwind label %313

319:                                              ; preds = %317
  %320 = load i8, ptr %14, align 1, !tbaa !160, !range !157, !noundef !158
  %321 = trunc i8 %320 to i1
  br i1 %321, label %342, label %322

322:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #8
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  %324 = load ptr, ptr %53, align 8, !tbaa !162
  %325 = getelementptr inbounds ptr, ptr %324, i64 59
  %326 = load ptr, ptr %325, align 8
  invoke void %326(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(336) %10, ptr noundef nonnull align 8 dereferenceable(336) %323)
          to label %327 unwind label %332

327:                                              ; preds = %322
  %328 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br i1 %328, label %340, label %329

329:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %330 unwind label %336

330:                                              ; preds = %329
  %331 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  br label %340

332:                                              ; preds = %322
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %11, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %12, align 4
  br label %341

336:                                              ; preds = %329
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %11, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %341

340:                                              ; preds = %330, %327
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  br label %342

341:                                              ; preds = %336, %332
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  br label %362

342:                                              ; preds = %340, %319
  %343 = load ptr, ptr %6, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %343, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %345, i32 0, i32 5
  %347 = load i32, ptr %346, align 8, !tbaa !167
  %348 = load ptr, ptr %6, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %348, i32 0, i32 7
  %350 = load i32, ptr %349, align 8, !tbaa !168
  %351 = load i32, ptr %27, align 4, !tbaa !9
  %352 = mul i32 %350, %351
  %353 = add i32 %347, %352
  store i32 %353, ptr %31, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcS8_RA2_S9_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %53, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(7) @.str.547, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %344, ptr noundef nonnull align 4 dereferenceable(4) %31, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %354 unwind label %358

354:                                              ; preds = %342
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  br label %355

355:                                              ; preds = %354
  %356 = load i32, ptr %27, align 4, !tbaa !9
  %357 = add i32 %356, 1
  store i32 %357, ptr %27, align 4, !tbaa !9
  br label %286, !llvm.loop !169

358:                                              ; preds = %342
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %11, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %362

362:                                              ; preds = %358, %341, %313
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  br label %363

363:                                              ; preds = %362, %309
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %619

364:                                              ; preds = %292
  br label %605

365:                                              ; preds = %252
  %366 = load ptr, ptr %6, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %366, i32 0, i32 9
  %368 = load i8, ptr %367, align 8, !tbaa !164, !range !157, !noundef !158
  %369 = trunc i8 %368 to i1
  br i1 %369, label %484, label %370

370:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  store ptr null, ptr %32, align 8, !tbaa !5
  %371 = load ptr, ptr %9, align 8, !tbaa !5
  %372 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %371, i32 0, i32 4
  %373 = load i32, ptr %372, align 8, !tbaa !40
  switch i32 %373, label %378 [
    i32 1, label %374
    i32 2, label %375
    i32 3, label %376
    i32 4, label %377
  ]

374:                                              ; preds = %370
  store ptr @.str.543, ptr %32, align 8, !tbaa !5
  br label %389

375:                                              ; preds = %370
  store ptr @.str.544, ptr %32, align 8, !tbaa !5
  br label %389

376:                                              ; preds = %370
  store ptr @.str.545, ptr %32, align 8, !tbaa !5
  br label %389

377:                                              ; preds = %370
  store ptr @.str.546, ptr %32, align 8, !tbaa !5
  br label %389

378:                                              ; preds = %370
  %379 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %379, ptr noundef @.str.537)
          to label %380 unwind label %381

380:                                              ; preds = %378
  invoke void @__cxa_throw(ptr %379, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %628 unwind label %385

381:                                              ; preds = %378
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %11, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %12, align 4
  call void @__cxa_free_exception(ptr %379) #8
  br label %483

385:                                              ; preds = %380
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %11, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %12, align 4
  br label %483

389:                                              ; preds = %377, %376, %375, %374
  %390 = load i8, ptr %14, align 1, !tbaa !160, !range !157, !noundef !158
  %391 = trunc i8 %390 to i1
  br i1 %391, label %392, label %416

392:                                              ; preds = %389
  store ptr @.str.543, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %33) #8
  %393 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %33, ptr noundef nonnull align 8 dereferenceable(336) %393)
          to label %394 unwind label %402

394:                                              ; preds = %392
  %395 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %33, i32 0, i32 5
  store i32 1, ptr %395, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #8
  %396 = load ptr, ptr %53, align 8, !tbaa !162
  %397 = getelementptr inbounds ptr, ptr %396, i64 19
  %398 = load ptr, ptr %397, align 8
  invoke void %398(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(336) %33, i32 noundef 0)
          to label %399 unwind label %406

399:                                              ; preds = %394
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.17, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(2) @.str.7)
          to label %400 unwind label %410

400:                                              ; preds = %399
  %401 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %33) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %33) #8
  br label %416

402:                                              ; preds = %392
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %11, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %12, align 4
  br label %415

406:                                              ; preds = %394
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %11, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %12, align 4
  br label %414

410:                                              ; preds = %399
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %11, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  br label %414

414:                                              ; preds = %410, %406
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %33) #8
  br label %415

415:                                              ; preds = %414, %402
  call void @llvm.lifetime.end.p0(i64 336, ptr %33) #8
  br label %483

416:                                              ; preds = %400, %389
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  store i32 0, ptr %36, align 4, !tbaa !9
  br label %417

417:                                              ; preds = %473, %416
  %418 = load i32, ptr %36, align 4, !tbaa !9
  %419 = load ptr, ptr %9, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %419, i32 0, i32 5
  %421 = load i32, ptr %420, align 4, !tbaa !41
  %422 = icmp ult i32 %418, %421
  br i1 %422, label %424, label %423

423:                                              ; preds = %417
  store i32 7, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %482

424:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #8
  %425 = load i32, ptr %7, align 4, !tbaa !9
  %426 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(10528) %53, i32 noundef %425, ptr noundef nonnull align 8 dereferenceable(56) %426, i1 noundef zeroext true)
          to label %427 unwind label %441

427:                                              ; preds = %424
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjS9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 4 dereferenceable(4) %36, ptr noundef nonnull align 1 dereferenceable(2) @.str.417)
          to label %428 unwind label %445

428:                                              ; preds = %427
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  %429 = load i8, ptr %14, align 1, !tbaa !160, !range !157, !noundef !158
  %430 = trunc i8 %429 to i1
  br i1 %430, label %460, label %431

431:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #8
  %432 = load ptr, ptr %9, align 8, !tbaa !5
  %433 = load ptr, ptr %53, align 8, !tbaa !162
  %434 = getelementptr inbounds ptr, ptr %433, i64 59
  %435 = load ptr, ptr %434, align 8
  invoke void %435(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(336) %10, ptr noundef nonnull align 8 dereferenceable(336) %432)
          to label %436 unwind label %450

436:                                              ; preds = %431
  %437 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br i1 %437, label %458, label %438

438:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %439 unwind label %454

439:                                              ; preds = %438
  %440 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #8
  br label %458

441:                                              ; preds = %424
  %442 = landingpad { ptr, i32 }
          cleanup
  %443 = extractvalue { ptr, i32 } %442, 0
  store ptr %443, ptr %11, align 8
  %444 = extractvalue { ptr, i32 } %442, 1
  store i32 %444, ptr %12, align 4
  br label %449

445:                                              ; preds = %427
  %446 = landingpad { ptr, i32 }
          cleanup
  %447 = extractvalue { ptr, i32 } %446, 0
  store ptr %447, ptr %11, align 8
  %448 = extractvalue { ptr, i32 } %446, 1
  store i32 %448, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %449

449:                                              ; preds = %445, %441
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  br label %481

450:                                              ; preds = %431
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %11, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %12, align 4
  br label %459

454:                                              ; preds = %438
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %11, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %459

458:                                              ; preds = %439, %436
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  br label %460

459:                                              ; preds = %454, %450
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  br label %480

460:                                              ; preds = %458, %428
  %461 = load ptr, ptr %6, align 8, !tbaa !5
  %462 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %461, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  %463 = load ptr, ptr %6, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %463, i32 0, i32 5
  %465 = load i32, ptr %464, align 8, !tbaa !167
  %466 = load i32, ptr %36, align 4, !tbaa !9
  %467 = load ptr, ptr %6, align 8, !tbaa !5
  %468 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %467, i32 0, i32 7
  %469 = load i32, ptr %468, align 8, !tbaa !168
  %470 = mul i32 %466, %469
  %471 = add i32 %465, %470
  store i32 %471, ptr %41, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %53, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.531, ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %462, ptr noundef nonnull align 4 dereferenceable(4) %41, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %472 unwind label %476

472:                                              ; preds = %460
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  br label %473

473:                                              ; preds = %472
  %474 = load i32, ptr %36, align 4, !tbaa !9
  %475 = add i32 %474, 1
  store i32 %475, ptr %36, align 4, !tbaa !9
  br label %417, !llvm.loop !171

476:                                              ; preds = %460
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %11, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %480

480:                                              ; preds = %476, %459
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %481

481:                                              ; preds = %480, %449
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %483

482:                                              ; preds = %423
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %604

483:                                              ; preds = %481, %415, %385, %381
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %619

484:                                              ; preds = %365
  %485 = load i8, ptr %14, align 1, !tbaa !160, !range !157, !noundef !158
  %486 = trunc i8 %485 to i1
  br i1 %486, label %487, label %512

487:                                              ; preds = %484
  call void @llvm.lifetime.start.p0(i64 336, ptr %42) #8
  %488 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %42, ptr noundef nonnull align 8 dereferenceable(336) %488)
          to label %489 unwind label %498

489:                                              ; preds = %487
  %490 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %42, i32 0, i32 4
  store i32 1, ptr %490, align 8, !tbaa !40
  %491 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %42, i32 0, i32 5
  store i32 1, ptr %491, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #8
  %492 = load ptr, ptr %53, align 8, !tbaa !162
  %493 = getelementptr inbounds ptr, ptr %492, i64 19
  %494 = load ptr, ptr %493, align 8
  invoke void %494(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(336) %42, i32 noundef 0)
          to label %495 unwind label %502

495:                                              ; preds = %489
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.17, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(2) @.str.7)
          to label %496 unwind label %506

496:                                              ; preds = %495
  %497 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %42) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %42) #8
  br label %512

498:                                              ; preds = %487
  %499 = landingpad { ptr, i32 }
          cleanup
  %500 = extractvalue { ptr, i32 } %499, 0
  store ptr %500, ptr %11, align 8
  %501 = extractvalue { ptr, i32 } %499, 1
  store i32 %501, ptr %12, align 4
  br label %511

502:                                              ; preds = %489
  %503 = landingpad { ptr, i32 }
          cleanup
  %504 = extractvalue { ptr, i32 } %503, 0
  store ptr %504, ptr %11, align 8
  %505 = extractvalue { ptr, i32 } %503, 1
  store i32 %505, ptr %12, align 4
  br label %510

506:                                              ; preds = %495
  %507 = landingpad { ptr, i32 }
          cleanup
  %508 = extractvalue { ptr, i32 } %507, 0
  store ptr %508, ptr %11, align 8
  %509 = extractvalue { ptr, i32 } %507, 1
  store i32 %509, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %510

510:                                              ; preds = %506, %502
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %42) #8
  br label %511

511:                                              ; preds = %510, %498
  call void @llvm.lifetime.end.p0(i64 336, ptr %42) #8
  br label %619

512:                                              ; preds = %496, %484
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  store i32 0, ptr %45, align 4, !tbaa !9
  br label %513

513:                                              ; preds = %600, %512
  %514 = load i32, ptr %45, align 4, !tbaa !9
  %515 = load ptr, ptr %9, align 8, !tbaa !5
  %516 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %515, i32 0, i32 4
  %517 = load i32, ptr %516, align 8, !tbaa !40
  %518 = icmp ult i32 %514, %517
  br i1 %518, label %520, label %519

519:                                              ; preds = %513
  store i32 10, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %603

520:                                              ; preds = %513
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %521

521:                                              ; preds = %588, %520
  %522 = load i32, ptr %46, align 4, !tbaa !9
  %523 = load ptr, ptr %9, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %523, i32 0, i32 5
  %525 = load i32, ptr %524, align 4, !tbaa !41
  %526 = icmp ult i32 %522, %525
  br i1 %526, label %528, label %527

527:                                              ; preds = %521
  store i32 13, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %599

528:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #8
  %529 = load i32, ptr %7, align 4, !tbaa !9
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(10528) %53, i32 noundef %529, ptr noundef nonnull align 8 dereferenceable(56) %530, i1 noundef zeroext true)
          to label %531 unwind label %547

531:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %532 = load i32, ptr %45, align 4, !tbaa !9
  %533 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %53, i32 noundef %532)
          to label %534 unwind label %551

534:                                              ; preds = %531
  store ptr %533, ptr %49, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S7_PS7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 4 dereferenceable(4) %46, ptr noundef nonnull align 1 dereferenceable(3) @.str.548, ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %535 unwind label %551

535:                                              ; preds = %534
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  %536 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24remove_duplicate_swizzleERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %53, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %537 unwind label %556

537:                                              ; preds = %535
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #8
  %538 = load ptr, ptr %9, align 8, !tbaa !5
  %539 = load ptr, ptr %53, align 8, !tbaa !162
  %540 = getelementptr inbounds ptr, ptr %539, i64 59
  %541 = load ptr, ptr %540, align 8
  invoke void %541(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(10528) %53, ptr noundef nonnull align 8 dereferenceable(336) %10, ptr noundef nonnull align 8 dereferenceable(336) %538)
          to label %542 unwind label %560

542:                                              ; preds = %537
  %543 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br i1 %543, label %568, label %544

544:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %545 unwind label %564

545:                                              ; preds = %544
  %546 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  br label %568

547:                                              ; preds = %528
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %11, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %12, align 4
  br label %555

551:                                              ; preds = %534, %531
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %11, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %555

555:                                              ; preds = %551, %547
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  br label %598

556:                                              ; preds = %535
  %557 = landingpad { ptr, i32 }
          cleanup
  %558 = extractvalue { ptr, i32 } %557, 0
  store ptr %558, ptr %11, align 8
  %559 = extractvalue { ptr, i32 } %557, 1
  store i32 %559, ptr %12, align 4
  br label %597

560:                                              ; preds = %537
  %561 = landingpad { ptr, i32 }
          cleanup
  %562 = extractvalue { ptr, i32 } %561, 0
  store ptr %562, ptr %11, align 8
  %563 = extractvalue { ptr, i32 } %561, 1
  store i32 %563, ptr %12, align 4
  br label %596

564:                                              ; preds = %544
  %565 = landingpad { ptr, i32 }
          cleanup
  %566 = extractvalue { ptr, i32 } %565, 0
  store ptr %566, ptr %11, align 8
  %567 = extractvalue { ptr, i32 } %565, 1
  store i32 %567, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  br label %595

568:                                              ; preds = %545, %542
  %569 = load ptr, ptr %6, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %569, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %571 = load ptr, ptr %6, align 8, !tbaa !5
  %572 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %571, i32 0, i32 5
  %573 = load i32, ptr %572, align 8, !tbaa !167
  %574 = load i32, ptr %46, align 4, !tbaa !9
  %575 = load ptr, ptr %9, align 8, !tbaa !5
  %576 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %575, i32 0, i32 3
  %577 = load i32, ptr %576, align 4, !tbaa !42
  %578 = udiv i32 %577, 8
  %579 = mul i32 %574, %578
  %580 = add i32 %573, %579
  %581 = load i32, ptr %45, align 4, !tbaa !9
  %582 = load ptr, ptr %6, align 8, !tbaa !5
  %583 = getelementptr inbounds %"struct.spirv_cross::SPIRAccessChain", ptr %582, i32 0, i32 7
  %584 = load i32, ptr %583, align 8, !tbaa !168
  %585 = mul i32 %581, %584
  %586 = add i32 %580, %585
  store i32 %586, ptr %52, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcS8_RA2_S9_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %53, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(7) @.str.547, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %570, ptr noundef nonnull align 4 dereferenceable(4) %52, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %587 unwind label %591

587:                                              ; preds = %568
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  br label %588

588:                                              ; preds = %587
  %589 = load i32, ptr %46, align 4, !tbaa !9
  %590 = add i32 %589, 1
  store i32 %590, ptr %46, align 4, !tbaa !9
  br label %521, !llvm.loop !172

591:                                              ; preds = %568
  %592 = landingpad { ptr, i32 }
          cleanup
  %593 = extractvalue { ptr, i32 } %592, 0
  store ptr %593, ptr %11, align 8
  %594 = extractvalue { ptr, i32 } %592, 1
  store i32 %594, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %595

595:                                              ; preds = %591, %564
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br label %596

596:                                              ; preds = %595, %560
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  br label %597

597:                                              ; preds = %596, %556
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %598

598:                                              ; preds = %597, %555
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %619

599:                                              ; preds = %527
  br label %600

600:                                              ; preds = %599
  %601 = load i32, ptr %45, align 4, !tbaa !9
  %602 = add i32 %601, 1
  store i32 %602, ptr %45, align 4, !tbaa !9
  br label %513, !llvm.loop !173

603:                                              ; preds = %519
  br label %604

604:                                              ; preds = %603, %482
  br label %605

605:                                              ; preds = %604, %364
  br label %606

606:                                              ; preds = %605, %244
  %607 = load ptr, ptr %6, align 8, !tbaa !5
  %608 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %607, i32 0, i32 1
  %609 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %608)
          to label %610 unwind label %615

610:                                              ; preds = %606
  invoke void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %53, i32 noundef %609)
          to label %611 unwind label %615

611:                                              ; preds = %610
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #8
  store i32 0, ptr %13, align 4
  br label %612

612:                                              ; preds = %611, %110, %91
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %10) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  %613 = load i32, ptr %13, align 4
  switch i32 %613, label %628 [
    i32 0, label %614
    i32 1, label %614
  ]

614:                                              ; preds = %612, %612
  ret void

615:                                              ; preds = %610, %606
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %11, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %12, align 4
  br label %619

619:                                              ; preds = %615, %598, %511, %483, %363, %284, %251, %178
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  br label %620

620:                                              ; preds = %619, %155
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  br label %621

621:                                              ; preds = %620, %151
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #8
  br label %622

622:                                              ; preds = %621, %124, %92
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %10) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  br label %623

623:                                              ; preds = %622
  %624 = load ptr, ptr %11, align 8
  %625 = load i32, ptr %12, align 4
  %626 = insertvalue { ptr, i32 } poison, ptr %624, 0
  %627 = insertvalue { ptr, i32 } %626, i32 %625, 1
  resume { ptr, i32 } %627

628:                                              ; preds = %612, %380, %199, %123
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerHLSL25write_access_chain_structERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528), ptr noundef nonnull align 8 dereferenceable(168), i32 noundef, ptr noundef nonnull align 8 dereferenceable(56)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(10528), i32 noundef, ptr noundef nonnull align 8 dereferenceable(56), i1 noundef zeroext) #1 align 2

declare void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_RKiRA3_S9_S8_SJ_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) #6 align 2

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #3

declare noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24remove_duplicate_swizzleERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcS8_RA2_S9_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(7), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S7_PS7_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(8)) #1

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 = { "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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { noreturn }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !15, i64 12}
!12 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !13, i64 0, !15, i64 12, !16, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !17, i64 32, !21, i64 88, !10, i64 120, !24, i64 124, !24, i64 125, !25, i64 128, !26, i64 136, !17, i64 192, !29, i64 248, !30, i64 272, !30, i64 276, !34, i64 280}
!13 = !{!"_ZTSN11spirv_cross8IVariantE", !14, i64 8}
!14 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!15 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!16 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!17 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !18, i64 0, !19, i64 16, !20, i64 24}
!18 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !19, i64 8}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!21 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !22, i64 0, !19, i64 16, !23, i64 24}
!22 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !19, i64 8}
!23 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!24 = !{!"bool", !7, i64 0}
!25 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !27, i64 0, !19, i64 16, !28, i64 24}
!27 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !19, i64 8}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !30, i64 0, !31, i64 4, !24, i64 8, !24, i64 9, !24, i64 10, !10, i64 12, !32, i64 16, !33, i64 20}
!30 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!31 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!32 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!33 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!34 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !35, i64 0}
!35 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!36 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!37 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !38, i64 0, !19, i64 8}
!38 = !{!"float", !7, i64 0}
!39 = !{!12, !16, i64 16}
!40 = !{!12, !10, i64 24}
!41 = !{!12, !10, i64 28}
!42 = !{!12, !10, i64 20}
!43 = !{!44, !24, i64 9857}
!44 = !{!"_ZTSN11spirv_cross12CompilerHLSLE", !45, i64 0, !139, i64 9848, !24, i64 9864, !24, i64 9865, !24, i64 9866, !24, i64 9867, !24, i64 9868, !24, i64 9869, !24, i64 9870, !24, i64 9871, !24, i64 9872, !24, i64 9873, !24, i64 9874, !24, i64 9875, !24, i64 9876, !24, i64 9877, !24, i64 9878, !24, i64 9879, !140, i64 9880, !24, i64 9984, !24, i64 9985, !141, i64 9992, !10, i64 10336, !10, i64 10340, !144, i64 10344, !10, i64 10368, !148, i64 10376, !150, i64 10432, !152, i64 10488, !153, i64 10504}
!45 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !46, i64 0, !6, i64 3176, !103, i64 3184, !24, i64 3272, !106, i64 3280, !6, i64 7616, !6, i64 7624, !24, i64 7632, !24, i64 7633, !111, i64 7636, !34, i64 7680, !34, i64 7736, !34, i64 7792, !34, i64 7848, !34, i64 7904, !34, i64 7960, !34, i64 8016, !115, i64 8072, !101, i64 8128, !24, i64 8184, !117, i64 8192, !10, i64 8416, !88, i64 8424, !88, i64 8480, !88, i64 8536, !118, i64 8592, !120, i64 8648, !121, i64 8656, !71, i64 8712, !71, i64 8992, !121, i64 9272, !26, i64 9328, !10, i64 9384, !10, i64 9388, !10, i64 9392, !24, i64 9396, !24, i64 9397, !123, i64 9400, !123, i64 9424, !127, i64 9448, !131, i64 9472, !121, i64 9496, !88, i64 9552, !88, i64 9608, !7, i64 9664, !135, i64 9672, !88, i64 9728, !6, i64 9784, !137, i64 9792}
!46 = !{!"_ZTSN11spirv_cross8CompilerE", !47, i64 8, !17, i64 1928, !17, i64 1984, !6, i64 2040, !6, i64 2048, !10, i64 2056, !90, i64 2064, !24, i64 2120, !88, i64 2128, !24, i64 2184, !24, i64 2185, !92, i64 2192, !17, i64 2312, !95, i64 2368, !88, i64 2400, !88, i64 2456, !88, i64 2512, !88, i64 2568, !88, i64 2624, !87, i64 2680, !87, i64 2744, !10, i64 2808, !10, i64 2812, !24, i64 2816, !88, i64 2824, !24, i64 2880, !24, i64 2881, !10, i64 2884, !97, i64 2888, !17, i64 2944, !99, i64 3000, !88, i64 3056, !24, i64 3112, !101, i64 3120}
!47 = !{!"_ZTSN11spirv_cross8ParsedIRE", !48, i64 0, !54, i64 8, !58, i64 32, !61, i64 248, !7, i64 304, !63, i64 1088, !63, i64 1144, !66, i64 1200, !68, i64 1256, !71, i64 1312, !74, i64 1592, !77, i64 1624, !79, i64 1680, !81, i64 1736, !82, i64 1740, !83, i64 1748, !84, i64 1752, !10, i64 1756, !10, i64 1760, !85, i64 1768, !87, i64 1800, !88, i64 1864}
!48 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !49, i64 0}
!49 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !50, i64 0}
!50 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !51, i64 0}
!51 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !52, i64 0}
!52 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !53, i64 0}
!53 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!54 = !{!"_ZTSSt6vectorIjSaIjEE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!58 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !59, i64 0, !19, i64 16, !60, i64 24}
!59 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !19, i64 8}
!60 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!61 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !62, i64 0}
!62 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!63 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !64, i64 0, !19, i64 16, !65, i64 24}
!64 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !19, i64 8}
!65 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!66 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !67, i64 0}
!67 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!68 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !69, i64 0, !19, i64 16, !70, i64 24}
!69 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !19, i64 8}
!70 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!71 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !72, i64 0, !19, i64 16, !73, i64 24}
!72 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !19, i64 8}
!73 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!74 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !75, i64 0, !19, i64 16, !76, i64 24}
!75 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !19, i64 8}
!76 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!77 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !78, i64 0}
!78 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!79 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !80, i64 0}
!80 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!81 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !10, i64 0}
!82 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !10, i64 0, !24, i64 4, !24, i64 5, !24, i64 6}
!83 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!84 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!85 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !86, i64 0, !19, i64 8, !7, i64 16}
!86 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!87 = !{!"_ZTSN11spirv_cross6BitsetE", !19, i64 0, !88, i64 8}
!88 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !89, i64 0}
!89 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!90 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !91, i64 0}
!91 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!92 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !93, i64 0, !19, i64 16, !94, i64 24}
!93 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !19, i64 8}
!94 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!95 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !96, i64 0, !6, i64 24}
!96 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!97 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !98, i64 0}
!98 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!99 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !100, i64 0}
!100 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!101 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !102, i64 0}
!102 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!103 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !104, i64 0, !19, i64 16, !105, i64 24}
!104 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !19, i64 8}
!105 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!106 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !107, i64 0, !7, i64 24, !108, i64 4120}
!107 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !19, i64 8, !19, i64 16}
!108 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !109, i64 0, !19, i64 16, !110, i64 24}
!109 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !19, i64 8}
!110 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!111 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !10, i64 0, !24, i64 4, !24, i64 5, !10, i64 8, !24, i64 12, !24, i64 13, !24, i64 14, !24, i64 15, !24, i64 16, !24, i64 17, !24, i64 18, !24, i64 19, !24, i64 20, !24, i64 21, !24, i64 22, !24, i64 23, !10, i64 24, !112, i64 28, !113, i64 32}
!112 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !24, i64 0, !24, i64 1, !24, i64 2}
!113 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !114, i64 0, !114, i64 4}
!114 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!115 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !116, i64 0}
!116 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!117 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !85, i64 0, !85, i64 32, !85, i64 64, !24, i64 96, !24, i64 97, !24, i64 98, !24, i64 99, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !16, i64 184, !24, i64 188, !24, i64 189, !24, i64 190, !24, i64 191, !24, i64 192, !24, i64 193, !24, i64 194, !24, i64 195, !24, i64 196, !24, i64 197, !24, i64 198, !24, i64 199, !24, i64 200, !24, i64 201, !24, i64 202, !24, i64 203, !24, i64 204, !24, i64 205, !24, i64 206, !24, i64 207, !24, i64 208, !24, i64 209, !24, i64 210, !24, i64 211, !24, i64 212, !24, i64 213, !24, i64 214, !24, i64 215, !24, i64 216, !24, i64 217, !24, i64 218, !24, i64 219}
!118 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !119, i64 0}
!119 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!120 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !10, i64 0}
!121 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !122, i64 0}
!122 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!123 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !124, i64 0}
!124 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !125, i64 0}
!125 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !126, i64 0}
!126 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!127 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !128, i64 0}
!128 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !129, i64 0}
!129 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !130, i64 0}
!130 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!131 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !132, i64 0}
!132 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !133, i64 0}
!133 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !134, i64 0}
!134 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!135 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !136, i64 0}
!136 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!137 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !138, i64 0}
!138 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!139 = !{!"_ZTSN11spirv_cross12CompilerHLSL7OptionsE", !10, i64 0, !24, i64 4, !24, i64 5, !24, i64 6, !24, i64 7, !24, i64 8, !24, i64 9, !24, i64 10, !24, i64 11, !24, i64 12}
!140 = !{!"_ZTSN11spirv_cross12CompilerHLSL19TextureSizeVariantsE", !19, i64 0, !7, i64 8}
!141 = !{!"_ZTSN11spirv_cross11SmallVectorINS_24HLSLVertexAttributeRemapELm8EEE", !142, i64 0, !19, i64 16, !143, i64 24}
!142 = !{!"_ZTSN11spirv_cross10VectorViewINS_24HLSLVertexAttributeRemapEEE", !6, i64 0, !19, i64 8}
!143 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_24HLSLVertexAttributeRemapELm8EEE", !7, i64 0}
!144 = !{!"_ZTSSt6vectorIN11spirv_cross13RootConstantsESaIS1_EE", !145, i64 0}
!145 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross13RootConstantsESaIS1_EE", !146, i64 0}
!146 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross13RootConstantsESaIS1_EE12_Vector_implE", !147, i64 0}
!147 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross13RootConstantsESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!148 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingESt4pairINS0_19HLSLResourceBindingEbENS0_14InternalHasherESt8equal_toIS1_ESaIS2_IKS1_S4_EEE", !149, i64 0}
!149 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_S2_INS0_19HLSLResourceBindingEbEESaIS6_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!150 = !{!"_ZTSSt13unordered_setIN11spirv_cross14SetBindingPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !151, i64 0}
!151 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!152 = !{!"_ZTSN11spirv_cross12CompilerHLSLUt_E", !10, i64 0, !10, i64 4, !24, i64 8, !24, i64 9}
!153 = !{!"_ZTSSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE", !154, i64 0}
!154 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE", !155, i64 0}
!155 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE12_Vector_implE", !156, i64 0}
!156 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!157 = !{i8 0, i8 2}
!158 = !{}
!159 = !{!44, !10, i64 9848}
!160 = !{!24, !24, i64 0}
!161 = !{i64 0, i64 4, !9}
!162 = !{!163, !163, i64 0}
!163 = !{!"vtable pointer", !8, i64 0}
!164 = !{!165, !24, i64 104}
!165 = !{!"_ZTSN11spirv_cross15SPIRAccessChainE", !13, i64 0, !30, i64 12, !25, i64 16, !85, i64 24, !85, i64 56, !10, i64 88, !166, i64 92, !10, i64 96, !10, i64 100, !24, i64 104, !24, i64 105, !63, i64 112}
!166 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !10, i64 0}
!167 = !{!165, !10, i64 88}
!168 = !{!165, !10, i64 96}
!169 = distinct !{!169, !170}
!170 = !{!"llvm.loop.mustprogress"}
!171 = distinct !{!171, !170}
!172 = distinct !{!172, !170}
!173 = distinct !{!173, !170}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.325", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.328", %"class.spirv_cross::TypedID.328", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.324" }>
%"class.spirv_cross::TypedID.324" = type { i32 }
%"class.spirv_cross::SmallVector.325" = type { %"class.spirv_cross::VectorView.326", i64, %"class.spirv_cross::AlignedBuffer.327" }
%"class.spirv_cross::VectorView.326" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.327" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.328", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.328" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.341 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.379 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.406 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.417 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.530 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.531 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.537 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.542 = external hidden unnamed_addr constant [125 x i8], align 1
@.str.543 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.544 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.545 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.546 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.547 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.548 = external hidden unnamed_addr constant [3 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 uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #1 align 2

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) local_unnamed_addr #3

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #1 align 2

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) unnamed_addr #1 align 2

declare void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #1

declare void @_ZN11spirv_cross12CompilerGLSL21track_expression_readEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjS9_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_arrayERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528), ptr noundef nonnull align 8 dereferenceable(168), i32 noundef, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerHLSL18write_access_chainERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(168) %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"struct.spirv_cross::SPIRType", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"struct.spirv_cross::SPIRType", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca %"struct.spirv_cross::SPIRType", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca i32, align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca i32, align 4
  %31 = alloca %"struct.spirv_cross::SPIRType", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca i32, align 4
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca ptr, align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca i32, align 4
  %41 = getelementptr inbounds i8, ptr %1, i64 12
  %42 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %41)
  %43 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %42)
  %44 = getelementptr inbounds i8, ptr %1, i64 8
  %45 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  tail call void @_ZN11spirv_cross12CompilerGLSL21track_expression_readEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %45)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %5) #7
  %46 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %43)
  %47 = getelementptr inbounds i8, ptr %43, i64 12
  %48 = load i32, ptr %47, align 4
  %49 = select i1 %46, i32 21, i32 %48
  call void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef %49)
  %50 = getelementptr inbounds i8, ptr %5, i64 16
  store i32 8, ptr %50, align 8, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %43, i64 24
  %52 = getelementptr inbounds i8, ptr %5, i64 24
  %53 = getelementptr inbounds i8, ptr %43, i64 28
  %54 = load <2 x i32>, ptr %51, align 8, !tbaa !37
  store <2 x i32> %54, ptr %52, align 8, !tbaa !37
  %55 = getelementptr inbounds i8, ptr %43, i64 32
  %56 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %55) #7
  br i1 %56, label %60, label %57

57:                                               ; preds = %4
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_arrayERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(168) %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3)
          to label %.invoke unwind label %58

58:                                               ; preds = %.invoke, %75, %64, %57
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %396

60:                                               ; preds = %4
  %61 = getelementptr inbounds i8, ptr %43, i64 16
  %62 = load i32, ptr %61, align 8, !tbaa !5
  %63 = icmp eq i32 %62, 15
  br i1 %63, label %64, label %66

64:                                               ; preds = %60
  invoke void @_ZN11spirv_cross12CompilerHLSL25write_access_chain_structERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(168) %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3)
          to label %.invoke unwind label %58

.invoke:                                          ; preds = %64, %57
  %65 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  invoke void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %65)
          to label %390 unwind label %58

66:                                               ; preds = %60
  %67 = getelementptr inbounds i8, ptr %43, i64 20
  %68 = load i32, ptr %67, align 4, !tbaa !38
  %.not = icmp eq i32 %68, 32
  br i1 %.not, label %78, label %69

69:                                               ; preds = %66
  %70 = getelementptr inbounds i8, ptr %0, i64 9857
  %71 = load i8, ptr %70, align 1, !tbaa !39, !range !153, !noundef !154
  %72 = trunc nuw i8 %71 to i1
  br i1 %72, label %78, label %73

73:                                               ; preds = %69
  %74 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %74, ptr noundef nonnull @.str.542)
          to label %75 unwind label %76

75:                                               ; preds = %73
  invoke void @__cxa_throw(ptr nonnull %74, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %397 unwind label %58

76:                                               ; preds = %73
  %77 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %74) #7
  br label %396

78:                                               ; preds = %69, %66
  %79 = getelementptr inbounds i8, ptr %0, i64 9848
  %80 = load i32, ptr %79, align 8, !tbaa !155
  %81 = icmp ugt i32 %80, 61
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #7
  %82 = getelementptr inbounds i8, ptr %1, i64 24
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %83 unwind label %88

83:                                               ; preds = %78
  %.sroa.0.0.copyload = load i32, ptr %44, align 8, !tbaa !37
  %84 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0.0.copyload, i32 noundef 5300)
          to label %85 unwind label %90

85:                                               ; preds = %83
  br i1 %84, label %86, label %92

86:                                               ; preds = %85
  %87 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  invoke void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef %87)
          to label %92 unwind label %90

88:                                               ; preds = %78
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %395

90:                                               ; preds = %86, %83
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %394

92:                                               ; preds = %86, %85
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  br i1 %81, label %93, label %105

93:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  %94 = load ptr, ptr %0, align 8, !tbaa !156
  %95 = getelementptr inbounds i8, ptr %94, i64 152
  %96 = load ptr, ptr %95, align 8
  invoke void %96(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(336) %43, i32 noundef 0)
          to label %97 unwind label %100

97:                                               ; preds = %93
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 1 dereferenceable(2) @.str.17, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(2) @.str.7)
          to label %98 unwind label %102

98:                                               ; preds = %97
  %99 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %105

100:                                              ; preds = %93
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %104

102:                                              ; preds = %97
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  br label %104

104:                                              ; preds = %102, %100
  %.pn = phi { ptr, i32 } [ %103, %102 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %393

105:                                              ; preds = %98, %92
  %106 = load i32, ptr %53, align 4, !tbaa !158
  %107 = icmp eq i32 %106, 1
  %108 = getelementptr inbounds i8, ptr %1, i64 104
  %109 = load i8, ptr %108, align 8, !tbaa !159, !range !153, !noundef !154
  %110 = trunc nuw i8 %109 to i1
  br i1 %107, label %111, label %223

111:                                              ; preds = %105
  br i1 %110, label %154, label %112

112:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %113 = load i32, ptr %51, align 8, !tbaa !162
  switch i32 %113, label %118 [
    i32 1, label %114
    i32 2, label %115
    i32 3, label %116
    i32 4, label %117
  ]

114:                                              ; preds = %112
  store ptr @.str.543, ptr %10, align 8, !tbaa !163
  br label %125

115:                                              ; preds = %112
  store ptr @.str.544, ptr %10, align 8, !tbaa !163
  br label %125

116:                                              ; preds = %112
  store ptr @.str.545, ptr %10, align 8, !tbaa !163
  br label %125

117:                                              ; preds = %112
  store ptr @.str.546, ptr %10, align 8, !tbaa !163
  br label %125

118:                                              ; preds = %112
  %119 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %119, ptr noundef nonnull @.str.537)
          to label %120 unwind label %121

120:                                              ; preds = %118
  invoke void @__cxa_throw(ptr nonnull %119, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %397 unwind label %123

121:                                              ; preds = %118
  %122 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %119) #7
  br label %153

123:                                              ; preds = %120
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %153

125:                                              ; preds = %117, %116, %115, %114
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #7
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3, i1 noundef zeroext false)
          to label %126 unwind label %136

126:                                              ; preds = %125
  br i1 %81, label %144, label %127

127:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #7
  %128 = load ptr, ptr %0, align 8, !tbaa !156
  %129 = getelementptr inbounds i8, ptr %128, i64 472
  %130 = load ptr, ptr %129, align 8
  invoke void %130(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(336) %5, ptr noundef nonnull align 8 dereferenceable(336) %43)
          to label %131 unwind label %138

131:                                              ; preds = %127
  %132 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br i1 %132, label %142, label %133

133:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %134 unwind label %140

134:                                              ; preds = %133
  %135 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %142

136:                                              ; preds = %125
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %152

138:                                              ; preds = %127
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %143

140:                                              ; preds = %133
  %141 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br label %143

142:                                              ; preds = %134, %131
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %145

143:                                              ; preds = %140, %138
  %.pn108 = phi { ptr, i32 } [ %141, %140 ], [ %139, %138 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %151

144:                                              ; preds = %126
  store ptr @.str.543, ptr %10, align 8, !tbaa !163
  br label %145

145:                                              ; preds = %144, %142
  %146 = getelementptr inbounds i8, ptr %1, i64 56
  %147 = getelementptr inbounds i8, ptr %1, i64 88
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_RKiRA3_S9_S8_SJ_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.531, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %146, ptr noundef nonnull align 4 dereferenceable(4) %147, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %148 unwind label %149

148:                                              ; preds = %145
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br label %.loopexit

149:                                              ; preds = %145
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %151

151:                                              ; preds = %149, %143
  %.pn110 = phi { ptr, i32 } [ %150, %149 ], [ %.pn108, %143 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  br label %152

152:                                              ; preds = %151, %136
  %.pn110.pn = phi { ptr, i32 } [ %.pn110, %151 ], [ %137, %136 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  br label %153

153:                                              ; preds = %152, %123, %121
  %.pn113 = phi { ptr, i32 } [ %124, %123 ], [ %122, %121 ], [ %.pn110.pn, %152 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br label %393

154:                                              ; preds = %111
  br i1 %81, label %155, label %173

155:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %14) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %14, ptr noundef nonnull align 8 dereferenceable(336) %43)
          to label %156 unwind label %165

156:                                              ; preds = %155
  %157 = getelementptr inbounds i8, ptr %14, i64 24
  store i32 1, ptr %157, align 8, !tbaa !162
  %158 = getelementptr inbounds i8, ptr %14, i64 28
  store i32 1, ptr %158, align 4, !tbaa !158
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  %159 = load ptr, ptr %0, align 8, !tbaa !156
  %160 = getelementptr inbounds i8, ptr %159, i64 152
  %161 = load ptr, ptr %160, align 8
  invoke void %161(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(336) %14, i32 noundef 0)
          to label %162 unwind label %167

162:                                              ; preds = %156
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.17, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(2) @.str.7)
          to label %163 unwind label %169

163:                                              ; preds = %162
  %164 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %14) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %14) #7
  br label %173

165:                                              ; preds = %155
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %172

167:                                              ; preds = %156
  %168 = landingpad { ptr, i32 }
          cleanup
  br label %171

169:                                              ; preds = %162
  %170 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %171

171:                                              ; preds = %169, %167
  %.pn138 = phi { ptr, i32 } [ %170, %169 ], [ %168, %167 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %14) #7
  br label %172

172:                                              ; preds = %171, %165
  %.pn138.pn = phi { ptr, i32 } [ %.pn138, %171 ], [ %166, %165 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %14) #7
  br label %393

173:                                              ; preds = %163, %154
  %174 = load i32, ptr %51, align 8, !tbaa !162
  %.not171 = icmp eq i32 %174, 0
  br i1 %.not171, label %.loopexit, label %.lr.ph166

.lr.ph166:                                        ; preds = %173
  %175 = getelementptr inbounds i8, ptr %1, i64 56
  %176 = getelementptr inbounds i8, ptr %1, i64 88
  %177 = getelementptr inbounds i8, ptr %1, i64 96
  br label %178

178:                                              ; preds = %.lr.ph166, %215
  %.077164 = phi i32 [ 0, %.lr.ph166 ], [ %216, %215 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3, i1 noundef zeroext true)
          to label %179 unwind label %188

179:                                              ; preds = %178
  %180 = load i32, ptr %51, align 8, !tbaa !162
  %181 = icmp ugt i32 %180, 1
  br i1 %181, label %182, label %192

182:                                              ; preds = %179
  %183 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull @.str.531)
          to label %184 unwind label %190

184:                                              ; preds = %182
  %185 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.077164)
          to label %186 unwind label %190

186:                                              ; preds = %184
  %187 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef %185)
          to label %192 unwind label %190

188:                                              ; preds = %178
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %222

190:                                              ; preds = %192, %186, %184, %182
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %221

192:                                              ; preds = %186, %179
  %193 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24remove_duplicate_swizzleERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %194 unwind label %190

194:                                              ; preds = %192
  br i1 %81, label %210, label %195

195:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  %196 = load ptr, ptr %0, align 8, !tbaa !156
  %197 = getelementptr inbounds i8, ptr %196, i64 472
  %198 = load ptr, ptr %197, align 8
  invoke void %198(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(336) %5, ptr noundef nonnull align 8 dereferenceable(336) %43)
          to label %199 unwind label %204

199:                                              ; preds = %195
  %200 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br i1 %200, label %208, label %201

201:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %202 unwind label %206

202:                                              ; preds = %201
  %203 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #7
  br label %208

204:                                              ; preds = %195
  %205 = landingpad { ptr, i32 }
          cleanup
  br label %209

206:                                              ; preds = %201
  %207 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %209

208:                                              ; preds = %202, %199
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %210

209:                                              ; preds = %206, %204
  %.pn141 = phi { ptr, i32 } [ %207, %206 ], [ %205, %204 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %221

210:                                              ; preds = %208, %194
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #7
  %211 = load i32, ptr %176, align 8, !tbaa !164
  %212 = load i32, ptr %177, align 8, !tbaa !165
  %213 = mul i32 %212, %.077164
  %214 = add i32 %213, %211
  store i32 %214, ptr %20, align 4, !tbaa !37
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcS8_RA2_S9_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(7) @.str.547, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %215 unwind label %219

215:                                              ; preds = %210
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  %216 = add nuw i32 %.077164, 1
  %217 = load i32, ptr %51, align 8, !tbaa !162
  %218 = icmp ult i32 %216, %217
  br i1 %218, label %178, label %.loopexit, !llvm.loop !166

219:                                              ; preds = %210
  %220 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  br label %221

221:                                              ; preds = %219, %209, %190
  %.pn143 = phi { ptr, i32 } [ %220, %219 ], [ %.pn141, %209 ], [ %191, %190 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %222

222:                                              ; preds = %221, %188
  %.pn143.pn = phi { ptr, i32 } [ %.pn143, %221 ], [ %189, %188 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %393

223:                                              ; preds = %105
  br i1 %110, label %311, label %224

224:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  store ptr null, ptr %21, align 8, !tbaa !163
  %225 = load i32, ptr %51, align 8, !tbaa !162
  switch i32 %225, label %230 [
    i32 1, label %226
    i32 2, label %227
    i32 3, label %228
    i32 4, label %229
  ]

226:                                              ; preds = %224
  store ptr @.str.543, ptr %21, align 8, !tbaa !163
  br label %237

227:                                              ; preds = %224
  store ptr @.str.544, ptr %21, align 8, !tbaa !163
  br label %237

228:                                              ; preds = %224
  store ptr @.str.545, ptr %21, align 8, !tbaa !163
  br label %237

229:                                              ; preds = %224
  store ptr @.str.546, ptr %21, align 8, !tbaa !163
  br label %237

230:                                              ; preds = %224
  %231 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %231, ptr noundef nonnull @.str.537)
          to label %232 unwind label %233

232:                                              ; preds = %230
  invoke void @__cxa_throw(ptr nonnull %231, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %397 unwind label %235

233:                                              ; preds = %230
  %234 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %231) #7
  br label %310

235:                                              ; preds = %232
  %236 = landingpad { ptr, i32 }
          cleanup
  br label %310

237:                                              ; preds = %229, %228, %227, %226
  br i1 %81, label %238, label %.thread

238:                                              ; preds = %237
  store ptr @.str.543, ptr %21, align 8, !tbaa !163
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %22) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %22, ptr noundef nonnull align 8 dereferenceable(336) %43)
          to label %239 unwind label %245

239:                                              ; preds = %238
  %240 = getelementptr inbounds i8, ptr %22, i64 28
  store i32 1, ptr %240, align 4, !tbaa !158
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  %241 = load ptr, ptr %0, align 8, !tbaa !156
  %242 = getelementptr inbounds i8, ptr %241, i64 152
  %243 = load ptr, ptr %242, align 8
  invoke void %243(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(336) %22, i32 noundef 0)
          to label %244 unwind label %247

244:                                              ; preds = %239
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 1 dereferenceable(2) @.str.17, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 1 dereferenceable(2) @.str.7)
          to label %253 unwind label %249

245:                                              ; preds = %238
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %252

247:                                              ; preds = %239
  %248 = landingpad { ptr, i32 }
          cleanup
  br label %251

249:                                              ; preds = %244
  %250 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  br label %251

251:                                              ; preds = %249, %247
  %.pn115 = phi { ptr, i32 } [ %250, %249 ], [ %248, %247 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %22) #7
  br label %252

252:                                              ; preds = %251, %245
  %.pn115.pn = phi { ptr, i32 } [ %.pn115, %251 ], [ %246, %245 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %22) #7
  br label %310

253:                                              ; preds = %244
  %254 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %22) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %22) #7
  %.pre = load i32, ptr %53, align 4, !tbaa !158
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #7
  store i32 0, ptr %25, align 4, !tbaa !37
  %.not167 = icmp eq i32 %.pre, 0
  br i1 %.not167, label %._crit_edge, label %.lr.ph.split.us.preheader

.thread:                                          ; preds = %237
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #7
  store i32 0, ptr %25, align 4, !tbaa !37
  %.not167176 = icmp eq i32 %106, 0
  br i1 %.not167176, label %._crit_edge, label %.lr.ph.split.preheader

.lr.ph.split.preheader:                           ; preds = %.thread
  %255 = getelementptr inbounds i8, ptr %1, i64 56
  %256 = getelementptr inbounds i8, ptr %1, i64 88
  %257 = getelementptr inbounds i8, ptr %1, i64 96
  br label %.lr.ph.split

.lr.ph.split.us.preheader:                        ; preds = %253
  %258 = getelementptr inbounds i8, ptr %1, i64 56
  %259 = getelementptr inbounds i8, ptr %1, i64 88
  %260 = getelementptr inbounds i8, ptr %1, i64 96
  br label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph.split.us.preheader, %268
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3, i1 noundef zeroext true)
          to label %261 unwind label %.split.us

261:                                              ; preds = %.lr.ph.split.us
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjS9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 1 dereferenceable(2) @.str.417)
          to label %262 unwind label %.split153.us

262:                                              ; preds = %261
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #7
  %263 = load i32, ptr %259, align 8, !tbaa !164
  %264 = load i32, ptr %25, align 4, !tbaa !37
  %265 = load i32, ptr %260, align 8, !tbaa !165
  %266 = mul i32 %265, %264
  %267 = add i32 %266, %263
  store i32 %267, ptr %30, align 4, !tbaa !37
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.531, ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %258, ptr noundef nonnull align 4 dereferenceable(4) %30, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %268 unwind label %.split156.us

268:                                              ; preds = %262
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  %269 = load i32, ptr %25, align 4, !tbaa !37
  %270 = add i32 %269, 1
  store i32 %270, ptr %25, align 4, !tbaa !37
  %271 = load i32, ptr %53, align 4, !tbaa !158
  %272 = icmp ult i32 %270, %271
  br i1 %272, label %.lr.ph.split.us, label %._crit_edge, !llvm.loop !168

.split.us:                                        ; preds = %.lr.ph.split.us
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %289

.split153.us:                                     ; preds = %261
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %288

.split156.us:                                     ; preds = %262
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %307

._crit_edge:                                      ; preds = %301, %268, %.thread, %253
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  br label %.loopexit

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader, %301
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3, i1 noundef zeroext true)
          to label %276 unwind label %.split

276:                                              ; preds = %.lr.ph.split
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjS9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 1 dereferenceable(2) @.str.417)
          to label %277 unwind label %.split153

277:                                              ; preds = %276
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #7
  %278 = load ptr, ptr %0, align 8, !tbaa !156
  %279 = getelementptr inbounds i8, ptr %278, i64 472
  %280 = load ptr, ptr %279, align 8
  invoke void %280(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(336) %5, ptr noundef nonnull align 8 dereferenceable(336) %43)
          to label %281 unwind label %290

281:                                              ; preds = %277
  %282 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  br i1 %282, label %294, label %283

283:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %284 unwind label %292

284:                                              ; preds = %283
  %285 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  br label %294

.split:                                           ; preds = %.lr.ph.split
  %286 = landingpad { ptr, i32 }
          cleanup
  br label %289

.split153:                                        ; preds = %276
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %288

288:                                              ; preds = %.split153.us, %.split153
  %.us-phi154 = phi { ptr, i32 } [ %287, %.split153 ], [ %274, %.split153.us ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %289

289:                                              ; preds = %.split, %.split.us, %288
  %.pn118 = phi { ptr, i32 } [ %.us-phi154, %288 ], [ %286, %.split ], [ %273, %.split.us ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  br label %309

290:                                              ; preds = %277
  %291 = landingpad { ptr, i32 }
          cleanup
  br label %300

292:                                              ; preds = %283
  %293 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  br label %300

294:                                              ; preds = %284, %281
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #7
  %295 = load i32, ptr %256, align 8, !tbaa !164
  %296 = load i32, ptr %25, align 4, !tbaa !37
  %297 = load i32, ptr %257, align 8, !tbaa !165
  %298 = mul i32 %297, %296
  %299 = add i32 %298, %295
  store i32 %299, ptr %30, align 4, !tbaa !37
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.531, ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %255, ptr noundef nonnull align 4 dereferenceable(4) %30, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %301 unwind label %.split156

300:                                              ; preds = %292, %290
  %.pn120 = phi { ptr, i32 } [ %293, %292 ], [ %291, %290 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %308

301:                                              ; preds = %294
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  %302 = load i32, ptr %25, align 4, !tbaa !37
  %303 = add i32 %302, 1
  store i32 %303, ptr %25, align 4, !tbaa !37
  %304 = load i32, ptr %53, align 4, !tbaa !158
  %305 = icmp ult i32 %303, %304
  br i1 %305, label %.lr.ph.split, label %._crit_edge, !llvm.loop !168

.split156:                                        ; preds = %294
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %307

307:                                              ; preds = %.split156.us, %.split156
  %.us-phi157 = phi { ptr, i32 } [ %306, %.split156 ], [ %275, %.split156.us ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #7
  br label %308

308:                                              ; preds = %307, %300
  %.pn122 = phi { ptr, i32 } [ %.us-phi157, %307 ], [ %.pn120, %300 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br label %309

309:                                              ; preds = %308, %289
  %.pn122.pn = phi { ptr, i32 } [ %.pn122, %308 ], [ %.pn118, %289 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  br label %310

310:                                              ; preds = %309, %252, %235, %233
  %.pn125 = phi { ptr, i32 } [ %236, %235 ], [ %234, %233 ], [ %.pn122.pn, %309 ], [ %.pn115.pn, %252 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  br label %393

311:                                              ; preds = %223
  br i1 %81, label %312, label %330

312:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %31) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %31, ptr noundef nonnull align 8 dereferenceable(336) %43)
          to label %313 unwind label %322

313:                                              ; preds = %312
  %314 = getelementptr inbounds i8, ptr %31, i64 24
  store i32 1, ptr %314, align 8, !tbaa !162
  %315 = getelementptr inbounds i8, ptr %31, i64 28
  store i32 1, ptr %315, align 4, !tbaa !158
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #7
  %316 = load ptr, ptr %0, align 8, !tbaa !156
  %317 = getelementptr inbounds i8, ptr %316, i64 152
  %318 = load ptr, ptr %317, align 8
  invoke void %318(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(336) %31, i32 noundef 0)
          to label %319 unwind label %324

319:                                              ; preds = %313
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 1 dereferenceable(2) @.str.17, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.7)
          to label %320 unwind label %326

320:                                              ; preds = %319
  %321 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %31) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %31) #7
  br label %330

322:                                              ; preds = %312
  %323 = landingpad { ptr, i32 }
          cleanup
  br label %329

324:                                              ; preds = %313
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %328

326:                                              ; preds = %319
  %327 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  br label %328

328:                                              ; preds = %326, %324
  %.pn127 = phi { ptr, i32 } [ %327, %326 ], [ %325, %324 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %31) #7
  br label %329

329:                                              ; preds = %328, %322
  %.pn127.pn = phi { ptr, i32 } [ %.pn127, %328 ], [ %323, %322 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %31) #7
  br label %393

330:                                              ; preds = %320, %311
  %331 = load i32, ptr %51, align 8, !tbaa !162
  %.not168 = icmp eq i32 %331, 0
  br i1 %.not168, label %.loopexit, label %.lr.ph163

.lr.ph163:                                        ; preds = %330
  %332 = getelementptr inbounds i8, ptr %1, i64 56
  %333 = getelementptr inbounds i8, ptr %1, i64 88
  %334 = getelementptr inbounds i8, ptr %1, i64 96
  %335 = load i32, ptr %53, align 4, !tbaa !158
  %.not169 = icmp eq i32 %335, 0
  br i1 %.not169, label %.loopexit, label %.lr.ph163.split

.lr.ph163.split:                                  ; preds = %.lr.ph163, %._crit_edge160
  %336 = phi i32 [ %338, %._crit_edge160 ], [ %331, %.lr.ph163 ]
  %337 = phi i32 [ %339, %._crit_edge160 ], [ 1, %.lr.ph163 ]
  %.0161 = phi i32 [ %340, %._crit_edge160 ], [ 0, %.lr.ph163 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #7
  store i32 0, ptr %34, align 4, !tbaa !37
  %.not170 = icmp eq i32 %337, 0
  br i1 %.not170, label %._crit_edge160, label %.lr.ph159

._crit_edge160.loopexit:                          ; preds = %377
  %.pre175 = load i32, ptr %51, align 8, !tbaa !162
  br label %._crit_edge160

._crit_edge160:                                   ; preds = %._crit_edge160.loopexit, %.lr.ph163.split
  %338 = phi i32 [ %.pre175, %._crit_edge160.loopexit ], [ %336, %.lr.ph163.split ]
  %339 = phi i32 [ %380, %._crit_edge160.loopexit ], [ 0, %.lr.ph163.split ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  %340 = add nuw i32 %.0161, 1
  %341 = icmp ult i32 %340, %338
  br i1 %341, label %.lr.ph163.split, label %.loopexit, !llvm.loop !169

.lr.ph159:                                        ; preds = %.lr.ph163.split, %377
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  invoke void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(56) %3, i1 noundef zeroext true)
          to label %342 unwind label %356

342:                                              ; preds = %.lr.ph159
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #7
  %343 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.0161)
          to label %344 unwind label %358

344:                                              ; preds = %342
  store ptr %343, ptr %37, align 8, !tbaa !163
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S7_PS7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 4 dereferenceable(4) %34, ptr noundef nonnull align 1 dereferenceable(3) @.str.548, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %345 unwind label %358

345:                                              ; preds = %344
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  %346 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24remove_duplicate_swizzleERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %347 unwind label %361

347:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #7
  %348 = load ptr, ptr %0, align 8, !tbaa !156
  %349 = getelementptr inbounds i8, ptr %348, i64 472
  %350 = load ptr, ptr %349, align 8
  invoke void %350(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 8 dereferenceable(336) %5, ptr noundef nonnull align 8 dereferenceable(336) %43)
          to label %351 unwind label %363

351:                                              ; preds = %347
  %352 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  br i1 %352, label %367, label %353

353:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %354 unwind label %365

354:                                              ; preds = %353
  %355 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %367

356:                                              ; preds = %.lr.ph159
  %357 = landingpad { ptr, i32 }
          cleanup
  br label %360

358:                                              ; preds = %344, %342
  %359 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %360

360:                                              ; preds = %358, %356
  %.pn131 = phi { ptr, i32 } [ %359, %358 ], [ %357, %356 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  br label %387

361:                                              ; preds = %345
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %386

363:                                              ; preds = %347
  %364 = landingpad { ptr, i32 }
          cleanup
  br label %385

365:                                              ; preds = %353
  %366 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %384

367:                                              ; preds = %354, %351
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %40) #7
  %368 = load i32, ptr %333, align 8, !tbaa !164
  %369 = load i32, ptr %34, align 4, !tbaa !37
  %370 = load i32, ptr %67, align 4, !tbaa !38
  %371 = lshr i32 %370, 3
  %372 = mul i32 %371, %369
  %373 = add i32 %372, %368
  %374 = load i32, ptr %334, align 8, !tbaa !165
  %375 = mul i32 %374, %.0161
  %376 = add i32 %373, %375
  store i32 %376, ptr %40, align 4, !tbaa !37
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcS8_RA2_S9_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(7) @.str.547, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %332, ptr noundef nonnull align 4 dereferenceable(4) %40, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %377 unwind label %382

377:                                              ; preds = %367
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  %378 = load i32, ptr %34, align 4, !tbaa !37
  %379 = add i32 %378, 1
  store i32 %379, ptr %34, align 4, !tbaa !37
  %380 = load i32, ptr %53, align 4, !tbaa !158
  %381 = icmp ult i32 %379, %380
  br i1 %381, label %.lr.ph159, label %._crit_edge160.loopexit, !llvm.loop !171

382:                                              ; preds = %367
  %383 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #7
  br label %384

384:                                              ; preds = %382, %365
  %.pn133 = phi { ptr, i32 } [ %383, %382 ], [ %366, %365 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  br label %385

385:                                              ; preds = %384, %363
  %.pn133.pn = phi { ptr, i32 } [ %.pn133, %384 ], [ %364, %363 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  br label %386

386:                                              ; preds = %385, %361
  %.pn133.pn.pn = phi { ptr, i32 } [ %.pn133.pn, %385 ], [ %362, %361 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br label %387

387:                                              ; preds = %386, %360
  %.pn133.pn.pn.pn = phi { ptr, i32 } [ %.pn133.pn.pn, %386 ], [ %.pn131, %360 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  br label %393

.loopexit:                                        ; preds = %._crit_edge160, %215, %.lr.ph163, %330, %173, %._crit_edge, %148
  %388 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  invoke void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %388)
          to label %389 unwind label %391

389:                                              ; preds = %.loopexit
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  br label %390

390:                                              ; preds = %.invoke, %389
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %5) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %5) #7
  ret void

391:                                              ; preds = %.loopexit
  %392 = landingpad { ptr, i32 }
          cleanup
  br label %393

393:                                              ; preds = %391, %387, %329, %310, %222, %172, %153, %104
  %.pn143.pn.pn = phi { ptr, i32 } [ %.pn143.pn, %222 ], [ %392, %391 ], [ %.pn138.pn, %172 ], [ %.pn133.pn.pn.pn, %387 ], [ %.pn127.pn, %329 ], [ %.pn125, %310 ], [ %.pn113, %153 ], [ %.pn, %104 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %394

394:                                              ; preds = %393, %90
  %.pn143.pn.pn.pn = phi { ptr, i32 } [ %.pn143.pn.pn, %393 ], [ %91, %90 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  br label %395

395:                                              ; preds = %394, %88
  %.pn143.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn143.pn.pn.pn, %394 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  br label %396

396:                                              ; preds = %395, %76, %58
  %.pn149 = phi { ptr, i32 } [ %59, %58 ], [ %.pn143.pn.pn.pn.pn, %395 ], [ %77, %76 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %5) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %5) #7
  resume { ptr, i32 } %.pn149

397:                                              ; preds = %232, %120, %75
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerHLSL25write_access_chain_structERKNS_15SPIRAccessChainEjRKNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(10528), ptr noundef nonnull align 8 dereferenceable(168), i32 noundef, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerHLSL24write_access_chain_valueB5cxx11EjRKNS_11SmallVectorIjLm8EEEb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(10528), i32 noundef, ptr noundef nonnull align 8 dereferenceable(56), i1 noundef zeroext) local_unnamed_addr #1 align 2

declare void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_RKiRA3_S9_S8_SJ_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #5 align 2

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24remove_duplicate_swizzleERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcS8_RA2_S9_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(7), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRPS9_S8_SB_RKS7_jRA3_S9_S8_SH_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S7_PS7_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

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

!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, !13, i64 16}
!6 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !7, i64 0, !12, i64 12, !13, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !14, i64 32, !19, i64 88, !9, i64 120, !22, i64 124, !22, i64 125, !23, i64 128, !24, i64 136, !14, i64 192, !27, i64 248, !28, i64 272, !28, i64 276, !32, i64 280}
!7 = !{!"_ZTSN11spirv_cross8IVariantE", !8, i64 8}
!8 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSN3spv2OpE", !10, i64 0}
!13 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !10, i64 0}
!14 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !15, i64 0, !17, i64 16, !18, i64 24}
!15 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !16, i64 0, !17, i64 8}
!16 = !{!"any pointer", !10, i64 0}
!17 = !{!"long", !10, i64 0}
!18 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !10, i64 0}
!19 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !20, i64 0, !17, i64 16, !21, i64 24}
!20 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !16, i64 0, !17, i64 8}
!21 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !10, i64 0}
!22 = !{!"bool", !10, i64 0}
!23 = !{!"_ZTSN3spv12StorageClassE", !10, i64 0}
!24 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !25, i64 0, !17, i64 16, !26, i64 24}
!25 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !16, i64 0, !17, i64 8}
!26 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !10, i64 0}
!27 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !28, i64 0, !29, i64 4, !22, i64 8, !22, i64 9, !22, i64 10, !9, i64 12, !30, i64 16, !31, i64 20}
!28 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !9, i64 0}
!29 = !{!"_ZTSN3spv3DimE", !10, i64 0}
!30 = !{!"_ZTSN3spv11ImageFormatE", !10, i64 0}
!31 = !{!"_ZTSN3spv15AccessQualifierE", !10, i64 0}
!32 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !33, i64 0}
!33 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !16, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !36, i64 0, !17, i64 8}
!36 = !{!"float", !10, i64 0}
!37 = !{!9, !9, i64 0}
!38 = !{!6, !9, i64 20}
!39 = !{!40, !22, i64 9857}
!40 = !{!"_ZTSN11spirv_cross12CompilerHLSLE", !41, i64 0, !135, i64 9848, !22, i64 9864, !22, i64 9865, !22, i64 9866, !22, i64 9867, !22, i64 9868, !22, i64 9869, !22, i64 9870, !22, i64 9871, !22, i64 9872, !22, i64 9873, !22, i64 9874, !22, i64 9875, !22, i64 9876, !22, i64 9877, !22, i64 9878, !22, i64 9879, !136, i64 9880, !22, i64 9984, !22, i64 9985, !137, i64 9992, !9, i64 10336, !9, i64 10340, !140, i64 10344, !9, i64 10368, !144, i64 10376, !146, i64 10432, !148, i64 10488, !149, i64 10504}
!41 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !42, i64 0, !16, i64 3176, !99, i64 3184, !22, i64 3272, !102, i64 3280, !16, i64 7616, !16, i64 7624, !22, i64 7632, !22, i64 7633, !107, i64 7636, !32, i64 7680, !32, i64 7736, !32, i64 7792, !32, i64 7848, !32, i64 7904, !32, i64 7960, !32, i64 8016, !111, i64 8072, !97, i64 8128, !22, i64 8184, !113, i64 8192, !9, i64 8416, !84, i64 8424, !84, i64 8480, !84, i64 8536, !114, i64 8592, !116, i64 8648, !117, i64 8656, !67, i64 8712, !67, i64 8992, !117, i64 9272, !24, i64 9328, !9, i64 9384, !9, i64 9388, !9, i64 9392, !22, i64 9396, !22, i64 9397, !119, i64 9400, !119, i64 9424, !123, i64 9448, !127, i64 9472, !117, i64 9496, !84, i64 9552, !84, i64 9608, !10, i64 9664, !131, i64 9672, !84, i64 9728, !16, i64 9784, !133, i64 9792}
!42 = !{!"_ZTSN11spirv_cross8CompilerE", !43, i64 8, !14, i64 1928, !14, i64 1984, !16, i64 2040, !16, i64 2048, !9, i64 2056, !86, i64 2064, !22, i64 2120, !84, i64 2128, !22, i64 2184, !22, i64 2185, !88, i64 2192, !14, i64 2312, !91, i64 2368, !84, i64 2400, !84, i64 2456, !84, i64 2512, !84, i64 2568, !84, i64 2624, !83, i64 2680, !83, i64 2744, !9, i64 2808, !9, i64 2812, !22, i64 2816, !84, i64 2824, !22, i64 2880, !22, i64 2881, !9, i64 2884, !93, i64 2888, !14, i64 2944, !95, i64 3000, !84, i64 3056, !22, i64 3112, !97, i64 3120}
!43 = !{!"_ZTSN11spirv_cross8ParsedIRE", !44, i64 0, !50, i64 8, !54, i64 32, !57, i64 248, !10, i64 304, !59, i64 1088, !59, i64 1144, !62, i64 1200, !64, i64 1256, !67, i64 1312, !70, i64 1592, !73, i64 1624, !75, i64 1680, !77, i64 1736, !78, i64 1740, !79, i64 1748, !80, i64 1752, !9, i64 1756, !9, i64 1760, !81, i64 1768, !83, i64 1800, !84, i64 1864}
!44 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !45, i64 0}
!45 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !46, i64 0}
!46 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !47, i64 0}
!47 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !48, i64 0}
!48 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !49, i64 0}
!49 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !16, i64 0}
!50 = !{!"_ZTSSt6vectorIjSaIjEE", !51, i64 0}
!51 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!54 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !55, i64 0, !17, i64 16, !56, i64 24}
!55 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !16, i64 0, !17, i64 8}
!56 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !10, i64 0}
!57 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !58, i64 0}
!58 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!59 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !60, i64 0, !17, i64 16, !61, i64 24}
!60 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !16, i64 0, !17, i64 8}
!61 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !10, i64 0}
!62 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !63, i64 0}
!63 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!64 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !65, i64 0, !17, i64 16, !66, i64 24}
!65 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !16, i64 0, !17, i64 8}
!66 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !10, i64 0}
!67 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !68, i64 0, !17, i64 16, !69, i64 24}
!68 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !16, i64 0, !17, i64 8}
!69 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !10, i64 0}
!70 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !71, i64 0, !17, i64 16, !72, i64 24}
!71 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !16, i64 0, !17, i64 8}
!72 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !10, i64 0}
!73 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !74, i64 0}
!74 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!75 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !76, i64 0}
!76 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!77 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !9, i64 0}
!78 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !9, i64 0, !22, i64 4, !22, i64 5, !22, i64 6}
!79 = !{!"_ZTSN3spv15AddressingModelE", !10, i64 0}
!80 = !{!"_ZTSN3spv11MemoryModelE", !10, i64 0}
!81 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !82, i64 0, !17, i64 8, !10, i64 16}
!82 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !16, i64 0}
!83 = !{!"_ZTSN11spirv_cross6BitsetE", !17, i64 0, !84, i64 8}
!84 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !85, i64 0}
!85 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!86 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !87, i64 0}
!87 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!88 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !89, i64 0, !17, i64 16, !90, i64 24}
!89 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !16, i64 0, !17, i64 8}
!90 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !10, i64 0}
!91 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !92, i64 0, !16, i64 24}
!92 = !{!"_ZTSSt14_Function_base", !10, i64 0, !16, i64 16}
!93 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !94, i64 0}
!94 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!95 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !96, i64 0}
!96 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!97 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !98, i64 0}
!98 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!99 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !100, i64 0, !17, i64 16, !101, i64 24}
!100 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !16, i64 0, !17, i64 8}
!101 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !10, i64 0}
!102 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !103, i64 0, !10, i64 24, !104, i64 4120}
!103 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !16, i64 0, !17, i64 8, !17, i64 16}
!104 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !105, i64 0, !17, i64 16, !106, i64 24}
!105 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !16, i64 0, !17, i64 8}
!106 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !10, i64 0}
!107 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !9, i64 0, !22, i64 4, !22, i64 5, !9, i64 8, !22, i64 12, !22, i64 13, !22, i64 14, !22, i64 15, !22, i64 16, !22, i64 17, !22, i64 18, !22, i64 19, !22, i64 20, !22, i64 21, !22, i64 22, !22, i64 23, !9, i64 24, !108, i64 28, !109, i64 32}
!108 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !22, i64 0, !22, i64 1, !22, i64 2}
!109 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !110, i64 0, !110, i64 4}
!110 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !10, i64 0}
!111 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !112, i64 0}
!112 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!113 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !81, i64 0, !81, i64 32, !81, i64 64, !22, i64 96, !22, i64 97, !22, i64 98, !22, i64 99, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168, !16, i64 176, !13, i64 184, !22, i64 188, !22, i64 189, !22, i64 190, !22, i64 191, !22, i64 192, !22, i64 193, !22, i64 194, !22, i64 195, !22, i64 196, !22, i64 197, !22, i64 198, !22, i64 199, !22, i64 200, !22, i64 201, !22, i64 202, !22, i64 203, !22, i64 204, !22, i64 205, !22, i64 206, !22, i64 207, !22, i64 208, !22, i64 209, !22, i64 210, !22, i64 211, !22, i64 212, !22, i64 213, !22, i64 214, !22, i64 215, !22, i64 216, !22, i64 217, !22, i64 218, !22, i64 219}
!114 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !115, i64 0}
!115 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!116 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !9, i64 0}
!117 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !118, i64 0}
!118 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!119 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !120, i64 0}
!120 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !121, i64 0}
!121 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !122, i64 0}
!122 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!123 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !124, i64 0}
!124 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !125, i64 0}
!125 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !126, i64 0}
!126 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!127 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !128, i64 0}
!128 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !129, i64 0}
!129 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !130, i64 0}
!130 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!131 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !132, i64 0}
!132 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!133 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !134, i64 0}
!134 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!135 = !{!"_ZTSN11spirv_cross12CompilerHLSL7OptionsE", !9, i64 0, !22, i64 4, !22, i64 5, !22, i64 6, !22, i64 7, !22, i64 8, !22, i64 9, !22, i64 10, !22, i64 11, !22, i64 12}
!136 = !{!"_ZTSN11spirv_cross12CompilerHLSL19TextureSizeVariantsE", !17, i64 0, !10, i64 8}
!137 = !{!"_ZTSN11spirv_cross11SmallVectorINS_24HLSLVertexAttributeRemapELm8EEE", !138, i64 0, !17, i64 16, !139, i64 24}
!138 = !{!"_ZTSN11spirv_cross10VectorViewINS_24HLSLVertexAttributeRemapEEE", !16, i64 0, !17, i64 8}
!139 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_24HLSLVertexAttributeRemapELm8EEE", !10, i64 0}
!140 = !{!"_ZTSSt6vectorIN11spirv_cross13RootConstantsESaIS1_EE", !141, i64 0}
!141 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross13RootConstantsESaIS1_EE", !142, i64 0}
!142 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross13RootConstantsESaIS1_EE12_Vector_implE", !143, i64 0}
!143 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross13RootConstantsESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!144 = !{!"_ZTSSt13unordered_mapIN11spirv_cross15StageSetBindingESt4pairINS0_19HLSLResourceBindingEbENS0_14InternalHasherESt8equal_toIS1_ESaIS2_IKS1_S4_EEE", !145, i64 0}
!145 = !{!"_ZTSSt10_HashtableIN11spirv_cross15StageSetBindingESt4pairIKS1_S2_INS0_19HLSLResourceBindingEbEESaIS6_ENSt8__detail10_Select1stESt8equal_toIS1_ENS0_14InternalHasherENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!146 = !{!"_ZTSSt13unordered_setIN11spirv_cross14SetBindingPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !147, i64 0}
!147 = !{!"_ZTSSt10_HashtableIN11spirv_cross14SetBindingPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!148 = !{!"_ZTSN11spirv_cross12CompilerHLSLUt_E", !9, i64 0, !9, i64 4, !22, i64 8, !22, i64 9}
!149 = !{!"_ZTSSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE", !150, i64 0}
!150 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE", !151, i64 0}
!151 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE12_Vector_implE", !152, i64 0}
!152 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!153 = !{i8 0, i8 2}
!154 = !{}
!155 = !{!40, !9, i64 9848}
!156 = !{!157, !157, i64 0}
!157 = !{!"vtable pointer", !11, i64 0}
!158 = !{!6, !9, i64 28}
!159 = !{!160, !22, i64 104}
!160 = !{!"_ZTSN11spirv_cross15SPIRAccessChainE", !7, i64 0, !28, i64 12, !23, i64 16, !81, i64 24, !81, i64 56, !9, i64 88, !161, i64 92, !9, i64 96, !9, i64 100, !22, i64 104, !22, i64 105, !59, i64 112}
!161 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !9, i64 0}
!162 = !{!6, !9, i64 24}
!163 = !{!16, !16, i64 0}
!164 = !{!160, !9, i64 88}
!165 = !{!160, !9, i64 96}
!166 = distinct !{!166, !167}
!167 = !{!"llvm.loop.mustprogress"}
!168 = distinct !{!168, !167}
!169 = distinct !{!169, !167, !170}
!170 = !{!"llvm.loop.unswitch.partial.disable"}
!171 = distinct !{!171, !167}


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