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

; 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.spirv_cross::ParsedIR::LoopLock" = type { ptr }
%"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] }
%"class.spirv_cross::TypedID.280" = type { i32 }
%"struct.spirv_cross::SpecializationConstant" = type { %"class.spirv_cross::TypedID.309", i32 }
%"class.spirv_cross::TypedID.309" = type { i32 }
%"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 { [256 x i8] }
%class.anon.343 = type { ptr }
%class.anon.344 = type { ptr }
%class.anon.345 = type { ptr }
%class.anon.346 = type { ptr }
%class.anon.347 = type { ptr, ptr, ptr }
%class.anon.348 = type { ptr, ptr, ptr }
%"struct.spirv_cross::SPIREntryPoint" = type <{ %"class.spirv_cross::TypedID", [4 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::SmallVector.293", %"class.spirv_cross::Bitset", %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", i32, i32, i32, i32, i8, [3 x i8] }>
%"class.spirv_cross::TypedID" = type { i32 }
%"class.spirv_cross::SmallVector.293" = type { %"class.spirv_cross::VectorView.294", i64, %"class.spirv_cross::AlignedBuffer.295" }
%"class.spirv_cross::VectorView.294" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.295" = type { [32 x i8] }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.spirv_cross::SPIREntryPoint::WorkgroupSize" = type { i32, i32, i32, i32, i32, i32, i32 }
%"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.27", %"class.spirv_cross::SmallVector.27", %"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.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"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.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"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 { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"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.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.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] }
%"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_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 }
%"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.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.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_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::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.310", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::TypedID.281" = type { i32 }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.310" = type { %"class.spirv_cross::VectorView.311", i64, %"class.spirv_cross::AlignedBuffer.312" }
%"class.spirv_cross::VectorView.311" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.312" = type { [32 x i8] }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 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.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = type { [8 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"struct.spirv_cross::SPIRUndef" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281" }
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", i32, i32, %"class.spirv_cross::TypedID.280", %"class.spirv_cross::TypedID.282", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.280", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.283", i8, i8, i8, ptr }
%"class.spirv_cross::TypedID.282" = type { i32 }
%"class.spirv_cross::TypedID.283" = type { i32 }

@.str.9 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.176 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.178 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.309 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.335 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.589 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.629 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.747 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.748 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.749 = external hidden unnamed_addr constant [23 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #1 align 2

; 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 nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176)) #3

; 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: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) #4 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL14emit_resourcesEv(ptr noundef nonnull align 8 dereferenceable(9848) %0) #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i8, align 1
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca %"class.spirv_cross::ParsedIR::LoopLock", align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i8, align 1
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.spirv_cross::TypedID.280", align 4
  %20 = alloca ptr, align 8
  %21 = alloca i8, align 1
  %22 = alloca %"class.spirv_cross::TypedID.280", align 4
  %23 = alloca %"class.spirv_cross::TypedID.280", align 4
  %24 = alloca %"class.spirv_cross::TypedID.280", align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, 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 %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %33 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %34 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %35 = alloca %"class.spirv_cross::TypedID.309", align 4
  %36 = alloca %"class.spirv_cross::TypedID.309", align 4
  %37 = alloca %"class.spirv_cross::TypedID.309", align 4
  %38 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %class.anon.343, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca %class.anon.344, align 8
  %46 = alloca %class.anon.345, align 8
  %47 = alloca %class.anon.346, align 8
  %48 = alloca i8, align 1
  %49 = alloca %class.anon.347, align 8
  %50 = alloca i8, align 1
  %51 = alloca %class.anon.348, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca i32, align 4
  %56 = alloca ptr, align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %61 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #8
  %62 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %61)
  store ptr %62, ptr %3, align 8, !tbaa !5
  %63 = load ptr, ptr %61, align 8, !tbaa !9
  %64 = getelementptr inbounds ptr, ptr %63, i64 60
  %65 = load ptr, ptr %64, align 8
  call void %65(ptr noundef nonnull align 8 dereferenceable(9848) %61)
  %66 = load ptr, ptr %3, align 8, !tbaa !5
  %67 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %66, i32 0, i32 10
  %68 = load i32, ptr %67, align 8, !tbaa !11
  %69 = icmp eq i32 %68, 4
  br i1 %69, label %70, label %73

70:                                               ; preds = %1
  %71 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %61)
  br i1 %71, label %72, label %73

72:                                               ; preds = %70
  call void @_ZN11spirv_cross12CompilerGLSL24replace_fragment_outputsEv(ptr noundef nonnull align 8 dereferenceable(9848) %61)
  br label %73

73:                                               ; preds = %72, %70, %1
  %74 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 38
  %75 = call noundef zeroext i1 @_ZNKSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %74) #8
  br i1 %75, label %76, label %79

76:                                               ; preds = %73
  %77 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 39
  %78 = call noundef zeroext i1 @_ZNKSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %77) #8
  br i1 %78, label %80, label %79

79:                                               ; preds = %76, %73
  call void @_ZN11spirv_cross12CompilerGLSL8emit_plsEv(ptr noundef nonnull align 8 dereferenceable(9848) %61)
  br label %80

80:                                               ; preds = %79, %76
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %81, i32 0, i32 10
  %83 = load i32, ptr %82, align 8, !tbaa !11
  switch i32 %83, label %88 [
    i32 3, label %84
    i32 1, label %84
    i32 2, label %84
    i32 5365, label %84
  ]

84:                                               ; preds = %80, %80, %80, %80
  %85 = load ptr, ptr %3, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %85, i32 0, i32 10
  %87 = load i32, ptr %86, align 8, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL34fixup_implicit_builtin_block_namesEN3spv14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef %87)
  br label %89

88:                                               ; preds = %80
  br label %89

89:                                               ; preds = %88, %84
  call void @llvm.lifetime.start.p0(i64 1, ptr %4) #8
  %90 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 24
  %91 = load i8, ptr %90, align 8, !tbaa !30, !range !85, !noundef !86
  %92 = trunc i8 %91 to i1
  br i1 %92, label %93, label %105

93:                                               ; preds = %89
  %94 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %95 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %94, i32 0, i32 1
  %96 = load i8, ptr %95, align 4, !tbaa !87, !range !85, !noundef !86
  %97 = trunc i8 %96 to i1
  br i1 %97, label %103, label %98

98:                                               ; preds = %93
  %99 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %100 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %99, i32 0, i32 0
  %101 = load i32, ptr %100, align 4, !tbaa !131
  %102 = icmp uge i32 %101, 120
  br label %103

103:                                              ; preds = %98, %93
  %104 = phi i1 [ true, %93 ], [ %102, %98 ]
  br label %105

105:                                              ; preds = %103, %89
  %106 = phi i1 [ false, %89 ], [ %104, %103 ]
  %107 = zext i1 %106 to i8
  store i8 %107, ptr %4, align 1, !tbaa !132
  %108 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %109 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %108, i32 0, i32 5
  %110 = load i8, ptr %109, align 1, !tbaa !133, !range !85, !noundef !86
  %111 = trunc i8 %110 to i1
  br i1 %111, label %112, label %139

112:                                              ; preds = %105
  %113 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %114 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %113, i32 0, i32 1
  %115 = load i8, ptr %114, align 4, !tbaa !87, !range !85, !noundef !86
  %116 = trunc i8 %115 to i1
  br i1 %116, label %139, label %117

117:                                              ; preds = %112
  %118 = load ptr, ptr %3, align 8, !tbaa !5
  %119 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %118, i32 0, i32 10
  %120 = load i32, ptr %119, align 8, !tbaa !11
  %121 = icmp ne i32 %120, 4
  br i1 %121, label %122, label %139

122:                                              ; preds = %117
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %123, i32 0, i32 10
  %125 = load i32, ptr %124, align 8, !tbaa !11
  switch i32 %125, label %137 [
    i32 3, label %126
    i32 1, label %126
    i32 2, label %126
    i32 0, label %133
    i32 5365, label %133
  ]

126:                                              ; preds = %122, %122, %122
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %127, i32 0, i32 10
  %129 = load i32, ptr %128, align 8, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef 1, i32 noundef %129)
  %130 = load ptr, ptr %3, align 8, !tbaa !5
  %131 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %130, i32 0, i32 10
  %132 = load i32, ptr %131, align 8, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef 3, i32 noundef %132)
  store i8 0, ptr %4, align 1, !tbaa !132
  br label %138

133:                                              ; preds = %122, %122
  %134 = load ptr, ptr %3, align 8, !tbaa !5
  %135 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %134, i32 0, i32 10
  %136 = load i32, ptr %135, align 8, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef 3, i32 noundef %136)
  store i8 0, ptr %4, align 1, !tbaa !132
  br label %138

137:                                              ; preds = %122
  br label %138

138:                                              ; preds = %137, %133, %126
  br label %184

139:                                              ; preds = %117, %112, %105
  %140 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL31should_force_emit_builtin_blockEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef 3)
  br i1 %140, label %141, label %145

141:                                              ; preds = %139
  %142 = load ptr, ptr %3, align 8, !tbaa !5
  %143 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %142, i32 0, i32 10
  %144 = load i32, ptr %143, align 8, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef 3, i32 noundef %144)
  store i8 0, ptr %4, align 1, !tbaa !132
  br label %183

145:                                              ; preds = %139
  %146 = load ptr, ptr %3, align 8, !tbaa !5
  %147 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %146, i32 0, i32 11
  %148 = load i8, ptr %147, align 4, !tbaa !134, !range !85, !noundef !86
  %149 = trunc i8 %148 to i1
  br i1 %149, label %150, label %154

150:                                              ; preds = %145
  %151 = load ptr, ptr %3, align 8, !tbaa !5
  %152 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %151, i32 0, i32 10
  %153 = load i32, ptr %152, align 8, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef 1, i32 noundef %153)
  br label %182

154:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %155, i32 0, i32 10
  %157 = load i32, ptr %156, align 8, !tbaa !11
  %158 = icmp eq i32 %157, 4
  %159 = zext i1 %158 to i64
  %160 = select i1 %158, ptr @.str.589, ptr @.str.629
  store ptr %160, ptr %5, align 8, !tbaa !5
  %161 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 22
  %162 = load i32, ptr %161, align 8, !tbaa !135
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %166

164:                                              ; preds = %154
  %165 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 22
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA24_S2_RjRA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 1 dereferenceable(24) @.str.747, ptr noundef nonnull align 4 dereferenceable(4) %165, ptr noundef nonnull align 1 dereferenceable(3) @.str.309)
  br label %166

166:                                              ; preds = %164, %154
  %167 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 23
  %168 = load i32, ptr %167, align 4, !tbaa !136
  %169 = icmp ne i32 %168, 0
  br i1 %169, label %170, label %172

170:                                              ; preds = %166
  %171 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 23
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA24_S2_RjRA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 1 dereferenceable(24) @.str.748, ptr noundef nonnull align 4 dereferenceable(4) %171, ptr noundef nonnull align 1 dereferenceable(3) @.str.309)
  br label %172

172:                                              ; preds = %170, %166
  %173 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 22
  %174 = load i32, ptr %173, align 8, !tbaa !135
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %180, label %176

176:                                              ; preds = %172
  %177 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 23
  %178 = load i32, ptr %177, align 4, !tbaa !136
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %180, label %181

180:                                              ; preds = %176, %172
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %181

181:                                              ; preds = %180, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  br label %182

182:                                              ; preds = %181, %150
  br label %183

183:                                              ; preds = %182, %141
  br label %184

184:                                              ; preds = %183, %138
  %185 = load i8, ptr %4, align 1, !tbaa !132, !range !85, !noundef !86
  %186 = trunc i8 %185 to i1
  br i1 %186, label %187, label %188

187:                                              ; preds = %184
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(23) @.str.749)
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %188

188:                                              ; preds = %187, %184
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #8
  store i8 0, ptr %6, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %189 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  call void @_ZNK11spirv_cross8ParsedIR21create_loop_hard_lockEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8 %7, ptr noundef nonnull align 8 dereferenceable(1920) %189)
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %190 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  %191 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %190, i32 0, i32 5
  store ptr %191, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %192) #8
  store ptr %193, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %194 = load ptr, ptr %8, align 8, !tbaa !5
  %195 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %194) #8
  store ptr %195, ptr %10, align 8, !tbaa !5
  br label %196

196:                                              ; preds = %501, %188
  %197 = load ptr, ptr %9, align 8, !tbaa !5
  %198 = load ptr, ptr %10, align 8, !tbaa !5
  %199 = icmp ne ptr %197, %198
  br i1 %199, label %201, label %200

200:                                              ; preds = %196
  store i32 4, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  br label %505

201:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %202 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %202, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %203 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  %204 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %203, i32 0, i32 2
  %205 = load ptr, ptr %12, align 8, !tbaa !5
  %206 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %205)
          to label %207 unwind label %253

207:                                              ; preds = %201
  %208 = zext i32 %206 to i64
  %209 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %204, i64 noundef %208) #8
  store ptr %209, ptr %13, align 8, !tbaa !5
  %210 = load ptr, ptr %13, align 8, !tbaa !5
  %211 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %210)
          to label %212 unwind label %253

212:                                              ; preds = %207
  %213 = icmp eq i32 %211, 3
  br i1 %213, label %214, label %275

214:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %215 = load ptr, ptr %13, align 8, !tbaa !5
  %216 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %215)
          to label %217 unwind label %257

217:                                              ; preds = %214
  store ptr %216, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #8
  %218 = load ptr, ptr %16, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %218, i32 0, i32 3
  %220 = load i8, ptr %219, align 8, !tbaa !137, !range !85, !noundef !86
  %221 = trunc i8 %220 to i1
  br i1 %221, label %227, label %222

222:                                              ; preds = %217
  %223 = load ptr, ptr %16, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %223, i32 0, i32 5
  %225 = load i8, ptr %224, align 2, !tbaa !146, !range !85, !noundef !86
  %226 = trunc i8 %225 to i1
  br label %227

227:                                              ; preds = %222, %217
  %228 = phi i1 [ true, %217 ], [ %226, %222 ]
  %229 = zext i1 %228 to i8
  store i8 %229, ptr %17, align 1, !tbaa !132
  %230 = load i8, ptr %17, align 1, !tbaa !132, !range !85, !noundef !86
  %231 = trunc i8 %230 to i1
  br i1 %231, label %232, label %272

232:                                              ; preds = %227
  %233 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %234 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %233, i32 0, i32 4
  %235 = load i8, ptr %234, align 4, !tbaa !147, !range !85, !noundef !86
  %236 = trunc i8 %235 to i1
  br i1 %236, label %265, label %237

237:                                              ; preds = %232
  %238 = load ptr, ptr %16, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %238, i32 0, i32 3
  %240 = load i8, ptr %239, align 8, !tbaa !137, !range !85, !noundef !86
  %241 = trunc i8 %240 to i1
  br i1 %241, label %242, label %265

242:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #8
  %243 = load ptr, ptr %16, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %243, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 8 %244, i64 4, i1 false), !tbaa.struct !148
  %245 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %19, i32 0, i32 0
  %246 = load i32, ptr %245, align 4
  %247 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 %246, i32 noundef 1)
          to label %248 unwind label %261

248:                                              ; preds = %242
  invoke void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef %247)
          to label %249 unwind label %261

249:                                              ; preds = %248
  %250 = load ptr, ptr %16, align 8, !tbaa !5
  %251 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %250, i32 0, i32 7
  %252 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %251, 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 @llvm.lifetime.end.p0(i64 32, ptr %18) #8
  br label %265

253:                                              ; preds = %386, %285, %283, %280, %275, %207, %201
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %14, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %15, align 4
  br label %504

257:                                              ; preds = %214
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %14, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %15, align 4
  br label %274

261:                                              ; preds = %248, %242
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %14, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #8
  br label %273

265:                                              ; preds = %249, %237, %232
  %266 = load ptr, ptr %16, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13emit_constantERKNS_12SPIRConstantE(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(360) %266)
          to label %267 unwind label %268

267:                                              ; preds = %265
  store i8 1, ptr %6, align 1, !tbaa !132
  br label %272

268:                                              ; preds = %265
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %14, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %15, align 4
  br label %273

272:                                              ; preds = %267, %227
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %494

273:                                              ; preds = %268, %261
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #8
  br label %274

274:                                              ; preds = %273, %257
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %504

275:                                              ; preds = %212
  %276 = load ptr, ptr %13, align 8, !tbaa !5
  %277 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %276)
          to label %278 unwind label %253

278:                                              ; preds = %275
  %279 = icmp eq i32 %277, 9
  br i1 %279, label %280, label %285

280:                                              ; preds = %278
  %281 = load ptr, ptr %13, align 8, !tbaa !5
  %282 = invoke noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %281)
          to label %283 unwind label %253

283:                                              ; preds = %280
  invoke void @_ZN11spirv_cross12CompilerGLSL31emit_specialization_constant_opERKNS_14SPIRConstantOpE(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(76) %282)
          to label %284 unwind label %253

284:                                              ; preds = %283
  store i8 1, ptr %6, align 1, !tbaa !132
  br label %493

285:                                              ; preds = %278
  %286 = load ptr, ptr %13, align 8, !tbaa !5
  %287 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %286)
          to label %288 unwind label %253

288:                                              ; preds = %285
  %289 = icmp eq i32 %287, 1
  br i1 %289, label %290, label %386

290:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %291 = load ptr, ptr %13, align 8, !tbaa !5
  %292 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %291)
          to label %293 unwind label %365

293:                                              ; preds = %290
  store ptr %292, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #8
  %294 = load ptr, ptr %20, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %294, i32 0, i32 2
  %296 = load i32, ptr %295, align 8, !tbaa !150
  %297 = icmp eq i32 %296, 15
  br i1 %297, label %298, label %324

298:                                              ; preds = %293
  %299 = load ptr, ptr %20, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %299, i32 0, i32 6
  %301 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %300) #8
  br i1 %301, label %302, label %324

302:                                              ; preds = %298
  %303 = load ptr, ptr %20, align 8, !tbaa !5
  %304 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %303, i32 0, i32 9
  %305 = load i8, ptr %304, align 4, !tbaa !161, !range !85, !noundef !86
  %306 = trunc i8 %305 to i1
  br i1 %306, label %324, label %307

307:                                              ; preds = %302
  %308 = load ptr, ptr %20, align 8, !tbaa !5
  %309 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %308, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %22, ptr align 8 %309, i64 4, i1 false), !tbaa.struct !148
  %310 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %22, i32 0, i32 0
  %311 = load i32, ptr %310, align 4
  %312 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 %311, i32 noundef 2)
          to label %313 unwind label %369

313:                                              ; preds = %307
  br i1 %312, label %322, label %314

314:                                              ; preds = %313
  %315 = load ptr, ptr %20, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %315, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 8 %316, i64 4, i1 false), !tbaa.struct !148
  %317 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %23, i32 0, i32 0
  %318 = load i32, ptr %317, align 4
  %319 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 %318, i32 noundef 3)
          to label %320 unwind label %369

320:                                              ; preds = %314
  %321 = xor i1 %319, true
  br label %322

322:                                              ; preds = %320, %313
  %323 = phi i1 [ false, %313 ], [ %321, %320 ]
  br label %324

324:                                              ; preds = %322, %302, %298, %293
  %325 = phi i1 [ false, %302 ], [ false, %298 ], [ false, %293 ], [ %323, %322 ]
  %326 = zext i1 %325 to i8
  store i8 %326, ptr %21, align 1, !tbaa !132
  %327 = load ptr, ptr %20, align 8, !tbaa !5
  %328 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %327, i32 0, i32 2
  %329 = load i32, ptr %328, align 8, !tbaa !150
  %330 = icmp eq i32 %329, 15
  br i1 %330, label %331, label %373

331:                                              ; preds = %324
  %332 = load ptr, ptr %20, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %332, i32 0, i32 9
  %334 = load i8, ptr %333, align 4, !tbaa !161, !range !85, !noundef !86
  %335 = trunc i8 %334 to i1
  br i1 %335, label %336, label %373

336:                                              ; preds = %331
  %337 = load ptr, ptr %20, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %337, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %24, ptr align 8 %338, i64 4, i1 false), !tbaa.struct !148
  %339 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %24, i32 0, i32 0
  %340 = load i32, ptr %339, align 4
  %341 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 %340, i32 noundef 2)
          to label %342 unwind label %369

342:                                              ; preds = %336
  br i1 %341, label %343, label %373

343:                                              ; preds = %342
  %344 = load ptr, ptr %20, align 8, !tbaa !5
  %345 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %344, i32 0, i32 11
  %346 = load i32, ptr %345, align 8, !tbaa !162
  %347 = icmp eq i32 %346, 5338
  br i1 %347, label %358, label %348

348:                                              ; preds = %343
  %349 = load ptr, ptr %20, align 8, !tbaa !5
  %350 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %349, i32 0, i32 11
  %351 = load i32, ptr %350, align 8, !tbaa !162
  %352 = icmp eq i32 %351, 5342
  br i1 %352, label %358, label %353

353:                                              ; preds = %348
  %354 = load ptr, ptr %20, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %354, i32 0, i32 11
  %356 = load i32, ptr %355, align 8, !tbaa !162
  %357 = icmp eq i32 %356, 5339
  br i1 %357, label %358, label %373

358:                                              ; preds = %353, %348, %343
  %359 = load ptr, ptr %20, align 8, !tbaa !5
  %360 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %359, i32 0, i32 16
  %361 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %360)
          to label %362 unwind label %369

362:                                              ; preds = %358
  %363 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 noundef %361)
          to label %364 unwind label %369

364:                                              ; preds = %362
  store ptr %363, ptr %20, align 8, !tbaa !5
  store i8 1, ptr %21, align 1, !tbaa !132
  br label %373

365:                                              ; preds = %290
  %366 = landingpad { ptr, i32 }
          cleanup
  %367 = extractvalue { ptr, i32 } %366, 0
  store ptr %367, ptr %14, align 8
  %368 = extractvalue { ptr, i32 } %366, 1
  store i32 %368, ptr %15, align 4
  br label %385

369:                                              ; preds = %381, %379, %362, %358, %336, %314, %307
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %14, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #8
  br label %385

373:                                              ; preds = %364, %353, %342, %331, %324
  %374 = load i8, ptr %21, align 1, !tbaa !132, !range !85, !noundef !86
  %375 = trunc i8 %374 to i1
  br i1 %375, label %376, label %384

376:                                              ; preds = %373
  %377 = load i8, ptr %6, align 1, !tbaa !132, !range !85, !noundef !86
  %378 = trunc i8 %377 to i1
  br i1 %378, label %379, label %381

379:                                              ; preds = %376
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
          to label %380 unwind label %369

380:                                              ; preds = %379
  br label %381

381:                                              ; preds = %380, %376
  store i8 0, ptr %6, align 1, !tbaa !132
  %382 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(336) %382)
          to label %383 unwind label %369

383:                                              ; preds = %381
  br label %384

384:                                              ; preds = %383, %373
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %492

385:                                              ; preds = %369, %365
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %504

386:                                              ; preds = %288
  %387 = load ptr, ptr %13, align 8, !tbaa !5
  %388 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %387)
          to label %389 unwind label %253

389:                                              ; preds = %386
  %390 = icmp eq i32 %388, 12
  br i1 %390, label %391, label %491

391:                                              ; preds = %389
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %392 = load ptr, ptr %13, align 8, !tbaa !5
  %393 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross7Variant3getINS_9SPIRUndefEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %392)
          to label %394 unwind label %406

394:                                              ; preds = %391
  store ptr %393, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %395 = load ptr, ptr %25, align 8, !tbaa !5
  %396 = getelementptr inbounds %"struct.spirv_cross::SPIRUndef", ptr %395, i32 0, i32 1
  %397 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %396)
          to label %398 unwind label %410

398:                                              ; preds = %394
  %399 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 noundef %397)
          to label %400 unwind label %410

400:                                              ; preds = %398
  store ptr %399, ptr %26, align 8, !tbaa !5
  %401 = load ptr, ptr %26, align 8, !tbaa !5
  %402 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %401, i32 0, i32 2
  %403 = load i32, ptr %402, align 8, !tbaa !150
  %404 = icmp eq i32 %403, 1
  br i1 %404, label %405, label %414

405:                                              ; preds = %400
  store i32 5, ptr %11, align 4
  br label %471

406:                                              ; preds = %391
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %14, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %15, align 4
  br label %490

410:                                              ; preds = %414, %398, %394
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %14, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %15, align 4
  br label %489

414:                                              ; preds = %400
  %415 = load ptr, ptr %26, align 8, !tbaa !5
  %416 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23type_is_top_level_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %61, ptr noundef nonnull align 8 dereferenceable(336) %415)
          to label %417 unwind label %410

417:                                              ; preds = %414
  br i1 %416, label %418, label %419

418:                                              ; preds = %417
  store i32 5, ptr %11, align 4
  br label %471

419:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  %420 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %421 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %420, i32 0, i32 12
  %422 = load i8, ptr %421, align 4, !tbaa !163, !range !85, !noundef !86
  %423 = trunc i8 %422 to i1
  br i1 %423, label %424, label %452

424:                                              ; preds = %419
  %425 = load ptr, ptr %26, align 8, !tbaa !5
  %426 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL24type_can_zero_initializeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(336) %425)
          to label %427 unwind label %439

427:                                              ; preds = %424
  br i1 %426, label %428, label %452

428:                                              ; preds = %427
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #8
  %429 = load ptr, ptr %25, align 8, !tbaa !5
  %430 = getelementptr inbounds %"struct.spirv_cross::SPIRUndef", ptr %429, i32 0, i32 1
  %431 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %430)
          to label %432 unwind label %443

432:                                              ; preds = %428
  %433 = load ptr, ptr %61, align 8, !tbaa !9
  %434 = getelementptr inbounds ptr, ptr %433, i64 58
  %435 = load ptr, ptr %434, align 8
  invoke void %435(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef %431)
          to label %436 unwind label %443

436:                                              ; preds = %432
  invoke void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %437 unwind label %447

437:                                              ; preds = %436
  %438 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  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
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  br label %452

439:                                              ; preds = %424
  %440 = landingpad { ptr, i32 }
          cleanup
  %441 = extractvalue { ptr, i32 } %440, 0
  store ptr %441, ptr %14, align 8
  %442 = extractvalue { ptr, i32 } %440, 1
  store i32 %442, ptr %15, align 4
  br label %488

443:                                              ; preds = %432, %428
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %14, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %15, align 4
  br label %451

447:                                              ; preds = %436
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %14, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %451

451:                                              ; preds = %447, %443
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  br label %488

452:                                              ; preds = %437, %427, %419
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #8
  %453 = load ptr, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #8
  %454 = load ptr, ptr %25, align 8, !tbaa !5
  %455 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %454, i32 0, i32 1
  %456 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %455)
          to label %457 unwind label %474

457:                                              ; preds = %452
  %458 = load ptr, ptr %61, align 8, !tbaa !9
  %459 = getelementptr inbounds ptr, ptr %458, i64 6
  %460 = load ptr, ptr %459, align 8
  invoke void %460(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 noundef %456, i1 noundef zeroext true)
          to label %461 unwind label %474

461:                                              ; preds = %457
  %462 = load ptr, ptr %25, align 8, !tbaa !5
  %463 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %462, i32 0, i32 1
  %464 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %463)
          to label %465 unwind label %478

465:                                              ; preds = %461
  %466 = load ptr, ptr %61, align 8, !tbaa !9
  %467 = getelementptr inbounds ptr, ptr %466, i64 27
  %468 = load ptr, ptr %467, align 8
  invoke void %468(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(336) %453, ptr noundef nonnull align 8 dereferenceable(32) %31, i32 noundef %464)
          to label %469 unwind label %478

469:                                              ; preds = %465
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %470 unwind label %482

470:                                              ; preds = %469
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  store i8 1, ptr %6, align 1, !tbaa !132
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  store i32 0, ptr %11, align 4
  br label %471

471:                                              ; preds = %470, %418, %405
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  %472 = load i32, ptr %11, align 4
  switch i32 %472, label %495 [
    i32 0, label %473
  ]

473:                                              ; preds = %471
  br label %491

474:                                              ; preds = %457, %452
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %14, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %15, align 4
  br label %487

478:                                              ; preds = %465, %461
  %479 = landingpad { ptr, i32 }
          cleanup
  %480 = extractvalue { ptr, i32 } %479, 0
  store ptr %480, ptr %14, align 8
  %481 = extractvalue { ptr, i32 } %479, 1
  store i32 %481, ptr %15, align 4
  br label %486

482:                                              ; preds = %469
  %483 = landingpad { ptr, i32 }
          cleanup
  %484 = extractvalue { ptr, i32 } %483, 0
  store ptr %484, ptr %14, align 8
  %485 = extractvalue { ptr, i32 } %483, 1
  store i32 %485, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %486

486:                                              ; preds = %482, %478
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %487

487:                                              ; preds = %486, %474
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  br label %488

488:                                              ; preds = %487, %451, %439
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  br label %489

489:                                              ; preds = %488, %410
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %490

490:                                              ; preds = %489, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %504

491:                                              ; preds = %473, %389
  br label %492

492:                                              ; preds = %491, %384
  br label %493

493:                                              ; preds = %492, %284
  br label %494

494:                                              ; preds = %493, %272
  store i32 0, ptr %11, align 4
  br label %495

495:                                              ; preds = %494, %471
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  %496 = load i32, ptr %11, align 4
  switch i32 %496, label %498 [
    i32 0, label %497
  ]

497:                                              ; preds = %495
  store i32 0, ptr %11, align 4
  br label %498

498:                                              ; preds = %497, %495
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  %499 = load i32, ptr %11, align 4
  switch i32 %499, label %756 [
    i32 0, label %500
    i32 5, label %501
  ]

500:                                              ; preds = %498
  br label %501

501:                                              ; preds = %500, %498
  %502 = load ptr, ptr %9, align 8, !tbaa !5
  %503 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %502, i32 1
  store ptr %503, ptr %9, align 8, !tbaa !5
  br label %196

504:                                              ; preds = %490, %385, %274, %253
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  br label %750

505:                                              ; preds = %200
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  %506 = load i8, ptr %6, align 1, !tbaa !132, !range !85, !noundef !86
  %507 = trunc i8 %506 to i1
  br i1 %507, label %508, label %509

508:                                              ; preds = %505
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %509

509:                                              ; preds = %508, %505
  %510 = load ptr, ptr %3, align 8, !tbaa !5
  %511 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %510, i32 0, i32 10
  %512 = load i32, ptr %511, align 8, !tbaa !11
  %513 = icmp eq i32 %512, 5
  br i1 %513, label %514, label %567

514:                                              ; preds = %509
  %515 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %516 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %515, i32 0, i32 4
  %517 = load i8, ptr %516, align 4, !tbaa !147, !range !85, !noundef !86
  %518 = trunc i8 %517 to i1
  br i1 %518, label %567, label %519

519:                                              ; preds = %514
  %520 = load ptr, ptr %3, align 8, !tbaa !5
  %521 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %520, i32 0, i32 6
  %522 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %521, i32 0, i32 6
  %523 = load i32, ptr %522, align 8, !tbaa !164
  %524 = icmp ne i32 %523, 0
  br i1 %524, label %529, label %525

525:                                              ; preds = %519
  %526 = load ptr, ptr %3, align 8, !tbaa !5
  %527 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %526, i32 0, i32 5
  %528 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %527, i32 noundef 38)
  br i1 %528, label %529, label %567

529:                                              ; preds = %525, %519
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %32) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %33) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %34) #8
  %530 = call noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176) %61, ptr noundef nonnull align 4 dereferenceable(8) %32, ptr noundef nonnull align 4 dereferenceable(8) %33, ptr noundef nonnull align 4 dereferenceable(8) %34)
  %531 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %32, i32 0, i32 0
  %532 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %531)
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %35, i32 noundef 0)
  %533 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %35)
  %534 = icmp ne i32 %532, %533
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  br i1 %534, label %545, label %535

535:                                              ; preds = %529
  %536 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %33, i32 0, i32 0
  %537 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %536)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %36, i32 noundef 0)
  %538 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %36)
  %539 = icmp ne i32 %537, %538
  br i1 %539, label %545, label %540

540:                                              ; preds = %535
  %541 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %34, i32 0, i32 0
  %542 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %541)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef 0)
  %543 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %37)
  %544 = icmp ne i32 %542, %543
  br label %545

545:                                              ; preds = %540, %535, %529
  %546 = phi i1 [ true, %535 ], [ true, %529 ], [ %544, %540 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br i1 %546, label %547, label %566

547:                                              ; preds = %545
  call void @llvm.lifetime.start.p0(i64 280, ptr %38) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %38) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL20build_workgroup_sizeERNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEERKNS_22SpecializationConstantESC_SC_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(280) %38, ptr noundef nonnull align 4 dereferenceable(8) %32, ptr noundef nonnull align 4 dereferenceable(8) %33, ptr noundef nonnull align 4 dereferenceable(8) %34)
          to label %548 unwind label %552

548:                                              ; preds = %547
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #8
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(280) %38, ptr noundef @.str.177)
          to label %549 unwind label %556

549:                                              ; preds = %548
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(8) @.str.176, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(6) @.str.178)
          to label %550 unwind label %560

550:                                              ; preds = %549
  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
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
          to label %551 unwind label %552

551:                                              ; preds = %550
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %38) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr %38) #8
  br label %566

552:                                              ; preds = %550, %547
  %553 = landingpad { ptr, i32 }
          cleanup
  %554 = extractvalue { ptr, i32 } %553, 0
  store ptr %554, ptr %14, align 8
  %555 = extractvalue { ptr, i32 } %553, 1
  store i32 %555, ptr %15, align 4
  br label %565

556:                                              ; preds = %548
  %557 = landingpad { ptr, i32 }
          cleanup
  %558 = extractvalue { ptr, i32 } %557, 0
  store ptr %558, ptr %14, align 8
  %559 = extractvalue { ptr, i32 } %557, 1
  store i32 %559, ptr %15, align 4
  br label %564

560:                                              ; preds = %549
  %561 = landingpad { ptr, i32 }
          cleanup
  %562 = extractvalue { ptr, i32 } %561, 0
  store ptr %562, ptr %14, align 8
  %563 = extractvalue { ptr, i32 } %561, 1
  store i32 %563, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %564

564:                                              ; preds = %560, %556
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  br label %565

565:                                              ; preds = %564, %552
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %38) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %750

566:                                              ; preds = %551, %545
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %567

567:                                              ; preds = %566, %525, %514, %509
  store i8 0, ptr %6, align 1, !tbaa !132
  %568 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  %569 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %568, i32 0, i32 15
  %570 = load i32, ptr %569, align 4, !tbaa !165
  %571 = icmp eq i32 %570, 5348
  br i1 %571, label %572, label %595

572:                                              ; preds = %567
  %573 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %574 = getelementptr inbounds %class.anon.343, ptr %40, i32 0, i32 0
  store ptr %61, ptr %574, align 8, !tbaa !166
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_12CompilerGLSL14emit_resourcesEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %573, ptr noundef nonnull align 8 dereferenceable(8) %40)
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %575 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 30
  store ptr %575, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %576 = load ptr, ptr %41, align 8, !tbaa !5
  %577 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %576) #8
  store ptr %577, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %578 = load ptr, ptr %41, align 8, !tbaa !5
  %579 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %578) #8
  store ptr %579, ptr %43, align 8, !tbaa !5
  br label %580

580:                                              ; preds = %589, %572
  %581 = load ptr, ptr %42, align 8, !tbaa !5
  %582 = load ptr, ptr %43, align 8, !tbaa !5
  %583 = icmp ne ptr %581, %582
  br i1 %583, label %585, label %584

584:                                              ; preds = %580
  store i32 6, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %592

585:                                              ; preds = %580
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  %586 = load ptr, ptr %42, align 8, !tbaa !5
  %587 = load i32, ptr %586, align 4, !tbaa !149
  store i32 %587, ptr %44, align 4, !tbaa !149
  %588 = load i32, ptr %44, align 4, !tbaa !149
  call void @_ZN11spirv_cross12CompilerGLSL27emit_buffer_reference_blockEjb(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef %588, i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  br label %589

589:                                              ; preds = %585
  %590 = load ptr, ptr %42, align 8, !tbaa !5
  %591 = getelementptr inbounds i32, ptr %590, i32 1
  store ptr %591, ptr %42, align 8, !tbaa !5
  br label %580

592:                                              ; preds = %584
  %593 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %594 = getelementptr inbounds %class.anon.344, ptr %45, i32 0, i32 0
  store ptr %61, ptr %594, align 8, !tbaa !168
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_12CompilerGLSL14emit_resourcesEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %593, ptr noundef nonnull align 8 dereferenceable(8) %45)
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %595

595:                                              ; preds = %592, %567
  %596 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %597 = getelementptr inbounds %class.anon.345, ptr %46, i32 0, i32 0
  store ptr %61, ptr %597, align 8, !tbaa !170
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_2EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %596, ptr noundef nonnull align 8 dereferenceable(8) %46)
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  %598 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %599 = getelementptr inbounds %class.anon.346, ptr %47, i32 0, i32 0
  store ptr %61, ptr %599, align 8, !tbaa !172
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_3EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %598, ptr noundef nonnull align 8 dereferenceable(8) %47)
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #8
  %600 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 12
  %601 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_20CombinedImageSamplerEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %600) #8
  br i1 %601, label %602, label %608

602:                                              ; preds = %595
  %603 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %604 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %603, i32 0, i32 4
  %605 = load i8, ptr %604, align 4, !tbaa !147, !range !85, !noundef !86
  %606 = trunc i8 %605 to i1
  %607 = xor i1 %606, true
  br label %608

608:                                              ; preds = %602, %595
  %609 = phi i1 [ true, %595 ], [ %607, %602 ]
  %610 = zext i1 %609 to i8
  store i8 %610, ptr %48, align 1, !tbaa !132
  %611 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %49) #8
  %612 = getelementptr inbounds %class.anon.347, ptr %49, i32 0, i32 0
  store ptr %61, ptr %612, align 8, !tbaa !174
  %613 = getelementptr inbounds %class.anon.347, ptr %49, i32 0, i32 1
  store ptr %48, ptr %613, align 8, !tbaa !5
  %614 = getelementptr inbounds %class.anon.347, ptr %49, i32 0, i32 2
  store ptr %6, ptr %614, align 8, !tbaa !5
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_4EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %611, ptr noundef nonnull align 8 dereferenceable(24) %49)
  call void @llvm.lifetime.end.p0(i64 24, ptr %49) #8
  %615 = load i8, ptr %6, align 1, !tbaa !132, !range !85, !noundef !86
  %616 = trunc i8 %615 to i1
  br i1 %616, label %617, label %618

617:                                              ; preds = %608
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %618

618:                                              ; preds = %617, %608
  store i8 0, ptr %6, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #8
  store i8 0, ptr %50, align 1, !tbaa !132
  %619 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %51) #8
  %620 = getelementptr inbounds %class.anon.348, ptr %51, i32 0, i32 0
  store ptr %61, ptr %620, align 8, !tbaa !176
  %621 = getelementptr inbounds %class.anon.348, ptr %51, i32 0, i32 1
  store ptr %6, ptr %621, align 8, !tbaa !5
  %622 = getelementptr inbounds %class.anon.348, ptr %51, i32 0, i32 2
  store ptr %50, ptr %622, align 8, !tbaa !5
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_5EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %619, ptr noundef nonnull align 8 dereferenceable(24) %51)
  call void @llvm.lifetime.end.p0(i64 24, ptr %51) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %623 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %61, i32 0, i32 2
  store ptr %623, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %624 = load ptr, ptr %52, align 8, !tbaa !5
  %625 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %624) #8
  store ptr %625, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %626 = load ptr, ptr %52, align 8, !tbaa !5
  %627 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %626) #8
  store ptr %627, ptr %54, align 8, !tbaa !5
  br label %628

628:                                              ; preds = %742, %618
  %629 = load ptr, ptr %53, align 8, !tbaa !5
  %630 = load ptr, ptr %54, align 8, !tbaa !5
  %631 = icmp ne ptr %629, %630
  br i1 %631, label %633, label %632

632:                                              ; preds = %628
  store i32 8, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  br label %745

633:                                              ; preds = %628
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  %634 = load ptr, ptr %53, align 8, !tbaa !5
  %635 = load i32, ptr %634, align 4, !tbaa !149
  store i32 %635, ptr %55, align 4, !tbaa !149
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %636 = load i32, ptr %55, align 4, !tbaa !149
  %637 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 noundef %636)
  store ptr %637, ptr %56, align 8, !tbaa !5
  %638 = load ptr, ptr %56, align 8, !tbaa !5
  %639 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler18is_hidden_variableERKNS_12SPIRVariableEb(ptr noundef nonnull align 8 dereferenceable(3176) %61, ptr noundef nonnull align 8 dereferenceable(176) %638, i1 noundef zeroext true)
  br i1 %639, label %640, label %641

640:                                              ; preds = %633
  store i32 9, ptr %11, align 4
  br label %736

641:                                              ; preds = %633
  %642 = load ptr, ptr %56, align 8, !tbaa !5
  %643 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %642, i32 0, i32 2
  %644 = load i32, ptr %643, align 8, !tbaa !178
  %645 = icmp ne i32 %644, 3
  br i1 %645, label %646, label %721

646:                                              ; preds = %641
  %647 = load ptr, ptr %56, align 8, !tbaa !5
  %648 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL15variable_is_lutERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(176) %647)
  br i1 %648, label %720, label %649

649:                                              ; preds = %646
  %650 = load ptr, ptr %56, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %650, i32 0, i32 1
  %652 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %651)
  call void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef %652)
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  %653 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %61, i32 0, i32 9
  %654 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %653, i32 0, i32 12
  %655 = load i8, ptr %654, align 4, !tbaa !163, !range !85, !noundef !86
  %656 = trunc i8 %655 to i1
  br i1 %656, label %657, label %703

657:                                              ; preds = %649
  %658 = load ptr, ptr %56, align 8, !tbaa !5
  %659 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %658, i32 0, i32 2
  %660 = load i32, ptr %659, align 8, !tbaa !178
  %661 = icmp eq i32 %660, 6
  br i1 %661, label %662, label %703

662:                                              ; preds = %657
  %663 = load ptr, ptr %56, align 8, !tbaa !5
  %664 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %663, i32 0, i32 4
  %665 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %664)
          to label %666 unwind label %690

666:                                              ; preds = %662
  %667 = icmp ne i32 %665, 0
  br i1 %667, label %703, label %668

668:                                              ; preds = %666
  %669 = load ptr, ptr %56, align 8, !tbaa !5
  %670 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %669, i32 0, i32 9
  %671 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %670)
          to label %672 unwind label %690

672:                                              ; preds = %668
  %673 = icmp ne i32 %671, 0
  br i1 %673, label %703, label %674

674:                                              ; preds = %672
  %675 = load ptr, ptr %56, align 8, !tbaa !5
  %676 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %61, ptr noundef nonnull align 8 dereferenceable(176) %675)
          to label %677 unwind label %690

677:                                              ; preds = %674
  %678 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL24type_can_zero_initializeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(336) %676)
          to label %679 unwind label %690

679:                                              ; preds = %677
  br i1 %678, label %680, label %703

680:                                              ; preds = %679
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #8
  %681 = load ptr, ptr %56, align 8, !tbaa !5
  %682 = invoke noundef i32 @_ZNK11spirv_cross8Compiler25get_variable_data_type_idERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %61, ptr noundef nonnull align 8 dereferenceable(176) %681)
          to label %683 unwind label %694

683:                                              ; preds = %680
  %684 = load ptr, ptr %61, align 8, !tbaa !9
  %685 = getelementptr inbounds ptr, ptr %684, i64 58
  %686 = load ptr, ptr %685, align 8
  invoke void %686(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %61, i32 noundef %682)
          to label %687 unwind label %694

687:                                              ; preds = %683
  invoke void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %688 unwind label %698

688:                                              ; preds = %687
  %689 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #8
  br label %703

690:                                              ; preds = %677, %674, %668, %662
  %691 = landingpad { ptr, i32 }
          cleanup
  %692 = extractvalue { ptr, i32 } %691, 0
  store ptr %692, ptr %14, align 8
  %693 = extractvalue { ptr, i32 } %691, 1
  store i32 %693, ptr %15, align 4
  br label %719

694:                                              ; preds = %683, %680
  %695 = landingpad { ptr, i32 }
          cleanup
  %696 = extractvalue { ptr, i32 } %695, 0
  store ptr %696, ptr %14, align 8
  %697 = extractvalue { ptr, i32 } %695, 1
  store i32 %697, ptr %15, align 4
  br label %702

698:                                              ; preds = %687
  %699 = landingpad { ptr, i32 }
          cleanup
  %700 = extractvalue { ptr, i32 } %699, 0
  store ptr %700, ptr %14, align 8
  %701 = extractvalue { ptr, i32 } %699, 1
  store i32 %701, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %702

702:                                              ; preds = %698, %694
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #8
  br label %719

703:                                              ; preds = %688, %679, %672, %666, %657, %649
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #8
  %704 = load ptr, ptr %56, align 8, !tbaa !5
  %705 = load ptr, ptr %61, align 8, !tbaa !9
  %706 = getelementptr inbounds ptr, ptr %705, i64 39
  %707 = load ptr, ptr %706, align 8
  invoke void %707(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(176) %704)
          to label %708 unwind label %710

708:                                              ; preds = %703
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %709 unwind label %714

709:                                              ; preds = %708
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  store i8 1, ptr %6, align 1, !tbaa !132
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #8
  br label %720

710:                                              ; preds = %703
  %711 = landingpad { ptr, i32 }
          cleanup
  %712 = extractvalue { ptr, i32 } %711, 0
  store ptr %712, ptr %14, align 8
  %713 = extractvalue { ptr, i32 } %711, 1
  store i32 %713, ptr %15, align 4
  br label %718

714:                                              ; preds = %708
  %715 = landingpad { ptr, i32 }
          cleanup
  %716 = extractvalue { ptr, i32 } %715, 0
  store ptr %716, ptr %14, align 8
  %717 = extractvalue { ptr, i32 } %715, 1
  store i32 %717, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %718

718:                                              ; preds = %714, %710
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  br label %719

719:                                              ; preds = %718, %702, %690
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #8
  br label %750

720:                                              ; preds = %709, %646
  br label %735

721:                                              ; preds = %641
  %722 = load ptr, ptr %56, align 8, !tbaa !5
  %723 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %722, i32 0, i32 4
  %724 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %723)
  %725 = icmp ne i32 %724, 0
  br i1 %725, label %726, label %734

726:                                              ; preds = %721
  %727 = load ptr, ptr %56, align 8, !tbaa !5
  %728 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %727, i32 0, i32 4
  %729 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %728)
  %730 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %61, i32 noundef %729)
  %731 = icmp ne ptr %730, null
  br i1 %731, label %732, label %734

732:                                              ; preds = %726
  %733 = load ptr, ptr %56, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 8 dereferenceable(176) %733)
  br label %734

734:                                              ; preds = %732, %726, %721
  br label %735

735:                                              ; preds = %734, %720
  store i32 0, ptr %11, align 4
  br label %736

736:                                              ; preds = %735, %640
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  %737 = load i32, ptr %11, align 4
  switch i32 %737, label %739 [
    i32 0, label %738
  ]

738:                                              ; preds = %736
  store i32 0, ptr %11, align 4
  br label %739

739:                                              ; preds = %738, %736
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  %740 = load i32, ptr %11, align 4
  switch i32 %740, label %756 [
    i32 0, label %741
    i32 9, label %742
  ]

741:                                              ; preds = %739
  br label %742

742:                                              ; preds = %741, %739
  %743 = load ptr, ptr %53, align 8, !tbaa !5
  %744 = getelementptr inbounds i32, ptr %743, i32 1
  store ptr %744, ptr %53, align 8, !tbaa !5
  br label %628

745:                                              ; preds = %632
  %746 = load i8, ptr %6, align 1, !tbaa !132, !range !85, !noundef !86
  %747 = trunc i8 %746 to i1
  br i1 %747, label %748, label %749

748:                                              ; preds = %745
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %61, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %749

749:                                              ; preds = %748, %745
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #8
  ret void

750:                                              ; preds = %719, %565, %504
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #8
  br label %751

751:                                              ; preds = %750
  %752 = load ptr, ptr %14, align 8
  %753 = load i32, ptr %15, align 4
  %754 = insertvalue { ptr, i32 } poison, ptr %752, 0
  %755 = insertvalue { ptr, i32 } %754, i32 %753, 1
  resume { ptr, i32 } %755

756:                                              ; preds = %739, %498
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL20build_workgroup_sizeERNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEERKNS_22SpecializationConstantESC_SC_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #1 align 2

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

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #3

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 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 nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) #5 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL27emit_buffer_reference_blockEjb(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #1 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 uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL31emit_specialization_constant_opERKNS_14SPIRConstantOpE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(76)) #1 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler23type_is_top_level_blockERKNS_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_cross12CompilerGLSL13emit_constantERKNS_12SPIRConstantE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(360)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24replace_fragment_outputsEv(ptr noundef nonnull align 8 dereferenceable(9848)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL8emit_plsEv(ptr noundef nonnull align 8 dereferenceable(9848)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL31should_force_emit_builtin_blockEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL15variable_is_lutERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176)) #1 align 2

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

declare void @_ZNK11spirv_cross8ParsedIR21create_loop_hard_lockEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8, ptr noundef nonnull align 8 dereferenceable(1920)) #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross7Variant3getINS_9SPIRUndefEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL24type_can_zero_initializeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) #1 align 2

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

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

; Function Attrs: nounwind
declare void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_12CompilerGLSL14emit_resourcesEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_12CompilerGLSL14emit_resourcesEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_2EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_3EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_4EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_5EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) #3

declare noundef i32 @_ZNK11spirv_cross8Compiler25get_variable_data_type_idERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176)) #1 align 2

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

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

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


; 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.spirv_cross::ParsedIR::LoopLock" = type { ptr }
%"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::SpecializationConstant" = type { %"class.spirv_cross::TypedID.309", i32 }
%"class.spirv_cross::TypedID.309" = type { i32 }
%"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 { [256 x i8] }
%class.anon.343 = type { ptr }
%class.anon.344 = type { ptr }
%class.anon.345 = type { ptr }
%class.anon.346 = type { ptr }
%class.anon.347 = type { ptr, ptr, ptr }
%class.anon.348 = type { ptr, ptr, ptr }

@.str.9 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.176 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.178 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.309 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.335 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.589 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.629 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.747 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.748 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.749 = external hidden unnamed_addr constant [23 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #1 align 2

; 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 nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #3

; 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: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL14emit_resourcesEv(ptr noundef nonnull align 8 dereferenceable(9848) %0) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i8, align 1
  %4 = alloca %"class.spirv_cross::ParsedIR::LoopLock", align 8
  %5 = alloca %"class.std::__cxx11::basic_string", 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 %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %12 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %13 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %14 = alloca %"class.spirv_cross::TypedID.309", align 4
  %15 = alloca %"class.spirv_cross::TypedID.309", align 4
  %16 = alloca %"class.spirv_cross::TypedID.309", align 4
  %17 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %class.anon.343, align 8
  %20 = alloca %class.anon.344, align 8
  %21 = alloca %class.anon.345, align 8
  %22 = alloca %class.anon.346, align 8
  %23 = alloca i8, align 1
  %24 = alloca %class.anon.347, align 8
  %25 = alloca i8, align 1
  %26 = alloca %class.anon.348, 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 %"class.std::__cxx11::basic_string", align 8
  %31 = tail call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %32 = load ptr, ptr %0, align 8, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %32, i64 480
  %34 = load ptr, ptr %33, align 8
  tail call void %34(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %35 = getelementptr inbounds i8, ptr %31, i64 232
  %36 = load i32, ptr %35, align 8, !tbaa !8
  %37 = icmp eq i32 %36, 4
  br i1 %37, label %38, label %41

38:                                               ; preds = %1
  %39 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %39, label %40, label %41

40:                                               ; preds = %38
  tail call void @_ZN11spirv_cross12CompilerGLSL24replace_fragment_outputsEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br label %41

41:                                               ; preds = %40, %38, %1
  %42 = getelementptr inbounds i8, ptr %0, i64 9400
  %43 = tail call noundef zeroext i1 @_ZNKSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %42) #7
  br i1 %43, label %44, label %47

44:                                               ; preds = %41
  %45 = getelementptr inbounds i8, ptr %0, i64 9424
  %46 = tail call noundef zeroext i1 @_ZNKSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %45) #7
  br i1 %46, label %48, label %47

47:                                               ; preds = %44, %41
  tail call void @_ZN11spirv_cross12CompilerGLSL8emit_plsEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br label %48

48:                                               ; preds = %47, %44
  %49 = load i32, ptr %35, align 8, !tbaa !8
  switch i32 %49, label %51 [
    i32 3, label %50
    i32 1, label %50
    i32 2, label %50
    i32 5365, label %50
  ]

50:                                               ; preds = %48, %48, %48, %48
  tail call void @_ZN11spirv_cross12CompilerGLSL34fixup_implicit_builtin_block_namesEN3spv14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %49)
  br label %51

51:                                               ; preds = %48, %50
  %52 = getelementptr inbounds i8, ptr %0, i64 2816
  %53 = load i8, ptr %52, align 8, !tbaa !29, !range !84, !noundef !85
  %54 = trunc nuw i8 %53 to i1
  br i1 %54, label %55, label %63

55:                                               ; preds = %51
  %56 = getelementptr inbounds i8, ptr %0, i64 7640
  %57 = load i8, ptr %56, align 8, !tbaa !86, !range !84, !noundef !85
  %58 = trunc nuw i8 %57 to i1
  br i1 %58, label %63, label %59

59:                                               ; preds = %55
  %60 = getelementptr inbounds i8, ptr %0, i64 7636
  %61 = load i32, ptr %60, align 4, !tbaa !130
  %62 = icmp ugt i32 %61, 119
  br label %63

63:                                               ; preds = %55, %59, %51
  %64 = phi i1 [ false, %51 ], [ true, %55 ], [ %62, %59 ]
  %65 = getelementptr inbounds i8, ptr %0, i64 7649
  %66 = load i8, ptr %65, align 1, !tbaa !131, !range !84, !noundef !85
  %67 = trunc nuw i8 %66 to i1
  br i1 %67, label %68, label %77

68:                                               ; preds = %63
  %69 = getelementptr inbounds i8, ptr %0, i64 7640
  %70 = load i8, ptr %69, align 8, !tbaa !86, !range !84, !noundef !85
  %71 = trunc nuw i8 %70 to i1
  br i1 %71, label %77, label %72

72:                                               ; preds = %68
  %73 = load i32, ptr %35, align 8, !tbaa !8
  switch i32 %73, label %103 [
    i32 4, label %77
    i32 3, label %74
    i32 1, label %74
    i32 2, label %74
    i32 0, label %76
    i32 5365, label %76
  ]

74:                                               ; preds = %72, %72, %72
  tail call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 1, i32 noundef %73)
  %75 = load i32, ptr %35, align 8, !tbaa !8
  tail call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 3, i32 noundef %75)
  br label %.critedge165

76:                                               ; preds = %72, %72
  tail call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 3, i32 noundef %73)
  br label %.critedge165

77:                                               ; preds = %72, %68, %63
  %78 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL31should_force_emit_builtin_blockEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 3)
  br i1 %78, label %79, label %81

79:                                               ; preds = %77
  %80 = load i32, ptr %35, align 8, !tbaa !8
  tail call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 3, i32 noundef %80)
  br label %.critedge165

81:                                               ; preds = %77
  %82 = getelementptr inbounds i8, ptr %31, i64 236
  %83 = load i8, ptr %82, align 4, !tbaa !132, !range !84, !noundef !85
  %84 = trunc nuw i8 %83 to i1
  br i1 %84, label %85, label %87

85:                                               ; preds = %81
  %86 = load i32, ptr %35, align 8, !tbaa !8
  tail call void @_ZN11spirv_cross12CompilerGLSL27emit_declared_builtin_blockEN3spv12StorageClassENS1_14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 1, i32 noundef %86)
  br label %103

87:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #7
  %88 = load i32, ptr %35, align 8, !tbaa !8
  %89 = icmp eq i32 %88, 4
  %90 = select i1 %89, ptr @.str.589, ptr @.str.629
  store ptr %90, ptr %2, align 8, !tbaa !133
  %91 = getelementptr inbounds i8, ptr %0, i64 2808
  %92 = load i32, ptr %91, align 8, !tbaa !134
  %.not125 = icmp eq i32 %92, 0
  br i1 %.not125, label %94, label %93

93:                                               ; preds = %87
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA24_S2_RjRA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 1 dereferenceable(24) @.str.747, ptr noundef nonnull align 4 dereferenceable(4) %91, ptr noundef nonnull align 1 dereferenceable(3) @.str.309)
  br label %94

94:                                               ; preds = %93, %87
  %95 = getelementptr inbounds i8, ptr %0, i64 2812
  %96 = load i32, ptr %95, align 4
  %.not126 = icmp eq i32 %96, 0
  br i1 %.not126, label %98, label %97

97:                                               ; preds = %94
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA24_S2_RjRA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 1 dereferenceable(24) @.str.748, ptr noundef nonnull align 4 dereferenceable(4) %95, ptr noundef nonnull align 1 dereferenceable(3) @.str.309)
  %.pre = load i32, ptr %95, align 4
  br label %98

98:                                               ; preds = %97, %94
  %99 = phi i32 [ %.pre, %97 ], [ 0, %94 ]
  %100 = load i32, ptr %91, align 8, !tbaa !134
  %.not127 = icmp eq i32 %100, 0
  %.not128 = icmp eq i32 %99, 0
  %or.cond = select i1 %.not127, i1 %.not128, i1 false
  br i1 %or.cond, label %102, label %101

101:                                              ; preds = %98
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %102

102:                                              ; preds = %98, %101
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #7
  br label %103

103:                                              ; preds = %72, %102, %85
  br i1 %64, label %104, label %.critedge165

104:                                              ; preds = %103
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(23) @.str.749)
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %.critedge165

.critedge165:                                     ; preds = %79, %76, %74, %104, %103
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #7
  store i8 0, ptr %3, align 1, !tbaa !135
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #7
  %105 = getelementptr inbounds i8, ptr %0, i64 8
  call void @_ZNK11spirv_cross8ParsedIR21create_loop_hard_lockEv(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8 %4, ptr noundef nonnull align 8 dereferenceable(1920) %105)
  %106 = getelementptr inbounds i8, ptr %0, i64 1096
  %107 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %106) #7
  %108 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %106) #7
  %.not129177 = icmp eq ptr %107, %108
  br i1 %.not129177, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.critedge165
  %109 = getelementptr inbounds i8, ptr %0, i64 40
  %110 = getelementptr inbounds i8, ptr %0, i64 7656
  %111 = getelementptr inbounds i8, ptr %0, i64 7648
  br label %114

._crit_edge:                                      ; preds = %.thread174, %.critedge165
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  %112 = load i8, ptr %3, align 1, !tbaa !135, !range !84, !noundef !85
  %113 = trunc nuw i8 %112 to i1
  br i1 %113, label %271, label %272

114:                                              ; preds = %.lr.ph, %.thread174
  %.098178 = phi ptr [ %107, %.lr.ph ], [ %269, %.thread174 ]
  %115 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.098178)
  %116 = zext i32 %115 to i64
  %117 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %109, i64 noundef %116) #7
  %118 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %117)
  %119 = icmp eq i32 %118, 3
  br i1 %119, label %120, label %150

120:                                              ; preds = %114
  %121 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %117)
          to label %122 unwind label %142

122:                                              ; preds = %120
  %123 = getelementptr inbounds i8, ptr %121, i64 264
  %124 = load i8, ptr %123, align 8, !tbaa !136, !range !84, !noundef !85
  %125 = trunc nuw i8 %124 to i1
  %126 = getelementptr inbounds i8, ptr %121, i64 266
  %127 = load i8, ptr %126, align 2, !range !84
  %128 = trunc nuw i8 %127 to i1
  %129 = select i1 %125, i1 true, i1 %128
  br i1 %129, label %130, label %.thread174

130:                                              ; preds = %122
  %131 = load i8, ptr %111, align 8, !tbaa !145, !range !84, !noundef !85
  %132 = trunc nuw i8 %131 to i1
  %.not = xor i1 %125, true
  %brmerge = or i1 %.not, %132
  br i1 %brmerge, label %146, label %133

133:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #7
  %134 = getelementptr inbounds i8, ptr %121, i64 8
  %.sroa.053.0.copyload = load i32, ptr %134, align 8, !tbaa !146
  %135 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.053.0.copyload, i32 noundef 1)
          to label %136 unwind label %144

136:                                              ; preds = %133
  invoke void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %5, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %135)
          to label %137 unwind label %144

137:                                              ; preds = %136
  %138 = getelementptr inbounds i8, ptr %121, i64 328
  %139 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %138, ptr noundef nonnull align 8 dereferenceable(32) %5) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #7
  br label %146

140:                                              ; preds = %155, %153
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %270

142:                                              ; preds = %120
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %270

144:                                              ; preds = %136, %133
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #7
  br label %270

146:                                              ; preds = %130, %137
  invoke void @_ZN11spirv_cross12CompilerGLSL13emit_constantERKNS_12SPIRConstantE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(360) %121)
          to label %147 unwind label %148

147:                                              ; preds = %146
  store i8 1, ptr %3, align 1, !tbaa !135
  br label %.thread174

148:                                              ; preds = %146
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %270

150:                                              ; preds = %114
  %151 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %117)
  %152 = icmp eq i32 %151, 9
  br i1 %152, label %153, label %157

153:                                              ; preds = %150
  %154 = invoke noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %117)
          to label %155 unwind label %140

155:                                              ; preds = %153
  invoke void @_ZN11spirv_cross12CompilerGLSL31emit_specialization_constant_opERKNS_14SPIRConstantOpE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(76) %154)
          to label %156 unwind label %140

156:                                              ; preds = %155
  store i8 1, ptr %3, align 1, !tbaa !135
  br label %.thread174

157:                                              ; preds = %150
  %158 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %117)
  %159 = icmp eq i32 %158, 1
  br i1 %159, label %160, label %207

160:                                              ; preds = %157
  %161 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %117)
          to label %162 unwind label %198

162:                                              ; preds = %160
  %163 = getelementptr inbounds i8, ptr %161, i64 16
  %164 = load i32, ptr %163, align 8, !tbaa !147
  %165 = icmp eq i32 %164, 15
  br i1 %165, label %166, label %.thread174

166:                                              ; preds = %162
  %167 = getelementptr inbounds i8, ptr %161, i64 32
  %168 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %167) #7
  br i1 %168, label %169, label %181

169:                                              ; preds = %166
  %170 = getelementptr inbounds i8, ptr %161, i64 124
  %171 = load i8, ptr %170, align 4, !tbaa !158, !range !84, !noundef !85
  %172 = trunc nuw i8 %171 to i1
  br i1 %172, label %181, label %173

173:                                              ; preds = %169
  %174 = getelementptr inbounds i8, ptr %161, i64 8
  %.sroa.038.0.copyload = load i32, ptr %174, align 8, !tbaa !146
  %175 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.038.0.copyload, i32 noundef 2)
          to label %176 unwind label %200

176:                                              ; preds = %173
  br i1 %175, label %181, label %177

177:                                              ; preds = %176
  %.sroa.037.0.copyload = load i32, ptr %174, align 8, !tbaa !146
  %178 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.037.0.copyload, i32 noundef 3)
          to label %179 unwind label %200

179:                                              ; preds = %177
  %180 = xor i1 %178, true
  br label %181

181:                                              ; preds = %176, %179, %169, %166
  %.ph = phi i1 [ %180, %179 ], [ false, %176 ], [ false, %166 ], [ false, %169 ]
  %.pr = load i32, ptr %163, align 8, !tbaa !147
  %182 = icmp eq i32 %.pr, 15
  br i1 %182, label %183, label %202

183:                                              ; preds = %181
  %184 = getelementptr inbounds i8, ptr %161, i64 124
  %185 = load i8, ptr %184, align 4, !tbaa !158, !range !84, !noundef !85
  %186 = trunc nuw i8 %185 to i1
  br i1 %186, label %187, label %202

187:                                              ; preds = %183
  %188 = getelementptr inbounds i8, ptr %161, i64 8
  %.sroa.0.0.copyload = load i32, ptr %188, align 8, !tbaa !146
  %189 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0.0.copyload, i32 noundef 2)
          to label %190 unwind label %200

190:                                              ; preds = %187
  br i1 %189, label %191, label %202

191:                                              ; preds = %190
  %192 = getelementptr inbounds i8, ptr %161, i64 128
  %193 = load i32, ptr %192, align 8, !tbaa !159
  switch i32 %193, label %202 [
    i32 5338, label %194
    i32 5342, label %194
    i32 5339, label %194
  ]

194:                                              ; preds = %191, %191, %191
  %195 = getelementptr inbounds i8, ptr %161, i64 276
  %196 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %195)
  %197 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %196)
          to label %.thread170 unwind label %200

198:                                              ; preds = %160
  %199 = landingpad { ptr, i32 }
          cleanup
  br label %270

200:                                              ; preds = %206, %205, %194, %187, %177, %173
  %201 = landingpad { ptr, i32 }
          cleanup
  br label %270

202:                                              ; preds = %191, %190, %183, %181
  br i1 %.ph, label %.thread170, label %.thread174

.thread170:                                       ; preds = %194, %202
  %.0120173 = phi ptr [ %161, %202 ], [ %197, %194 ]
  %203 = load i8, ptr %3, align 1, !tbaa !135, !range !84, !noundef !85
  %204 = trunc nuw i8 %203 to i1
  br i1 %204, label %205, label %206

205:                                              ; preds = %.thread170
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
          to label %206 unwind label %200

206:                                              ; preds = %205, %.thread170
  store i8 0, ptr %3, align 1, !tbaa !135
  invoke void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %.0120173)
          to label %.thread174 unwind label %200

207:                                              ; preds = %157
  %208 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %117)
  %209 = icmp eq i32 %208, 12
  br i1 %209, label %210, label %.thread174

210:                                              ; preds = %207
  %211 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross7Variant3getINS_9SPIRUndefEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %117)
          to label %212 unwind label %220

212:                                              ; preds = %210
  %213 = getelementptr inbounds i8, ptr %211, i64 12
  %214 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %213)
  %215 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %214)
          to label %216 unwind label %222

216:                                              ; preds = %212
  %217 = getelementptr inbounds i8, ptr %215, i64 16
  %218 = load i32, ptr %217, align 8, !tbaa !147
  %219 = icmp eq i32 %218, 1
  br i1 %219, label %.thread174, label %224

220:                                              ; preds = %210
  %221 = landingpad { ptr, i32 }
          cleanup
  br label %270

222:                                              ; preds = %224, %212
  %223 = landingpad { ptr, i32 }
          cleanup
  br label %270

224:                                              ; preds = %216
  %225 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23type_is_top_level_blockERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %215)
          to label %226 unwind label %222

226:                                              ; preds = %224
  br i1 %225, label %.thread174, label %227

227:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  %228 = load i8, ptr %110, align 8, !tbaa !160, !range !84, !noundef !85
  %229 = trunc nuw i8 %228 to i1
  br i1 %229, label %230, label %248

230:                                              ; preds = %227
  %231 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL24type_can_zero_initializeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %215)
          to label %232 unwind label %241

232:                                              ; preds = %230
  br i1 %231, label %233, label %248

233:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  %234 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %213)
  %235 = load ptr, ptr %0, align 8, !tbaa !5
  %236 = getelementptr inbounds i8, ptr %235, i64 464
  %237 = load ptr, ptr %236, align 8
  invoke void %237(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %234)
          to label %238 unwind label %243

238:                                              ; preds = %233
  invoke void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %239 unwind label %245

239:                                              ; preds = %238
  %240 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %248

241:                                              ; preds = %230
  %242 = landingpad { ptr, i32 }
          cleanup
  br label %268

243:                                              ; preds = %233
  %244 = landingpad { ptr, i32 }
          cleanup
  br label %247

245:                                              ; preds = %238
  %246 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  br label %247

247:                                              ; preds = %245, %243
  %.pn149 = phi { ptr, i32 } [ %246, %245 ], [ %244, %243 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %268

248:                                              ; preds = %239, %232, %227
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  %249 = getelementptr inbounds i8, ptr %211, i64 8
  %250 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %249)
  %251 = load ptr, ptr %0, align 8, !tbaa !5
  %252 = getelementptr inbounds i8, ptr %251, i64 48
  %253 = load ptr, ptr %252, align 8
  invoke void %253(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %250, i1 noundef zeroext true)
          to label %254 unwind label %260

254:                                              ; preds = %248
  %255 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %249)
  %256 = load ptr, ptr %0, align 8, !tbaa !5
  %257 = getelementptr inbounds i8, ptr %256, i64 216
  %258 = load ptr, ptr %257, align 8
  invoke void %258(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %215, ptr noundef nonnull align 8 dereferenceable(32) %10, i32 noundef %255)
          to label %259 unwind label %262

259:                                              ; preds = %254
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %.critedge167 unwind label %264

.critedge167:                                     ; preds = %259
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  store i8 1, ptr %3, align 1, !tbaa !135
  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 %.thread174

260:                                              ; preds = %248
  %261 = landingpad { ptr, i32 }
          cleanup
  br label %267

262:                                              ; preds = %254
  %263 = landingpad { ptr, i32 }
          cleanup
  br label %266

264:                                              ; preds = %259
  %265 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  br label %266

266:                                              ; preds = %264, %262
  %.pn151 = phi { ptr, i32 } [ %265, %264 ], [ %263, %262 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  br label %267

267:                                              ; preds = %266, %260
  %.pn151.pn = phi { ptr, i32 } [ %.pn151, %266 ], [ %261, %260 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %268

268:                                              ; preds = %267, %247, %241
  %.pn151.pn.pn = phi { ptr, i32 } [ %.pn151.pn, %267 ], [ %.pn149, %247 ], [ %242, %241 ]
  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 %270

.thread174:                                       ; preds = %162, %207, %156, %147, %122, %206, %202, %.critedge167, %216, %226
  %269 = getelementptr inbounds i8, ptr %.098178, i64 4
  %.not129 = icmp eq ptr %269, %108
  br i1 %.not129, label %._crit_edge, label %114

270:                                              ; preds = %220, %268, %222, %198, %200, %142, %148, %144, %140
  %.pn159.pn.pn = phi { ptr, i32 } [ %141, %140 ], [ %143, %142 ], [ %149, %148 ], [ %145, %144 ], [ %201, %200 ], [ %199, %198 ], [ %221, %220 ], [ %.pn151.pn.pn, %268 ], [ %223, %222 ]
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  br label %406

271:                                              ; preds = %._crit_edge
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %272

272:                                              ; preds = %271, %._crit_edge
  %273 = load i32, ptr %35, align 8, !tbaa !8
  %274 = icmp eq i32 %273, 5
  br i1 %274, label %275, label %309

275:                                              ; preds = %272
  %276 = getelementptr inbounds i8, ptr %0, i64 7648
  %277 = load i8, ptr %276, align 8, !tbaa !145, !range !84, !noundef !85
  %278 = trunc nuw i8 %277 to i1
  br i1 %278, label %309, label %279

279:                                              ; preds = %275
  %280 = getelementptr inbounds i8, ptr %31, i64 216
  %281 = load i32, ptr %280, align 8, !tbaa !161
  %.not130 = icmp eq i32 %281, 0
  br i1 %.not130, label %282, label %285

282:                                              ; preds = %279
  %283 = getelementptr inbounds i8, ptr %31, i64 128
  %284 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %283, i32 noundef 38)
  br i1 %284, label %285, label %309

285:                                              ; preds = %282, %279
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %12) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %13) #7
  %286 = call noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(8) %11, ptr noundef nonnull align 4 dereferenceable(8) %12, ptr noundef nonnull align 4 dereferenceable(8) %13)
  %287 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %11)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %14, i32 noundef 0)
  %288 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %14)
  %.not131 = icmp eq i32 %287, %288
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  br i1 %.not131, label %289, label %.critedge

289:                                              ; preds = %285
  %290 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef 0)
  %291 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %.not132 = icmp eq i32 %290, %291
  br i1 %.not132, label %292, label %.critedge

292:                                              ; preds = %289
  %293 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %13)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %16, i32 noundef 0)
  %294 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %16)
  %.not133 = icmp eq i32 %293, %294
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  br i1 %.not133, label %308, label %295

.critedge:                                        ; preds = %285, %289
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  br label %295

295:                                              ; preds = %.critedge, %292
  call void @llvm.lifetime.start.p0(i64 280, ptr nonnull %17) #7
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %17) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL20build_workgroup_sizeERNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEERKNS_22SpecializationConstantESC_SC_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(280) %17, ptr noundef nonnull align 4 dereferenceable(8) %11, ptr noundef nonnull align 4 dereferenceable(8) %12, ptr noundef nonnull align 4 dereferenceable(8) %13)
          to label %296 unwind label %300

296:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(280) %17, ptr noundef nonnull @.str.177)
          to label %297 unwind label %302

297:                                              ; preds = %296
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.176, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(6) @.str.178)
          to label %298 unwind label %304

298:                                              ; preds = %297
  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
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
          to label %299 unwind label %300

299:                                              ; preds = %298
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %17) #7
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %17) #7
  br label %308

300:                                              ; preds = %298, %295
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %307

302:                                              ; preds = %296
  %303 = landingpad { ptr, i32 }
          cleanup
  br label %306

304:                                              ; preds = %297
  %305 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %306

306:                                              ; preds = %304, %302
  %.pn = phi { ptr, i32 } [ %305, %304 ], [ %303, %302 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %307

307:                                              ; preds = %306, %300
  %.pn135 = phi { ptr, i32 } [ %301, %300 ], [ %.pn, %306 ]
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %17) #7
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br label %406

308:                                              ; preds = %299, %292
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br label %309

309:                                              ; preds = %308, %282, %275, %272
  store i8 0, ptr %3, align 1, !tbaa !135
  %310 = getelementptr inbounds i8, ptr %0, i64 1756
  %311 = load i32, ptr %310, align 4, !tbaa !162
  %312 = icmp eq i32 %311, 5348
  br i1 %312, label %313, label %319

313:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #7
  store ptr %0, ptr %19, align 8, !tbaa !163
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_12CompilerGLSL14emit_resourcesEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %105, ptr noundef nonnull align 8 dereferenceable(8) %19)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  %314 = getelementptr inbounds i8, ptr %0, i64 2944
  %315 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %314) #7
  %316 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %314) #7
  %.not137179 = icmp eq ptr %315, %316
  br i1 %.not137179, label %._crit_edge183, label %.lr.ph182

._crit_edge183:                                   ; preds = %.lr.ph182, %313
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  store ptr %0, ptr %20, align 8, !tbaa !165
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_12CompilerGLSL14emit_resourcesEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %105, ptr noundef nonnull align 8 dereferenceable(8) %20)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  br label %319

.lr.ph182:                                        ; preds = %313, %.lr.ph182
  %.0121180 = phi ptr [ %318, %.lr.ph182 ], [ %315, %313 ]
  %317 = load i32, ptr %.0121180, align 4, !tbaa !146
  call void @_ZN11spirv_cross12CompilerGLSL27emit_buffer_reference_blockEjb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %317, i1 noundef zeroext false)
  %318 = getelementptr inbounds i8, ptr %.0121180, i64 4
  %.not137 = icmp eq ptr %318, %316
  br i1 %.not137, label %._crit_edge183, label %.lr.ph182

319:                                              ; preds = %._crit_edge183, %309
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  store ptr %0, ptr %21, align 8, !tbaa !167
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_2EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %105, ptr noundef nonnull align 8 dereferenceable(8) %21)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  store ptr %0, ptr %22, align 8, !tbaa !169
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_3EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %105, ptr noundef nonnull align 8 dereferenceable(8) %22)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #7
  %320 = getelementptr inbounds i8, ptr %0, i64 2192
  %321 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_20CombinedImageSamplerEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %320) #7
  %322 = getelementptr inbounds i8, ptr %0, i64 7648
  %323 = load i8, ptr %322, align 8, !range !84
  %324 = xor i8 %323, 1
  %325 = select i1 %321, i8 %324, i8 1
  store i8 %325, ptr %23, align 1, !tbaa !135
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %24) #7
  store ptr %0, ptr %24, align 8, !tbaa !171
  %326 = getelementptr inbounds i8, ptr %24, i64 8
  store ptr %23, ptr %326, align 8, !tbaa !133
  %327 = getelementptr inbounds i8, ptr %24, i64 16
  store ptr %3, ptr %327, align 8, !tbaa !133
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_4EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %105, ptr noundef nonnull align 8 dereferenceable(24) %24)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #7
  %328 = load i8, ptr %3, align 1, !tbaa !135, !range !84, !noundef !85
  %329 = trunc nuw i8 %328 to i1
  br i1 %329, label %330, label %331

330:                                              ; preds = %319
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %331

331:                                              ; preds = %330, %319
  store i8 0, ptr %3, align 1, !tbaa !135
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #7
  store i8 0, ptr %25, align 1, !tbaa !135
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #7
  store ptr %0, ptr %26, align 8, !tbaa !173
  %332 = getelementptr inbounds i8, ptr %26, i64 8
  store ptr %3, ptr %332, align 8, !tbaa !133
  %333 = getelementptr inbounds i8, ptr %26, i64 16
  store ptr %25, ptr %333, align 8, !tbaa !133
  call void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_5EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %105, ptr noundef nonnull align 8 dereferenceable(24) %26)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #7
  %334 = getelementptr inbounds i8, ptr %0, i64 1928
  %335 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %334) #7
  %336 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %334) #7
  %.not138184 = icmp eq ptr %335, %336
  br i1 %.not138184, label %._crit_edge188, label %.lr.ph187

.lr.ph187:                                        ; preds = %331
  %337 = getelementptr inbounds i8, ptr %0, i64 7656
  br label %340

._crit_edge188:                                   ; preds = %402, %331
  %338 = load i8, ptr %3, align 1, !tbaa !135, !range !84, !noundef !85
  %339 = trunc nuw i8 %338 to i1
  br i1 %339, label %404, label %405

340:                                              ; preds = %.lr.ph187, %402
  %.0100185 = phi ptr [ %335, %.lr.ph187 ], [ %403, %402 ]
  %341 = load i32, ptr %.0100185, align 4, !tbaa !146
  %342 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %341)
  %343 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler18is_hidden_variableERKNS_12SPIRVariableEb(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %342, i1 noundef zeroext true)
  br i1 %343, label %402, label %344

344:                                              ; preds = %340
  %345 = getelementptr inbounds i8, ptr %342, i64 16
  %346 = load i32, ptr %345, align 8, !tbaa !175
  %.not139 = icmp eq i32 %346, 3
  br i1 %.not139, label %395, label %347

347:                                              ; preds = %344
  %348 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL15variable_is_lutERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %342)
  br i1 %348, label %402, label %349

349:                                              ; preds = %347
  %350 = getelementptr inbounds i8, ptr %342, i64 8
  %351 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %350)
  call void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %351)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  %352 = load i8, ptr %337, align 8, !tbaa !160, !range !84, !noundef !85
  %353 = trunc nuw i8 %352 to i1
  %354 = load i32, ptr %345, align 8
  %355 = icmp eq i32 %354, 6
  %or.cond169 = select i1 %353, i1 %355, i1 false
  br i1 %or.cond169, label %356, label %383

356:                                              ; preds = %349
  %357 = getelementptr inbounds i8, ptr %342, i64 24
  %358 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %357)
  %.not142 = icmp eq i32 %358, 0
  br i1 %.not142, label %359, label %383

359:                                              ; preds = %356
  %360 = getelementptr inbounds i8, ptr %342, i64 92
  %361 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %360)
  %.not143 = icmp eq i32 %361, 0
  br i1 %.not143, label %362, label %383

362:                                              ; preds = %359
  %363 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %342)
          to label %364 unwind label %376

364:                                              ; preds = %362
  %365 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL24type_can_zero_initializeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %363)
          to label %366 unwind label %376

366:                                              ; preds = %364
  br i1 %365, label %367, label %383

367:                                              ; preds = %366
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #7
  %368 = invoke noundef i32 @_ZNK11spirv_cross8Compiler25get_variable_data_type_idERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %342)
          to label %369 unwind label %378

369:                                              ; preds = %367
  %370 = load ptr, ptr %0, align 8, !tbaa !5
  %371 = getelementptr inbounds i8, ptr %370, i64 464
  %372 = load ptr, ptr %371, align 8
  invoke void %372(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %368)
          to label %373 unwind label %378

373:                                              ; preds = %369
  invoke void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %374 unwind label %380

374:                                              ; preds = %373
  %375 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %383

376:                                              ; preds = %364, %362
  %377 = landingpad { ptr, i32 }
          cleanup
  br label %394

378:                                              ; preds = %369, %367
  %379 = landingpad { ptr, i32 }
          cleanup
  br label %382

380:                                              ; preds = %373
  %381 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  br label %382

382:                                              ; preds = %380, %378
  %.pn144 = phi { ptr, i32 } [ %381, %380 ], [ %379, %378 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %394

383:                                              ; preds = %374, %366, %359, %356, %349
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #7
  %384 = load ptr, ptr %0, align 8, !tbaa !5
  %385 = getelementptr inbounds i8, ptr %384, i64 312
  %386 = load ptr, ptr %385, align 8
  invoke void %386(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %342)
          to label %387 unwind label %389

387:                                              ; preds = %383
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %388 unwind label %391

388:                                              ; preds = %387
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  store i8 1, ptr %3, align 1, !tbaa !135
  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
  br label %402

389:                                              ; preds = %383
  %390 = landingpad { ptr, i32 }
          cleanup
  br label %393

391:                                              ; preds = %387
  %392 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %393

393:                                              ; preds = %391, %389
  %.pn146 = phi { ptr, i32 } [ %392, %391 ], [ %390, %389 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  br label %394

394:                                              ; preds = %393, %382, %376
  %.pn146.pn = phi { ptr, i32 } [ %.pn146, %393 ], [ %.pn144, %382 ], [ %377, %376 ]
  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.end.p0(i64 1, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #7
  br label %406

395:                                              ; preds = %344
  %396 = getelementptr inbounds i8, ptr %342, i64 24
  %397 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %396)
  %.not140 = icmp eq i32 %397, 0
  br i1 %.not140, label %402, label %398

398:                                              ; preds = %395
  %399 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %396)
  %400 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %399)
  %.not141 = icmp eq ptr %400, null
  br i1 %.not141, label %402, label %401

401:                                              ; preds = %398
  call void @_ZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %342)
  br label %402

402:                                              ; preds = %388, %347, %401, %398, %395, %340
  %403 = getelementptr inbounds i8, ptr %.0100185, i64 4
  %.not138 = icmp eq ptr %403, %336
  br i1 %.not138, label %._crit_edge188, label %340

404:                                              ; preds = %._crit_edge188
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
  br label %405

405:                                              ; preds = %404, %._crit_edge188
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #7
  ret void

406:                                              ; preds = %394, %307, %270
  %.pn159.pn.pn.pn = phi { ptr, i32 } [ %.pn159.pn.pn, %270 ], [ %.pn146.pn, %394 ], [ %.pn135, %307 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #7
  resume { ptr, i32 } %.pn159.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL20build_workgroup_sizeERNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEERKNS_22SpecializationConstantESC_SC_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 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 nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #5 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

; 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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL27emit_buffer_reference_blockEjb(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #1 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 uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL31emit_specialization_constant_opERKNS_14SPIRConstantOpE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(76)) local_unnamed_addr #1 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler23type_is_top_level_blockERKNS_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_cross12CompilerGLSL13emit_constantERKNS_12SPIRConstantE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(360)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24replace_fragment_outputsEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL8emit_plsEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL31should_force_emit_builtin_blockEN3spv12StorageClassE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL15variable_is_lutERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #1 align 2

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

declare void @_ZNK11spirv_cross8ParsedIR21create_loop_hard_lockEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8, ptr noundef nonnull align 8 dereferenceable(1920)) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross7Variant3getINS_9SPIRUndefEEERT_v(ptr noundef nonnull align 8 dereferenceable(21)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL24type_can_zero_initializeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: nounwind
declare void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_12CompilerGLSL14emit_resourcesEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_8SPIRTypeEZNS_12CompilerGLSL14emit_resourcesEvE3$_1EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_2EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_3EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_4EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerGLSL14emit_resourcesEvE3$_5EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #1 align 2

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 = { 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 #5 = { 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 #6 = { 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 #7 = { nounwind }

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

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


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