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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.spirv_cross::SpecializationConstant" = type { %"class.spirv_cross::TypedID.360", i32 }
%"class.spirv_cross::TypedID.360" = type { i32 }
%"class.spirv_cross::TypedID.324" = type { i32 }
%"class.std::unordered_set.361" = type { %"class.std::_Hashtable.362" }
%"class.std::_Hashtable.362" = 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 }
%class.anon.380 = type { ptr, ptr }
%"class.spirv_cross::ParsedIR::LoopLock" = type { ptr }
%"class.spirv_cross::TypedID.328" = type { i32 }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.10"], %"class.spirv_cross::SmallVector.10", %"class.spirv_cross::SmallVector.10", %"class.std::unordered_map.13", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.spirv_cross::SmallVector.33", %"class.std::unordered_map.36", %"class.std::unordered_map.55", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.10" = type { %"class.spirv_cross::VectorView.11", i64, %"class.spirv_cross::AlignedBuffer.12" }
%"class.spirv_cross::VectorView.11" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.12" = type { [32 x i8] }
%"class.std::unordered_map.13" = type { %"class.std::_Hashtable.14" }
%"class.std::_Hashtable.14" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [256 x i8] }
%"class.spirv_cross::SmallVector.33" = type { %"class.spirv_cross::VectorView.34", i64, %"class.spirv_cross::AlignedBuffer.35" }
%"class.spirv_cross::VectorView.34" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.35" = type { [8 x i8] }
%"class.std::unordered_map.36" = type { %"class.std::_Hashtable.37" }
%"class.std::_Hashtable.37" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.55" = type { %"class.std::_Hashtable.56" }
%"class.std::_Hashtable.56" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.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.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.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::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.324", [4 x i8] }>
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.328", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.339", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.324" }>
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.324"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.324"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.339" = type { %"class.spirv_cross::VectorView.340", i64, %"class.spirv_cross::AlignedBuffer.341" }
%"class.spirv_cross::VectorView.340" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.341" = type { [32 x i8] }
%"struct.spirv_cross::SPIRConstantOp" = type <{ %"struct.spirv_cross::IVariant.base", i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::TypedID.328", [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.325", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.328", %"class.spirv_cross::TypedID.328", %"class.std::unordered_set.165" }
%"class.spirv_cross::SmallVector.325" = type { %"class.spirv_cross::VectorView.326", i64, %"class.spirv_cross::AlignedBuffer.327" }
%"class.spirv_cross::VectorView.326" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.327" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.328", i32, i8, i8, i8, i32, 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 }
%"struct.spirv_cross::SPIRUndef" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.328" }
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.30", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"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.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 }

@.str.9 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [4 x i8], align 1

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(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

declare void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848), 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) #5

declare void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(360), i1 noundef zeroext, i1 noundef zeroext) #3

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerHLSL41emit_specialization_constants_and_structsEv(ptr noundef nonnull align 8 dereferenceable(10528) %0) #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i8, align 1
  %4 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %5 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %6 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %7 = alloca %"class.spirv_cross::TypedID.324", align 4
  %8 = alloca %"class.std::unordered_set.361", align 8
  %9 = alloca %class.anon.380, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.spirv_cross::ParsedIR::LoopLock", align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.spirv_cross::TypedID.324", align 4
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.spirv_cross::TypedID.324", align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca ptr, align 8
  %36 = alloca i8, align 1
  %37 = alloca %"class.spirv_cross::TypedID.324", align 4
  %38 = alloca %"class.spirv_cross::TypedID.328", align 4
  %39 = alloca i8, align 1
  %40 = alloca %"class.spirv_cross::TypedID.324", align 4
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %48 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %3) #8
  store i8 0, ptr %3, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %4) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %6) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %49 = call noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176) %48, ptr noundef nonnull align 4 dereferenceable(8) %4, ptr noundef nonnull align 4 dereferenceable(8) %5, ptr noundef nonnull align 4 dereferenceable(8) %6)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %7, i32 noundef %49)
  call void @llvm.lifetime.start.p0(i64 56, ptr %8) #8
  call void @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #8
  %50 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %48, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #8
  %51 = getelementptr inbounds %class.anon.380, ptr %9, i32 0, i32 0
  store ptr %48, ptr %51, align 8, !tbaa !11
  %52 = getelementptr inbounds %class.anon.380, ptr %9, i32 0, i32 1
  store ptr %8, ptr %52, align 8, !tbaa !5
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerHLSL41emit_specialization_constants_and_structsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %50, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %53 unwind label %67

53:                                               ; preds = %1
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %54 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %48, i32 0, i32 1
  invoke void @_ZNK11spirv_cross8ParsedIR21create_loop_hard_lockEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8 %12, ptr noundef nonnull align 8 dereferenceable(1920) %54)
          to label %55 unwind label %71

55:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %56 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %48, i32 0, i32 1
  %57 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %56, i32 0, i32 5
  store ptr %57, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %58 = load ptr, ptr %13, align 8, !tbaa !5
  %59 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %58) #8
  store ptr %59, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %60 = load ptr, ptr %13, align 8, !tbaa !5
  %61 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %60) #8
  store ptr %61, ptr %15, align 8, !tbaa !5
  br label %62

62:                                               ; preds = %504, %55
  %63 = load ptr, ptr %14, align 8, !tbaa !5
  %64 = load ptr, ptr %15, align 8, !tbaa !5
  %65 = icmp ne ptr %63, %64
  br i1 %65, label %75, label %66

66:                                               ; preds = %62
  store i32 2, ptr %16, align 4
  br label %508

67:                                               ; preds = %1
  %68 = landingpad { ptr, i32 }
          cleanup
  %69 = extractvalue { ptr, i32 } %68, 0
  store ptr %69, ptr %10, align 8
  %70 = extractvalue { ptr, i32 } %68, 1
  store i32 %70, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  br label %525

71:                                               ; preds = %53
  %72 = landingpad { ptr, i32 }
          cleanup
  %73 = extractvalue { ptr, i32 } %72, 0
  store ptr %73, ptr %10, align 8
  %74 = extractvalue { ptr, i32 } %72, 1
  store i32 %74, ptr %11, align 4
  br label %524

75:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %76 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %76, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %77 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %48, i32 0, i32 1
  %78 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %77, i32 0, i32 2
  %79 = load ptr, ptr %17, align 8, !tbaa !5
  %80 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %79)
          to label %81 unwind label %106

81:                                               ; preds = %75
  %82 = zext i32 %80 to i64
  %83 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %78, i64 noundef %82) #8
  store ptr %83, ptr %18, align 8, !tbaa !5
  %84 = load ptr, ptr %18, align 8, !tbaa !5
  %85 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %84)
          to label %86 unwind label %106

86:                                               ; preds = %81
  %87 = icmp eq i32 %85, 3
  br i1 %87, label %88, label %246

88:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %89 = load ptr, ptr %18, align 8, !tbaa !5
  %90 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %89)
          to label %91 unwind label %110

91:                                               ; preds = %88
  store ptr %90, ptr %19, align 8, !tbaa !5
  %92 = load ptr, ptr %19, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %92, i32 0, i32 1
  %94 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %93)
          to label %95 unwind label %110

95:                                               ; preds = %91
  %96 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %97 unwind label %110

97:                                               ; preds = %95
  %98 = icmp eq i32 %94, %96
  br i1 %98, label %99, label %123

99:                                               ; preds = %97
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #8
  %100 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %101 unwind label %114

101:                                              ; preds = %99
  %102 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 noundef %100)
          to label %103 unwind label %114

103:                                              ; preds = %101
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(360) %102, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %104 unwind label %114

104:                                              ; preds = %103
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA39_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(39) @.str.82, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %105 unwind label %118

105:                                              ; preds = %104
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #8
  store i8 1, ptr %3, align 1, !tbaa !9
  br label %244

106:                                              ; preds = %394, %314, %246, %81, %75
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %10, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %11, align 4
  br label %507

110:                                              ; preds = %95, %91, %88
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %10, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %11, align 4
  br label %245

114:                                              ; preds = %103, %101, %99
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %10, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %11, align 4
  br label %122

118:                                              ; preds = %104
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %10, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  br label %122

122:                                              ; preds = %118, %114
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #8
  br label %245

123:                                              ; preds = %97
  %124 = load ptr, ptr %19, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %124, i32 0, i32 3
  %126 = load i8, ptr %125, align 8, !tbaa !13, !range !26, !noundef !27
  %127 = trunc i8 %126 to i1
  br i1 %127, label %128, label %243

128:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %129 = load ptr, ptr %19, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %129, i32 0, i32 1
  %131 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %130)
          to label %132 unwind label %182

132:                                              ; preds = %128
  %133 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 noundef %131)
          to label %134 unwind label %182

134:                                              ; preds = %132
  store ptr %133, ptr %21, align 8, !tbaa !5
  %135 = load ptr, ptr %19, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %135, i32 0, i32 1
  %137 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %136)
          to label %138 unwind label %182

138:                                              ; preds = %134
  invoke void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %48, i32 noundef %137)
          to label %139 unwind label %182

139:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #8
  %140 = load ptr, ptr %19, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %140, i32 0, i32 1
  %142 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %141)
          to label %143 unwind label %186

143:                                              ; preds = %139
  %144 = load ptr, ptr %48, align 8, !tbaa !28
  %145 = getelementptr inbounds ptr, ptr %144, i64 6
  %146 = load ptr, ptr %145, align 8
  invoke void %146(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 noundef %142, i1 noundef zeroext true)
          to label %147 unwind label %186

147:                                              ; preds = %143
  %148 = load ptr, ptr %19, align 8, !tbaa !5
  %149 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %148, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 8 %149, i64 4, i1 false), !tbaa.struct !30
  %150 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %23, i32 0, i32 0
  %151 = load i32, ptr %150, align 4
  %152 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 %151, i32 noundef 1)
          to label %153 unwind label %190

153:                                              ; preds = %147
  br i1 %152, label %154, label %216

154:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #8
  %155 = load ptr, ptr %19, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %155, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 8 %156, i64 4, i1 false), !tbaa.struct !30
  %157 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %25, i32 0, i32 0
  %158 = load i32, ptr %157, align 4
  %159 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 %158, i32 noundef 1)
          to label %160 unwind label %194

160:                                              ; preds = %154
  invoke void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %48, i32 noundef %159)
          to label %161 unwind label %194

161:                                              ; preds = %160
  %162 = load ptr, ptr %19, align 8, !tbaa !5
  %163 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %162, i32 0, i32 7
  %164 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %163, ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  %165 = load ptr, ptr %19, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %165, i32 0, i32 7
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(9) @.str.83, ptr noundef nonnull align 8 dereferenceable(32) %166)
          to label %167 unwind label %190

167:                                              ; preds = %161
  %168 = load ptr, ptr %19, align 8, !tbaa !5
  %169 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %168, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #8
  %170 = load ptr, ptr %19, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(360) %170, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %171 unwind label %198

171:                                              ; preds = %167
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(9) @.str.84, ptr noundef nonnull align 8 dereferenceable(32) %169, ptr noundef nonnull align 1 dereferenceable(2) @.str.63, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %172 unwind label %202

172:                                              ; preds = %171
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(7) @.str.85)
          to label %173 unwind label %190

173:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #8
  %174 = load ptr, ptr %21, align 8, !tbaa !5
  %175 = load ptr, ptr %48, align 8, !tbaa !28
  %176 = getelementptr inbounds ptr, ptr %175, i64 27
  %177 = load ptr, ptr %176, align 8
  invoke void %177(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(336) %174, ptr noundef nonnull align 8 dereferenceable(32) %22, i32 noundef 0)
          to label %178 unwind label %207

178:                                              ; preds = %173
  %179 = load ptr, ptr %19, align 8, !tbaa !5
  %180 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %179, i32 0, i32 7
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_RSA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(14) @.str.86, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(4) @.str.87, ptr noundef nonnull align 8 dereferenceable(32) %180, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %181 unwind label %211

181:                                              ; preds = %178
  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 %239

182:                                              ; preds = %138, %134, %132, %128
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %10, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %11, align 4
  br label %242

186:                                              ; preds = %143, %139
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %10, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %11, align 4
  br label %241

190:                                              ; preds = %172, %161, %147
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %10, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %11, align 4
  br label %240

194:                                              ; preds = %160, %154
  %195 = landingpad { ptr, i32 }
          cleanup
  %196 = extractvalue { ptr, i32 } %195, 0
  store ptr %196, ptr %10, align 8
  %197 = extractvalue { ptr, i32 } %195, 1
  store i32 %197, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  br label %240

198:                                              ; preds = %167
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %10, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %11, align 4
  br label %206

202:                                              ; preds = %171
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %10, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %206

206:                                              ; preds = %202, %198
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  br label %240

207:                                              ; preds = %173
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %10, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %11, align 4
  br label %215

211:                                              ; preds = %178
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %10, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  br label %215

215:                                              ; preds = %211, %207
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  br label %240

216:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #8
  %217 = load ptr, ptr %21, align 8, !tbaa !5
  %218 = load ptr, ptr %48, align 8, !tbaa !28
  %219 = getelementptr inbounds ptr, ptr %218, i64 27
  %220 = load ptr, ptr %219, align 8
  invoke void %220(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(336) %217, ptr noundef nonnull align 8 dereferenceable(32) %22, i32 noundef 0)
          to label %221 unwind label %225

221:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #8
  %222 = load ptr, ptr %19, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(360) %222, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %223 unwind label %229

223:                                              ; preds = %221
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(14) @.str.86, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(4) @.str.87, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %224 unwind label %233

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

225:                                              ; preds = %216
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %10, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %11, align 4
  br label %238

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

233:                                              ; preds = %223
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %10, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %237

237:                                              ; preds = %233, %229
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  br label %238

238:                                              ; preds = %237, %225
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  br label %240

239:                                              ; preds = %224, %181
  store i8 1, ptr %3, align 1, !tbaa !9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %243

240:                                              ; preds = %238, %215, %206, %194, %190
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %241

241:                                              ; preds = %240, %186
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  br label %242

242:                                              ; preds = %241, %182
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %245

243:                                              ; preds = %239, %123
  br label %244

244:                                              ; preds = %243, %105
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %497

245:                                              ; preds = %242, %122, %110
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %507

246:                                              ; preds = %86
  %247 = load ptr, ptr %18, align 8, !tbaa !5
  %248 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %247)
          to label %249 unwind label %106

249:                                              ; preds = %246
  %250 = icmp eq i32 %248, 9
  br i1 %250, label %251, label %314

251:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %252 = load ptr, ptr %18, align 8, !tbaa !5
  %253 = invoke noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %252)
          to label %254 unwind label %285

254:                                              ; preds = %251
  store ptr %253, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %255 = load ptr, ptr %30, align 8, !tbaa !5
  %256 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %255, i32 0, i32 3
  %257 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %256)
          to label %258 unwind label %289

258:                                              ; preds = %254
  %259 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 noundef %257)
          to label %260 unwind label %289

260:                                              ; preds = %258
  store ptr %259, ptr %31, align 8, !tbaa !5
  %261 = load ptr, ptr %30, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %261, i32 0, i32 1
  %263 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %262)
          to label %264 unwind label %289

264:                                              ; preds = %260
  invoke void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %48, i32 noundef %263)
          to label %265 unwind label %289

265:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #8
  %266 = load ptr, ptr %30, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %266, i32 0, i32 1
  %268 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %267)
          to label %269 unwind label %293

269:                                              ; preds = %265
  %270 = load ptr, ptr %48, align 8, !tbaa !28
  %271 = getelementptr inbounds ptr, ptr %270, i64 6
  %272 = load ptr, ptr %271, align 8
  invoke void %272(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 noundef %268, i1 noundef zeroext true)
          to label %273 unwind label %293

273:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #8
  %274 = load ptr, ptr %31, align 8, !tbaa !5
  %275 = load ptr, ptr %48, align 8, !tbaa !28
  %276 = getelementptr inbounds ptr, ptr %275, i64 27
  %277 = load ptr, ptr %276, align 8
  invoke void %277(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(336) %274, ptr noundef nonnull align 8 dereferenceable(32) %32, i32 noundef 0)
          to label %278 unwind label %297

278:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #8
  %279 = load ptr, ptr %30, align 8, !tbaa !5
  %280 = load ptr, ptr %48, align 8, !tbaa !28
  %281 = getelementptr inbounds ptr, ptr %280, i64 24
  %282 = load ptr, ptr %281, align 8
  invoke void %282(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(76) %279)
          to label %283 unwind label %301

283:                                              ; preds = %278
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(14) @.str.86, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(4) @.str.87, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %284 unwind label %305

284:                                              ; preds = %283
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #8
  store i8 1, ptr %3, align 1, !tbaa !9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %496

285:                                              ; preds = %251
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %10, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %11, align 4
  br label %313

289:                                              ; preds = %264, %260, %258, %254
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %10, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %11, align 4
  br label %312

293:                                              ; preds = %269, %265
  %294 = landingpad { ptr, i32 }
          cleanup
  %295 = extractvalue { ptr, i32 } %294, 0
  store ptr %295, ptr %10, align 8
  %296 = extractvalue { ptr, i32 } %294, 1
  store i32 %296, ptr %11, align 4
  br label %311

297:                                              ; preds = %273
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %10, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %11, align 4
  br label %310

301:                                              ; preds = %278
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %10, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %11, align 4
  br label %309

305:                                              ; preds = %283
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %10, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  br label %309

309:                                              ; preds = %305, %301
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  br label %310

310:                                              ; preds = %309, %297
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %311

311:                                              ; preds = %310, %293
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  br label %312

312:                                              ; preds = %311, %289
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %313

313:                                              ; preds = %312, %285
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %507

314:                                              ; preds = %249
  %315 = load ptr, ptr %18, align 8, !tbaa !5
  %316 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %315)
          to label %317 unwind label %106

317:                                              ; preds = %314
  %318 = icmp eq i32 %316, 1
  br i1 %318, label %319, label %394

319:                                              ; preds = %317
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %320 = load ptr, ptr %18, align 8, !tbaa !5
  %321 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %320)
          to label %322 unwind label %372

322:                                              ; preds = %319
  store ptr %321, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #8
  %323 = load ptr, ptr %35, align 8, !tbaa !5
  %324 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %323, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 8 %324, i64 4, i1 false), !tbaa.struct !30
  %325 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %37, i32 0, i32 0
  %326 = load i32, ptr %325, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  %327 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 %326, i32 noundef 2)
          to label %328 unwind label %376

328:                                              ; preds = %322
  br i1 %327, label %329, label %338

329:                                              ; preds = %328
  %330 = load ptr, ptr %35, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %330, i32 0, i32 1
  %332 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %331)
          to label %333 unwind label %380

333:                                              ; preds = %329
  %334 = getelementptr inbounds %"class.spirv_cross::TypedID.328", ptr %38, i32 0, i32 0
  store i32 %332, ptr %334, align 4
  %335 = invoke noundef i64 @_ZNKSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE5countERKS3_(ptr noundef nonnull align 8 dereferenceable(56) %8, ptr noundef nonnull align 4 dereferenceable(4) %38)
          to label %336 unwind label %380

336:                                              ; preds = %333
  %337 = icmp eq i64 %335, 0
  br label %338

338:                                              ; preds = %336, %328
  %339 = phi i1 [ false, %328 ], [ %337, %336 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  %340 = zext i1 %339 to i8
  store i8 %340, ptr %36, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #8
  %341 = load ptr, ptr %35, align 8, !tbaa !5
  %342 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %341, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 8 %342, i64 4, i1 false), !tbaa.struct !30
  %343 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %40, i32 0, i32 0
  %344 = load i32, ptr %343, align 4
  %345 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 %344, i32 noundef 3)
          to label %346 unwind label %384

346:                                              ; preds = %338
  %347 = zext i1 %345 to i8
  store i8 %347, ptr %39, align 1, !tbaa !9
  %348 = load ptr, ptr %35, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %348, i32 0, i32 2
  %350 = load i32, ptr %349, align 8, !tbaa !32
  %351 = icmp eq i32 %350, 15
  br i1 %351, label %352, label %391

352:                                              ; preds = %346
  %353 = load ptr, ptr %35, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %353, i32 0, i32 6
  %355 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %354) #8
  br i1 %355, label %356, label %391

356:                                              ; preds = %352
  %357 = load ptr, ptr %35, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %357, i32 0, i32 9
  %359 = load i8, ptr %358, align 4, !tbaa !55, !range !26, !noundef !27
  %360 = trunc i8 %359 to i1
  br i1 %360, label %391, label %361

361:                                              ; preds = %356
  %362 = load i8, ptr %36, align 1, !tbaa !9, !range !26, !noundef !27
  %363 = trunc i8 %362 to i1
  br i1 %363, label %391, label %364

364:                                              ; preds = %361
  %365 = load i8, ptr %39, align 1, !tbaa !9, !range !26, !noundef !27
  %366 = trunc i8 %365 to i1
  br i1 %366, label %391, label %367

367:                                              ; preds = %364
  %368 = load i8, ptr %3, align 1, !tbaa !9, !range !26, !noundef !27
  %369 = trunc i8 %368 to i1
  br i1 %369, label %370, label %388

370:                                              ; preds = %367
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
          to label %371 unwind label %384

371:                                              ; preds = %370
  br label %388

372:                                              ; preds = %319
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %10, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %11, align 4
  br label %393

376:                                              ; preds = %322
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %10, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %11, align 4
  br label %392

380:                                              ; preds = %333, %329
  %381 = landingpad { ptr, i32 }
          cleanup
  %382 = extractvalue { ptr, i32 } %381, 0
  store ptr %382, ptr %10, align 8
  %383 = extractvalue { ptr, i32 } %381, 1
  store i32 %383, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %392

384:                                              ; preds = %388, %370, %338
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %10, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #8
  br label %392

388:                                              ; preds = %371, %367
  store i8 0, ptr %3, align 1, !tbaa !9
  %389 = load ptr, ptr %35, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(336) %389)
          to label %390 unwind label %384

390:                                              ; preds = %388
  br label %391

391:                                              ; preds = %390, %364, %361, %356, %352, %346
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %495

392:                                              ; preds = %384, %380, %376
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #8
  br label %393

393:                                              ; preds = %392, %372
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %507

394:                                              ; preds = %317
  %395 = load ptr, ptr %18, align 8, !tbaa !5
  %396 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %395)
          to label %397 unwind label %106

397:                                              ; preds = %394
  %398 = icmp eq i32 %396, 12
  br i1 %398, label %399, label %494

399:                                              ; preds = %397
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %400 = load ptr, ptr %18, align 8, !tbaa !5
  %401 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross7Variant3getINS_9SPIRUndefEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %400)
          to label %402 unwind label %414

402:                                              ; preds = %399
  store ptr %401, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %403 = load ptr, ptr %41, align 8, !tbaa !5
  %404 = getelementptr inbounds %"struct.spirv_cross::SPIRUndef", ptr %403, i32 0, i32 1
  %405 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %404)
          to label %406 unwind label %418

406:                                              ; preds = %402
  %407 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 noundef %405)
          to label %408 unwind label %418

408:                                              ; preds = %406
  store ptr %407, ptr %42, align 8, !tbaa !5
  %409 = load ptr, ptr %42, align 8, !tbaa !5
  %410 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %409, i32 0, i32 2
  %411 = load i32, ptr %410, align 8, !tbaa !32
  %412 = icmp eq i32 %411, 1
  br i1 %412, label %413, label %422

413:                                              ; preds = %408
  store i32 1, ptr %16, align 4
  br label %474

414:                                              ; preds = %399
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %10, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %11, align 4
  br label %493

418:                                              ; preds = %406, %402
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %10, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %11, align 4
  br label %492

422:                                              ; preds = %408
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  %423 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %48, i32 0, i32 9
  %424 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %423, i32 0, i32 12
  %425 = load i8, ptr %424, align 4, !tbaa !56, !range !26, !noundef !27
  %426 = trunc i8 %425 to i1
  br i1 %426, label %427, label %455

427:                                              ; preds = %422
  %428 = load ptr, ptr %42, align 8, !tbaa !5
  %429 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL24type_can_zero_initializeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(336) %428)
          to label %430 unwind label %442

430:                                              ; preds = %427
  br i1 %429, label %431, label %455

431:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #8
  %432 = load ptr, ptr %41, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.spirv_cross::SPIRUndef", ptr %432, i32 0, i32 1
  %434 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %433)
          to label %435 unwind label %446

435:                                              ; preds = %431
  %436 = load ptr, ptr %48, align 8, !tbaa !28
  %437 = getelementptr inbounds ptr, ptr %436, i64 58
  %438 = load ptr, ptr %437, align 8
  invoke void %438(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %48, i32 noundef %434)
          to label %439 unwind label %446

439:                                              ; preds = %435
  invoke void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 1 dereferenceable(4) @.str.87, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %440 unwind label %450

440:                                              ; preds = %439
  %441 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  br label %455

442:                                              ; preds = %427
  %443 = landingpad { ptr, i32 }
          cleanup
  %444 = extractvalue { ptr, i32 } %443, 0
  store ptr %444, ptr %10, align 8
  %445 = extractvalue { ptr, i32 } %443, 1
  store i32 %445, ptr %11, align 4
  br label %491

446:                                              ; preds = %435, %431
  %447 = landingpad { ptr, i32 }
          cleanup
  %448 = extractvalue { ptr, i32 } %447, 0
  store ptr %448, ptr %10, align 8
  %449 = extractvalue { ptr, i32 } %447, 1
  store i32 %449, ptr %11, align 4
  br label %454

450:                                              ; preds = %439
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %10, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %454

454:                                              ; preds = %450, %446
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  br label %491

455:                                              ; preds = %440, %430, %422
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #8
  %456 = load ptr, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  %457 = load ptr, ptr %41, align 8, !tbaa !5
  %458 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %457, i32 0, i32 1
  %459 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %458)
          to label %460 unwind label %477

460:                                              ; preds = %455
  %461 = load ptr, ptr %48, align 8, !tbaa !28
  %462 = getelementptr inbounds ptr, ptr %461, i64 6
  %463 = load ptr, ptr %462, align 8
  invoke void %463(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(3176) %48, i32 noundef %459, i1 noundef zeroext true)
          to label %464 unwind label %477

464:                                              ; preds = %460
  %465 = load ptr, ptr %41, align 8, !tbaa !5
  %466 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %465, i32 0, i32 1
  %467 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %466)
          to label %468 unwind label %481

468:                                              ; preds = %464
  %469 = load ptr, ptr %48, align 8, !tbaa !28
  %470 = getelementptr inbounds ptr, ptr %469, i64 27
  %471 = load ptr, ptr %470, align 8
  invoke void %471(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 8 dereferenceable(336) %456, ptr noundef nonnull align 8 dereferenceable(32) %47, i32 noundef %467)
          to label %472 unwind label %481

472:                                              ; preds = %468
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(8) @.str.52, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %473 unwind label %485

473:                                              ; preds = %472
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  store i8 1, ptr %3, align 1, !tbaa !9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  store i32 0, ptr %16, align 4
  br label %474

474:                                              ; preds = %473, %413
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  %475 = load i32, ptr %16, align 4
  switch i32 %475, label %498 [
    i32 0, label %476
  ]

476:                                              ; preds = %474
  br label %494

477:                                              ; preds = %460, %455
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %10, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %11, align 4
  br label %490

481:                                              ; preds = %468, %464
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %10, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %11, align 4
  br label %489

485:                                              ; preds = %472
  %486 = landingpad { ptr, i32 }
          cleanup
  %487 = extractvalue { ptr, i32 } %486, 0
  store ptr %487, ptr %10, align 8
  %488 = extractvalue { ptr, i32 } %486, 1
  store i32 %488, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  br label %489

489:                                              ; preds = %485, %481
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %490

490:                                              ; preds = %489, %477
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  br label %491

491:                                              ; preds = %490, %454, %442
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  br label %492

492:                                              ; preds = %491, %418
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  br label %493

493:                                              ; preds = %492, %414
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %507

494:                                              ; preds = %476, %397
  br label %495

495:                                              ; preds = %494, %391
  br label %496

496:                                              ; preds = %495, %284
  br label %497

497:                                              ; preds = %496, %244
  store i32 0, ptr %16, align 4
  br label %498

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

500:                                              ; preds = %498
  store i32 0, ptr %16, align 4
  br label %501

501:                                              ; preds = %500, %498
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  %502 = load i32, ptr %16, align 4
  switch i32 %502, label %508 [
    i32 0, label %503
  ]

503:                                              ; preds = %501
  br label %504

504:                                              ; preds = %503
  %505 = load ptr, ptr %14, align 8, !tbaa !5
  %506 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %505, i32 1
  store ptr %506, ptr %14, align 8, !tbaa !5
  br label %62

507:                                              ; preds = %493, %393, %313, %245, %106
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %523

508:                                              ; preds = %501, %66
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  %509 = load i32, ptr %16, align 4
  switch i32 %509, label %520 [
    i32 2, label %510
  ]

510:                                              ; preds = %508
  %511 = load i8, ptr %3, align 1, !tbaa !9, !range !26, !noundef !27
  %512 = trunc i8 %511 to i1
  br i1 %512, label %513, label %519

513:                                              ; preds = %510
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %48, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
          to label %514 unwind label %515

514:                                              ; preds = %513
  br label %519

515:                                              ; preds = %513
  %516 = landingpad { ptr, i32 }
          cleanup
  %517 = extractvalue { ptr, i32 } %516, 0
  store ptr %517, ptr %10, align 8
  %518 = extractvalue { ptr, i32 } %516, 1
  store i32 %518, ptr %11, align 4
  br label %523

519:                                              ; preds = %514, %510
  store i32 0, ptr %16, align 4
  br label %520

520:                                              ; preds = %519, %508
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #8
  %521 = load i32, ptr %16, align 4
  switch i32 %521, label %531 [
    i32 0, label %522
    i32 1, label %522
  ]

522:                                              ; preds = %520, %520
  ret void

523:                                              ; preds = %515, %507
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  br label %524

524:                                              ; preds = %523, %71
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  br label %525

525:                                              ; preds = %524, %67
  call void @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #8
  br label %526

526:                                              ; preds = %525
  %527 = load ptr, ptr %10, align 8
  %528 = load i32, ptr %11, align 4
  %529 = insertvalue { ptr, i32 } poison, ptr %527, 0
  %530 = insertvalue { ptr, i32 } %529, i32 %528, 1
  resume { ptr, i32 } %530

531:                                              ; preds = %520
  unreachable
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #6 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 @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerHLSL41emit_specialization_constants_and_structsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(16)) #1 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA39_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(39), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #4 align 2

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

declare void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #3

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(14), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #4 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 i64 @_ZNKSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE5countERKS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

declare void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) #3

; 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

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

; 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_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSA_RA2_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 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: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #6 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "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 = !{!"bool", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"_ZTSZN11spirv_cross12CompilerHLSL41emit_specialization_constants_and_structsEvE3$_0", !6, i64 0, !6, i64 8}
!13 = !{!14, !10, i64 264}
!14 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !15, i64 0, !18, i64 12, !19, i64 16, !10, i64 264, !10, i64 265, !10, i64 266, !20, i64 272, !24, i64 328}
!15 = !{!"_ZTSN11spirv_cross8IVariantE", !16, i64 8}
!16 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !17, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !17, i64 0}
!19 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !17, i64 240}
!20 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !21, i64 0, !22, i64 16, !23, i64 24}
!21 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !6, i64 0, !22, i64 8}
!22 = !{!"long", !7, i64 0}
!23 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !25, i64 0, !22, i64 8, !7, i64 16}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!29, !29, i64 0}
!29 = !{!"vtable pointer", !8, i64 0}
!30 = !{i64 0, i64 4, !31}
!31 = !{!17, !17, i64 0}
!32 = !{!33, !35, i64 16}
!33 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !15, i64 0, !34, i64 12, !35, i64 16, !17, i64 20, !17, i64 24, !17, i64 28, !36, i64 32, !39, i64 88, !17, i64 120, !10, i64 124, !10, i64 125, !42, i64 128, !43, i64 136, !36, i64 192, !46, i64 248, !18, i64 272, !18, i64 276, !50, i64 280}
!34 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!35 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!36 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !37, i64 0, !22, i64 16, !38, i64 24}
!37 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !22, i64 8}
!38 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!39 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !40, i64 0, !22, i64 16, !41, i64 24}
!40 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !22, i64 8}
!41 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!42 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!43 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !44, i64 0, !22, i64 16, !45, i64 24}
!44 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !22, i64 8}
!45 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!46 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !18, i64 0, !47, i64 4, !10, i64 8, !10, i64 9, !10, i64 10, !17, i64 12, !48, i64 16, !49, i64 20}
!47 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!48 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!49 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!50 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !51, i64 0}
!51 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!52 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!53 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !54, i64 0, !22, i64 8}
!54 = !{!"float", !7, i64 0}
!55 = !{!33, !10, i64 124}
!56 = !{!57, !10, i64 7656}
!57 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !58, i64 0, !6, i64 3176, !113, i64 3184, !10, i64 3272, !116, i64 3280, !6, i64 7616, !6, i64 7624, !10, i64 7632, !10, i64 7633, !121, i64 7636, !50, i64 7680, !50, i64 7736, !50, i64 7792, !50, i64 7848, !50, i64 7904, !50, i64 7960, !50, i64 8016, !125, i64 8072, !111, i64 8128, !10, i64 8184, !127, i64 8192, !17, i64 8416, !98, i64 8424, !98, i64 8480, !98, i64 8536, !128, i64 8592, !130, i64 8648, !131, i64 8656, !83, i64 8712, !83, i64 8992, !131, i64 9272, !43, i64 9328, !17, i64 9384, !17, i64 9388, !17, i64 9392, !10, i64 9396, !10, i64 9397, !133, i64 9400, !133, i64 9424, !137, i64 9448, !141, i64 9472, !131, i64 9496, !98, i64 9552, !98, i64 9608, !7, i64 9664, !145, i64 9672, !98, i64 9728, !6, i64 9784, !147, i64 9792}
!58 = !{!"_ZTSN11spirv_cross8CompilerE", !59, i64 8, !36, i64 1928, !36, i64 1984, !6, i64 2040, !6, i64 2048, !17, i64 2056, !100, i64 2064, !10, i64 2120, !98, i64 2128, !10, i64 2184, !10, i64 2185, !102, i64 2192, !36, i64 2312, !105, i64 2368, !98, i64 2400, !98, i64 2456, !98, i64 2512, !98, i64 2568, !98, i64 2624, !97, i64 2680, !97, i64 2744, !17, i64 2808, !17, i64 2812, !10, i64 2816, !98, i64 2824, !10, i64 2880, !10, i64 2881, !17, i64 2884, !107, i64 2888, !36, i64 2944, !109, i64 3000, !98, i64 3056, !10, i64 3112, !111, i64 3120}
!59 = !{!"_ZTSN11spirv_cross8ParsedIRE", !60, i64 0, !66, i64 8, !70, i64 32, !73, i64 248, !7, i64 304, !75, i64 1088, !75, i64 1144, !78, i64 1200, !80, i64 1256, !83, i64 1312, !86, i64 1592, !89, i64 1624, !91, i64 1680, !93, i64 1736, !94, i64 1740, !95, i64 1748, !96, i64 1752, !17, i64 1756, !17, i64 1760, !24, i64 1768, !97, i64 1800, !98, i64 1864}
!60 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !61, i64 0}
!61 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !62, i64 0}
!62 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !63, i64 0}
!63 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !64, i64 0}
!64 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !65, i64 0}
!65 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!66 = !{!"_ZTSSt6vectorIjSaIjEE", !67, i64 0}
!67 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!70 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !71, i64 0, !22, i64 16, !72, i64 24}
!71 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !22, i64 8}
!72 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!73 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !74, i64 0}
!74 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!75 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !76, i64 0, !22, i64 16, !77, i64 24}
!76 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !22, i64 8}
!77 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!78 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !79, i64 0}
!79 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!80 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !81, i64 0, !22, i64 16, !82, i64 24}
!81 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !22, i64 8}
!82 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!83 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !84, i64 0, !22, i64 16, !85, i64 24}
!84 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !22, i64 8}
!85 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!86 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !87, i64 0, !22, i64 16, !88, i64 24}
!87 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !22, i64 8}
!88 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!89 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !90, i64 0}
!90 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!91 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !92, i64 0}
!92 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!93 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !17, i64 0}
!94 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !17, i64 0, !10, i64 4, !10, i64 5, !10, i64 6}
!95 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!96 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!97 = !{!"_ZTSN11spirv_cross6BitsetE", !22, i64 0, !98, i64 8}
!98 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !99, i64 0}
!99 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!100 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !101, i64 0}
!101 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!102 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !103, i64 0, !22, i64 16, !104, i64 24}
!103 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !22, i64 8}
!104 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!105 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !106, i64 0, !6, i64 24}
!106 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!107 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !108, i64 0}
!108 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!109 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !110, i64 0}
!110 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!111 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !112, i64 0}
!112 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!113 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !114, i64 0, !22, i64 16, !115, i64 24}
!114 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !22, i64 8}
!115 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!116 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !117, i64 0, !7, i64 24, !118, i64 4120}
!117 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !22, i64 8, !22, i64 16}
!118 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !119, i64 0, !22, i64 16, !120, i64 24}
!119 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !22, i64 8}
!120 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!121 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !17, i64 0, !10, i64 4, !10, i64 5, !17, i64 8, !10, i64 12, !10, i64 13, !10, i64 14, !10, i64 15, !10, i64 16, !10, i64 17, !10, i64 18, !10, i64 19, !10, i64 20, !10, i64 21, !10, i64 22, !10, i64 23, !17, i64 24, !122, i64 28, !123, i64 32}
!122 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !10, i64 0, !10, i64 1, !10, i64 2}
!123 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !124, i64 0, !124, i64 4}
!124 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!125 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !126, i64 0}
!126 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!127 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !24, i64 0, !24, i64 32, !24, i64 64, !10, i64 96, !10, i64 97, !10, i64 98, !10, 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, !35, i64 184, !10, i64 188, !10, i64 189, !10, i64 190, !10, i64 191, !10, i64 192, !10, i64 193, !10, i64 194, !10, i64 195, !10, i64 196, !10, i64 197, !10, i64 198, !10, i64 199, !10, i64 200, !10, i64 201, !10, i64 202, !10, i64 203, !10, i64 204, !10, i64 205, !10, i64 206, !10, i64 207, !10, i64 208, !10, i64 209, !10, i64 210, !10, i64 211, !10, i64 212, !10, i64 213, !10, i64 214, !10, i64 215, !10, i64 216, !10, i64 217, !10, i64 218, !10, i64 219}
!128 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !129, i64 0}
!129 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!130 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !17, i64 0}
!131 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !132, i64 0}
!132 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!133 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !134, i64 0}
!134 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !135, i64 0}
!135 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !136, i64 0}
!136 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!137 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !138, i64 0}
!138 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !139, i64 0}
!139 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !140, i64 0}
!140 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!141 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !142, i64 0}
!142 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !143, i64 0}
!143 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !144, i64 0}
!144 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!145 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !146, i64 0}
!146 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}
!147 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !148, i64 0}
!148 = !{!"_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, !22, i64 8, !52, i64 16, !22, i64 24, !53, i64 32, !6, i64 48}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.spirv_cross::SpecializationConstant" = type { %"class.spirv_cross::TypedID.360", i32 }
%"class.spirv_cross::TypedID.360" = type { i32 }
%"class.spirv_cross::TypedID.324" = type { i32 }
%"class.std::unordered_set.361" = type { %"class.std::_Hashtable.362" }
%"class.std::_Hashtable.362" = 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 }
%class.anon.380 = type { ptr, ptr }
%"class.spirv_cross::ParsedIR::LoopLock" = type { ptr }
%"class.spirv_cross::TypedID.328" = type { i32 }

@.str.9 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [4 x i8], align 1

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress 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: 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

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

declare void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(360), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 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 nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerHLSL41emit_specialization_constants_and_structsEv(ptr noundef nonnull align 8 dereferenceable(10528) %0) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %3 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %4 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %5 = alloca %"class.spirv_cross::TypedID.324", align 4
  %6 = alloca %"class.std::unordered_set.361", align 8
  %7 = alloca %class.anon.380, align 8
  %8 = alloca %"class.spirv_cross::ParsedIR::LoopLock", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.spirv_cross::TypedID.328", align 4
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %2) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %3) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #7
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %4) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  %25 = 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) %2, ptr noundef nonnull align 4 dereferenceable(8) %3, ptr noundef nonnull align 4 dereferenceable(8) %4)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %5, i32 noundef %25)
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %6) #7
  call void @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %6) #7
  %26 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #7
  store ptr %0, ptr %7, align 8, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %7, i64 8
  store ptr %6, ptr %27, align 8, !tbaa !10
  invoke void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerHLSL41emit_specialization_constants_and_structsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920) %26, ptr noundef nonnull align 8 dereferenceable(16) %7)
          to label %28 unwind label %35

28:                                               ; preds = %1
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  invoke void @_ZNK11spirv_cross8ParsedIR21create_loop_hard_lockEv(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::ParsedIR::LoopLock") align 8 %8, ptr noundef nonnull align 8 dereferenceable(1920) %26)
          to label %29 unwind label %37

29:                                               ; preds = %28
  %30 = getelementptr inbounds i8, ptr %0, i64 1096
  %31 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %30) #7
  %32 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %30) #7
  %.not180 = icmp eq ptr %31, %32
  br i1 %.not180, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %29
  %33 = getelementptr inbounds i8, ptr %0, i64 40
  %34 = getelementptr inbounds i8, ptr %0, i64 7656
  br label %39

35:                                               ; preds = %1
  %36 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  br label %282

37:                                               ; preds = %28
  %38 = landingpad { ptr, i32 }
          cleanup
  br label %281

39:                                               ; preds = %.lr.ph, %.thread
  %.0182 = phi i8 [ 0, %.lr.ph ], [ %.5140, %.thread ]
  %.098181 = phi ptr [ %31, %.lr.ph ], [ %275, %.thread ]
  %40 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.098181)
  %41 = zext i32 %40 to i64
  %42 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %33, i64 noundef %41) #7
  %43 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %42)
  %44 = icmp eq i32 %43, 3
  br i1 %44, label %45, label %134

45:                                               ; preds = %39
  %46 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross7Variant3getINS_12SPIRConstantEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %42)
          to label %47 unwind label %58

47:                                               ; preds = %45
  %48 = getelementptr inbounds i8, ptr %46, i64 8
  %49 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %48)
  %50 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %51 = icmp eq i32 %49, %50
  br i1 %51, label %52, label %65

52:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  %53 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %54 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %53)
          to label %55 unwind label %60

55:                                               ; preds = %52
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(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(360) %54, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %56 unwind label %60

56:                                               ; preds = %55
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA39_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(39) @.str.82, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %57 unwind label %62

57:                                               ; preds = %56
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %.thread

58:                                               ; preds = %45
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %280

60:                                               ; preds = %55, %52
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %64

62:                                               ; preds = %56
  %63 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  br label %64

64:                                               ; preds = %62, %60
  %.pn129 = phi { ptr, i32 } [ %63, %62 ], [ %61, %60 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %280

65:                                               ; preds = %47
  %66 = getelementptr inbounds i8, ptr %46, i64 264
  %67 = load i8, ptr %66, align 8, !tbaa !11, !range !25, !noundef !26
  %68 = trunc nuw i8 %67 to i1
  br i1 %68, label %69, label %.thread

69:                                               ; preds = %65
  %70 = getelementptr inbounds i8, ptr %46, i64 12
  %71 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %70)
  %72 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %71)
          to label %73 unwind label %98

73:                                               ; preds = %69
  %74 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %48)
  invoke void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %74)
          to label %75 unwind label %98

75:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  %76 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %48)
  %77 = load ptr, ptr %0, align 8, !tbaa !27
  %78 = getelementptr inbounds i8, ptr %77, i64 48
  %79 = load ptr, ptr %78, align 8
  invoke void %79(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 %76, i1 noundef zeroext true)
          to label %80 unwind label %100

80:                                               ; preds = %75
  %.sroa.025.0.copyload = load i32, ptr %48, align 8, !tbaa !29
  %81 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.025.0.copyload, i32 noundef 1)
          to label %82 unwind label %102

82:                                               ; preds = %80
  br i1 %81, label %83, label %116

83:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #7
  %.sroa.024.0.copyload = load i32, ptr %48, align 8, !tbaa !29
  %84 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.024.0.copyload, i32 noundef 1)
          to label %85 unwind label %104

85:                                               ; preds = %83
  invoke void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %84)
          to label %86 unwind label %104

86:                                               ; preds = %85
  %87 = getelementptr inbounds i8, ptr %46, i64 328
  %88 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.83, ptr noundef nonnull align 8 dereferenceable(32) %87)
          to label %89 unwind label %102

89:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(360) %46, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %90 unwind label %106

90:                                               ; preds = %89
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.84, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 1 dereferenceable(2) @.str.63, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %91 unwind label %108

91:                                               ; preds = %90
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.85)
          to label %92 unwind label %102

92:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  %93 = load ptr, ptr %0, align 8, !tbaa !27
  %94 = getelementptr inbounds i8, ptr %93, i64 216
  %95 = load ptr, ptr %94, align 8
  invoke void %95(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %72, ptr noundef nonnull align 8 dereferenceable(32) %10, i32 noundef 0)
          to label %96 unwind label %111

96:                                               ; preds = %92
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_RSA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(14) @.str.86, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(4) @.str.87, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %97 unwind label %113

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

98:                                               ; preds = %73, %69
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %280

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

102:                                              ; preds = %91, %86, %80
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %132

104:                                              ; preds = %85, %83
  %105 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  br label %132

106:                                              ; preds = %89
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %110

108:                                              ; preds = %90
  %109 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br label %110

110:                                              ; preds = %108, %106
  %.pn122 = phi { ptr, i32 } [ %109, %108 ], [ %107, %106 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %132

111:                                              ; preds = %92
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %115

113:                                              ; preds = %96
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  br label %115

115:                                              ; preds = %113, %111
  %.pn124 = phi { ptr, i32 } [ %114, %113 ], [ %112, %111 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %132

116:                                              ; preds = %82
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #7
  %117 = load ptr, ptr %0, align 8, !tbaa !27
  %118 = getelementptr inbounds i8, ptr %117, i64 216
  %119 = load ptr, ptr %118, align 8
  invoke void %119(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %72, ptr noundef nonnull align 8 dereferenceable(32) %10, i32 noundef 0)
          to label %120 unwind label %123

120:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(360) %46, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %121 unwind label %125

121:                                              ; preds = %120
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(14) @.str.86, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 1 dereferenceable(4) @.str.87, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %122 unwind label %127

122:                                              ; preds = %121
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  br label %131

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

125:                                              ; preds = %120
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %129

127:                                              ; preds = %121
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %129

129:                                              ; preds = %127, %125
  %.pn119 = phi { ptr, i32 } [ %128, %127 ], [ %126, %125 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %130

130:                                              ; preds = %129, %123
  %.pn119.pn = phi { ptr, i32 } [ %.pn119, %129 ], [ %124, %123 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  br label %132

131:                                              ; preds = %122, %97
  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
  br label %.thread

132:                                              ; preds = %130, %115, %110, %104, %102
  %.pn124.pn = phi { ptr, i32 } [ %.pn124, %115 ], [ %103, %102 ], [ %.pn122, %110 ], [ %105, %104 ], [ %.pn119.pn, %130 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  br label %133

133:                                              ; preds = %132, %100
  %.pn124.pn.pn = phi { ptr, i32 } [ %.pn124.pn, %132 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  br label %280

134:                                              ; preds = %39
  %135 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %42)
  %136 = icmp eq i32 %135, 9
  br i1 %136, label %137, label %176

137:                                              ; preds = %134
  %138 = invoke noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross7Variant3getINS_14SPIRConstantOpEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %42)
          to label %139 unwind label %161

139:                                              ; preds = %137
  %140 = getelementptr inbounds i8, ptr %138, i64 72
  %141 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %140)
  %142 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %141)
          to label %143 unwind label %163

143:                                              ; preds = %139
  %144 = getelementptr inbounds i8, ptr %138, i64 8
  %145 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %144)
  invoke void @_ZN11spirv_cross12CompilerGLSL17add_resource_nameEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %145)
          to label %146 unwind label %163

146:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  %147 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %144)
  %148 = load ptr, ptr %0, align 8, !tbaa !27
  %149 = getelementptr inbounds i8, ptr %148, i64 48
  %150 = load ptr, ptr %149, align 8
  invoke void %150(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %147, i1 noundef zeroext true)
          to label %151 unwind label %165

151:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  %152 = load ptr, ptr %0, align 8, !tbaa !27
  %153 = getelementptr inbounds i8, ptr %152, i64 216
  %154 = load ptr, ptr %153, align 8
  invoke void %154(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %142, ptr noundef nonnull align 8 dereferenceable(32) %16, i32 noundef 0)
          to label %155 unwind label %167

155:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  %156 = load ptr, ptr %0, align 8, !tbaa !27
  %157 = getelementptr inbounds i8, ptr %156, i64 192
  %158 = load ptr, ptr %157, align 8
  invoke void %158(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(76) %138)
          to label %159 unwind label %169

159:                                              ; preds = %155
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(14) @.str.86, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(4) @.str.87, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %160 unwind label %171

160:                                              ; preds = %159
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  br label %.thread

161:                                              ; preds = %137
  %162 = landingpad { ptr, i32 }
          cleanup
  br label %280

163:                                              ; preds = %143, %139
  %164 = landingpad { ptr, i32 }
          cleanup
  br label %280

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

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

169:                                              ; preds = %155
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %173

171:                                              ; preds = %159
  %172 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %173

173:                                              ; preds = %171, %169
  %.pn113 = phi { ptr, i32 } [ %172, %171 ], [ %170, %169 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %174

174:                                              ; preds = %173, %167
  %.pn113.pn = phi { ptr, i32 } [ %.pn113, %173 ], [ %168, %167 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %175

175:                                              ; preds = %174, %165
  %.pn113.pn.pn = phi { ptr, i32 } [ %.pn113.pn, %174 ], [ %166, %165 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  br label %280

176:                                              ; preds = %134
  %177 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %42)
  %178 = icmp eq i32 %177, 1
  br i1 %178, label %179, label %217

179:                                              ; preds = %176
  %180 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross7Variant3getINS_8SPIRTypeEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %42)
          to label %181 unwind label %208

181:                                              ; preds = %179
  %182 = getelementptr inbounds i8, ptr %180, i64 8
  %.sroa.010.0.copyload = load i32, ptr %182, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  %183 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.010.0.copyload, i32 noundef 2)
          to label %184 unwind label %210

184:                                              ; preds = %181
  br i1 %183, label %185, label %191

185:                                              ; preds = %184
  %186 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %182)
          to label %187 unwind label %212

187:                                              ; preds = %185
  store i32 %186, ptr %19, align 4
  %188 = invoke noundef i64 @_ZNKSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE5countERKS3_(ptr noundef nonnull align 8 dereferenceable(56) %6, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %189 unwind label %212

189:                                              ; preds = %187
  %190 = icmp eq i64 %188, 0
  br label %191

191:                                              ; preds = %189, %184
  %192 = phi i1 [ false, %184 ], [ %190, %189 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  %.sroa.0.0.copyload = load i32, ptr %182, align 8, !tbaa !29
  %193 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0.0.copyload, i32 noundef 3)
          to label %194 unwind label %214

194:                                              ; preds = %191
  %195 = getelementptr inbounds i8, ptr %180, i64 16
  %196 = load i32, ptr %195, align 8, !tbaa !30
  %197 = icmp eq i32 %196, 15
  br i1 %197, label %198, label %.thread

198:                                              ; preds = %194
  %199 = getelementptr inbounds i8, ptr %180, i64 32
  %200 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %199) #7
  br i1 %200, label %201, label %.thread

201:                                              ; preds = %198
  %202 = getelementptr inbounds i8, ptr %180, i64 124
  %203 = load i8, ptr %202, align 4, !tbaa !53, !range !25, !noundef !26
  %204 = trunc nuw i8 %203 to i1
  %brmerge = or i1 %192, %204
  %brmerge137 = or i1 %193, %brmerge
  br i1 %brmerge137, label %.thread, label %205

205:                                              ; preds = %201
  %206 = trunc nuw i8 %.0182 to i1
  br i1 %206, label %207, label %216

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

208:                                              ; preds = %179
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %280

210:                                              ; preds = %181
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %280

212:                                              ; preds = %187, %185
  %213 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  br label %280

214:                                              ; preds = %216, %207, %191
  %215 = landingpad { ptr, i32 }
          cleanup
  br label %280

216:                                              ; preds = %207, %205
  invoke void @_ZN11spirv_cross12CompilerGLSL11emit_structERNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %180)
          to label %.thread unwind label %214

217:                                              ; preds = %176
  %218 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %42)
  %219 = icmp eq i32 %218, 12
  br i1 %219, label %220, label %.thread

220:                                              ; preds = %217
  %221 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross7Variant3getINS_9SPIRUndefEEERT_v(ptr noundef nonnull align 8 dereferenceable(21) %42)
          to label %222 unwind label %229

222:                                              ; preds = %220
  %223 = getelementptr inbounds i8, ptr %221, i64 12
  %224 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %223)
  %225 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %224)
          to label %226 unwind label %231

226:                                              ; preds = %222
  %227 = getelementptr inbounds i8, ptr %225, i64 16
  %228 = load i32, ptr %227, align 8, !tbaa !30
  %.not109 = icmp eq i32 %228, 1
  br i1 %.not109, label %.loopexit, label %233

229:                                              ; preds = %220
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %280

231:                                              ; preds = %222
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %280

233:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  %234 = load i8, ptr %34, align 8, !tbaa !54, !range !25, !noundef !26
  %235 = trunc nuw i8 %234 to i1
  br i1 %235, label %236, label %254

236:                                              ; preds = %233
  %237 = 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) %225)
          to label %238 unwind label %247

238:                                              ; preds = %236
  br i1 %237, label %239, label %254

239:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  %240 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %223)
  %241 = load ptr, ptr %0, align 8, !tbaa !27
  %242 = getelementptr inbounds i8, ptr %241, i64 464
  %243 = load ptr, ptr %242, align 8
  invoke void %243(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %240)
          to label %244 unwind label %249

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

245:                                              ; preds = %244
  %246 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  br label %254

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

249:                                              ; preds = %239
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %253

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

253:                                              ; preds = %251, %249
  %.pn = phi { ptr, i32 } [ %252, %251 ], [ %250, %249 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  br label %274

254:                                              ; preds = %245, %238, %233
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  %255 = getelementptr inbounds i8, ptr %221, i64 8
  %256 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %255)
  %257 = load ptr, ptr %0, align 8, !tbaa !27
  %258 = getelementptr inbounds i8, ptr %257, i64 48
  %259 = load ptr, ptr %258, align 8
  invoke void %259(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %256, i1 noundef zeroext true)
          to label %260 unwind label %266

260:                                              ; preds = %254
  %261 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %255)
  %262 = load ptr, ptr %0, align 8, !tbaa !27
  %263 = getelementptr inbounds i8, ptr %262, i64 216
  %264 = load ptr, ptr %263, align 8
  invoke void %264(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %225, ptr noundef nonnull align 8 dereferenceable(32) %24, i32 noundef %261)
          to label %265 unwind label %268

265:                                              ; preds = %260
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.52, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %.thread141 unwind label %270

.thread141:                                       ; preds = %265
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  br label %.thread

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

268:                                              ; preds = %260
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %272

270:                                              ; preds = %265
  %271 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  br label %272

272:                                              ; preds = %270, %268
  %.pn103 = phi { ptr, i32 } [ %271, %270 ], [ %269, %268 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  br label %273

273:                                              ; preds = %272, %266
  %.pn103.pn = phi { ptr, i32 } [ %.pn103, %272 ], [ %267, %266 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  br label %274

274:                                              ; preds = %273, %253, %247
  %.pn103.pn.pn = phi { ptr, i32 } [ %.pn103.pn, %273 ], [ %.pn, %253 ], [ %248, %247 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  br label %280

.thread:                                          ; preds = %217, %160, %65, %131, %57, %201, %216, %198, %194, %.thread141
  %.5140 = phi i8 [ 1, %.thread141 ], [ %.0182, %194 ], [ %.0182, %198 ], [ 0, %216 ], [ %.0182, %201 ], [ %.0182, %65 ], [ 1, %131 ], [ 1, %57 ], [ %.0182, %217 ], [ 1, %160 ]
  %275 = getelementptr inbounds i8, ptr %.098181, i64 4
  %.not = icmp eq ptr %275, %32
  br i1 %.not, label %._crit_edge, label %39

._crit_edge:                                      ; preds = %.thread
  %276 = trunc nuw i8 %.5140 to i1
  br i1 %276, label %277, label %.loopexit

277:                                              ; preds = %._crit_edge
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA1_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(1) @.str.9)
          to label %.loopexit unwind label %278

278:                                              ; preds = %277
  %279 = landingpad { ptr, i32 }
          cleanup
  br label %280

.loopexit:                                        ; preds = %226, %29, %._crit_edge, %277
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  call void @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %6) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #7
  ret void

280:                                              ; preds = %98, %133, %64, %58, %163, %175, %161, %210, %212, %214, %208, %231, %274, %229, %278
  %.pn133 = phi { ptr, i32 } [ %279, %278 ], [ %.pn129, %64 ], [ %59, %58 ], [ %.pn124.pn.pn, %133 ], [ %99, %98 ], [ %162, %161 ], [ %.pn113.pn.pn, %175 ], [ %164, %163 ], [ %209, %208 ], [ %215, %214 ], [ %213, %212 ], [ %211, %210 ], [ %230, %229 ], [ %.pn103.pn.pn, %274 ], [ %232, %231 ]
  call void @_ZN11spirv_cross8ParsedIR8LoopLockD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  br label %281

281:                                              ; preds = %280, %37
  %.pn133.pn = phi { ptr, i32 } [ %.pn133, %280 ], [ %38, %37 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br label %282

282:                                              ; preds = %281, %35
  %.pn133.pn.pn = phi { ptr, i32 } [ %.pn133.pn, %281 ], [ %36, %35 ]
  call void @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %6) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #7
  resume { ptr, i32 } %.pn133.pn.pn
}

; 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 @_ZNSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN11spirv_cross8ParsedIR17for_each_typed_idINS_12SPIRVariableEZNS_12CompilerHLSL41emit_specialization_constants_and_structsEvE3$_0EEvRKT0_"(ptr noundef nonnull align 8 dereferenceable(1920), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA39_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(39), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #4 align 2

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

declare void @_ZN11spirv_cross12CompilerGLSL25constant_value_macro_nameB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S2_SA_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(14), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #4 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 i64 @_ZNKSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE1EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE5countERKS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

; 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

declare 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 #3

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


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