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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.280" = type { i32 }
%class.anon.390 = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::allocator.71" = type { i8 }
%"struct.spirv_cross::SPIRExpression" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.280", %"class.std::__cxx11::basic_string", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.280", i8, i8, i8, i8, [4 x i8], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", i32, [4 x i8] }>
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.27", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_map.213" = type { %"class.std::_Hashtable.214" }
%"class.std::_Hashtable.214" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set.245" = type { %"class.std::_Hashtable.246" }
%"class.std::_Hashtable.246" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.263" = type { %"class.std::_Hashtable.264" }
%"class.std::_Hashtable.264" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 x i8] }>
%"struct.spirv_cross::Meta" = type { %"struct.spirv_cross::Meta::Decoration", %"class.spirv_cross::SmallVector.316", %"class.std::unordered_map.213", i8, i32 }
%"struct.spirv_cross::Meta::Decoration" = type { %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, %"struct.spirv_cross::Meta::Decoration::Extended" }
%"struct.spirv_cross::Meta::Decoration::Extended" = type { %"class.spirv_cross::Bitset", [18 x i32] }
%"class.spirv_cross::SmallVector.316" = type <{ %"class.spirv_cross::VectorView.317", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.317" = type { ptr, i64 }
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", i32, i32, %"class.spirv_cross::TypedID.280", %"class.spirv_cross::TypedID.282", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.280", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.283", i8, i8, i8, ptr }
%"class.spirv_cross::TypedID.282" = type { i32 }
%"class.spirv_cross::TypedID.283" = type { i32 }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.310", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.310" = type { %"class.spirv_cross::VectorView.311", i64, %"class.spirv_cross::AlignedBuffer.312" }
%"class.spirv_cross::VectorView.311" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.312" = type { [32 x i8] }
%"struct.spirv_cross::AccessChainMeta" = type { i32, i8, i8, i8, i8, i8, i8, i8, i32 }

@.str.11 = external hidden unnamed_addr constant [90 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.286 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.308 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.713 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.719 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.760 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1102 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1349 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.1350 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1351 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1352 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1353 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1354 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1355 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE = external hidden unnamed_addr constant [131 x i8], align 1
@.str.1356 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1357 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1358 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1359 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1360 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1361 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1362 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1363 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1364 = external hidden unnamed_addr constant [154 x i8], align 1

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

; 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) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

; 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) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360), i32 noundef, i32 noundef) #6 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; 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)) #4 align 2

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #5

declare noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #5

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #5

declare noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #5

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, ptr noundef %6) #2 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i1, align 1
  %16 = alloca i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i8, align 1
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca i8, align 1
  %33 = alloca i8, align 1
  %34 = alloca i8, align 1
  %35 = alloca i32, align 4
  %36 = alloca i8, align 1
  %37 = alloca %"class.spirv_cross::TypedID.280", align 4
  %38 = alloca i8, align 1
  %39 = alloca %"class.spirv_cross::TypedID.280", align 4
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  %42 = alloca i8, align 1
  %43 = alloca i8, align 1
  %44 = alloca i32, align 4
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca %class.anon.390, align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i8, align 1
  %52 = alloca i8, align 1
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca i32, align 4
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"struct.spirv_cross::SPIRType", align 8
  %61 = alloca %"class.spirv_cross::TypedID.281", align 4
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca i32, align 4
  %69 = alloca %"class.spirv_cross::TypedID.280", align 4
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca ptr, align 8
  %76 = alloca %"class.spirv_cross::TypedID.280", align 4
  %77 = alloca i32, align 4
  %78 = alloca %"class.spirv_cross::TypedID.280", align 4
  %79 = alloca i8, align 1
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::__cxx11::basic_string", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca %"class.std::__cxx11::basic_string", align 8
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca %"class.std::__cxx11::basic_string", align 8
  %91 = alloca %"class.std::__cxx11::basic_string", align 8
  %92 = alloca ptr, align 8
  %93 = alloca %"class.std::__cxx11::basic_string", align 8
  %94 = alloca %"class.std::__cxx11::basic_string", align 8
  %95 = alloca i32, align 4
  %96 = alloca %"class.std::__cxx11::basic_string", align 8
  %97 = alloca %"class.std::__cxx11::basic_string", align 8
  %98 = alloca %"class.spirv_cross::TypedID.280", align 4
  %99 = alloca %"class.spirv_cross::TypedID.280", align 4
  %100 = alloca %"class.spirv_cross::TypedID.280", align 4
  %101 = alloca ptr, align 8
  %102 = alloca i32, align 4
  %103 = alloca %"class.std::__cxx11::basic_string", align 8
  %104 = alloca %"class.std::__cxx11::basic_string", align 8
  %105 = alloca %"class.std::__cxx11::basic_string", align 8
  %106 = alloca %"class.spirv_cross::TypedID.281", align 4
  %107 = alloca %"class.std::__cxx11::basic_string", align 8
  %108 = alloca %"class.std::__cxx11::basic_string", align 8
  %109 = alloca %"class.std::__cxx11::basic_string", align 8
  %110 = alloca %"class.spirv_cross::TypedID.281", align 4
  %111 = alloca %"class.spirv_cross::TypedID.281", align 4
  %112 = alloca %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"class.std::__cxx11::basic_string", align 8
  %114 = alloca ptr, align 8
  %115 = alloca %"class.std::__cxx11::basic_string", align 8
  %116 = alloca i64, align 8
  %117 = alloca %"class.std::__cxx11::basic_string", align 8
  %118 = alloca i64, align 8
  %119 = alloca %"class.std::__cxx11::basic_string", align 8
  %120 = alloca %"class.std::__cxx11::basic_string", align 8
  %121 = alloca %"class.std::__cxx11::basic_string", align 8
  %122 = alloca i32, align 4
  %123 = alloca i8, align 1
  %124 = alloca ptr, align 8
  %125 = alloca %"class.spirv_cross::TypedID.280", align 4
  %126 = alloca i8, align 1
  %127 = alloca %"class.std::__cxx11::basic_string", align 8
  %128 = alloca i32, align 4
  %129 = alloca ptr, align 8
  %130 = alloca i8, align 1
  %131 = alloca %"class.std::__cxx11::basic_string", align 8
  %132 = alloca %"class.std::__cxx11::basic_string", align 8
  %133 = alloca %"class.std::allocator.71", align 1
  %134 = alloca i1, align 1
  %135 = alloca i1, align 1
  %136 = alloca %"class.std::__cxx11::basic_string", align 8
  %137 = alloca i64, align 8
  %138 = alloca %"class.std::__cxx11::basic_string", align 8
  %139 = alloca ptr, align 8
  store ptr %0, ptr %8, align 8
  store ptr %1, ptr %9, align 8, !tbaa !5
  store i32 %2, ptr %10, align 4, !tbaa !9
  store ptr %3, ptr %11, align 8, !tbaa !5
  store i32 %4, ptr %12, align 4, !tbaa !9
  store i32 %5, ptr %13, align 4, !tbaa !9
  store ptr %6, ptr %14, align 8, !tbaa !5
  %140 = load ptr, ptr %9, align 8
  store i1 false, ptr %15, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #9
  %141 = load i32, ptr %13, align 4, !tbaa !9
  %142 = and i32 %141, 1
  %143 = icmp ne i32 %142, 0
  %144 = zext i1 %143 to i8
  store i8 %144, ptr %16, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #9
  %145 = load i32, ptr %13, align 4, !tbaa !9
  %146 = and i32 %145, 16
  %147 = icmp ne i32 %146, 0
  %148 = zext i1 %147 to i8
  store i8 %148, ptr %17, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #9
  %149 = load i32, ptr %13, align 4, !tbaa !9
  %150 = and i32 %149, 2
  %151 = icmp ne i32 %150, 0
  %152 = zext i1 %151 to i8
  store i8 %152, ptr %18, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #9
  %153 = load i32, ptr %13, align 4, !tbaa !9
  %154 = and i32 %153, 4
  %155 = icmp ne i32 %154, 0
  %156 = zext i1 %155 to i8
  store i8 %156, ptr %19, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #9
  %157 = load i32, ptr %13, align 4, !tbaa !9
  %158 = and i32 %157, 8
  %159 = icmp eq i32 %158, 0
  %160 = zext i1 %159 to i8
  store i8 %160, ptr %20, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #9
  %161 = load i32, ptr %13, align 4, !tbaa !9
  %162 = and i32 %161, 32
  %163 = icmp ne i32 %162, 0
  %164 = zext i1 %163 to i8
  store i8 %164, ptr %21, align 1, !tbaa !11
  %165 = load i8, ptr %18, align 1, !tbaa !11, !range !13, !noundef !14
  %166 = trunc i8 %165 to i1
  br i1 %166, label %210, label %167

167:                                              ; preds = %7
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %168 = load i32, ptr %10, align 4, !tbaa !9
  %169 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %168)
          to label %170 unwind label %186

170:                                              ; preds = %167
  store ptr %169, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #9
  %171 = load ptr, ptr %22, align 8, !tbaa !5
  %172 = icmp ne ptr %171, null
  br i1 %172, label %173, label %178

173:                                              ; preds = %170
  %174 = load ptr, ptr %22, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %174, i32 0, i32 6
  %176 = load i8, ptr %175, align 1, !tbaa !15, !range !13, !noundef !14
  %177 = trunc i8 %176 to i1
  br label %178

178:                                              ; preds = %173, %170
  %179 = phi i1 [ false, %170 ], [ %177, %173 ]
  %180 = zext i1 %179 to i8
  store i8 %180, ptr %25, align 1, !tbaa !11
  %181 = load ptr, ptr %22, align 8, !tbaa !5
  %182 = icmp ne ptr %181, null
  br i1 %182, label %183, label %190

183:                                              ; preds = %178
  %184 = load ptr, ptr %22, align 8, !tbaa !5
  %185 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %184, i32 0, i32 6
  store i8 0, ptr %185, align 1, !tbaa !15
  br label %190

186:                                              ; preds = %167
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %23, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %24, align 4
  br label %209

190:                                              ; preds = %183, %178
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #9
  %191 = load i32, ptr %10, align 4, !tbaa !9
  %192 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %193 = trunc i8 %192 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %191, i1 noundef zeroext %193)
          to label %194 unwind label %204

194:                                              ; preds = %190
  %195 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %26) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #9
  %196 = load ptr, ptr %22, align 8, !tbaa !5
  %197 = icmp ne ptr %196, null
  br i1 %197, label %198, label %208

198:                                              ; preds = %194
  %199 = load i8, ptr %25, align 1, !tbaa !11, !range !13, !noundef !14
  %200 = trunc i8 %199 to i1
  %201 = load ptr, ptr %22, align 8, !tbaa !5
  %202 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %201, i32 0, i32 6
  %203 = zext i1 %200 to i8
  store i8 %203, ptr %202, align 1, !tbaa !15
  br label %208

204:                                              ; preds = %190
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %23, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  br label %209

208:                                              ; preds = %198, %194
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %210

209:                                              ; preds = %204, %186
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %1937

210:                                              ; preds = %208, %7
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %211 = load i32, ptr %10, align 4, !tbaa !9
  %212 = invoke noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %211)
          to label %213 unwind label %227

213:                                              ; preds = %210
  store i32 %212, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %214 = load i32, ptr %27, align 4, !tbaa !9
  %215 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %214)
          to label %216 unwind label %231

216:                                              ; preds = %213
  store ptr %215, ptr %28, align 8, !tbaa !5
  %217 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %140, i32 0, i32 21
  %218 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %217, i32 0, i32 40
  %219 = load i8, ptr %218, align 1, !tbaa !26, !range !13, !noundef !14
  %220 = trunc i8 %219 to i1
  br i1 %220, label %254, label %221

221:                                              ; preds = %216
  %222 = load i8, ptr %19, align 1, !tbaa !11, !range !13, !noundef !14
  %223 = trunc i8 %222 to i1
  br i1 %223, label %224, label %239

224:                                              ; preds = %221
  %225 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %225, ptr noundef @.str.1349)
          to label %226 unwind label %235

226:                                              ; preds = %224
  invoke void @__cxa_throw(ptr %225, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %1945 unwind label %231

227:                                              ; preds = %210
  %228 = landingpad { ptr, i32 }
          cleanup
  %229 = extractvalue { ptr, i32 } %228, 0
  store ptr %229, ptr %23, align 8
  %230 = extractvalue { ptr, i32 } %228, 1
  store i32 %230, ptr %24, align 4
  br label %1936

231:                                              ; preds = %254, %239, %226, %213
  %232 = landingpad { ptr, i32 }
          cleanup
  %233 = extractvalue { ptr, i32 } %232, 0
  store ptr %233, ptr %23, align 8
  %234 = extractvalue { ptr, i32 } %232, 1
  store i32 %234, ptr %24, align 4
  br label %1935

235:                                              ; preds = %224
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %23, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %24, align 4
  call void @__cxa_free_exception(ptr %225) #9
  br label %1935

239:                                              ; preds = %221
  %240 = load i32, ptr %10, align 4, !tbaa !9
  %241 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18should_dereferenceEj(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %240)
          to label %242 unwind label %231

242:                                              ; preds = %239
  br i1 %241, label %243, label %253

243:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #9
  %244 = load i32, ptr %27, align 4, !tbaa !9
  %245 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %244)
          to label %246 unwind label %249

246:                                              ; preds = %243
  invoke void @_ZN11spirv_cross12CompilerGLSL22dereference_expressionERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %245, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %247 unwind label %249

247:                                              ; preds = %246
  %248 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  br label %253

249:                                              ; preds = %246, %243
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %23, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  br label %1935

253:                                              ; preds = %247, %242
  br label %281

254:                                              ; preds = %216
  %255 = load i32, ptr %10, align 4, !tbaa !9
  %256 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18should_dereferenceEj(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %255)
          to label %257 unwind label %231

257:                                              ; preds = %254
  br i1 %256, label %258, label %280

258:                                              ; preds = %257
  %259 = load ptr, ptr %28, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %259, i32 0, i32 2
  %261 = load i32, ptr %260, align 8, !tbaa !128
  %262 = icmp ne i32 %261, 15
  br i1 %262, label %263, label %280

263:                                              ; preds = %258
  %264 = load i8, ptr %19, align 1, !tbaa !11, !range !13, !noundef !14
  %265 = trunc i8 %264 to i1
  br i1 %265, label %280, label %266

266:                                              ; preds = %263
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #9
  %267 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22dereference_expressionERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %267, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %268 unwind label %271

268:                                              ; preds = %266
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %269 unwind label %275

269:                                              ; preds = %268
  %270 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %280

271:                                              ; preds = %266
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %23, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %24, align 4
  br label %279

275:                                              ; preds = %268
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %23, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  br label %279

279:                                              ; preds = %275, %271
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %1935

280:                                              ; preds = %269, %263, %258, %257
  br label %281

281:                                              ; preds = %280, %253
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #9
  %282 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 91, i64 noundef 0) #9
  %283 = icmp ne i64 %282, -1
  %284 = zext i1 %283 to i8
  store i8 %284, ptr %32, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #9
  %285 = load i32, ptr %10, align 4, !tbaa !9
  %286 = load ptr, ptr %140, align 8, !tbaa !139
  %287 = getelementptr inbounds ptr, ptr %286, i64 40
  %288 = load ptr, ptr %287, align 8
  %289 = invoke noundef zeroext i1 %288(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %285)
          to label %290 unwind label %324

290:                                              ; preds = %281
  %291 = zext i1 %289 to i8
  store i8 %291, ptr %33, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #9
  %292 = load i32, ptr %10, align 4, !tbaa !9
  %293 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %292, i32 noundef 2)
          to label %294 unwind label %328

294:                                              ; preds = %290
  %295 = zext i1 %293 to i8
  store i8 %295, ptr %34, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  %296 = load i32, ptr %10, align 4, !tbaa !9
  %297 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %296, i32 noundef 1)
          to label %298 unwind label %332

298:                                              ; preds = %294
  store i32 %297, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #9
  %299 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef %299)
          to label %300 unwind label %336

300:                                              ; preds = %298
  %301 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %37, i32 0, i32 0
  %302 = load i32, ptr %301, align 4
  %303 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %302, i32 noundef 18)
          to label %304 unwind label %336

304:                                              ; preds = %300
  %305 = zext i1 %303 to i8
  store i8 %305, ptr %36, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #9
  %306 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %39, i32 noundef %306)
          to label %307 unwind label %340

307:                                              ; preds = %304
  %308 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %39, i32 0, i32 0
  %309 = load i32, ptr %308, align 4
  %310 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %309, i32 noundef 0)
          to label %311 unwind label %340

311:                                              ; preds = %307
  %312 = zext i1 %310 to i8
  store i8 %312, ptr %38, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #9
  store i8 0, ptr %40, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #9
  store i8 0, ptr %41, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #9
  store i8 0, ptr %42, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #9
  store i8 0, ptr %43, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  store i32 0, ptr %44, align 4, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %313 = load i32, ptr %10, align 4, !tbaa !9
  %314 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %313)
          to label %315 unwind label %344

315:                                              ; preds = %311
  store ptr %314, ptr %45, align 8, !tbaa !5
  %316 = load ptr, ptr %45, align 8, !tbaa !5
  %317 = icmp ne ptr %316, null
  br i1 %317, label %318, label %348

318:                                              ; preds = %315
  %319 = load ptr, ptr %45, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %319, i32 0, i32 8
  %321 = load i8, ptr %320, align 1, !tbaa !143, !range !13, !noundef !14
  %322 = trunc i8 %321 to i1
  %323 = zext i1 %322 to i8
  store i8 %323, ptr %42, align 1, !tbaa !11
  br label %348

324:                                              ; preds = %281
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %23, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %24, align 4
  br label %1934

328:                                              ; preds = %290
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %23, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %24, align 4
  br label %1933

332:                                              ; preds = %294
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %23, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %24, align 4
  br label %1932

336:                                              ; preds = %300, %298
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %23, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %24, align 4
  br label %1931

340:                                              ; preds = %307, %304
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %23, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %24, align 4
  br label %1930

344:                                              ; preds = %311
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %23, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %1929

348:                                              ; preds = %318, %315
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #9
  %349 = load i32, ptr %12, align 4, !tbaa !9
  %350 = icmp ugt i32 %349, 1
  br i1 %350, label %351, label %358

351:                                              ; preds = %348
  %352 = load i32, ptr %10, align 4, !tbaa !9
  %353 = load ptr, ptr %140, align 8, !tbaa !139
  %354 = getelementptr inbounds ptr, ptr %353, i64 37
  %355 = load ptr, ptr %354, align 8
  %356 = invoke noundef zeroext i1 %355(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %352)
          to label %357 unwind label %373

357:                                              ; preds = %351
  br label %358

358:                                              ; preds = %357, %348
  %359 = phi i1 [ false, %348 ], [ %356, %357 ]
  %360 = zext i1 %359 to i8
  store i8 %360, ptr %46, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 56, ptr %47) #9
  %361 = getelementptr inbounds %class.anon.390, ptr %47, i32 0, i32 0
  store ptr %13, ptr %361, align 8, !tbaa !5
  %362 = getelementptr inbounds %class.anon.390, ptr %47, i32 0, i32 1
  store ptr %140, ptr %362, align 8, !tbaa !144
  %363 = getelementptr inbounds %class.anon.390, ptr %47, i32 0, i32 2
  store ptr %0, ptr %363, align 8, !tbaa !5
  %364 = getelementptr inbounds %class.anon.390, ptr %47, i32 0, i32 3
  store ptr %10, ptr %364, align 8, !tbaa !5
  %365 = getelementptr inbounds %class.anon.390, ptr %47, i32 0, i32 4
  store ptr %28, ptr %365, align 8, !tbaa !5
  %366 = getelementptr inbounds %class.anon.390, ptr %47, i32 0, i32 5
  store ptr %32, ptr %366, align 8, !tbaa !5
  %367 = getelementptr inbounds %class.anon.390, ptr %47, i32 0, i32 6
  store ptr %35, ptr %367, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %1867, %358
  %369 = load i32, ptr %48, align 4, !tbaa !9
  %370 = load i32, ptr %12, align 4, !tbaa !9
  %371 = icmp ult i32 %369, %370
  br i1 %371, label %377, label %372

372:                                              ; preds = %368
  store i32 2, ptr %49, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %1871

373:                                              ; preds = %351
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %23, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %24, align 4
  br label %1928

377:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  %378 = load ptr, ptr %11, align 8, !tbaa !5
  %379 = load i32, ptr %48, align 4, !tbaa !9
  %380 = zext i32 %379 to i64
  %381 = getelementptr inbounds i32, ptr %378, i64 %380
  %382 = load i32, ptr %381, align 4, !tbaa !9
  store i32 %382, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %51) #9
  %383 = load i8, ptr %16, align 1, !tbaa !11, !range !13, !noundef !14
  %384 = trunc i8 %383 to i1
  %385 = zext i1 %384 to i8
  store i8 %385, ptr %51, align 1, !tbaa !11
  %386 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %387 = trunc i8 %386 to i1
  br i1 %387, label %388, label %398

388:                                              ; preds = %377
  %389 = load i8, ptr %17, align 1, !tbaa !11, !range !13, !noundef !14
  %390 = trunc i8 %389 to i1
  br i1 %390, label %391, label %398

391:                                              ; preds = %388
  %392 = load i32, ptr %50, align 4, !tbaa !9
  %393 = lshr i32 %392, 31
  %394 = icmp ne i32 %393, 0
  br i1 %394, label %395, label %398

395:                                              ; preds = %391
  store i8 0, ptr %51, align 1, !tbaa !11
  %396 = load i32, ptr %50, align 4, !tbaa !9
  %397 = and i32 %396, 2147483647
  store i32 %397, ptr %50, align 4, !tbaa !9
  br label %398

398:                                              ; preds = %395, %391, %388, %377
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #9
  %399 = load i8, ptr %19, align 1, !tbaa !11, !range !13, !noundef !14
  %400 = trunc i8 %399 to i1
  br i1 %400, label %401, label %408

401:                                              ; preds = %398
  %402 = load i32, ptr %48, align 4, !tbaa !9
  %403 = icmp eq i32 %402, 0
  br i1 %403, label %404, label %408

404:                                              ; preds = %401
  %405 = load ptr, ptr %28, align 8, !tbaa !5
  %406 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %140, ptr noundef nonnull align 8 dereferenceable(336) %405)
          to label %407 unwind label %421

407:                                              ; preds = %404
  br label %408

408:                                              ; preds = %407, %401, %398
  %409 = phi i1 [ false, %401 ], [ false, %398 ], [ %406, %407 ]
  %410 = zext i1 %409 to i8
  store i8 %410, ptr %52, align 1, !tbaa !11
  %411 = load i8, ptr %52, align 1, !tbaa !11, !range !13, !noundef !14
  %412 = trunc i8 %411 to i1
  br i1 %412, label %413, label %435

413:                                              ; preds = %408
  %414 = load i32, ptr %10, align 4, !tbaa !9
  %415 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18should_dereferenceEj(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %414)
          to label %416 unwind label %421

416:                                              ; preds = %413
  br i1 %415, label %434, label %417

417:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL21address_of_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %418 unwind label %425

418:                                              ; preds = %417
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %419 unwind label %429

419:                                              ; preds = %418
  %420 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #9
  br label %434

421:                                              ; preds = %1856, %1470, %1466, %1440, %1406, %1398, %1390, %1383, %1378, %1374, %1368, %1364, %1356, %1352, %1344, %1340, %1189, %1162, %733, %729, %691, %687, %676, %553, %547, %457, %413, %404
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %23, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %24, align 4
  br label %1870

425:                                              ; preds = %417
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %23, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %24, align 4
  br label %433

429:                                              ; preds = %418
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %23, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #9
  br label %433

433:                                              ; preds = %429, %425
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #9
  br label %1870

434:                                              ; preds = %419, %416
  br label %435

435:                                              ; preds = %434, %408
  %436 = load i8, ptr %19, align 1, !tbaa !11, !range !13, !noundef !14
  %437 = trunc i8 %436 to i1
  br i1 %437, label %438, label %706

438:                                              ; preds = %435
  %439 = load i32, ptr %48, align 4, !tbaa !9
  %440 = icmp eq i32 %439, 0
  br i1 %440, label %441, label %706

441:                                              ; preds = %438
  %442 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %140, i32 0, i32 9
  %443 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %442, i32 0, i32 6
  %444 = load i8, ptr %443, align 2, !tbaa !146, !range !13, !noundef !14
  %445 = trunc i8 %444 to i1
  br i1 %445, label %446, label %461

446:                                              ; preds = %441
  %447 = load ptr, ptr %28, align 8, !tbaa !5
  %448 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %447, i32 0, i32 6
  %449 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %448) #9
  %450 = icmp uge i64 %449, 1
  %451 = zext i1 %450 to i8
  store i8 %451, ptr %41, align 1, !tbaa !11
  %452 = load i8, ptr %41, align 1, !tbaa !11, !range !13, !noundef !14
  %453 = trunc i8 %452 to i1
  %454 = zext i1 %453 to i8
  store i8 %454, ptr %40, align 1, !tbaa !11
  %455 = load i8, ptr %40, align 1, !tbaa !11, !range !13, !noundef !14
  %456 = trunc i8 %455 to i1
  br i1 %456, label %457, label %460

457:                                              ; preds = %446
  %458 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.308)
          to label %459 unwind label %421

459:                                              ; preds = %457
  br label %460

460:                                              ; preds = %459, %446
  br label %461

461:                                              ; preds = %460, %441
  %462 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %140, i32 0, i32 9
  %463 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %462, i32 0, i32 6
  %464 = load i8, ptr %463, align 2, !tbaa !146, !range !13, !noundef !14
  %465 = trunc i8 %464 to i1
  br i1 %465, label %466, label %557

466:                                              ; preds = %461
  %467 = load i8, ptr %41, align 1, !tbaa !11, !range !13, !noundef !14
  %468 = trunc i8 %467 to i1
  br i1 %468, label %469, label %557

469:                                              ; preds = %466
  %470 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %471 = trunc i8 %470 to i1
  br i1 %471, label %472, label %485

472:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %473 unwind label %476

473:                                              ; preds = %472
  %474 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %475 unwind label %480

475:                                              ; preds = %473
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #9
  br label %501

476:                                              ; preds = %472
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %23, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %24, align 4
  br label %484

480:                                              ; preds = %473
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %23, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  br label %484

484:                                              ; preds = %480, %476
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #9
  br label %1870

485:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #9
  %486 = load i32, ptr %50, align 4, !tbaa !9
  %487 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %488 = trunc i8 %487 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %486, i1 noundef zeroext %488)
          to label %489 unwind label %492

489:                                              ; preds = %485
  %490 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %491 unwind label %496

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

492:                                              ; preds = %485
  %493 = landingpad { ptr, i32 }
          cleanup
  %494 = extractvalue { ptr, i32 } %493, 0
  store ptr %494, ptr %23, align 8
  %495 = extractvalue { ptr, i32 } %493, 1
  store i32 %495, ptr %24, align 4
  br label %500

496:                                              ; preds = %489
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %23, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #9
  br label %500

500:                                              ; preds = %496, %492
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #9
  br label %1870

501:                                              ; preds = %491, %475
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  %502 = load ptr, ptr %28, align 8, !tbaa !5
  %503 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %502, i32 0, i32 6
  %504 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %503) #9
  %505 = trunc i64 %504 to i32
  store i32 %505, ptr %57, align 4, !tbaa !9
  br label %506

506:                                              ; preds = %520, %501
  %507 = load i32, ptr %57, align 4, !tbaa !9
  %508 = icmp ne i32 %507, 0
  br i1 %508, label %510, label %509

509:                                              ; preds = %506
  store i32 5, ptr %49, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  br label %542

510:                                              ; preds = %506
  %511 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.976)
          to label %512 unwind label %523

512:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #9
  %513 = load ptr, ptr %28, align 8, !tbaa !5
  %514 = load i32, ptr %57, align 4, !tbaa !9
  %515 = sub i32 %514, 1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_array_sizeB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %513, i32 noundef %515)
          to label %516 unwind label %527

516:                                              ; preds = %512
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %517 unwind label %531

517:                                              ; preds = %516
  %518 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %519 unwind label %535

519:                                              ; preds = %517
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #9
  br label %520

520:                                              ; preds = %519
  %521 = load i32, ptr %57, align 4, !tbaa !9
  %522 = add i32 %521, -1
  store i32 %522, ptr %57, align 4, !tbaa !9
  br label %506, !llvm.loop !147

523:                                              ; preds = %510
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %23, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %24, align 4
  br label %541

527:                                              ; preds = %512
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %23, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %24, align 4
  br label %540

531:                                              ; preds = %516
  %532 = landingpad { ptr, i32 }
          cleanup
  %533 = extractvalue { ptr, i32 } %532, 0
  store ptr %533, ptr %23, align 8
  %534 = extractvalue { ptr, i32 } %532, 1
  store i32 %534, ptr %24, align 4
  br label %539

535:                                              ; preds = %517
  %536 = landingpad { ptr, i32 }
          cleanup
  %537 = extractvalue { ptr, i32 } %536, 0
  store ptr %537, ptr %23, align 8
  %538 = extractvalue { ptr, i32 } %536, 1
  store i32 %538, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  br label %539

539:                                              ; preds = %535, %531
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  br label %540

540:                                              ; preds = %539, %527
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #9
  br label %541

541:                                              ; preds = %540, %523
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  br label %1870

542:                                              ; preds = %509
  %543 = load ptr, ptr %28, align 8, !tbaa !5
  %544 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %543, i32 0, i32 6
  %545 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %544) #9
  br i1 %545, label %546, label %547

546:                                              ; preds = %542
  store i8 0, ptr %40, align 1, !tbaa !11
  br label %550

547:                                              ; preds = %542
  %548 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1102)
          to label %549 unwind label %421

549:                                              ; preds = %547
  br label %550

550:                                              ; preds = %549, %546
  %551 = load i8, ptr %40, align 1, !tbaa !11, !range !13, !noundef !14
  %552 = trunc i8 %551 to i1
  br i1 %552, label %556, label %553

553:                                              ; preds = %550
  %554 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.713)
          to label %555 unwind label %421

555:                                              ; preds = %553
  br label %556

556:                                              ; preds = %555, %550
  br label %682

557:                                              ; preds = %466, %461
  %558 = load i32, ptr %13, align 4, !tbaa !9
  %559 = and i32 %558, 128
  %560 = icmp ne i32 %559, 0
  br i1 %560, label %561, label %676

561:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 336, ptr %60) #9
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %60, i32 noundef 21)
          to label %562 unwind label %604

562:                                              ; preds = %561
  %563 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %60, i32 0, i32 2
  store i32 10, ptr %563, align 8, !tbaa !128
  %564 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %60, i32 0, i32 3
  store i32 64, ptr %564, align 4, !tbaa !149
  %565 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %60, i32 0, i32 4
  store i32 1, ptr %565, align 8, !tbaa !150
  %566 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %60, i32 0, i32 5
  store i32 1, ptr %566, align 4, !tbaa !151
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  %567 = load i32, ptr %10, align 4, !tbaa !9
  %568 = invoke noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %567)
          to label %569 unwind label %608

569:                                              ; preds = %562
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %61, i32 noundef %568)
          to label %570 unwind label %608

570:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %571 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %61)
          to label %572 unwind label %612

572:                                              ; preds = %570
  %573 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %571)
          to label %574 unwind label %612

574:                                              ; preds = %572
  store ptr %573, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %575 = load ptr, ptr %62, align 8, !tbaa !5
  %576 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %140, ptr noundef nonnull align 8 dereferenceable(336) %575)
          to label %577 unwind label %616

577:                                              ; preds = %574
  store ptr %576, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #9
  %578 = load ptr, ptr %140, align 8, !tbaa !139
  %579 = getelementptr inbounds ptr, ptr %578, i64 19
  %580 = load ptr, ptr %579, align 8
  invoke void %580(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %60, i32 noundef 0)
          to label %581 unwind label %620

581:                                              ; preds = %577
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 1 dereferenceable(18) @.str.1350, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 1 dereferenceable(3) @.str.1351, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %582 unwind label %624

582:                                              ; preds = %581
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #9
  %583 = load i32, ptr %50, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %583, i1 noundef zeroext true)
          to label %584 unwind label %629

584:                                              ; preds = %582
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %69, ptr noundef nonnull align 4 dereferenceable(4) %61)
          to label %585 unwind label %633

585:                                              ; preds = %584
  %586 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %69, i32 0, i32 0
  %587 = load i32, ptr %586, align 4
  %588 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %587, i32 noundef 6)
          to label %589 unwind label %633

589:                                              ; preds = %585
  store i32 %588, ptr %68, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_jEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 1 dereferenceable(4) @.str.1102, ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 4 dereferenceable(4) %68)
          to label %590 unwind label %633

590:                                              ; preds = %589
  %591 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %592 unwind label %637

592:                                              ; preds = %590
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #9
  %593 = load i32, ptr %13, align 4, !tbaa !9
  %594 = and i32 %593, 256
  %595 = icmp ne i32 %594, 0
  br i1 %595, label %596, label %652

596:                                              ; preds = %592
  store i8 1, ptr %34, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #9
  %597 = load ptr, ptr %63, align 8, !tbaa !5
  %598 = load ptr, ptr %140, align 8, !tbaa !139
  %599 = getelementptr inbounds ptr, ptr %598, i64 19
  %600 = load ptr, ptr %599, align 8
  invoke void %600(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %597, i32 noundef 0)
          to label %601 unwind label %643

601:                                              ; preds = %596
  invoke void @_ZN11spirv_cross4joinIJRA33_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 1 dereferenceable(33) @.str.1352, ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef nonnull align 1 dereferenceable(5) @.str.1353, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %602 unwind label %647

602:                                              ; preds = %601
  %603 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %70) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #9
  br label %669

604:                                              ; preds = %561
  %605 = landingpad { ptr, i32 }
          cleanup
  %606 = extractvalue { ptr, i32 } %605, 0
  store ptr %606, ptr %23, align 8
  %607 = extractvalue { ptr, i32 } %605, 1
  store i32 %607, ptr %24, align 4
  br label %675

608:                                              ; preds = %569, %562
  %609 = landingpad { ptr, i32 }
          cleanup
  %610 = extractvalue { ptr, i32 } %609, 0
  store ptr %610, ptr %23, align 8
  %611 = extractvalue { ptr, i32 } %609, 1
  store i32 %611, ptr %24, align 4
  br label %674

612:                                              ; preds = %572, %570
  %613 = landingpad { ptr, i32 }
          cleanup
  %614 = extractvalue { ptr, i32 } %613, 0
  store ptr %614, ptr %23, align 8
  %615 = extractvalue { ptr, i32 } %613, 1
  store i32 %615, ptr %24, align 4
  br label %673

616:                                              ; preds = %574
  %617 = landingpad { ptr, i32 }
          cleanup
  %618 = extractvalue { ptr, i32 } %617, 0
  store ptr %618, ptr %23, align 8
  %619 = extractvalue { ptr, i32 } %617, 1
  store i32 %619, ptr %24, align 4
  br label %672

620:                                              ; preds = %577
  %621 = landingpad { ptr, i32 }
          cleanup
  %622 = extractvalue { ptr, i32 } %621, 0
  store ptr %622, ptr %23, align 8
  %623 = extractvalue { ptr, i32 } %621, 1
  store i32 %623, ptr %24, align 4
  br label %628

624:                                              ; preds = %581
  %625 = landingpad { ptr, i32 }
          cleanup
  %626 = extractvalue { ptr, i32 } %625, 0
  store ptr %626, ptr %23, align 8
  %627 = extractvalue { ptr, i32 } %625, 1
  store i32 %627, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #9
  br label %628

628:                                              ; preds = %624, %620
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #9
  br label %671

629:                                              ; preds = %582
  %630 = landingpad { ptr, i32 }
          cleanup
  %631 = extractvalue { ptr, i32 } %630, 0
  store ptr %631, ptr %23, align 8
  %632 = extractvalue { ptr, i32 } %630, 1
  store i32 %632, ptr %24, align 4
  br label %642

633:                                              ; preds = %589, %585, %584
  %634 = landingpad { ptr, i32 }
          cleanup
  %635 = extractvalue { ptr, i32 } %634, 0
  store ptr %635, ptr %23, align 8
  %636 = extractvalue { ptr, i32 } %634, 1
  store i32 %636, ptr %24, align 4
  br label %641

637:                                              ; preds = %590
  %638 = landingpad { ptr, i32 }
          cleanup
  %639 = extractvalue { ptr, i32 } %638, 0
  store ptr %639, ptr %23, align 8
  %640 = extractvalue { ptr, i32 } %638, 1
  store i32 %640, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #9
  br label %641

641:                                              ; preds = %637, %633
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #9
  br label %642

642:                                              ; preds = %641, %629
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #9
  br label %670

643:                                              ; preds = %596
  %644 = landingpad { ptr, i32 }
          cleanup
  %645 = extractvalue { ptr, i32 } %644, 0
  store ptr %645, ptr %23, align 8
  %646 = extractvalue { ptr, i32 } %644, 1
  store i32 %646, ptr %24, align 4
  br label %651

647:                                              ; preds = %601
  %648 = landingpad { ptr, i32 }
          cleanup
  %649 = extractvalue { ptr, i32 } %648, 0
  store ptr %649, ptr %23, align 8
  %650 = extractvalue { ptr, i32 } %648, 1
  store i32 %650, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #9
  br label %651

651:                                              ; preds = %647, %643
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #9
  br label %670

652:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #9
  %653 = load ptr, ptr %62, align 8, !tbaa !5
  %654 = load ptr, ptr %140, align 8, !tbaa !139
  %655 = getelementptr inbounds ptr, ptr %654, i64 19
  %656 = load ptr, ptr %655, align 8
  invoke void %656(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %653, i32 noundef 0)
          to label %657 unwind label %660

657:                                              ; preds = %652
  invoke void @_ZN11spirv_cross4joinIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 1 dereferenceable(19) @.str.1354, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 1 dereferenceable(3) @.str.1351, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %658 unwind label %664

658:                                              ; preds = %657
  %659 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %72) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #9
  br label %669

660:                                              ; preds = %652
  %661 = landingpad { ptr, i32 }
          cleanup
  %662 = extractvalue { ptr, i32 } %661, 0
  store ptr %662, ptr %23, align 8
  %663 = extractvalue { ptr, i32 } %661, 1
  store i32 %663, ptr %24, align 4
  br label %668

664:                                              ; preds = %657
  %665 = landingpad { ptr, i32 }
          cleanup
  %666 = extractvalue { ptr, i32 } %665, 0
  store ptr %666, ptr %23, align 8
  %667 = extractvalue { ptr, i32 } %665, 1
  store i32 %667, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  br label %668

668:                                              ; preds = %664, %660
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #9
  br label %670

669:                                              ; preds = %658, %602
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %60) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %60) #9
  br label %681

670:                                              ; preds = %668, %651, %642
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #9
  br label %671

671:                                              ; preds = %670, %628
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #9
  br label %672

672:                                              ; preds = %671, %616
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  br label %673

673:                                              ; preds = %672, %612
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  br label %674

674:                                              ; preds = %673, %608
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %60) #9
  br label %675

675:                                              ; preds = %674, %604
  call void @llvm.lifetime.end.p0(i64 336, ptr %60) #9
  br label %1870

676:                                              ; preds = %557
  %677 = load i32, ptr %50, align 4, !tbaa !9
  %678 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %679 = trunc i8 %678 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %47, i32 noundef %677, i1 noundef zeroext %679, i1 noundef zeroext true)
          to label %680 unwind label %421

680:                                              ; preds = %676
  br label %681

681:                                              ; preds = %680, %669
  br label %682

682:                                              ; preds = %681, %556
  %683 = load ptr, ptr %28, align 8, !tbaa !5
  %684 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %683, i32 0, i32 2
  %685 = load i32, ptr %684, align 8, !tbaa !128
  %686 = icmp eq i32 %685, 21
  br i1 %686, label %687, label %695

687:                                              ; preds = %682
  %688 = load ptr, ptr %28, align 8, !tbaa !5
  %689 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %688, i32 0, i32 16
  %690 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %689)
          to label %691 unwind label %421

691:                                              ; preds = %687
  store i32 %690, ptr %27, align 4, !tbaa !9
  %692 = load i32, ptr %27, align 4, !tbaa !9
  %693 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %692)
          to label %694 unwind label %421

694:                                              ; preds = %691
  store ptr %693, ptr %28, align 8, !tbaa !5
  br label %695

695:                                              ; preds = %694, %682
  store i8 1, ptr %32, align 1, !tbaa !11
  %696 = load i8, ptr %52, align 1, !tbaa !11, !range !13, !noundef !14
  %697 = trunc i8 %696 to i1
  br i1 %697, label %698, label %705

698:                                              ; preds = %695
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #9
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %699 unwind label %701

699:                                              ; preds = %698
  %700 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %74) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #9
  br label %705

701:                                              ; preds = %698
  %702 = landingpad { ptr, i32 }
          cleanup
  %703 = extractvalue { ptr, i32 } %702, 0
  store ptr %703, ptr %23, align 8
  %704 = extractvalue { ptr, i32 } %702, 1
  store i32 %704, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #9
  br label %1870

705:                                              ; preds = %699, %695
  br label %1866

706:                                              ; preds = %438, %435
  %707 = load ptr, ptr %28, align 8, !tbaa !5
  %708 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %707, i32 0, i32 6
  %709 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %708) #9
  br i1 %709, label %1154, label %710

710:                                              ; preds = %706
  %711 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %140, i32 0, i32 9
  %712 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %711, i32 0, i32 6
  %713 = load i8, ptr %712, align 2, !tbaa !146, !range !13, !noundef !14
  %714 = trunc i8 %713 to i1
  br i1 %714, label %715, label %733

715:                                              ; preds = %710
  %716 = load i8, ptr %40, align 1, !tbaa !11, !range !13, !noundef !14
  %717 = trunc i8 %716 to i1
  br i1 %717, label %733, label %718

718:                                              ; preds = %715
  %719 = load ptr, ptr %28, align 8, !tbaa !5
  %720 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %719, i32 0, i32 6
  %721 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %720) #9
  %722 = icmp ugt i64 %721, 1
  %723 = zext i1 %722 to i8
  store i8 %723, ptr %41, align 1, !tbaa !11
  %724 = load i8, ptr %41, align 1, !tbaa !11, !range !13, !noundef !14
  %725 = trunc i8 %724 to i1
  %726 = zext i1 %725 to i8
  store i8 %726, ptr %40, align 1, !tbaa !11
  %727 = load i8, ptr %40, align 1, !tbaa !11, !range !13, !noundef !14
  %728 = trunc i8 %727 to i1
  br i1 %728, label %729, label %732

729:                                              ; preds = %718
  %730 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.308)
          to label %731 unwind label %421

731:                                              ; preds = %729
  br label %732

732:                                              ; preds = %731, %718
  br label %733

733:                                              ; preds = %732, %715, %710
  %734 = load ptr, ptr %28, align 8, !tbaa !5
  %735 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %734, i32 0, i32 16
  %736 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %735)
          to label %737 unwind label %421

737:                                              ; preds = %733
  %738 = icmp ne i32 %736, 0
  br i1 %738, label %739, label %740

739:                                              ; preds = %737
  br label %742

740:                                              ; preds = %737
  call void @__assert_fail(ptr noundef @.str.1355, ptr noundef @.str.11, i32 noundef 10357, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE) #11
  unreachable

741:                                              ; No predecessors!
  br label %742

742:                                              ; preds = %741, %739
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %743 = load i32, ptr %10, align 4, !tbaa !9
  %744 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %743)
          to label %745 unwind label %783

745:                                              ; preds = %742
  store ptr %744, ptr %75, align 8, !tbaa !5
  %746 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %140, i32 0, i32 21
  %747 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %746, i32 0, i32 31
  %748 = load i8, ptr %747, align 8, !tbaa !152, !range !13, !noundef !14
  %749 = trunc i8 %748 to i1
  br i1 %749, label %750, label %908

750:                                              ; preds = %745
  %751 = load i32, ptr %48, align 4, !tbaa !9
  %752 = icmp eq i32 %751, 0
  br i1 %752, label %753, label %908

753:                                              ; preds = %750
  %754 = load ptr, ptr %75, align 8, !tbaa !5
  %755 = icmp ne ptr %754, null
  br i1 %755, label %756, label %908

756:                                              ; preds = %753
  %757 = load ptr, ptr %75, align 8, !tbaa !5
  %758 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %140, ptr noundef nonnull align 8 dereferenceable(176) %757)
          to label %759 unwind label %783

759:                                              ; preds = %756
  br i1 %758, label %760, label %908

760:                                              ; preds = %759
  %761 = load ptr, ptr %28, align 8, !tbaa !5
  %762 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %761, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %76, ptr align 8 %762, i64 4, i1 false), !tbaa.struct !153
  %763 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %76, i32 0, i32 0
  %764 = load i32, ptr %763, align 4
  %765 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %764, i32 noundef 2)
          to label %766 unwind label %783

766:                                              ; preds = %760
  br i1 %765, label %908, label %767

767:                                              ; preds = %766
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #9
  %768 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %140, i32 0, i32 1
  %769 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %768, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  %770 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %78, i32 noundef %770)
          to label %771 unwind label %787

771:                                              ; preds = %767
  %772 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %769, ptr noundef nonnull align 4 dereferenceable(4) %78)
          to label %773 unwind label %787

773:                                              ; preds = %771
  %774 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %772, i32 0, i32 0
  %775 = getelementptr inbounds %"struct.spirv_cross::Meta::Decoration", ptr %774, i32 0, i32 5
  %776 = load i32, ptr %775, align 8, !tbaa !154
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  store i32 %776, ptr %77, align 4, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 1, ptr %79) #9
  %777 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %140)
          to label %778 unwind label %791

778:                                              ; preds = %773
  %779 = icmp eq i32 %777, 5365
  %780 = zext i1 %779 to i8
  store i8 %780, ptr %79, align 1, !tbaa !11
  store i8 1, ptr %43, align 1, !tbaa !11
  %781 = load i32, ptr %77, align 4, !tbaa !141
  store i32 %781, ptr %44, align 4, !tbaa !141
  %782 = load i32, ptr %77, align 4, !tbaa !141
  switch i32 %782, label %900 [
    i32 4, label %795
    i32 3, label %795
    i32 0, label %806
    i32 1, label %806
    i32 7, label %875
    i32 9, label %875
    i32 10, label %875
    i32 5299, label %875
    i32 4432, label %875
  ]

783:                                              ; preds = %1132, %1128, %1122, %1118, %1113, %1105, %1098, %1087, %1081, %1077, %1075, %928, %919, %760, %756, %742
  %784 = landingpad { ptr, i32 }
          cleanup
  %785 = extractvalue { ptr, i32 } %784, 0
  store ptr %785, ptr %23, align 8
  %786 = extractvalue { ptr, i32 } %784, 1
  store i32 %786, ptr %24, align 4
  br label %1153

787:                                              ; preds = %771, %767
  %788 = landingpad { ptr, i32 }
          cleanup
  %789 = extractvalue { ptr, i32 } %788, 0
  store ptr %789, ptr %23, align 8
  %790 = extractvalue { ptr, i32 } %788, 1
  store i32 %790, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  br label %907

791:                                              ; preds = %900, %894, %867, %800, %773
  %792 = landingpad { ptr, i32 }
          cleanup
  %793 = extractvalue { ptr, i32 } %792, 0
  store ptr %793, ptr %23, align 8
  %794 = extractvalue { ptr, i32 } %792, 1
  store i32 %794, ptr %24, align 4
  br label %906

795:                                              ; preds = %778, %778
  %796 = load ptr, ptr %28, align 8, !tbaa !5
  %797 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %796, i32 0, i32 6
  %798 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %797) #9
  %799 = icmp eq i64 %798, 1
  br i1 %799, label %800, label %805

800:                                              ; preds = %795
  %801 = load i32, ptr %50, align 4, !tbaa !9
  %802 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %803 = trunc i8 %802 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %47, i32 noundef %801, i1 noundef zeroext %803, i1 noundef zeroext false)
          to label %804 unwind label %791

804:                                              ; preds = %800
  br label %905

805:                                              ; preds = %795
  br label %806

806:                                              ; preds = %805, %778, %778
  %807 = load i8, ptr %79, align 1, !tbaa !11, !range !13, !noundef !14
  %808 = trunc i8 %807 to i1
  br i1 %808, label %809, label %825

809:                                              ; preds = %806
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #9
  %810 = load i32, ptr %50, align 4, !tbaa !9
  %811 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %812 = trunc i8 %811 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %810, i1 noundef zeroext %812)
          to label %813 unwind label %816

813:                                              ; preds = %809
  invoke void @_ZN11spirv_cross4joinIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 1 dereferenceable(20) @.str.1356, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %814 unwind label %820

814:                                              ; preds = %813
  %815 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %80) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #9
  br label %874

816:                                              ; preds = %809
  %817 = landingpad { ptr, i32 }
          cleanup
  %818 = extractvalue { ptr, i32 } %817, 0
  store ptr %818, ptr %23, align 8
  %819 = extractvalue { ptr, i32 } %817, 1
  store i32 %819, ptr %24, align 4
  br label %824

820:                                              ; preds = %813
  %821 = landingpad { ptr, i32 }
          cleanup
  %822 = extractvalue { ptr, i32 } %821, 0
  store ptr %822, ptr %23, align 8
  %823 = extractvalue { ptr, i32 } %821, 1
  store i32 %823, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #9
  br label %824

824:                                              ; preds = %820, %816
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #9
  br label %906

825:                                              ; preds = %806
  %826 = load ptr, ptr %75, align 8, !tbaa !5
  %827 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %826, i32 0, i32 2
  %828 = load i32, ptr %827, align 8, !tbaa !162
  %829 = icmp eq i32 %828, 1
  br i1 %829, label %830, label %846

830:                                              ; preds = %825
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #9
  %831 = load i32, ptr %50, align 4, !tbaa !9
  %832 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %833 = trunc i8 %832 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %831, i1 noundef zeroext %833)
          to label %834 unwind label %837

834:                                              ; preds = %830
  invoke void @_ZN11spirv_cross4joinIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 1 dereferenceable(7) @.str.1358, ptr noundef nonnull align 8 dereferenceable(32) %83, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %835 unwind label %841

835:                                              ; preds = %834
  %836 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  br label %873

837:                                              ; preds = %830
  %838 = landingpad { ptr, i32 }
          cleanup
  %839 = extractvalue { ptr, i32 } %838, 0
  store ptr %839, ptr %23, align 8
  %840 = extractvalue { ptr, i32 } %838, 1
  store i32 %840, ptr %24, align 4
  br label %845

841:                                              ; preds = %834
  %842 = landingpad { ptr, i32 }
          cleanup
  %843 = extractvalue { ptr, i32 } %842, 0
  store ptr %843, ptr %23, align 8
  %844 = extractvalue { ptr, i32 } %842, 1
  store i32 %844, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #9
  br label %845

845:                                              ; preds = %841, %837
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  br label %906

846:                                              ; preds = %825
  %847 = load ptr, ptr %75, align 8, !tbaa !5
  %848 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %847, i32 0, i32 2
  %849 = load i32, ptr %848, align 8, !tbaa !162
  %850 = icmp eq i32 %849, 3
  br i1 %850, label %851, label %867

851:                                              ; preds = %846
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #9
  %852 = load i32, ptr %50, align 4, !tbaa !9
  %853 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %854 = trunc i8 %853 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %852, i1 noundef zeroext %854)
          to label %855 unwind label %858

855:                                              ; preds = %851
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %856 unwind label %862

856:                                              ; preds = %855
  %857 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %84) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #9
  br label %872

858:                                              ; preds = %851
  %859 = landingpad { ptr, i32 }
          cleanup
  %860 = extractvalue { ptr, i32 } %859, 0
  store ptr %860, ptr %23, align 8
  %861 = extractvalue { ptr, i32 } %859, 1
  store i32 %861, ptr %24, align 4
  br label %866

862:                                              ; preds = %855
  %863 = landingpad { ptr, i32 }
          cleanup
  %864 = extractvalue { ptr, i32 } %863, 0
  store ptr %864, ptr %23, align 8
  %865 = extractvalue { ptr, i32 } %863, 1
  store i32 %865, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #9
  br label %866

866:                                              ; preds = %862, %858
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #9
  br label %906

867:                                              ; preds = %846
  %868 = load i32, ptr %50, align 4, !tbaa !9
  %869 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %870 = trunc i8 %869 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %47, i32 noundef %868, i1 noundef zeroext %870, i1 noundef zeroext false)
          to label %871 unwind label %791

871:                                              ; preds = %867
  br label %872

872:                                              ; preds = %871, %856
  br label %873

873:                                              ; preds = %872, %835
  br label %874

874:                                              ; preds = %873, %814
  br label %905

875:                                              ; preds = %778, %778, %778, %778, %778
  %876 = load i8, ptr %79, align 1, !tbaa !11, !range !13, !noundef !14
  %877 = trunc i8 %876 to i1
  br i1 %877, label %878, label %894

878:                                              ; preds = %875
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #9
  %879 = load i32, ptr %50, align 4, !tbaa !9
  %880 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %881 = trunc i8 %880 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %879, i1 noundef zeroext %881)
          to label %882 unwind label %885

882:                                              ; preds = %878
  invoke void @_ZN11spirv_cross4joinIJRA22_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 1 dereferenceable(22) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %883 unwind label %889

883:                                              ; preds = %882
  %884 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %86) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #9
  br label %899

885:                                              ; preds = %878
  %886 = landingpad { ptr, i32 }
          cleanup
  %887 = extractvalue { ptr, i32 } %886, 0
  store ptr %887, ptr %23, align 8
  %888 = extractvalue { ptr, i32 } %886, 1
  store i32 %888, ptr %24, align 4
  br label %893

889:                                              ; preds = %882
  %890 = landingpad { ptr, i32 }
          cleanup
  %891 = extractvalue { ptr, i32 } %890, 0
  store ptr %891, ptr %23, align 8
  %892 = extractvalue { ptr, i32 } %890, 1
  store i32 %892, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #9
  br label %893

893:                                              ; preds = %889, %885
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #9
  br label %906

894:                                              ; preds = %875
  %895 = load i32, ptr %50, align 4, !tbaa !9
  %896 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %897 = trunc i8 %896 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %47, i32 noundef %895, i1 noundef zeroext %897, i1 noundef zeroext false)
          to label %898 unwind label %791

898:                                              ; preds = %894
  br label %899

899:                                              ; preds = %898, %883
  br label %905

900:                                              ; preds = %778
  %901 = load i32, ptr %50, align 4, !tbaa !9
  %902 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %903 = trunc i8 %902 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %47, i32 noundef %901, i1 noundef zeroext %903, i1 noundef zeroext false)
          to label %904 unwind label %791

904:                                              ; preds = %900
  br label %905

905:                                              ; preds = %904, %899, %874, %804
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #9
  br label %1095

906:                                              ; preds = %893, %866, %845, %824, %791
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #9
  br label %907

907:                                              ; preds = %906, %787
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #9
  br label %1153

908:                                              ; preds = %766, %759, %753, %750, %745
  %909 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %140, i32 0, i32 21
  %910 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %909, i32 0, i32 32
  %911 = load i8, ptr %910, align 1, !tbaa !166, !range !13, !noundef !14
  %912 = trunc i8 %911 to i1
  br i1 %912, label %913, label %965

913:                                              ; preds = %908
  %914 = load i32, ptr %48, align 4, !tbaa !9
  %915 = icmp eq i32 %914, 0
  br i1 %915, label %916, label %965

916:                                              ; preds = %913
  %917 = load ptr, ptr %75, align 8, !tbaa !5
  %918 = icmp ne ptr %917, null
  br i1 %918, label %919, label %965

919:                                              ; preds = %916
  %920 = load ptr, ptr %75, align 8, !tbaa !5
  %921 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %140, ptr noundef nonnull align 8 dereferenceable(176) %920)
          to label %922 unwind label %783

922:                                              ; preds = %919
  br i1 %921, label %965, label %923

923:                                              ; preds = %922
  %924 = load ptr, ptr %75, align 8, !tbaa !5
  %925 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %924, i32 0, i32 2
  %926 = load i32, ptr %925, align 8, !tbaa !162
  %927 = icmp eq i32 %926, 3
  br i1 %927, label %928, label %965

928:                                              ; preds = %923
  %929 = load ptr, ptr %75, align 8, !tbaa !5
  %930 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL25is_per_primitive_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(176) %929)
          to label %931 unwind label %783

931:                                              ; preds = %928
  br i1 %930, label %932, label %948

932:                                              ; preds = %931
  call void @llvm.lifetime.start.p0(i64 32, ptr %88) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #9
  %933 = load i32, ptr %50, align 4, !tbaa !9
  %934 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %935 = trunc i8 %934 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %933, i1 noundef zeroext %935)
          to label %936 unwind label %939

936:                                              ; preds = %932
  invoke void @_ZN11spirv_cross4joinIJRA22_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %88, ptr noundef nonnull align 1 dereferenceable(22) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %89, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %937 unwind label %943

937:                                              ; preds = %936
  %938 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %88) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #9
  br label %964

939:                                              ; preds = %932
  %940 = landingpad { ptr, i32 }
          cleanup
  %941 = extractvalue { ptr, i32 } %940, 0
  store ptr %941, ptr %23, align 8
  %942 = extractvalue { ptr, i32 } %940, 1
  store i32 %942, ptr %24, align 4
  br label %947

943:                                              ; preds = %936
  %944 = landingpad { ptr, i32 }
          cleanup
  %945 = extractvalue { ptr, i32 } %944, 0
  store ptr %945, ptr %23, align 8
  %946 = extractvalue { ptr, i32 } %944, 1
  store i32 %946, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #9
  br label %947

947:                                              ; preds = %943, %939
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #9
  br label %1153

948:                                              ; preds = %931
  call void @llvm.lifetime.start.p0(i64 32, ptr %90) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #9
  %949 = load i32, ptr %50, align 4, !tbaa !9
  %950 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %951 = trunc i8 %950 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %949, i1 noundef zeroext %951)
          to label %952 unwind label %955

952:                                              ; preds = %948
  invoke void @_ZN11spirv_cross4joinIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 1 dereferenceable(20) @.str.1356, ptr noundef nonnull align 8 dereferenceable(32) %91, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %953 unwind label %959

953:                                              ; preds = %952
  %954 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %90) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #9
  br label %964

955:                                              ; preds = %948
  %956 = landingpad { ptr, i32 }
          cleanup
  %957 = extractvalue { ptr, i32 } %956, 0
  store ptr %957, ptr %23, align 8
  %958 = extractvalue { ptr, i32 } %956, 1
  store i32 %958, ptr %24, align 4
  br label %963

959:                                              ; preds = %952
  %960 = landingpad { ptr, i32 }
          cleanup
  %961 = extractvalue { ptr, i32 } %960, 0
  store ptr %961, ptr %23, align 8
  %962 = extractvalue { ptr, i32 } %960, 1
  store i32 %962, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #9
  br label %963

963:                                              ; preds = %959, %955
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #9
  br label %1153

964:                                              ; preds = %953, %937
  br label %1094

965:                                              ; preds = %923, %922, %916, %913, %908
  %966 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %140, i32 0, i32 9
  %967 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %966, i32 0, i32 6
  %968 = load i8, ptr %967, align 2, !tbaa !146, !range !13, !noundef !14
  %969 = trunc i8 %968 to i1
  br i1 %969, label %970, label %1072

970:                                              ; preds = %965
  %971 = load i8, ptr %41, align 1, !tbaa !11, !range !13, !noundef !14
  %972 = trunc i8 %971 to i1
  br i1 %972, label %973, label %1072

973:                                              ; preds = %970
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #9
  %974 = load ptr, ptr %28, align 8, !tbaa !5
  %975 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %974, i32 0, i32 16
  %976 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %975)
          to label %977 unwind label %986

977:                                              ; preds = %973
  %978 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %976)
          to label %979 unwind label %986

979:                                              ; preds = %977
  store ptr %978, ptr %92, align 8, !tbaa !5
  %980 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %981 = trunc i8 %980 to i1
  br i1 %981, label %982, label %999

982:                                              ; preds = %979
  call void @llvm.lifetime.start.p0(i64 32, ptr %93) #9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %983 unwind label %990

983:                                              ; preds = %982
  %984 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %93)
          to label %985 unwind label %994

985:                                              ; preds = %983
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #9
  br label %1015

986:                                              ; preds = %1067, %1061, %977, %973
  %987 = landingpad { ptr, i32 }
          cleanup
  %988 = extractvalue { ptr, i32 } %987, 0
  store ptr %988, ptr %23, align 8
  %989 = extractvalue { ptr, i32 } %987, 1
  store i32 %989, ptr %24, align 4
  br label %1071

990:                                              ; preds = %982
  %991 = landingpad { ptr, i32 }
          cleanup
  %992 = extractvalue { ptr, i32 } %991, 0
  store ptr %992, ptr %23, align 8
  %993 = extractvalue { ptr, i32 } %991, 1
  store i32 %993, ptr %24, align 4
  br label %998

994:                                              ; preds = %983
  %995 = landingpad { ptr, i32 }
          cleanup
  %996 = extractvalue { ptr, i32 } %995, 0
  store ptr %996, ptr %23, align 8
  %997 = extractvalue { ptr, i32 } %995, 1
  store i32 %997, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #9
  br label %998

998:                                              ; preds = %994, %990
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #9
  br label %1071

999:                                              ; preds = %979
  call void @llvm.lifetime.start.p0(i64 32, ptr %94) #9
  %1000 = load i32, ptr %50, align 4, !tbaa !9
  %1001 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %1002 = trunc i8 %1001 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1000, i1 noundef zeroext %1002)
          to label %1003 unwind label %1006

1003:                                             ; preds = %999
  %1004 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %94)
          to label %1005 unwind label %1010

1005:                                             ; preds = %1003
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #9
  br label %1015

1006:                                             ; preds = %999
  %1007 = landingpad { ptr, i32 }
          cleanup
  %1008 = extractvalue { ptr, i32 } %1007, 0
  store ptr %1008, ptr %23, align 8
  %1009 = extractvalue { ptr, i32 } %1007, 1
  store i32 %1009, ptr %24, align 4
  br label %1014

1010:                                             ; preds = %1003
  %1011 = landingpad { ptr, i32 }
          cleanup
  %1012 = extractvalue { ptr, i32 } %1011, 0
  store ptr %1012, ptr %23, align 8
  %1013 = extractvalue { ptr, i32 } %1011, 1
  store i32 %1013, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #9
  br label %1014

1014:                                             ; preds = %1010, %1006
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #9
  br label %1071

1015:                                             ; preds = %1005, %985
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #9
  %1016 = load ptr, ptr %92, align 8, !tbaa !5
  %1017 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1016, i32 0, i32 6
  %1018 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1017) #9
  %1019 = trunc i64 %1018 to i32
  store i32 %1019, ptr %95, align 4, !tbaa !9
  br label %1020

1020:                                             ; preds = %1034, %1015
  %1021 = load i32, ptr %95, align 4, !tbaa !9
  %1022 = icmp ne i32 %1021, 0
  br i1 %1022, label %1024, label %1023

1023:                                             ; preds = %1020
  store i32 9, ptr %49, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1056

1024:                                             ; preds = %1020
  %1025 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.976)
          to label %1026 unwind label %1037

1026:                                             ; preds = %1024
  call void @llvm.lifetime.start.p0(i64 32, ptr %96) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %97) #9
  %1027 = load ptr, ptr %92, align 8, !tbaa !5
  %1028 = load i32, ptr %95, align 4, !tbaa !9
  %1029 = sub i32 %1028, 1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_array_sizeB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %97, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %1027, i32 noundef %1029)
          to label %1030 unwind label %1041

1030:                                             ; preds = %1026
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(32) %97)
          to label %1031 unwind label %1045

1031:                                             ; preds = %1030
  %1032 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %96)
          to label %1033 unwind label %1049

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

1034:                                             ; preds = %1033
  %1035 = load i32, ptr %95, align 4, !tbaa !9
  %1036 = add i32 %1035, -1
  store i32 %1036, ptr %95, align 4, !tbaa !9
  br label %1020, !llvm.loop !167

1037:                                             ; preds = %1024
  %1038 = landingpad { ptr, i32 }
          cleanup
  %1039 = extractvalue { ptr, i32 } %1038, 0
  store ptr %1039, ptr %23, align 8
  %1040 = extractvalue { ptr, i32 } %1038, 1
  store i32 %1040, ptr %24, align 4
  br label %1055

1041:                                             ; preds = %1026
  %1042 = landingpad { ptr, i32 }
          cleanup
  %1043 = extractvalue { ptr, i32 } %1042, 0
  store ptr %1043, ptr %23, align 8
  %1044 = extractvalue { ptr, i32 } %1042, 1
  store i32 %1044, ptr %24, align 4
  br label %1054

1045:                                             ; preds = %1030
  %1046 = landingpad { ptr, i32 }
          cleanup
  %1047 = extractvalue { ptr, i32 } %1046, 0
  store ptr %1047, ptr %23, align 8
  %1048 = extractvalue { ptr, i32 } %1046, 1
  store i32 %1048, ptr %24, align 4
  br label %1053

1049:                                             ; preds = %1031
  %1050 = landingpad { ptr, i32 }
          cleanup
  %1051 = extractvalue { ptr, i32 } %1050, 0
  store ptr %1051, ptr %23, align 8
  %1052 = extractvalue { ptr, i32 } %1050, 1
  store i32 %1052, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #9
  br label %1053

1053:                                             ; preds = %1049, %1045
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #9
  br label %1054

1054:                                             ; preds = %1053, %1041
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #9
  br label %1055

1055:                                             ; preds = %1054, %1037
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1071

1056:                                             ; preds = %1023
  %1057 = load ptr, ptr %92, align 8, !tbaa !5
  %1058 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1057, i32 0, i32 6
  %1059 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1058) #9
  br i1 %1059, label %1060, label %1061

1060:                                             ; preds = %1056
  store i8 0, ptr %40, align 1, !tbaa !11
  br label %1064

1061:                                             ; preds = %1056
  %1062 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1102)
          to label %1063 unwind label %986

1063:                                             ; preds = %1061
  br label %1064

1064:                                             ; preds = %1063, %1060
  %1065 = load i8, ptr %40, align 1, !tbaa !11, !range !13, !noundef !14
  %1066 = trunc i8 %1065 to i1
  br i1 %1066, label %1070, label %1067

1067:                                             ; preds = %1064
  %1068 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.713)
          to label %1069 unwind label %986

1069:                                             ; preds = %1067
  br label %1070

1070:                                             ; preds = %1069, %1064
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #9
  br label %1093

1071:                                             ; preds = %1055, %1014, %998, %986
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #9
  br label %1153

1072:                                             ; preds = %970, %965
  %1073 = load i8, ptr %16, align 1, !tbaa !11, !range !13, !noundef !14
  %1074 = trunc i8 %1073 to i1
  br i1 %1074, label %1087, label %1075

1075:                                             ; preds = %1072
  %1076 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %98, i32 noundef %1076)
          to label %1077 unwind label %783

1077:                                             ; preds = %1075
  %1078 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %98, i32 0, i32 0
  %1079 = load i32, ptr %1078, align 4
  %1080 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %1079, i32 noundef 11)
          to label %1081 unwind label %783

1081:                                             ; preds = %1077
  %1082 = load ptr, ptr %140, align 8, !tbaa !139
  %1083 = getelementptr inbounds ptr, ptr %1082, i64 36
  %1084 = load ptr, ptr %1083, align 8
  %1085 = invoke noundef zeroext i1 %1084(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1080)
          to label %1086 unwind label %783

1086:                                             ; preds = %1081
  br i1 %1085, label %1092, label %1087

1087:                                             ; preds = %1086, %1072
  %1088 = load i32, ptr %50, align 4, !tbaa !9
  %1089 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %1090 = trunc i8 %1089 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %47, i32 noundef %1088, i1 noundef zeroext %1090, i1 noundef zeroext false)
          to label %1091 unwind label %783

1091:                                             ; preds = %1087
  br label %1092

1092:                                             ; preds = %1091, %1086
  br label %1093

1093:                                             ; preds = %1092, %1070
  br label %1094

1094:                                             ; preds = %1093, %964
  br label %1095

1095:                                             ; preds = %1094, %905
  %1096 = load ptr, ptr %75, align 8, !tbaa !5
  %1097 = icmp ne ptr %1096, null
  br i1 %1097, label %1098, label %1118

1098:                                             ; preds = %1095
  %1099 = load ptr, ptr %75, align 8, !tbaa !5
  %1100 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1099, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %99, ptr align 8 %1100, i64 4, i1 false), !tbaa.struct !153
  %1101 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %99, i32 0, i32 0
  %1102 = load i32, ptr %1101, align 4
  %1103 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %1102, i32 noundef 11)
          to label %1104 unwind label %783

1104:                                             ; preds = %1098
  br i1 %1103, label %1105, label %1118

1105:                                             ; preds = %1104
  %1106 = load ptr, ptr %75, align 8, !tbaa !5
  %1107 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1106, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %100, ptr align 8 %1107, i64 4, i1 false), !tbaa.struct !153
  %1108 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %100, i32 0, i32 0
  %1109 = load i32, ptr %1108, align 4
  %1110 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %1109, i32 noundef 11)
          to label %1111 unwind label %783

1111:                                             ; preds = %1105
  %1112 = icmp eq i32 %1110, 0
  br i1 %1112, label %1113, label %1118

1113:                                             ; preds = %1111
  %1114 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %140)
          to label %1115 unwind label %783

1115:                                             ; preds = %1113
  %1116 = icmp eq i32 %1114, 5365
  br i1 %1116, label %1117, label %1118

1117:                                             ; preds = %1115
  store i8 1, ptr %42, align 1, !tbaa !11
  br label %1118

1118:                                             ; preds = %1117, %1115, %1111, %1104, %1095
  %1119 = load ptr, ptr %28, align 8, !tbaa !5
  %1120 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1119, i32 0, i32 16
  %1121 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1120)
          to label %1122 unwind label %783

1122:                                             ; preds = %1118
  store i32 %1121, ptr %27, align 4, !tbaa !9
  %1123 = load i32, ptr %27, align 4, !tbaa !9
  %1124 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1123)
          to label %1125 unwind label %783

1125:                                             ; preds = %1122
  store ptr %1124, ptr %28, align 8, !tbaa !5
  %1126 = load i32, ptr %35, align 4, !tbaa !9
  %1127 = icmp ne i32 %1126, 0
  br i1 %1127, label %1128, label %1152

1128:                                             ; preds = %1125
  %1129 = load ptr, ptr %28, align 8, !tbaa !5
  %1130 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_vectorERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %140, ptr noundef nonnull align 8 dereferenceable(336) %1129)
          to label %1131 unwind label %783

1131:                                             ; preds = %1128
  br i1 %1130, label %1136, label %1132

1132:                                             ; preds = %1131
  %1133 = load ptr, ptr %28, align 8, !tbaa !5
  %1134 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %140, ptr noundef nonnull align 8 dereferenceable(336) %1133)
          to label %1135 unwind label %783

1135:                                             ; preds = %1132
  br i1 %1134, label %1136, label %1152

1136:                                             ; preds = %1135, %1131
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #9
  %1137 = load i32, ptr %35, align 4, !tbaa !9
  %1138 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1137)
          to label %1139 unwind label %1147

1139:                                             ; preds = %1136
  store ptr %1138, ptr %101, align 8, !tbaa !5
  %1140 = load ptr, ptr %101, align 8, !tbaa !5
  %1141 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1140, i32 0, i32 4
  %1142 = load i32, ptr %1141, align 8, !tbaa !150
  %1143 = icmp ugt i32 %1142, 4
  br i1 %1143, label %1144, label %1151

1144:                                             ; preds = %1139
  %1145 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1361)
          to label %1146 unwind label %1147

1146:                                             ; preds = %1144
  br label %1151

1147:                                             ; preds = %1144, %1136
  %1148 = landingpad { ptr, i32 }
          cleanup
  %1149 = extractvalue { ptr, i32 } %1148, 0
  store ptr %1149, ptr %23, align 8
  %1150 = extractvalue { ptr, i32 } %1148, 1
  store i32 %1150, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1153

1151:                                             ; preds = %1146, %1139
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1152

1152:                                             ; preds = %1151, %1135, %1125
  store i8 1, ptr %32, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %1865

1153:                                             ; preds = %1147, %1071, %963, %947, %907, %783
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %1870

1154:                                             ; preds = %706
  %1155 = load ptr, ptr %28, align 8, !tbaa !5
  %1156 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1155, i32 0, i32 2
  %1157 = load i32, ptr %1156, align 8, !tbaa !128
  %1158 = icmp eq i32 %1157, 15
  br i1 %1158, label %1159, label %1401

1159:                                             ; preds = %1154
  %1160 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %1161 = trunc i8 %1160 to i1
  br i1 %1161, label %1166, label %1162

1162:                                             ; preds = %1159
  %1163 = load i32, ptr %50, align 4, !tbaa !9
  %1164 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1163)
          to label %1165 unwind label %421

1165:                                             ; preds = %1162
  store i32 %1164, ptr %50, align 4, !tbaa !9
  br label %1166

1166:                                             ; preds = %1165, %1159
  %1167 = load i32, ptr %50, align 4, !tbaa !9
  %1168 = load ptr, ptr %28, align 8, !tbaa !5
  %1169 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1168, i32 0, i32 13
  %1170 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1169) #9
  %1171 = trunc i64 %1170 to i32
  %1172 = icmp ult i32 %1167, %1171
  br i1 %1172, label %1173, label %1180

1173:                                             ; preds = %1166
  %1174 = load ptr, ptr %28, align 8, !tbaa !5
  %1175 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1174, i32 0, i32 13
  %1176 = load i32, ptr %50, align 4, !tbaa !9
  %1177 = zext i32 %1176 to i64
  %1178 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1175, i64 noundef %1177) #9
  %1179 = load i32, ptr %1178, align 4, !tbaa !9
  store i32 %1179, ptr %50, align 4, !tbaa !9
  br label %1180

1180:                                             ; preds = %1173, %1166
  %1181 = load i32, ptr %50, align 4, !tbaa !9
  %1182 = zext i32 %1181 to i64
  %1183 = load ptr, ptr %28, align 8, !tbaa !5
  %1184 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1183, i32 0, i32 12
  %1185 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1184) #9
  %1186 = icmp uge i64 %1182, %1185
  br i1 %1186, label %1187, label %1194

1187:                                             ; preds = %1180
  %1188 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1188, ptr noundef @.str.1362)
          to label %1189 unwind label %1190

1189:                                             ; preds = %1187
  invoke void @__cxa_throw(ptr %1188, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %1945 unwind label %421

1190:                                             ; preds = %1187
  %1191 = landingpad { ptr, i32 }
          cleanup
  %1192 = extractvalue { ptr, i32 } %1191, 0
  store ptr %1192, ptr %23, align 8
  %1193 = extractvalue { ptr, i32 } %1191, 1
  store i32 %1193, ptr %24, align 4
  call void @__cxa_free_exception(ptr %1188) #9
  br label %1870

1194:                                             ; preds = %1180
  %1195 = load i8, ptr %46, align 1, !tbaa !11, !range !13, !noundef !14
  %1196 = trunc i8 %1195 to i1
  br i1 %1196, label %1197, label %1198

1197:                                             ; preds = %1194
  store i8 0, ptr %46, align 1, !tbaa !11
  br label %1340

1198:                                             ; preds = %1194
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #9
  store i32 2147483647, ptr %102, align 4, !tbaa !141
  %1199 = load ptr, ptr %28, align 8, !tbaa !5
  %1200 = load i32, ptr %50, align 4, !tbaa !9
  %1201 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %140, ptr noundef nonnull align 8 dereferenceable(336) %1199, i32 noundef %1200, ptr noundef %102)
          to label %1202 unwind label %1226

1202:                                             ; preds = %1198
  br i1 %1201, label %1203, label %1263

1203:                                             ; preds = %1202
  %1204 = load i32, ptr %10, align 4, !tbaa !9
  %1205 = load ptr, ptr %140, align 8, !tbaa !139
  %1206 = getelementptr inbounds ptr, ptr %1205, i64 46
  %1207 = load ptr, ptr %1206, align 8
  %1208 = invoke noundef zeroext i1 %1207(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1204)
          to label %1209 unwind label %1226

1209:                                             ; preds = %1203
  br i1 %1208, label %1210, label %1263

1210:                                             ; preds = %1209
  %1211 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %1212 = trunc i8 %1211 to i1
  br i1 %1212, label %1213, label %1239

1213:                                             ; preds = %1210
  %1214 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.719)
          to label %1215 unwind label %1226

1215:                                             ; preds = %1213
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #9
  %1216 = load i32, ptr %102, align 4, !tbaa !141
  %1217 = load ptr, ptr %28, align 8, !tbaa !5
  %1218 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1217, i32 0, i32 11
  %1219 = load i32, ptr %1218, align 8, !tbaa !168
  %1220 = load ptr, ptr %140, align 8, !tbaa !139
  %1221 = getelementptr inbounds ptr, ptr %1220, i64 20
  %1222 = load ptr, ptr %1221, align 8
  invoke void %1222(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1216, i32 noundef %1219)
          to label %1223 unwind label %1230

1223:                                             ; preds = %1215
  %1224 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %103)
          to label %1225 unwind label %1234

1225:                                             ; preds = %1223
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #9
  br label %1253

1226:                                             ; preds = %1256, %1213, %1203, %1198
  %1227 = landingpad { ptr, i32 }
          cleanup
  %1228 = extractvalue { ptr, i32 } %1227, 0
  store ptr %1228, ptr %23, align 8
  %1229 = extractvalue { ptr, i32 } %1227, 1
  store i32 %1229, ptr %24, align 4
  br label %1339

1230:                                             ; preds = %1215
  %1231 = landingpad { ptr, i32 }
          cleanup
  %1232 = extractvalue { ptr, i32 } %1231, 0
  store ptr %1232, ptr %23, align 8
  %1233 = extractvalue { ptr, i32 } %1231, 1
  store i32 %1233, ptr %24, align 4
  br label %1238

1234:                                             ; preds = %1223
  %1235 = landingpad { ptr, i32 }
          cleanup
  %1236 = extractvalue { ptr, i32 } %1235, 0
  store ptr %1236, ptr %23, align 8
  %1237 = extractvalue { ptr, i32 } %1235, 1
  store i32 %1237, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #9
  br label %1238

1238:                                             ; preds = %1234, %1230
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #9
  br label %1339

1239:                                             ; preds = %1210
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #9
  %1240 = load i32, ptr %102, align 4, !tbaa !141
  %1241 = load ptr, ptr %28, align 8, !tbaa !5
  %1242 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1241, i32 0, i32 11
  %1243 = load i32, ptr %1242, align 8, !tbaa !168
  %1244 = load ptr, ptr %140, align 8, !tbaa !139
  %1245 = getelementptr inbounds ptr, ptr %1244, i64 20
  %1246 = load ptr, ptr %1245, align 8
  invoke void %1246(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1240, i32 noundef %1243)
          to label %1247 unwind label %1249

1247:                                             ; preds = %1239
  %1248 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  br label %1253

1249:                                             ; preds = %1239
  %1250 = landingpad { ptr, i32 }
          cleanup
  %1251 = extractvalue { ptr, i32 } %1250, 0
  store ptr %1251, ptr %23, align 8
  %1252 = extractvalue { ptr, i32 } %1250, 1
  store i32 %1252, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  br label %1339

1253:                                             ; preds = %1247, %1225
  %1254 = load i32, ptr %102, align 4, !tbaa !141
  %1255 = icmp eq i32 %1254, 0
  br i1 %1255, label %1256, label %1261

1256:                                             ; preds = %1253
  %1257 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %140)
          to label %1258 unwind label %1226

1258:                                             ; preds = %1256
  %1259 = icmp eq i32 %1257, 5365
  br i1 %1259, label %1260, label %1261

1260:                                             ; preds = %1258
  store i8 1, ptr %42, align 1, !tbaa !11
  br label %1261

1261:                                             ; preds = %1260, %1258, %1253
  store i8 1, ptr %43, align 1, !tbaa !11
  %1262 = load i32, ptr %102, align 4, !tbaa !141
  store i32 %1262, ptr %44, align 4, !tbaa !141
  br label %1338

1263:                                             ; preds = %1209, %1202
  call void @llvm.lifetime.start.p0(i64 32, ptr %105) #9
  %1264 = load i32, ptr %27, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %106, i32 noundef %1264)
          to label %1265 unwind label %1276

1265:                                             ; preds = %1263
  %1266 = load i32, ptr %50, align 4, !tbaa !9
  %1267 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %106, i32 0, i32 0
  %1268 = load i32, ptr %1267, align 4
  %1269 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8Compiler25get_member_qualified_nameB5cxx11ENS_7TypedIDILNS_5TypesE1EEEj(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %1268, i32 noundef %1266)
          to label %1270 unwind label %1276

1270:                                             ; preds = %1265
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %105, ptr noundef nonnull align 8 dereferenceable(32) %1269)
          to label %1271 unwind label %1276

1271:                                             ; preds = %1270
  %1272 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %105) #9
  br i1 %1272, label %1284, label %1273

1273:                                             ; preds = %1271
  %1274 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %105)
          to label %1275 unwind label %1280

1275:                                             ; preds = %1273
  br label %1335

1276:                                             ; preds = %1270, %1265, %1263
  %1277 = landingpad { ptr, i32 }
          cleanup
  %1278 = extractvalue { ptr, i32 } %1277, 0
  store ptr %1278, ptr %23, align 8
  %1279 = extractvalue { ptr, i32 } %1277, 1
  store i32 %1279, ptr %24, align 4
  br label %1337

1280:                                             ; preds = %1273
  %1281 = landingpad { ptr, i32 }
          cleanup
  %1282 = extractvalue { ptr, i32 } %1281, 0
  store ptr %1282, ptr %23, align 8
  %1283 = extractvalue { ptr, i32 } %1281, 1
  store i32 %1283, ptr %24, align 4
  br label %1336

1284:                                             ; preds = %1271
  %1285 = load i8, ptr %21, align 1, !tbaa !11, !range !13, !noundef !14
  %1286 = trunc i8 %1285 to i1
  br i1 %1286, label %1287, label %1308

1287:                                             ; preds = %1284
  call void @llvm.lifetime.start.p0(i64 32, ptr %107) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %108) #9
  %1288 = load ptr, ptr %28, align 8, !tbaa !5
  %1289 = load i32, ptr %50, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %108, ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %1288, i32 noundef %1289)
          to label %1290 unwind label %1294

1290:                                             ; preds = %1287
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %107, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 8 dereferenceable(32) %108)
          to label %1291 unwind label %1298

1291:                                             ; preds = %1290
  %1292 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %107)
          to label %1293 unwind label %1302

1293:                                             ; preds = %1291
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %107) #9
  br label %1334

1294:                                             ; preds = %1287
  %1295 = landingpad { ptr, i32 }
          cleanup
  %1296 = extractvalue { ptr, i32 } %1295, 0
  store ptr %1296, ptr %23, align 8
  %1297 = extractvalue { ptr, i32 } %1295, 1
  store i32 %1297, ptr %24, align 4
  br label %1307

1298:                                             ; preds = %1290
  %1299 = landingpad { ptr, i32 }
          cleanup
  %1300 = extractvalue { ptr, i32 } %1299, 0
  store ptr %1300, ptr %23, align 8
  %1301 = extractvalue { ptr, i32 } %1299, 1
  store i32 %1301, ptr %24, align 4
  br label %1306

1302:                                             ; preds = %1291
  %1303 = landingpad { ptr, i32 }
          cleanup
  %1304 = extractvalue { ptr, i32 } %1303, 0
  store ptr %1304, ptr %23, align 8
  %1305 = extractvalue { ptr, i32 } %1303, 1
  store i32 %1305, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #9
  br label %1306

1306:                                             ; preds = %1302, %1298
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #9
  br label %1307

1307:                                             ; preds = %1306, %1294
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %107) #9
  br label %1336

1308:                                             ; preds = %1284
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #9
  %1309 = load i32, ptr %10, align 4, !tbaa !9
  %1310 = load ptr, ptr %28, align 8, !tbaa !5
  %1311 = load i32, ptr %50, align 4, !tbaa !9
  %1312 = load i8, ptr %19, align 1, !tbaa !11, !range !13, !noundef !14
  %1313 = trunc i8 %1312 to i1
  br i1 %1313, label %1317, label %1314

1314:                                             ; preds = %1308
  %1315 = load i32, ptr %48, align 4, !tbaa !9
  %1316 = icmp ne i32 %1315, 0
  br label %1317

1317:                                             ; preds = %1314, %1308
  %1318 = phi i1 [ true, %1308 ], [ %1316, %1314 ]
  %1319 = load ptr, ptr %140, align 8, !tbaa !139
  %1320 = getelementptr inbounds ptr, ptr %1319, i64 49
  %1321 = load ptr, ptr %1320, align 8
  invoke void %1321(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1309, ptr noundef nonnull align 8 dereferenceable(336) %1310, i32 noundef %1311, i1 noundef zeroext %1318)
          to label %1322 unwind label %1325

1322:                                             ; preds = %1317
  %1323 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %109)
          to label %1324 unwind label %1329

1324:                                             ; preds = %1322
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #9
  br label %1334

1325:                                             ; preds = %1317
  %1326 = landingpad { ptr, i32 }
          cleanup
  %1327 = extractvalue { ptr, i32 } %1326, 0
  store ptr %1327, ptr %23, align 8
  %1328 = extractvalue { ptr, i32 } %1326, 1
  store i32 %1328, ptr %24, align 4
  br label %1333

1329:                                             ; preds = %1322
  %1330 = landingpad { ptr, i32 }
          cleanup
  %1331 = extractvalue { ptr, i32 } %1330, 0
  store ptr %1331, ptr %23, align 8
  %1332 = extractvalue { ptr, i32 } %1330, 1
  store i32 %1332, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #9
  br label %1333

1333:                                             ; preds = %1329, %1325
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #9
  br label %1336

1334:                                             ; preds = %1324, %1293
  br label %1335

1335:                                             ; preds = %1334, %1275
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %105) #9
  br label %1338

1336:                                             ; preds = %1333, %1307, %1280
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #9
  br label %1337

1337:                                             ; preds = %1336, %1276
  call void @llvm.lifetime.end.p0(i64 32, ptr %105) #9
  br label %1339

1338:                                             ; preds = %1335, %1261
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #9
  br label %1340

1339:                                             ; preds = %1337, %1249, %1238, %1226
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #9
  br label %1870

1340:                                             ; preds = %1338, %1197
  %1341 = load ptr, ptr %28, align 8, !tbaa !5
  %1342 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1341, i32 0, i32 1
  %1343 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1342)
          to label %1344 unwind label %421

1344:                                             ; preds = %1340
  %1345 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %110, i32 0, i32 0
  store i32 %1343, ptr %1345, align 4
  %1346 = load i32, ptr %50, align 4, !tbaa !9
  %1347 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %110, i32 0, i32 0
  %1348 = load i32, ptr %1347, align 4
  %1349 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %1348, i32 noundef %1346, i32 noundef 18)
          to label %1350 unwind label %421

1350:                                             ; preds = %1344
  br i1 %1349, label %1351, label %1352

1351:                                             ; preds = %1350
  store i8 1, ptr %36, align 1, !tbaa !11
  br label %1352

1352:                                             ; preds = %1351, %1350
  %1353 = load ptr, ptr %28, align 8, !tbaa !5
  %1354 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1353, i32 0, i32 1
  %1355 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1354)
          to label %1356 unwind label %421

1356:                                             ; preds = %1352
  %1357 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %111, i32 0, i32 0
  store i32 %1355, ptr %1357, align 4
  %1358 = load i32, ptr %50, align 4, !tbaa !9
  %1359 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %111, i32 0, i32 0
  %1360 = load i32, ptr %1359, align 4
  %1361 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %1360, i32 noundef %1358, i32 noundef 0)
          to label %1362 unwind label %421

1362:                                             ; preds = %1356
  br i1 %1361, label %1363, label %1364

1363:                                             ; preds = %1362
  store i8 1, ptr %38, align 1, !tbaa !11
  br label %1364

1364:                                             ; preds = %1363, %1362
  %1365 = load ptr, ptr %28, align 8, !tbaa !5
  %1366 = load i32, ptr %50, align 4, !tbaa !9
  %1367 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30member_is_packed_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %1365, i32 noundef %1366)
          to label %1368 unwind label %421

1368:                                             ; preds = %1364
  %1369 = zext i1 %1367 to i8
  store i8 %1369, ptr %34, align 1, !tbaa !11
  %1370 = load ptr, ptr %28, align 8, !tbaa !5
  %1371 = load i32, ptr %50, align 4, !tbaa !9
  %1372 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL32member_is_remapped_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %1370, i32 noundef %1371)
          to label %1373 unwind label %421

1373:                                             ; preds = %1368
  br i1 %1372, label %1374, label %1382

1374:                                             ; preds = %1373
  %1375 = load ptr, ptr %28, align 8, !tbaa !5
  %1376 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1375, i32 0, i32 1
  %1377 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1376)
          to label %1378 unwind label %421

1378:                                             ; preds = %1374
  %1379 = load i32, ptr %50, align 4, !tbaa !9
  %1380 = invoke noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1377, i32 noundef %1379, i32 noundef 1)
          to label %1381 unwind label %421

1381:                                             ; preds = %1378
  store i32 %1380, ptr %35, align 4, !tbaa !9
  br label %1383

1382:                                             ; preds = %1373
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %1383

1383:                                             ; preds = %1382, %1381
  %1384 = load ptr, ptr %28, align 8, !tbaa !5
  %1385 = load i32, ptr %50, align 4, !tbaa !9
  %1386 = load ptr, ptr %140, align 8, !tbaa !139
  %1387 = getelementptr inbounds ptr, ptr %1386, i64 41
  %1388 = load ptr, ptr %1387, align 8
  %1389 = invoke noundef zeroext i1 %1388(ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(336) %1384, i32 noundef %1385)
          to label %1390 unwind label %421

1390:                                             ; preds = %1383
  %1391 = zext i1 %1389 to i8
  store i8 %1391, ptr %33, align 1, !tbaa !11
  %1392 = load ptr, ptr %28, align 8, !tbaa !5
  %1393 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1392, i32 0, i32 12
  %1394 = load i32, ptr %50, align 4, !tbaa !9
  %1395 = zext i32 %1394 to i64
  %1396 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1393, i64 noundef %1395) #9
  %1397 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1396)
          to label %1398 unwind label %421

1398:                                             ; preds = %1390
  %1399 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1397)
          to label %1400 unwind label %421

1400:                                             ; preds = %1398
  store ptr %1399, ptr %28, align 8, !tbaa !5
  br label %1864

1401:                                             ; preds = %1154
  %1402 = load ptr, ptr %28, align 8, !tbaa !5
  %1403 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1402, i32 0, i32 5
  %1404 = load i32, ptr %1403, align 4, !tbaa !151
  %1405 = icmp ugt i32 %1404, 1
  br i1 %1405, label %1406, label %1474

1406:                                             ; preds = %1401
  %1407 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.308)
          to label %1408 unwind label %421

1408:                                             ; preds = %1406
  %1409 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %1410 = trunc i8 %1409 to i1
  br i1 %1410, label %1411, label %1424

1411:                                             ; preds = %1408
  call void @llvm.lifetime.start.p0(i64 32, ptr %112) #9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %112, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %1412 unwind label %1415

1412:                                             ; preds = %1411
  %1413 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %112)
          to label %1414 unwind label %1419

1414:                                             ; preds = %1412
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #9
  br label %1440

1415:                                             ; preds = %1411
  %1416 = landingpad { ptr, i32 }
          cleanup
  %1417 = extractvalue { ptr, i32 } %1416, 0
  store ptr %1417, ptr %23, align 8
  %1418 = extractvalue { ptr, i32 } %1416, 1
  store i32 %1418, ptr %24, align 4
  br label %1423

1419:                                             ; preds = %1412
  %1420 = landingpad { ptr, i32 }
          cleanup
  %1421 = extractvalue { ptr, i32 } %1420, 0
  store ptr %1421, ptr %23, align 8
  %1422 = extractvalue { ptr, i32 } %1420, 1
  store i32 %1422, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #9
  br label %1423

1423:                                             ; preds = %1419, %1415
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #9
  br label %1870

1424:                                             ; preds = %1408
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #9
  %1425 = load i32, ptr %50, align 4, !tbaa !9
  %1426 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %1427 = trunc i8 %1426 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %113, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1425, i1 noundef zeroext %1427)
          to label %1428 unwind label %1431

1428:                                             ; preds = %1424
  %1429 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %113)
          to label %1430 unwind label %1435

1430:                                             ; preds = %1428
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  br label %1440

1431:                                             ; preds = %1424
  %1432 = landingpad { ptr, i32 }
          cleanup
  %1433 = extractvalue { ptr, i32 } %1432, 0
  store ptr %1433, ptr %23, align 8
  %1434 = extractvalue { ptr, i32 } %1432, 1
  store i32 %1434, ptr %24, align 4
  br label %1439

1435:                                             ; preds = %1428
  %1436 = landingpad { ptr, i32 }
          cleanup
  %1437 = extractvalue { ptr, i32 } %1436, 0
  store ptr %1437, ptr %23, align 8
  %1438 = extractvalue { ptr, i32 } %1436, 1
  store i32 %1438, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  br label %1439

1439:                                             ; preds = %1435, %1431
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  br label %1870

1440:                                             ; preds = %1430, %1414
  %1441 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.713)
          to label %1442 unwind label %421

1442:                                             ; preds = %1440
  %1443 = load i32, ptr %35, align 4, !tbaa !9
  %1444 = icmp ne i32 %1443, 0
  br i1 %1444, label %1445, label %1466

1445:                                             ; preds = %1442
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #9
  %1446 = load i32, ptr %35, align 4, !tbaa !9
  %1447 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1446)
          to label %1448 unwind label %1461

1448:                                             ; preds = %1445
  store ptr %1447, ptr %114, align 8, !tbaa !5
  %1449 = load ptr, ptr %114, align 8, !tbaa !5
  %1450 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1449, i32 0, i32 4
  %1451 = load i32, ptr %1450, align 8, !tbaa !150
  %1452 = icmp ugt i32 %1451, 4
  br i1 %1452, label %1458, label %1453

1453:                                             ; preds = %1448
  %1454 = load ptr, ptr %114, align 8, !tbaa !5
  %1455 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1454, i32 0, i32 5
  %1456 = load i32, ptr %1455, align 4, !tbaa !151
  %1457 = icmp ugt i32 %1456, 4
  br i1 %1457, label %1458, label %1465

1458:                                             ; preds = %1453, %1448
  %1459 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1361)
          to label %1460 unwind label %1461

1460:                                             ; preds = %1458
  br label %1465

1461:                                             ; preds = %1458, %1445
  %1462 = landingpad { ptr, i32 }
          cleanup
  %1463 = extractvalue { ptr, i32 } %1462, 0
  store ptr %1463, ptr %23, align 8
  %1464 = extractvalue { ptr, i32 } %1462, 1
  store i32 %1464, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #9
  br label %1870

1465:                                             ; preds = %1460, %1453
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #9
  br label %1466

1466:                                             ; preds = %1465, %1442
  %1467 = load ptr, ptr %28, align 8, !tbaa !5
  %1468 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1467, i32 0, i32 16
  %1469 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1468)
          to label %1470 unwind label %421

1470:                                             ; preds = %1466
  store i32 %1469, ptr %27, align 4, !tbaa !9
  %1471 = load i32, ptr %27, align 4, !tbaa !9
  %1472 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1471)
          to label %1473 unwind label %421

1473:                                             ; preds = %1470
  store ptr %1472, ptr %28, align 8, !tbaa !5
  br label %1863

1474:                                             ; preds = %1401
  %1475 = load ptr, ptr %28, align 8, !tbaa !5
  %1476 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1475, i32 0, i32 4
  %1477 = load i32, ptr %1476, align 8, !tbaa !150
  %1478 = icmp ugt i32 %1477, 1
  br i1 %1478, label %1479, label %1849

1479:                                             ; preds = %1474
  call void @llvm.lifetime.start.p0(i64 32, ptr %115) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  %1480 = load i8, ptr %33, align 1, !tbaa !11, !range !13, !noundef !14
  %1481 = trunc i8 %1480 to i1
  br i1 %1481, label %1482, label %1535

1482:                                             ; preds = %1479
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #9
  %1483 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 91, i64 noundef -1) #9
  store i64 %1483, ptr %116, align 8, !tbaa !169
  %1484 = load i64, ptr %116, align 8, !tbaa !169
  %1485 = icmp ne i64 %1484, -1
  br i1 %1485, label %1486, label %1533

1486:                                             ; preds = %1482
  call void @llvm.lifetime.start.p0(i64 32, ptr %117) #9
  %1487 = load i64, ptr %116, align 8, !tbaa !169
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %1487, i64 noundef -1)
          to label %1488 unwind label %1507

1488:                                             ; preds = %1486
  %1489 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 8 dereferenceable(32) %117) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #9
  %1490 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %115, i8 noundef signext 93, i64 noundef -1) #9
  store i64 %1490, ptr %118, align 8, !tbaa !169
  %1491 = load i64, ptr %118, align 8, !tbaa !169
  %1492 = icmp ne i64 %1491, -1
  br i1 %1492, label %1493, label %1525

1493:                                             ; preds = %1488
  %1494 = load i64, ptr %118, align 8, !tbaa !169
  %1495 = add i64 %1494, 1
  %1496 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  %1497 = icmp ne i64 %1495, %1496
  br i1 %1497, label %1498, label %1525

1498:                                             ; preds = %1493
  %1499 = load i64, ptr %118, align 8, !tbaa !169
  %1500 = add i64 %1499, 1
  store i64 %1500, ptr %118, align 8, !tbaa !169
  call void @llvm.lifetime.start.p0(i64 32, ptr %119) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %120) #9
  %1501 = load i64, ptr %118, align 8, !tbaa !169
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %120, ptr noundef nonnull align 8 dereferenceable(32) %115, i64 noundef %1501, i64 noundef -1)
          to label %1502 unwind label %1511

1502:                                             ; preds = %1498
  call void @llvm.lifetime.start.p0(i64 32, ptr %121) #9
  %1503 = load i64, ptr %118, align 8, !tbaa !169
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %121, ptr noundef nonnull align 8 dereferenceable(32) %115, i64 noundef 0, i64 noundef %1503)
          to label %1504 unwind label %1515

1504:                                             ; preds = %1502
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %119, ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull align 8 dereferenceable(32) %121)
          to label %1505 unwind label %1519

1505:                                             ; preds = %1504
  %1506 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 8 dereferenceable(32) %119) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %119) #9
  br label %1525

1507:                                             ; preds = %1486
  %1508 = landingpad { ptr, i32 }
          cleanup
  %1509 = extractvalue { ptr, i32 } %1508, 0
  store ptr %1509, ptr %23, align 8
  %1510 = extractvalue { ptr, i32 } %1508, 1
  store i32 %1510, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #9
  br label %1534

1511:                                             ; preds = %1498
  %1512 = landingpad { ptr, i32 }
          cleanup
  %1513 = extractvalue { ptr, i32 } %1512, 0
  store ptr %1513, ptr %23, align 8
  %1514 = extractvalue { ptr, i32 } %1512, 1
  store i32 %1514, ptr %24, align 4
  br label %1524

1515:                                             ; preds = %1502
  %1516 = landingpad { ptr, i32 }
          cleanup
  %1517 = extractvalue { ptr, i32 } %1516, 0
  store ptr %1517, ptr %23, align 8
  %1518 = extractvalue { ptr, i32 } %1516, 1
  store i32 %1518, ptr %24, align 4
  br label %1523

1519:                                             ; preds = %1504
  %1520 = landingpad { ptr, i32 }
          cleanup
  %1521 = extractvalue { ptr, i32 } %1520, 0
  store ptr %1521, ptr %23, align 8
  %1522 = extractvalue { ptr, i32 } %1520, 1
  store i32 %1522, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #9
  br label %1523

1523:                                             ; preds = %1519, %1515
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  br label %1524

1524:                                             ; preds = %1523, %1511
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %119) #9
  br label %1532

1525:                                             ; preds = %1505, %1493, %1488
  %1526 = load i64, ptr %116, align 8, !tbaa !169
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %1526)
          to label %1527 unwind label %1528

1527:                                             ; preds = %1525
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  br label %1533

1528:                                             ; preds = %1525
  %1529 = landingpad { ptr, i32 }
          cleanup
  %1530 = extractvalue { ptr, i32 } %1529, 0
  store ptr %1530, ptr %23, align 8
  %1531 = extractvalue { ptr, i32 } %1529, 1
  store i32 %1531, ptr %24, align 4
  br label %1532

1532:                                             ; preds = %1528, %1524
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  br label %1534

1533:                                             ; preds = %1527, %1482
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  br label %1535

1534:                                             ; preds = %1532, %1507
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  br label %1848

1535:                                             ; preds = %1533, %1479
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #9
  store i32 8, ptr %122, align 4, !tbaa !170
  call void @llvm.lifetime.start.p0(i64 1, ptr %123) #9
  store i8 0, ptr %123, align 1, !tbaa !11
  %1536 = load i32, ptr %13, align 4, !tbaa !9
  %1537 = and i32 %1536, 64
  %1538 = icmp eq i32 %1537, 0
  br i1 %1538, label %1539, label %1582

1539:                                             ; preds = %1535
  %1540 = load i32, ptr %10, align 4, !tbaa !9
  %1541 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1540)
          to label %1542 unwind label %1550

1542:                                             ; preds = %1539
  %1543 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1541, i32 0, i32 9
  %1544 = load i8, ptr %1543, align 4, !tbaa !171, !range !13, !noundef !14
  %1545 = trunc i8 %1544 to i1
  br i1 %1545, label %1546, label %1554

1546:                                             ; preds = %1542
  %1547 = load i32, ptr %10, align 4, !tbaa !9
  %1548 = invoke noundef i32 @_ZN11spirv_cross12CompilerGLSL38get_expression_effective_storage_classEj(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1547)
          to label %1549 unwind label %1550

1549:                                             ; preds = %1546
  store i32 %1548, ptr %122, align 4, !tbaa !170
  br label %1554

1550:                                             ; preds = %1843, %1839, %1837, %1784, %1782, %1778, %1759, %1751, %1656, %1595, %1593, %1589, %1546, %1539
  %1551 = landingpad { ptr, i32 }
          cleanup
  %1552 = extractvalue { ptr, i32 } %1551, 0
  store ptr %1552, ptr %23, align 8
  %1553 = extractvalue { ptr, i32 } %1551, 1
  store i32 %1553, ptr %24, align 4
  br label %1847

1554:                                             ; preds = %1549, %1542
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #9
  %1555 = load i32, ptr %10, align 4, !tbaa !9
  %1556 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1555)
          to label %1557 unwind label %1577

1557:                                             ; preds = %1554
  store ptr %1556, ptr %124, align 8, !tbaa !5
  %1558 = load ptr, ptr %124, align 8, !tbaa !5
  %1559 = icmp ne ptr %1558, null
  br i1 %1559, label %1560, label %1581

1560:                                             ; preds = %1557
  %1561 = load ptr, ptr %124, align 8, !tbaa !5
  %1562 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1561, i32 0, i32 2
  %1563 = load i32, ptr %1562, align 8, !tbaa !162
  %1564 = icmp eq i32 %1563, 3
  br i1 %1564, label %1565, label %1581

1565:                                             ; preds = %1560
  %1566 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %140)
          to label %1567 unwind label %1577

1567:                                             ; preds = %1565
  %1568 = icmp eq i32 %1566, 1
  br i1 %1568, label %1569, label %1581

1569:                                             ; preds = %1567
  %1570 = load ptr, ptr %124, align 8, !tbaa !5
  %1571 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1570, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %125, ptr align 8 %1571, i64 4, i1 false), !tbaa.struct !153
  %1572 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %125, i32 0, i32 0
  %1573 = load i32, ptr %1572, align 4
  %1574 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 %1573, i32 noundef 15)
          to label %1575 unwind label %1577

1575:                                             ; preds = %1569
  br i1 %1574, label %1581, label %1576

1576:                                             ; preds = %1575
  store i8 1, ptr %123, align 1, !tbaa !11
  br label %1581

1577:                                             ; preds = %1569, %1565, %1554
  %1578 = landingpad { ptr, i32 }
          cleanup
  %1579 = extractvalue { ptr, i32 } %1578, 0
  store ptr %1579, ptr %23, align 8
  %1580 = extractvalue { ptr, i32 } %1578, 1
  store i32 %1580, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  br label %1847

1581:                                             ; preds = %1576, %1575, %1567, %1560, %1557
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  br label %1583

1582:                                             ; preds = %1535
  store i8 1, ptr %123, align 1, !tbaa !11
  br label %1583

1583:                                             ; preds = %1582, %1581
  %1584 = load i8, ptr %33, align 1, !tbaa !11, !range !13, !noundef !14
  %1585 = trunc i8 %1584 to i1
  br i1 %1585, label %1602, label %1586

1586:                                             ; preds = %1583
  %1587 = load i8, ptr %123, align 1, !tbaa !11, !range !13, !noundef !14
  %1588 = trunc i8 %1587 to i1
  br i1 %1588, label %1602, label %1589

1589:                                             ; preds = %1586
  %1590 = load ptr, ptr %28, align 8, !tbaa !5
  %1591 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1590, i32 0, i32 16
  %1592 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1591)
          to label %1593 unwind label %1550

1593:                                             ; preds = %1589
  %1594 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1592)
          to label %1595 unwind label %1550

1595:                                             ; preds = %1593
  %1596 = load i32, ptr %122, align 4, !tbaa !170
  %1597 = load ptr, ptr %140, align 8, !tbaa !139
  %1598 = getelementptr inbounds ptr, ptr %1597, i64 48
  %1599 = load ptr, ptr %1598, align 8
  %1600 = invoke noundef zeroext i1 %1599(ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(336) %1594, i32 noundef %1596, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %1601 unwind label %1550

1601:                                             ; preds = %1595
  br label %1602

1602:                                             ; preds = %1601, %1586, %1583
  %1603 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %1604 = trunc i8 %1603 to i1
  br i1 %1604, label %1605, label %1656

1605:                                             ; preds = %1602
  call void @llvm.lifetime.start.p0(i64 1, ptr %126) #9
  %1606 = load i32, ptr %50, align 4, !tbaa !9
  %1607 = load ptr, ptr %28, align 8, !tbaa !5
  %1608 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1607, i32 0, i32 4
  %1609 = load i32, ptr %1608, align 8, !tbaa !150
  %1610 = icmp uge i32 %1606, %1609
  %1611 = zext i1 %1610 to i8
  store i8 %1611, ptr %126, align 1, !tbaa !11
  %1612 = load i8, ptr %34, align 1, !tbaa !11, !range !13, !noundef !14
  %1613 = trunc i8 %1612 to i1
  br i1 %1613, label %1634, label %1614

1614:                                             ; preds = %1605
  %1615 = load i8, ptr %33, align 1, !tbaa !11, !range !13, !noundef !14
  %1616 = trunc i8 %1615 to i1
  br i1 %1616, label %1634, label %1617

1617:                                             ; preds = %1614
  %1618 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.719)
          to label %1619 unwind label %1630

1619:                                             ; preds = %1617
  %1620 = load i8, ptr %126, align 1, !tbaa !11, !range !13, !noundef !14
  %1621 = trunc i8 %1620 to i1
  br i1 %1621, label %1622, label %1623

1622:                                             ; preds = %1619
  br label %1625

1623:                                             ; preds = %1619
  %1624 = load i32, ptr %50, align 4, !tbaa !9
  br label %1625

1625:                                             ; preds = %1623, %1622
  %1626 = phi i32 [ 0, %1622 ], [ %1624, %1623 ]
  %1627 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1626)
  %1628 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1627)
          to label %1629 unwind label %1630

1629:                                             ; preds = %1625
  br label %1654

1630:                                             ; preds = %1625, %1617
  %1631 = landingpad { ptr, i32 }
          cleanup
  %1632 = extractvalue { ptr, i32 } %1631, 0
  store ptr %1632, ptr %23, align 8
  %1633 = extractvalue { ptr, i32 } %1631, 1
  store i32 %1633, ptr %24, align 4
  br label %1655

1634:                                             ; preds = %1614, %1605
  call void @llvm.lifetime.start.p0(i64 32, ptr %127) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %128) #9
  %1635 = load i8, ptr %126, align 1, !tbaa !11, !range !13, !noundef !14
  %1636 = trunc i8 %1635 to i1
  br i1 %1636, label %1637, label %1638

1637:                                             ; preds = %1634
  br label %1640

1638:                                             ; preds = %1634
  %1639 = load i32, ptr %50, align 4, !tbaa !9
  br label %1640

1640:                                             ; preds = %1638, %1637
  %1641 = phi i32 [ 0, %1637 ], [ %1639, %1638 ]
  store i32 %1641, ptr %128, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross4joinIJRA2_KcjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %127, ptr noundef nonnull align 1 dereferenceable(2) @.str.308, ptr noundef nonnull align 4 dereferenceable(4) %128, ptr noundef nonnull align 1 dereferenceable(2) @.str.713)
          to label %1642 unwind label %1645

1642:                                             ; preds = %1640
  %1643 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %127)
          to label %1644 unwind label %1649

1644:                                             ; preds = %1642
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %127) #9
  br label %1654

1645:                                             ; preds = %1640
  %1646 = landingpad { ptr, i32 }
          cleanup
  %1647 = extractvalue { ptr, i32 } %1646, 0
  store ptr %1647, ptr %23, align 8
  %1648 = extractvalue { ptr, i32 } %1646, 1
  store i32 %1648, ptr %24, align 4
  br label %1653

1649:                                             ; preds = %1642
  %1650 = landingpad { ptr, i32 }
          cleanup
  %1651 = extractvalue { ptr, i32 } %1650, 0
  store ptr %1651, ptr %23, align 8
  %1652 = extractvalue { ptr, i32 } %1650, 1
  store i32 %1652, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #9
  br label %1653

1653:                                             ; preds = %1649, %1645
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %127) #9
  br label %1655

1654:                                             ; preds = %1644, %1629
  call void @llvm.lifetime.end.p0(i64 1, ptr %126) #9
  br label %1772

1655:                                             ; preds = %1653, %1630
  call void @llvm.lifetime.end.p0(i64 1, ptr %126) #9
  br label %1847

1656:                                             ; preds = %1602
  %1657 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %140, i32 0, i32 1
  %1658 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1657, i32 0, i32 2
  %1659 = load i32, ptr %50, align 4, !tbaa !9
  %1660 = zext i32 %1659 to i64
  %1661 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1658, i64 noundef %1660) #9
  %1662 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %1661)
          to label %1663 unwind label %1550

1663:                                             ; preds = %1656
  %1664 = icmp eq i32 %1662, 3
  br i1 %1664, label %1665, label %1751

1665:                                             ; preds = %1663
  %1666 = load i8, ptr %34, align 1, !tbaa !11, !range !13, !noundef !14
  %1667 = trunc i8 %1666 to i1
  br i1 %1667, label %1751, label %1668

1668:                                             ; preds = %1665
  %1669 = load i8, ptr %33, align 1, !tbaa !11, !range !13, !noundef !14
  %1670 = trunc i8 %1669 to i1
  br i1 %1670, label %1751, label %1671

1671:                                             ; preds = %1668
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1672 = load i32, ptr %50, align 4, !tbaa !9
  %1673 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1672)
          to label %1674 unwind label %1705

1674:                                             ; preds = %1671
  store ptr %1673, ptr %129, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %130) #9
  %1675 = load ptr, ptr %129, align 8, !tbaa !5
  %1676 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1675, i32 noundef 0, i32 noundef 0)
          to label %1677 unwind label %1709

1677:                                             ; preds = %1674
  %1678 = load ptr, ptr %28, align 8, !tbaa !5
  %1679 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1678, i32 0, i32 4
  %1680 = load i32, ptr %1679, align 8, !tbaa !150
  %1681 = icmp uge i32 %1676, %1680
  %1682 = zext i1 %1681 to i8
  store i8 %1682, ptr %130, align 1, !tbaa !11
  %1683 = load ptr, ptr %129, align 8, !tbaa !5
  %1684 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1683, i32 0, i32 3
  %1685 = load i8, ptr %1684, align 8, !tbaa !172, !range !13, !noundef !14
  %1686 = trunc i8 %1685 to i1
  br i1 %1686, label %1687, label %1733

1687:                                             ; preds = %1677
  call void @llvm.lifetime.start.p0(i64 32, ptr %131) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %132) #9
  %1688 = load i8, ptr %130, align 1, !tbaa !11, !range !13, !noundef !14
  %1689 = trunc i8 %1688 to i1
  store i1 false, ptr %134, align 1
  store i1 false, ptr %135, align 1
  br i1 %1689, label %1690, label %1692

1690:                                             ; preds = %1687
  call void @llvm.lifetime.start.p0(i64 1, ptr %133) #9
  store i1 true, ptr %134, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %133) #9
  store i1 true, ptr %135, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %132, ptr noundef @.str.760, ptr noundef nonnull align 1 dereferenceable(1) %133)
          to label %1691 unwind label %1713

1691:                                             ; preds = %1690
  br label %1695

1692:                                             ; preds = %1687
  %1693 = load i32, ptr %50, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %132, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1693, i1 noundef zeroext true)
          to label %1694 unwind label %1713

1694:                                             ; preds = %1692
  br label %1695

1695:                                             ; preds = %1694, %1691
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %131, ptr noundef nonnull align 1 dereferenceable(2) @.str.308, ptr noundef nonnull align 8 dereferenceable(32) %132, ptr noundef nonnull align 1 dereferenceable(2) @.str.713)
          to label %1696 unwind label %1717

1696:                                             ; preds = %1695
  %1697 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %131)
          to label %1698 unwind label %1721

1698:                                             ; preds = %1696
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #9
  %1699 = load i1, ptr %135, align 1
  br i1 %1699, label %1700, label %1701

1700:                                             ; preds = %1698
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %133) #9
  br label %1701

1701:                                             ; preds = %1700, %1698
  %1702 = load i1, ptr %134, align 1
  br i1 %1702, label %1703, label %1704

1703:                                             ; preds = %1701
  call void @llvm.lifetime.end.p0(i64 1, ptr %133) #9
  br label %1704

1704:                                             ; preds = %1703, %1701
  call void @llvm.lifetime.end.p0(i64 32, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %131) #9
  br label %1748

1705:                                             ; preds = %1671
  %1706 = landingpad { ptr, i32 }
          cleanup
  %1707 = extractvalue { ptr, i32 } %1706, 0
  store ptr %1707, ptr %23, align 8
  %1708 = extractvalue { ptr, i32 } %1706, 1
  store i32 %1708, ptr %24, align 4
  br label %1750

1709:                                             ; preds = %1743, %1739, %1733, %1674
  %1710 = landingpad { ptr, i32 }
          cleanup
  %1711 = extractvalue { ptr, i32 } %1710, 0
  store ptr %1711, ptr %23, align 8
  %1712 = extractvalue { ptr, i32 } %1710, 1
  store i32 %1712, ptr %24, align 4
  br label %1749

1713:                                             ; preds = %1692, %1690
  %1714 = landingpad { ptr, i32 }
          cleanup
  %1715 = extractvalue { ptr, i32 } %1714, 0
  store ptr %1715, ptr %23, align 8
  %1716 = extractvalue { ptr, i32 } %1714, 1
  store i32 %1716, ptr %24, align 4
  br label %1726

1717:                                             ; preds = %1695
  %1718 = landingpad { ptr, i32 }
          cleanup
  %1719 = extractvalue { ptr, i32 } %1718, 0
  store ptr %1719, ptr %23, align 8
  %1720 = extractvalue { ptr, i32 } %1718, 1
  store i32 %1720, ptr %24, align 4
  br label %1725

1721:                                             ; preds = %1696
  %1722 = landingpad { ptr, i32 }
          cleanup
  %1723 = extractvalue { ptr, i32 } %1722, 0
  store ptr %1723, ptr %23, align 8
  %1724 = extractvalue { ptr, i32 } %1722, 1
  store i32 %1724, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #9
  br label %1725

1725:                                             ; preds = %1721, %1717
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #9
  br label %1726

1726:                                             ; preds = %1725, %1713
  %1727 = load i1, ptr %135, align 1
  br i1 %1727, label %1728, label %1729

1728:                                             ; preds = %1726
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %133) #9
  br label %1729

1729:                                             ; preds = %1728, %1726
  %1730 = load i1, ptr %134, align 1
  br i1 %1730, label %1731, label %1732

1731:                                             ; preds = %1729
  call void @llvm.lifetime.end.p0(i64 1, ptr %133) #9
  br label %1732

1732:                                             ; preds = %1731, %1729
  call void @llvm.lifetime.end.p0(i64 32, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %131) #9
  br label %1749

1733:                                             ; preds = %1677
  %1734 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.719)
          to label %1735 unwind label %1709

1735:                                             ; preds = %1733
  %1736 = load i8, ptr %130, align 1, !tbaa !11, !range !13, !noundef !14
  %1737 = trunc i8 %1736 to i1
  br i1 %1737, label %1738, label %1739

1738:                                             ; preds = %1735
  br label %1743

1739:                                             ; preds = %1735
  %1740 = load ptr, ptr %129, align 8, !tbaa !5
  %1741 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1740, i32 noundef 0, i32 noundef 0)
          to label %1742 unwind label %1709

1742:                                             ; preds = %1739
  br label %1743

1743:                                             ; preds = %1742, %1738
  %1744 = phi i32 [ 0, %1738 ], [ %1741, %1742 ]
  %1745 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1744)
  %1746 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1745)
          to label %1747 unwind label %1709

1747:                                             ; preds = %1743
  br label %1748

1748:                                             ; preds = %1747, %1704
  call void @llvm.lifetime.end.p0(i64 1, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  br label %1771

1749:                                             ; preds = %1732, %1709
  call void @llvm.lifetime.end.p0(i64 1, ptr %130) #9
  br label %1750

1750:                                             ; preds = %1749, %1705
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  br label %1847

1751:                                             ; preds = %1668, %1665, %1663
  %1752 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.308)
          to label %1753 unwind label %1550

1753:                                             ; preds = %1751
  call void @llvm.lifetime.start.p0(i64 32, ptr %136) #9
  %1754 = load i32, ptr %50, align 4, !tbaa !9
  %1755 = load i8, ptr %20, align 1, !tbaa !11, !range !13, !noundef !14
  %1756 = trunc i8 %1755 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %136, ptr noundef nonnull align 8 dereferenceable(9848) %140, i32 noundef %1754, i1 noundef zeroext %1756)
          to label %1757 unwind label %1762

1757:                                             ; preds = %1753
  %1758 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %136)
          to label %1759 unwind label %1766

1759:                                             ; preds = %1757
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %136) #9
  %1760 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.713)
          to label %1761 unwind label %1550

1761:                                             ; preds = %1759
  br label %1771

1762:                                             ; preds = %1753
  %1763 = landingpad { ptr, i32 }
          cleanup
  %1764 = extractvalue { ptr, i32 } %1763, 0
  store ptr %1764, ptr %23, align 8
  %1765 = extractvalue { ptr, i32 } %1763, 1
  store i32 %1765, ptr %24, align 4
  br label %1770

1766:                                             ; preds = %1757
  %1767 = landingpad { ptr, i32 }
          cleanup
  %1768 = extractvalue { ptr, i32 } %1767, 0
  store ptr %1768, ptr %23, align 8
  %1769 = extractvalue { ptr, i32 } %1767, 1
  store i32 %1769, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #9
  br label %1770

1770:                                             ; preds = %1766, %1762
  call void @llvm.lifetime.end.p0(i64 32, ptr %136) #9
  br label %1847

1771:                                             ; preds = %1761, %1748
  br label %1772

1772:                                             ; preds = %1771, %1654
  %1773 = load i8, ptr %33, align 1, !tbaa !11, !range !13, !noundef !14
  %1774 = trunc i8 %1773 to i1
  br i1 %1774, label %1775, label %1808

1775:                                             ; preds = %1772
  %1776 = load i8, ptr %123, align 1, !tbaa !11, !range !13, !noundef !14
  %1777 = trunc i8 %1776 to i1
  br i1 %1777, label %1808, label %1778

1778:                                             ; preds = %1775
  %1779 = load ptr, ptr %28, align 8, !tbaa !5
  %1780 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1779, i32 0, i32 16
  %1781 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1780)
          to label %1782 unwind label %1550

1782:                                             ; preds = %1778
  %1783 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1781)
          to label %1784 unwind label %1550

1784:                                             ; preds = %1782
  %1785 = load i32, ptr %122, align 4, !tbaa !170
  %1786 = load ptr, ptr %140, align 8, !tbaa !139
  %1787 = getelementptr inbounds ptr, ptr %1786, i64 48
  %1788 = load ptr, ptr %1787, align 8
  %1789 = invoke noundef zeroext i1 %1788(ptr noundef nonnull align 8 dereferenceable(9848) %140, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(336) %1783, i32 noundef %1785, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %1790 unwind label %1550

1790:                                             ; preds = %1784
  br i1 %1789, label %1791, label %1807

1791:                                             ; preds = %1790
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #9
  %1792 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %115, i8 noundef signext 91, i64 noundef 0) #9
  store i64 %1792, ptr %137, align 8, !tbaa !169
  %1793 = load i64, ptr %137, align 8, !tbaa !169
  %1794 = icmp ne i64 %1793, -1
  br i1 %1794, label %1795, label %1806

1795:                                             ; preds = %1791
  %1796 = load i64, ptr %137, align 8, !tbaa !169
  %1797 = icmp ne i64 %1796, 0
  br i1 %1797, label %1798, label %1806

1798:                                             ; preds = %1795
  call void @llvm.lifetime.start.p0(i64 32, ptr %138) #9
  %1799 = load i64, ptr %137, align 8, !tbaa !169
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %138, ptr noundef nonnull align 8 dereferenceable(32) %115, i64 noundef %1799, i64 noundef -1)
          to label %1800 unwind label %1802

1800:                                             ; preds = %1798
  %1801 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %138) #9
  br label %1806

1802:                                             ; preds = %1798
  %1803 = landingpad { ptr, i32 }
          cleanup
  %1804 = extractvalue { ptr, i32 } %1803, 0
  store ptr %1804, ptr %23, align 8
  %1805 = extractvalue { ptr, i32 } %1803, 1
  store i32 %1805, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %138) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  br label %1847

1806:                                             ; preds = %1800, %1795, %1791
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  br label %1807

1807:                                             ; preds = %1806, %1790
  br label %1808

1808:                                             ; preds = %1807, %1775, %1772
  %1809 = load i8, ptr %42, align 1, !tbaa !11, !range !13, !noundef !14
  %1810 = trunc i8 %1809 to i1
  br i1 %1810, label %1811, label %1837

1811:                                             ; preds = %1808
  %1812 = load i8, ptr %51, align 1, !tbaa !11, !range !13, !noundef !14
  %1813 = trunc i8 %1812 to i1
  br i1 %1813, label %1814, label %1818

1814:                                             ; preds = %1811
  %1815 = load i32, ptr %50, align 4, !tbaa !9
  %1816 = icmp eq i32 %1815, 1
  %1817 = zext i1 %1816 to i8
  store i8 %1817, ptr %42, align 1, !tbaa !11
  br label %1836

1818:                                             ; preds = %1811
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #9
  %1819 = load i32, ptr %50, align 4, !tbaa !9
  %1820 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1819)
          to label %1821 unwind label %1830

1821:                                             ; preds = %1818
  store ptr %1820, ptr %139, align 8, !tbaa !5
  %1822 = load ptr, ptr %139, align 8, !tbaa !5
  %1823 = icmp ne ptr %1822, null
  br i1 %1823, label %1824, label %1834

1824:                                             ; preds = %1821
  %1825 = load ptr, ptr %139, align 8, !tbaa !5
  %1826 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1825, i32 noundef 0, i32 noundef 0)
          to label %1827 unwind label %1830

1827:                                             ; preds = %1824
  %1828 = icmp eq i32 %1826, 1
  %1829 = zext i1 %1828 to i8
  store i8 %1829, ptr %42, align 1, !tbaa !11
  br label %1835

1830:                                             ; preds = %1824, %1818
  %1831 = landingpad { ptr, i32 }
          cleanup
  %1832 = extractvalue { ptr, i32 } %1831, 0
  store ptr %1832, ptr %23, align 8
  %1833 = extractvalue { ptr, i32 } %1831, 1
  store i32 %1833, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  br label %1847

1834:                                             ; preds = %1821
  store i8 0, ptr %42, align 1, !tbaa !11
  br label %1835

1835:                                             ; preds = %1834, %1827
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  br label %1836

1836:                                             ; preds = %1835, %1814
  br label %1837

1837:                                             ; preds = %1836, %1808
  %1838 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %115)
          to label %1839 unwind label %1550

1839:                                             ; preds = %1837
  store i8 0, ptr %33, align 1, !tbaa !11
  store i8 0, ptr %34, align 1, !tbaa !11
  store i32 0, ptr %35, align 4, !tbaa !9
  %1840 = load ptr, ptr %28, align 8, !tbaa !5
  %1841 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1840, i32 0, i32 16
  %1842 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1841)
          to label %1843 unwind label %1550

1843:                                             ; preds = %1839
  store i32 %1842, ptr %27, align 4, !tbaa !9
  %1844 = load i32, ptr %27, align 4, !tbaa !9
  %1845 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %140, i32 noundef %1844)
          to label %1846 unwind label %1550

1846:                                             ; preds = %1843
  store ptr %1845, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #9
  br label %1862

1847:                                             ; preds = %1830, %1802, %1770, %1750, %1655, %1577, %1550
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #9
  br label %1848

1848:                                             ; preds = %1847, %1534
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #9
  br label %1870

1849:                                             ; preds = %1474
  %1850 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %140, i32 0, i32 21
  %1851 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1850, i32 0, i32 34
  %1852 = load i8, ptr %1851, align 1, !tbaa !178, !range !13, !noundef !14
  %1853 = trunc i8 %1852 to i1
  br i1 %1853, label %1861, label %1854

1854:                                             ; preds = %1849
  %1855 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1855, ptr noundef @.str.1363)
          to label %1856 unwind label %1857

1856:                                             ; preds = %1854
  invoke void @__cxa_throw(ptr %1855, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %1945 unwind label %421

1857:                                             ; preds = %1854
  %1858 = landingpad { ptr, i32 }
          cleanup
  %1859 = extractvalue { ptr, i32 } %1858, 0
  store ptr %1859, ptr %23, align 8
  %1860 = extractvalue { ptr, i32 } %1858, 1
  store i32 %1860, ptr %24, align 4
  call void @__cxa_free_exception(ptr %1855) #9
  br label %1870

1861:                                             ; preds = %1849
  br label %1862

1862:                                             ; preds = %1861, %1846
  br label %1863

1863:                                             ; preds = %1862, %1473
  br label %1864

1864:                                             ; preds = %1863, %1400
  br label %1865

1865:                                             ; preds = %1864, %1152
  br label %1866

1866:                                             ; preds = %1865, %705
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  br label %1867

1867:                                             ; preds = %1866
  %1868 = load i32, ptr %48, align 4, !tbaa !9
  %1869 = add i32 %1868, 1
  store i32 %1869, ptr %48, align 4, !tbaa !9
  br label %368, !llvm.loop !179

1870:                                             ; preds = %1857, %1848, %1461, %1439, %1423, %1339, %1190, %1153, %701, %675, %541, %500, %484, %433, %421
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %1927

1871:                                             ; preds = %372
  %1872 = load i8, ptr %40, align 1, !tbaa !11, !range !13, !noundef !14
  %1873 = trunc i8 %1872 to i1
  br i1 %1873, label %1874, label %1885

1874:                                             ; preds = %1871
  %1875 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1875, ptr noundef @.str.1364)
          to label %1876 unwind label %1877

1876:                                             ; preds = %1874
  invoke void @__cxa_throw(ptr %1875, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %1945 unwind label %1881

1877:                                             ; preds = %1874
  %1878 = landingpad { ptr, i32 }
          cleanup
  %1879 = extractvalue { ptr, i32 } %1878, 0
  store ptr %1879, ptr %23, align 8
  %1880 = extractvalue { ptr, i32 } %1878, 1
  store i32 %1880, ptr %24, align 4
  call void @__cxa_free_exception(ptr %1875) #9
  br label %1927

1881:                                             ; preds = %1876
  %1882 = landingpad { ptr, i32 }
          cleanup
  %1883 = extractvalue { ptr, i32 } %1882, 0
  store ptr %1883, ptr %23, align 8
  %1884 = extractvalue { ptr, i32 } %1882, 1
  store i32 %1884, ptr %24, align 4
  br label %1927

1885:                                             ; preds = %1871
  %1886 = load ptr, ptr %14, align 8, !tbaa !5
  %1887 = icmp ne ptr %1886, null
  br i1 %1887, label %1888, label %1925

1888:                                             ; preds = %1885
  %1889 = load i8, ptr %33, align 1, !tbaa !11, !range !13, !noundef !14
  %1890 = trunc i8 %1889 to i1
  %1891 = load ptr, ptr %14, align 8, !tbaa !5
  %1892 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %1891, i32 0, i32 1
  %1893 = zext i1 %1890 to i8
  store i8 %1893, ptr %1892, align 4, !tbaa !180
  %1894 = load i8, ptr %34, align 1, !tbaa !11, !range !13, !noundef !14
  %1895 = trunc i8 %1894 to i1
  %1896 = load ptr, ptr %14, align 8, !tbaa !5
  %1897 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %1896, i32 0, i32 2
  %1898 = zext i1 %1895 to i8
  store i8 %1898, ptr %1897, align 1, !tbaa !182
  %1899 = load i8, ptr %36, align 1, !tbaa !11, !range !13, !noundef !14
  %1900 = trunc i8 %1899 to i1
  %1901 = load ptr, ptr %14, align 8, !tbaa !5
  %1902 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %1901, i32 0, i32 3
  %1903 = zext i1 %1900 to i8
  store i8 %1903, ptr %1902, align 2, !tbaa !183
  %1904 = load i32, ptr %35, align 4, !tbaa !9
  %1905 = load ptr, ptr %14, align 8, !tbaa !5
  %1906 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %1905, i32 0, i32 0
  store i32 %1904, ptr %1906, align 4, !tbaa !184
  %1907 = load i8, ptr %38, align 1, !tbaa !11, !range !13, !noundef !14
  %1908 = trunc i8 %1907 to i1
  %1909 = load ptr, ptr %14, align 8, !tbaa !5
  %1910 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %1909, i32 0, i32 5
  %1911 = zext i1 %1908 to i8
  store i8 %1911, ptr %1910, align 4, !tbaa !185
  %1912 = load i8, ptr %42, align 1, !tbaa !11, !range !13, !noundef !14
  %1913 = trunc i8 %1912 to i1
  %1914 = load ptr, ptr %14, align 8, !tbaa !5
  %1915 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %1914, i32 0, i32 6
  %1916 = zext i1 %1913 to i8
  store i8 %1916, ptr %1915, align 1, !tbaa !186
  %1917 = load i8, ptr %43, align 1, !tbaa !11, !range !13, !noundef !14
  %1918 = trunc i8 %1917 to i1
  %1919 = load ptr, ptr %14, align 8, !tbaa !5
  %1920 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %1919, i32 0, i32 7
  %1921 = zext i1 %1918 to i8
  store i8 %1921, ptr %1920, align 2, !tbaa !187
  %1922 = load i32, ptr %44, align 4, !tbaa !141
  %1923 = load ptr, ptr %14, align 8, !tbaa !5
  %1924 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %1923, i32 0, i32 8
  store i32 %1922, ptr %1924, align 4, !tbaa !188
  br label %1925

1925:                                             ; preds = %1888, %1885
  store i1 true, ptr %15, align 1
  store i32 1, ptr %49, align 4
  call void @llvm.lifetime.end.p0(i64 56, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #9
  %1926 = load i1, ptr %15, align 1
  br i1 %1926, label %1939, label %1938

1927:                                             ; preds = %1881, %1877, %1870
  call void @llvm.lifetime.end.p0(i64 56, ptr %47) #9
  br label %1928

1928:                                             ; preds = %1927, %373
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #9
  br label %1929

1929:                                             ; preds = %1928, %344
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #9
  br label %1930

1930:                                             ; preds = %1929, %340
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  br label %1931

1931:                                             ; preds = %1930, %336
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #9
  br label %1932

1932:                                             ; preds = %1931, %332
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %1933

1933:                                             ; preds = %1932, %328
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #9
  br label %1934

1934:                                             ; preds = %1933, %324
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  br label %1935

1935:                                             ; preds = %1934, %279, %249, %235, %231
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %1936

1936:                                             ; preds = %1935, %227
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  br label %1937

1937:                                             ; preds = %1936, %209
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  br label %1940

1938:                                             ; preds = %1925
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  br label %1939

1939:                                             ; preds = %1938, %1925
  ret void

1940:                                             ; preds = %1937
  %1941 = load ptr, ptr %23, align 8
  %1942 = load i32, ptr %24, align 4
  %1943 = insertvalue { ptr, i32 } poison, ptr %1941, 0
  %1944 = insertvalue { ptr, i32 } %1943, i32 %1942, 1
  resume { ptr, i32 } %1944

1945:                                             ; preds = %1876, %1856, %1189, %226
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i64 noundef) #4 align 2

declare noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #5

declare noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #5

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i64 noundef) #4 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_jEEES9_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), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i1 noundef zeroext, i1 noundef zeroext) #8 align 2

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

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef) #5

declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8Compiler25get_member_qualified_nameB5cxx11ENS_7TypedIDILNS_5TypesE1EEEj(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #5

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef) #5

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

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

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

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

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

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


; 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] }
%"class.spirv_cross::TypedID.280" = type { i32 }
%class.anon.390 = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::allocator.71" = type { i8 }

@.str.11 = external hidden unnamed_addr constant [90 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.286 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.308 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.713 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.719 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.760 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1102 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1349 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.1350 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1351 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1352 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1353 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1354 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1355 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE = external hidden unnamed_addr constant [131 x i8], align 1
@.str.1356 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1357 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1358 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1359 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1360 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1361 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1362 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1363 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1364 = external hidden unnamed_addr constant [154 x i8], align 1

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

; 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 #2 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #5

; 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 #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360), i32 noundef, i32 noundef) local_unnamed_addr #6 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #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 #5

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

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

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

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

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

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

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

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

; 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 #4 align 2

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #5

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #5

declare noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) local_unnamed_addr #5

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #5

declare noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #5

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind noalias nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %2, ptr nocapture noundef readonly %3, i32 noundef %4, i32 noundef %5, ptr noundef writeonly %6) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca ptr, 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 i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  %18 = alloca %"class.spirv_cross::TypedID.280", align 4
  %19 = alloca %"class.spirv_cross::TypedID.280", align 4
  %20 = alloca %class.anon.390, align 8
  %21 = alloca i32, align 4
  %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
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"struct.spirv_cross::SPIRType", align 8
  %29 = alloca %"class.spirv_cross::TypedID.281", align 4
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca i32, align 4
  %35 = alloca %"class.spirv_cross::TypedID.280", align 4
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.spirv_cross::TypedID.280", align 4
  %42 = alloca %"class.std::__cxx11::basic_string", 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
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.spirv_cross::TypedID.280", align 4
  %59 = alloca i32, align 4
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.spirv_cross::TypedID.281", align 4
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca i32, align 4
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"class.std::allocator.71", align 1
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  store i32 %2, ptr %8, align 4, !tbaa !5
  store i32 %5, ptr %9, align 4, !tbaa !5
  tail call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  %81 = and i32 %5, 1
  %.not = icmp eq i32 %81, 0
  %82 = trunc nuw nsw i32 %81 to i8
  %83 = and i32 %5, 2
  %.not318 = icmp eq i32 %83, 0
  %84 = and i32 %5, 4
  %85 = icmp ne i32 %84, 0
  %86 = and i32 %5, 8
  %87 = icmp eq i32 %86, 0
  %88 = and i32 %5, 32
  %.not319 = icmp eq i32 %88, 0
  br i1 %.not318, label %89, label %105

89:                                               ; preds = %7
  %90 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %2)
          to label %91 unwind label %95

91:                                               ; preds = %89
  %.not320 = icmp eq ptr %90, null
  br i1 %.not320, label %.thread, label %92

92:                                               ; preds = %91
  %93 = getelementptr inbounds i8, ptr %90, i64 57
  %94 = load i8, ptr %93, align 1, !tbaa !9, !range !22, !noundef !23
  store i8 0, ptr %93, align 1, !tbaa !9
  br label %.thread

95:                                               ; preds = %89
  %96 = landingpad { ptr, i32 }
          cleanup
  br label %1131

.thread:                                          ; preds = %91, %92
  %97 = phi i8 [ %94, %92 ], [ 0, %91 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #8
  %98 = load i32, ptr %8, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %98, i1 noundef zeroext %87)
          to label %99 unwind label %103

99:                                               ; preds = %.thread
  %100 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br i1 %.not320, label %105, label %101

101:                                              ; preds = %99
  %102 = getelementptr inbounds i8, ptr %90, i64 57
  store i8 %97, ptr %102, align 1, !tbaa !9
  br label %105

103:                                              ; preds = %.thread
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %1131

105:                                              ; preds = %99, %101, %7
  %106 = load i32, ptr %8, align 4, !tbaa !5
  %107 = invoke noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %106)
          to label %108 unwind label %118

108:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %109 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %107)
          to label %110 unwind label %120

110:                                              ; preds = %108
  store ptr %109, ptr %11, align 8, !tbaa !24
  %111 = getelementptr inbounds i8, ptr %1, i64 8401
  %112 = load i8, ptr %111, align 1, !tbaa !25, !range !22, !noundef !23
  %113 = trunc nuw i8 %112 to i1
  br i1 %113, label %135, label %114

114:                                              ; preds = %110
  br i1 %85, label %115, label %124

115:                                              ; preds = %114
  %116 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %116, ptr noundef nonnull @.str.1349)
          to label %117 unwind label %122

117:                                              ; preds = %115
  invoke void @__cxa_throw(ptr nonnull %116, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %1132 unwind label %120

118:                                              ; preds = %105
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %1131

120:                                              ; preds = %135, %124, %117, %108
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %1130

122:                                              ; preds = %115
  %123 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %116) #8
  br label %1130

124:                                              ; preds = %114
  %125 = load i32, ptr %8, align 4, !tbaa !5
  %126 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18should_dereferenceEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %125)
          to label %127 unwind label %120

127:                                              ; preds = %124
  br i1 %126, label %128, label %152

128:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #8
  %129 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %107)
          to label %130 unwind label %133

130:                                              ; preds = %128
  invoke void @_ZN11spirv_cross12CompilerGLSL22dereference_expressionERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %129, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %131 unwind label %133

131:                                              ; preds = %130
  %132 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  br label %152

133:                                              ; preds = %130, %128
  %134 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  br label %1130

135:                                              ; preds = %110
  %136 = load i32, ptr %8, align 4, !tbaa !5
  %137 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18should_dereferenceEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %136)
          to label %138 unwind label %120

138:                                              ; preds = %135
  br i1 %137, label %139, label %152

139:                                              ; preds = %138
  %140 = load ptr, ptr %11, align 8, !tbaa !24
  %141 = getelementptr inbounds i8, ptr %140, i64 16
  %142 = load i32, ptr %141, align 8, !tbaa !127
  %.not322 = icmp eq i32 %142, 15
  %brmerge = or i1 %85, %.not322
  br i1 %brmerge, label %152, label %143

143:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22dereference_expressionERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %140, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %144 unwind label %147

144:                                              ; preds = %143
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %145 unwind label %149

145:                                              ; preds = %144
  %146 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  br label %152

147:                                              ; preds = %143
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %151

149:                                              ; preds = %144
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  br label %151

151:                                              ; preds = %149, %147
  %.pn323 = phi { ptr, i32 } [ %150, %149 ], [ %148, %147 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  br label %1130

152:                                              ; preds = %139, %138, %145, %127, %131
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #8
  %153 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 91, i64 noundef 0) #8
  %154 = icmp ne i64 %153, -1
  %155 = zext i1 %154 to i8
  store i8 %155, ptr %15, align 1, !tbaa !138
  %156 = load i32, ptr %8, align 4, !tbaa !5
  %157 = load ptr, ptr %1, align 8, !tbaa !139
  %158 = getelementptr inbounds i8, ptr %157, i64 320
  %159 = load ptr, ptr %158, align 8
  %160 = invoke noundef zeroext i1 %159(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %156)
          to label %161 unwind label %186

161:                                              ; preds = %152
  %162 = zext i1 %160 to i8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #8
  %163 = load i32, ptr %8, align 4, !tbaa !5
  %164 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %163, i32 noundef 2)
          to label %165 unwind label %188

165:                                              ; preds = %161
  %166 = zext i1 %164 to i8
  store i8 %166, ptr %16, align 1, !tbaa !138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #8
  %167 = load i32, ptr %8, align 4, !tbaa !5
  %168 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %167, i32 noundef 1)
          to label %169 unwind label %190

169:                                              ; preds = %165
  store i32 %168, ptr %17, align 4, !tbaa !5
  %170 = load i32, ptr %8, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %18, i32 noundef %170)
  %171 = load i32, ptr %18, align 4
  %172 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %171, i32 noundef 18)
          to label %173 unwind label %192

173:                                              ; preds = %169
  %174 = zext i1 %172 to i8
  %175 = load i32, ptr %8, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef %175)
  %176 = load i32, ptr %19, align 4
  %177 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %176, i32 noundef 0)
          to label %178 unwind label %194

178:                                              ; preds = %173
  %179 = zext i1 %177 to i8
  %180 = load i32, ptr %8, align 4, !tbaa !5
  %181 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %180)
          to label %182 unwind label %196

182:                                              ; preds = %178
  %.not325 = icmp eq ptr %181, null
  br i1 %.not325, label %198, label %183

183:                                              ; preds = %182
  %184 = getelementptr inbounds i8, ptr %181, i64 59
  %185 = load i8, ptr %184, align 1, !tbaa !141, !range !22, !noundef !23
  br label %198

186:                                              ; preds = %152
  %187 = landingpad { ptr, i32 }
          cleanup
  br label %1129

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

190:                                              ; preds = %165
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %1127

192:                                              ; preds = %169
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %1127

194:                                              ; preds = %173
  %195 = landingpad { ptr, i32 }
          cleanup
  br label %1127

196:                                              ; preds = %178
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %1127

198:                                              ; preds = %183, %182
  %.0275 = phi i8 [ %185, %183 ], [ 0, %182 ]
  %199 = icmp ugt i32 %4, 1
  br i1 %199, label %200, label %206

200:                                              ; preds = %198
  %201 = load i32, ptr %8, align 4, !tbaa !5
  %202 = load ptr, ptr %1, align 8, !tbaa !139
  %203 = getelementptr inbounds i8, ptr %202, i64 296
  %204 = load ptr, ptr %203, align 8
  %205 = invoke noundef zeroext i1 %204(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %201)
          to label %206 unwind label %224

206:                                              ; preds = %200, %198
  %207 = phi i1 [ false, %198 ], [ %205, %200 ]
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %20) #8
  store ptr %9, ptr %20, align 8, !tbaa !24
  %208 = getelementptr inbounds i8, ptr %20, i64 8
  store ptr %1, ptr %208, align 8, !tbaa !142
  %209 = getelementptr inbounds i8, ptr %20, i64 16
  store ptr %0, ptr %209, align 8, !tbaa !24
  %210 = getelementptr inbounds i8, ptr %20, i64 24
  store ptr %8, ptr %210, align 8, !tbaa !24
  %211 = getelementptr inbounds i8, ptr %20, i64 32
  store ptr %11, ptr %211, align 8, !tbaa !24
  %212 = getelementptr inbounds i8, ptr %20, i64 40
  store ptr %15, ptr %212, align 8, !tbaa !24
  %213 = getelementptr inbounds i8, ptr %20, i64 48
  store ptr %17, ptr %213, align 8, !tbaa !24
  %.not1107 = icmp eq i32 %4, 0
  br i1 %.not1107, label %._crit_edge1100.thread, label %.lr.ph1099

.lr.ph1099:                                       ; preds = %206
  %214 = and i32 %5, 17
  %brmerge433 = icmp ne i32 %214, 17
  %215 = getelementptr inbounds i8, ptr %1, i64 7650
  %216 = getelementptr inbounds i8, ptr %1, i64 8392
  %217 = getelementptr inbounds i8, ptr %1, i64 256
  %218 = getelementptr inbounds i8, ptr %1, i64 8393
  %219 = getelementptr inbounds i8, ptr %1, i64 8395
  %220 = getelementptr inbounds i8, ptr %1, i64 40
  %221 = getelementptr inbounds i8, ptr %28, i64 16
  %wide.trip.count = zext i32 %4 to i64
  br label %226

._crit_edge1100:                                  ; preds = %1102
  %222 = trunc nuw i8 %.7270 to i1
  %223 = and i8 %.4288, 1
  br i1 %222, label %1104, label %._crit_edge1100.thread

224:                                              ; preds = %200
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %1127

226:                                              ; preds = %.lr.ph1099, %1102
  %indvars.iv = phi i64 [ 0, %.lr.ph1099 ], [ %indvars.iv.next, %1102 ]
  %.02481096 = phi i32 [ %107, %.lr.ph1099 ], [ %.2250, %1102 ]
  %.02511095 = phi i8 [ %162, %.lr.ph1099 ], [ %.1252, %1102 ]
  %.02531094 = phi i8 [ %174, %.lr.ph1099 ], [ %.2255, %1102 ]
  %.02561093 = phi i8 [ %179, %.lr.ph1099 ], [ %.2258, %1102 ]
  %.02631092 = phi i8 [ 0, %.lr.ph1099 ], [ %.7270, %1102 ]
  %.02711091 = phi i8 [ 0, %.lr.ph1099 ], [ %.3274, %1102 ]
  %.12761090 = phi i8 [ %.0275, %.lr.ph1099 ], [ %.8283, %1102 ]
  %.02841089 = phi i8 [ 0, %.lr.ph1099 ], [ %.4288, %1102 ]
  %.02891088 = phi i32 [ 0, %.lr.ph1099 ], [ %.4293, %1102 ]
  %.02941087 = phi i1 [ %207, %.lr.ph1099 ], [ %.2296, %1102 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #8
  %227 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv
  %228 = load i32, ptr %227, align 4, !tbaa !5
  %.not327 = icmp sgt i32 %228, -1
  %or.cond434 = select i1 %brmerge433, i1 true, i1 %.not327
  %229 = and i32 %228, 2147483647
  %spec.select471 = select i1 %brmerge433, i32 %228, i32 %229
  %spec.select472 = select i1 %or.cond434, i8 %82, i8 0
  store i32 %spec.select471, ptr %21, align 4, !tbaa !5
  %230 = icmp eq i64 %indvars.iv, 0
  %or.cond = and i1 %85, %230
  %231 = load ptr, ptr %11, align 8, !tbaa !24
  br i1 %or.cond, label %232, label %408

232:                                              ; preds = %226
  %233 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %231)
          to label %234 unwind label %.loopexit

234:                                              ; preds = %232
  br i1 %233, label %235, label %248

235:                                              ; preds = %234
  %236 = load i32, ptr %8, align 4, !tbaa !5
  %237 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18should_dereferenceEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %236)
          to label %238 unwind label %.loopexit

238:                                              ; preds = %235
  br i1 %237, label %248, label %239

239:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL21address_of_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %240 unwind label %243

240:                                              ; preds = %239
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %23)
          to label %241 unwind label %245

241:                                              ; preds = %240
  %242 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  br label %248

.loopexit:                                        ; preds = %232, %235, %255, %305, %.thread450, %389, %397, %421, %658, %792, %796, %799, %803, %806, %810, %816, %822, %829, %843, %862, %879
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %1103

.loopexit.split-lp:                               ; preds = %.invoke
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %1103

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

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

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

248:                                              ; preds = %238, %241, %234
  %249 = load i8, ptr %215, align 2, !tbaa !144, !range !22, !noundef !23
  %250 = trunc nuw i8 %249 to i1
  br i1 %250, label %251, label %257

251:                                              ; preds = %248
  %252 = load ptr, ptr %11, align 8, !tbaa !24
  %253 = getelementptr inbounds i8, ptr %252, i64 32
  %254 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %253) #8
  %.not470 = icmp eq i64 %254, 0
  br i1 %.not470, label %257, label %255

255:                                              ; preds = %251
  %256 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.308)
          to label %257 unwind label %.loopexit

257:                                              ; preds = %251, %255, %248
  %.1272 = phi i8 [ 1, %255 ], [ 0, %251 ], [ %.02711091, %248 ]
  %.1264 = phi i8 [ 1, %255 ], [ 0, %251 ], [ %.02631092, %248 ]
  %258 = load i8, ptr %215, align 2, !tbaa !144, !range !22, !noundef !23
  %259 = trunc nuw i8 %258 to i1
  br i1 %259, label %260, label %310

260:                                              ; preds = %257
  %261 = trunc nuw i8 %.1272 to i1
  br i1 %261, label %262, label %310

262:                                              ; preds = %260
  %263 = trunc nuw i8 %spec.select472 to i1
  br i1 %263, label %264, label %269

264:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #8
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 4 dereferenceable(4) %21)
  %265 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %266 unwind label %267

266:                                              ; preds = %264
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %279

267:                                              ; preds = %264
  %268 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %1103

269:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #8
  %270 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %270, i1 noundef zeroext %87)
          to label %271 unwind label %274

271:                                              ; preds = %269
  %272 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %273 unwind label %276

273:                                              ; preds = %271
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  br label %279

274:                                              ; preds = %269
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %278

276:                                              ; preds = %271
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  br label %278

278:                                              ; preds = %276, %274
  %.pn414 = phi { ptr, i32 } [ %277, %276 ], [ %275, %274 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  br label %1103

279:                                              ; preds = %273, %266
  %280 = load ptr, ptr %11, align 8, !tbaa !24
  %281 = getelementptr inbounds i8, ptr %280, i64 32
  %282 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %281) #8
  %283 = trunc i64 %282 to i32
  %.not4161078 = icmp eq i32 %283, 0
  br i1 %.not4161078, label %._crit_edge1082, label %.lr.ph1081

._crit_edge1082:                                  ; preds = %294, %279
  %284 = load ptr, ptr %11, align 8, !tbaa !24
  %285 = getelementptr inbounds i8, ptr %284, i64 32
  %286 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %285) #8
  br i1 %286, label %.thread450, label %305

.lr.ph1081:                                       ; preds = %279, %294
  %.03001079 = phi i32 [ %290, %294 ], [ %283, %279 ]
  %287 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.976)
          to label %288 unwind label %295

288:                                              ; preds = %.lr.ph1081
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #8
  %289 = load ptr, ptr %11, align 8, !tbaa !24
  %290 = add i32 %.03001079, -1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_array_sizeB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %289, i32 noundef %290)
          to label %291 unwind label %297

291:                                              ; preds = %288
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %292 unwind label %299

292:                                              ; preds = %291
  %293 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %294 unwind label %301

294:                                              ; preds = %292
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  %.not416 = icmp eq i32 %290, 0
  br i1 %.not416, label %._crit_edge1082, label %.lr.ph1081, !llvm.loop !145

295:                                              ; preds = %.lr.ph1081
  %296 = landingpad { ptr, i32 }
          cleanup
  br label %1103

297:                                              ; preds = %288
  %298 = landingpad { ptr, i32 }
          cleanup
  br label %304

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

301:                                              ; preds = %292
  %302 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %303

303:                                              ; preds = %301, %299
  %.pn417 = phi { ptr, i32 } [ %302, %301 ], [ %300, %299 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  br label %304

304:                                              ; preds = %303, %297
  %.pn417.pn = phi { ptr, i32 } [ %.pn417, %303 ], [ %298, %297 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  br label %1103

305:                                              ; preds = %._crit_edge1082
  %306 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1102)
          to label %307 unwind label %.loopexit

307:                                              ; preds = %305
  %308 = trunc nuw i8 %.1264 to i1
  br i1 %308, label %392, label %.thread450

.thread450:                                       ; preds = %._crit_edge1082, %307
  %.2265452 = phi i8 [ %.1264, %307 ], [ 0, %._crit_edge1082 ]
  %309 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.713)
          to label %392 unwind label %.loopexit

310:                                              ; preds = %260, %257
  %311 = load i32, ptr %9, align 4, !tbaa !5
  %312 = and i32 %311, 128
  %.not397 = icmp eq i32 %312, 0
  br i1 %.not397, label %389, label %313

313:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %28) #8
  invoke void @_ZN11spirv_cross8SPIRTypeC2EN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(336) %28, i32 noundef 21)
          to label %314 unwind label %346

314:                                              ; preds = %313
  store <4 x i32> <i32 10, i32 64, i32 1, i32 1>, ptr %221, align 8, !tbaa !147
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #8
  %315 = load i32, ptr %8, align 4, !tbaa !5
  %316 = invoke noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %315)
          to label %317 unwind label %348

317:                                              ; preds = %314
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %29, i32 noundef %316)
  %318 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %29)
  %319 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %318)
          to label %320 unwind label %350

320:                                              ; preds = %317
  %321 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %319)
          to label %322 unwind label %352

322:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #8
  %323 = load ptr, ptr %1, align 8, !tbaa !139
  %324 = getelementptr inbounds i8, ptr %323, i64 152
  %325 = load ptr, ptr %324, align 8
  invoke void %325(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %28, i32 noundef 0)
          to label %326 unwind label %354

326:                                              ; preds = %322
  invoke void @_ZN11spirv_cross4joinIJRA18_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 1 dereferenceable(18) @.str.1350, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 1 dereferenceable(3) @.str.1351, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %327 unwind label %356

327:                                              ; preds = %326
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #8
  %328 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %328, i1 noundef zeroext true)
          to label %329 unwind label %359

329:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %35, ptr noundef nonnull align 4 dereferenceable(4) %29)
          to label %330 unwind label %361

330:                                              ; preds = %329
  %331 = load i32, ptr %35, align 4
  %332 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %331, i32 noundef 6)
          to label %333 unwind label %361

333:                                              ; preds = %330
  store i32 %332, ptr %34, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_jEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 1 dereferenceable(4) @.str.1102, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %334 unwind label %361

334:                                              ; preds = %333
  %335 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %336 unwind label %363

336:                                              ; preds = %334
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %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 nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  %337 = load i32, ptr %9, align 4, !tbaa !5
  %338 = and i32 %337, 256
  %.not403 = icmp eq i32 %338, 0
  br i1 %.not403, label %372, label %339

339:                                              ; preds = %336
  store i8 1, ptr %16, align 1, !tbaa !138
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #8
  %340 = load ptr, ptr %1, align 8, !tbaa !139
  %341 = getelementptr inbounds i8, ptr %340, i64 152
  %342 = load ptr, ptr %341, align 8
  invoke void %342(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %321, i32 noundef 0)
          to label %343 unwind label %367

343:                                              ; preds = %339
  invoke void @_ZN11spirv_cross4joinIJRA33_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 1 dereferenceable(33) @.str.1352, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(5) @.str.1353, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %344 unwind label %369

344:                                              ; preds = %343
  %345 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  br label %384

346:                                              ; preds = %313
  %347 = landingpad { ptr, i32 }
          cleanup
  br label %388

348:                                              ; preds = %314
  %349 = landingpad { ptr, i32 }
          cleanup
  br label %387

350:                                              ; preds = %317
  %351 = landingpad { ptr, i32 }
          cleanup
  br label %387

352:                                              ; preds = %320
  %353 = landingpad { ptr, i32 }
          cleanup
  br label %387

354:                                              ; preds = %322
  %355 = landingpad { ptr, i32 }
          cleanup
  br label %358

356:                                              ; preds = %326
  %357 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %358

358:                                              ; preds = %356, %354
  %.pn398 = phi { ptr, i32 } [ %357, %356 ], [ %355, %354 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #8
  br label %386

359:                                              ; preds = %327
  %360 = landingpad { ptr, i32 }
          cleanup
  br label %366

361:                                              ; preds = %333, %330, %329
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %365

363:                                              ; preds = %334
  %364 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %365

365:                                              ; preds = %363, %361
  %.pn400 = phi { ptr, i32 } [ %364, %363 ], [ %362, %361 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  br label %366

366:                                              ; preds = %365, %359
  %.pn400.pn = phi { ptr, i32 } [ %.pn400, %365 ], [ %360, %359 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  br label %385

367:                                              ; preds = %339
  %368 = landingpad { ptr, i32 }
          cleanup
  br label %371

369:                                              ; preds = %343
  %370 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %371

371:                                              ; preds = %369, %367
  %.pn406 = phi { ptr, i32 } [ %370, %369 ], [ %368, %367 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  br label %385

372:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #8
  %373 = load ptr, ptr %1, align 8, !tbaa !139
  %374 = getelementptr inbounds i8, ptr %373, i64 152
  %375 = load ptr, ptr %374, align 8
  invoke void %375(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %319, i32 noundef 0)
          to label %376 unwind label %379

376:                                              ; preds = %372
  invoke void @_ZN11spirv_cross4joinIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 1 dereferenceable(19) @.str.1354, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(3) @.str.1351, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %377 unwind label %381

377:                                              ; preds = %376
  %378 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  br label %384

379:                                              ; preds = %372
  %380 = landingpad { ptr, i32 }
          cleanup
  br label %383

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

383:                                              ; preds = %381, %379
  %.pn404 = phi { ptr, i32 } [ %382, %381 ], [ %380, %379 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  br label %385

384:                                              ; preds = %377, %344
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %28) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %28) #8
  br label %392

385:                                              ; preds = %383, %371, %366
  %.pn406.pn = phi { ptr, i32 } [ %.pn406, %371 ], [ %.pn404, %383 ], [ %.pn400.pn, %366 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %386

386:                                              ; preds = %385, %358
  %.pn406.pn.pn = phi { ptr, i32 } [ %.pn406.pn, %385 ], [ %.pn398, %358 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  br label %387

387:                                              ; preds = %350, %386, %352, %348
  %.pn406.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %349, %348 ], [ %351, %350 ], [ %.pn406.pn.pn, %386 ], [ %353, %352 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %28) #8
  br label %388

388:                                              ; preds = %387, %346
  %.pn406.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn406.pn.pn.pn.pn.pn, %387 ], [ %347, %346 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %28) #8
  br label %1103

389:                                              ; preds = %310
  %390 = load i32, ptr %21, align 4, !tbaa !5
  %391 = trunc nuw i8 %spec.select472 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %390, i1 noundef zeroext %391, i1 noundef zeroext true)
          to label %392 unwind label %.loopexit

392:                                              ; preds = %384, %389, %307, %.thread450
  %.3266 = phi i8 [ %.1264, %307 ], [ %.2265452, %.thread450 ], [ %.1264, %384 ], [ %.1264, %389 ]
  %393 = load ptr, ptr %11, align 8, !tbaa !24
  %394 = getelementptr inbounds i8, ptr %393, i64 16
  %395 = load i32, ptr %394, align 8, !tbaa !127
  %396 = icmp eq i32 %395, 21
  br i1 %396, label %397, label %402

397:                                              ; preds = %392
  %398 = getelementptr inbounds i8, ptr %393, i64 276
  %399 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  %400 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %399)
          to label %401 unwind label %.loopexit

401:                                              ; preds = %397
  store ptr %400, ptr %11, align 8, !tbaa !24
  br label %402

402:                                              ; preds = %401, %392
  %.1249 = phi i32 [ %399, %401 ], [ %.02481096, %392 ]
  store i8 1, ptr %15, align 1, !tbaa !138
  br i1 %233, label %403, label %1102

403:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #8
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %404 unwind label %406

404:                                              ; preds = %403
  %405 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  br label %1102

406:                                              ; preds = %403
  %407 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  br label %1103

408:                                              ; preds = %226
  %409 = getelementptr inbounds i8, ptr %231, i64 32
  %410 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %409) #8
  br i1 %410, label %651, label %411

411:                                              ; preds = %408
  %412 = load i8, ptr %215, align 2, !tbaa !144, !range !22, !noundef !23
  %413 = trunc nuw i8 %412 to i1
  br i1 %413, label %414, label %423

414:                                              ; preds = %411
  %415 = trunc nuw i8 %.02631092 to i1
  br i1 %415, label %423, label %416

416:                                              ; preds = %414
  %417 = load ptr, ptr %11, align 8, !tbaa !24
  %418 = getelementptr inbounds i8, ptr %417, i64 32
  %419 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %418) #8
  %420 = icmp ugt i64 %419, 1
  br i1 %420, label %421, label %423

421:                                              ; preds = %416
  %422 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.308)
          to label %423 unwind label %.loopexit

423:                                              ; preds = %416, %421, %414, %411
  %.2273 = phi i8 [ %.02711091, %414 ], [ 1, %421 ], [ 0, %416 ], [ %.02711091, %411 ]
  %.4267 = phi i8 [ %.02631092, %414 ], [ 1, %421 ], [ 0, %416 ], [ %.02631092, %411 ]
  %424 = load ptr, ptr %11, align 8, !tbaa !24
  %425 = getelementptr inbounds i8, ptr %424, i64 276
  %426 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %425)
  %.not330 = icmp eq i32 %426, 0
  br i1 %.not330, label %427, label %428

427:                                              ; preds = %423
  call void @__assert_fail(ptr noundef nonnull @.str.1355, ptr noundef nonnull @.str.11, i32 noundef 10357, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE) #10
  unreachable

428:                                              ; preds = %423
  %429 = load i32, ptr %8, align 4, !tbaa !5
  %430 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %429)
          to label %431 unwind label %452

431:                                              ; preds = %428
  %432 = load i8, ptr %216, align 8, !tbaa !148, !range !22, !noundef !23
  %433 = trunc nuw i8 %432 to i1
  %or.cond5 = and i1 %230, %433
  %434 = icmp ne ptr %430, null
  %or.cond7 = and i1 %434, %or.cond5
  br i1 %or.cond7, label %435, label %510

435:                                              ; preds = %431
  %436 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(176) %430)
          to label %437 unwind label %452

437:                                              ; preds = %435
  br i1 %436, label %438, label %510

438:                                              ; preds = %437
  %439 = load ptr, ptr %11, align 8, !tbaa !24
  %440 = getelementptr inbounds i8, ptr %439, i64 8
  %.sroa.060.0.copyload = load i32, ptr %440, align 8, !tbaa !5
  %441 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.060.0.copyload, i32 noundef 2)
          to label %442 unwind label %452

442:                                              ; preds = %438
  br i1 %441, label %510, label %443

443:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #8
  %444 = load i32, ptr %8, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %41, i32 noundef %444)
  %445 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %217, ptr noundef nonnull align 4 dereferenceable(4) %41)
          to label %446 unwind label %454

446:                                              ; preds = %443
  %447 = getelementptr inbounds i8, ptr %445, i64 192
  %448 = load i32, ptr %447, align 8, !tbaa !149
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #8
  %449 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %1)
          to label %450 unwind label %456

450:                                              ; preds = %446
  %451 = icmp eq i32 %449, 5365
  switch i32 %448, label %.invoke1140 [
    i32 4, label %458
    i32 3, label %458
    i32 0, label %463
    i32 1, label %463
    i32 7, label %497
    i32 9, label %497
    i32 10, label %497
    i32 5299, label %497
    i32 4432, label %497
  ]

452:                                              ; preds = %635, %632, %625, %621, %617, %.thread457, %610, %604, %600, %520, %513, %438, %435, %428
  %453 = landingpad { ptr, i32 }
          cleanup
  br label %1103

454:                                              ; preds = %443
  %455 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #8
  br label %1103

456:                                              ; preds = %.invoke1140, %446
  %457 = landingpad { ptr, i32 }
          cleanup
  br label %1103

458:                                              ; preds = %450, %450
  %459 = load ptr, ptr %11, align 8, !tbaa !24
  %460 = getelementptr inbounds i8, ptr %459, i64 32
  %461 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %460) #8
  %462 = icmp eq i64 %461, 1
  br i1 %462, label %.invoke1140, label %463

463:                                              ; preds = %458, %450, %450
  br i1 %451, label %464, label %474

464:                                              ; preds = %463
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #8
  %465 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %465, i1 noundef zeroext %87)
          to label %466 unwind label %469

466:                                              ; preds = %464
  invoke void @_ZN11spirv_cross4joinIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 1 dereferenceable(20) @.str.1356, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %467 unwind label %471

467:                                              ; preds = %466
  %468 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  br label %.thread457

469:                                              ; preds = %464
  %470 = landingpad { ptr, i32 }
          cleanup
  br label %473

471:                                              ; preds = %466
  %472 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  br label %473

473:                                              ; preds = %471, %469
  %.pn337 = phi { ptr, i32 } [ %472, %471 ], [ %470, %469 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  br label %1103

474:                                              ; preds = %463
  %475 = getelementptr inbounds i8, ptr %430, i64 16
  %476 = load i32, ptr %475, align 8, !tbaa !158
  switch i32 %476, label %.invoke1140 [
    i32 1, label %477
    i32 3, label %487
  ]

477:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #8
  %478 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %478, i1 noundef zeroext %87)
          to label %479 unwind label %482

479:                                              ; preds = %477
  invoke void @_ZN11spirv_cross4joinIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 1 dereferenceable(7) @.str.1358, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %480 unwind label %484

480:                                              ; preds = %479
  %481 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, 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 nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  br label %.thread457

482:                                              ; preds = %477
  %483 = landingpad { ptr, i32 }
          cleanup
  br label %486

484:                                              ; preds = %479
  %485 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %486

486:                                              ; preds = %484, %482
  %.pn335 = phi { ptr, i32 } [ %485, %484 ], [ %483, %482 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  br label %1103

487:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #8
  %488 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %488, i1 noundef zeroext %87)
          to label %489 unwind label %492

489:                                              ; preds = %487
  invoke void @_ZN11spirv_cross4joinIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 1 dereferenceable(8) @.str.1359, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %490 unwind label %494

490:                                              ; preds = %489
  %491 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  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 nonnull %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #8
  br label %.thread457

492:                                              ; preds = %487
  %493 = landingpad { ptr, i32 }
          cleanup
  br label %496

494:                                              ; preds = %489
  %495 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %496

496:                                              ; preds = %494, %492
  %.pn333 = phi { ptr, i32 } [ %495, %494 ], [ %493, %492 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #8
  br label %1103

497:                                              ; preds = %450, %450, %450, %450, %450
  br i1 %451, label %498, label %.invoke1140

498:                                              ; preds = %497
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #8
  %499 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %499, i1 noundef zeroext %87)
          to label %500 unwind label %503

500:                                              ; preds = %498
  invoke void @_ZN11spirv_cross4joinIJRA22_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 1 dereferenceable(22) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %501 unwind label %505

501:                                              ; preds = %500
  %502 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  br label %.thread457

503:                                              ; preds = %498
  %504 = landingpad { ptr, i32 }
          cleanup
  br label %507

505:                                              ; preds = %500
  %506 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  br label %507

507:                                              ; preds = %505, %503
  %.pn331 = phi { ptr, i32 } [ %506, %505 ], [ %504, %503 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  br label %1103

.invoke1140:                                      ; preds = %450, %497, %474, %458
  %508 = load i32, ptr %21, align 4, !tbaa !5
  %509 = trunc nuw i8 %spec.select472 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %508, i1 noundef zeroext %509, i1 noundef zeroext false)
          to label %.thread457 unwind label %456

510:                                              ; preds = %442, %437, %431
  %511 = load i8, ptr %218, align 1, !tbaa !162, !range !22, !noundef !23
  %512 = trunc nuw i8 %511 to i1
  %or.cond9 = and i1 %230, %512
  %or.cond11 = and i1 %434, %or.cond9
  br i1 %or.cond11, label %513, label %543

513:                                              ; preds = %510
  %514 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler19is_builtin_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(176) %430)
          to label %515 unwind label %452

515:                                              ; preds = %513
  br i1 %514, label %543, label %516

516:                                              ; preds = %515
  %517 = getelementptr inbounds i8, ptr %430, i64 16
  %518 = load i32, ptr %517, align 8, !tbaa !158
  %519 = icmp eq i32 %518, 3
  br i1 %519, label %520, label %543

520:                                              ; preds = %516
  %521 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL25is_per_primitive_variableERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(176) %430)
          to label %522 unwind label %452

522:                                              ; preds = %520
  br i1 %521, label %523, label %533

523:                                              ; preds = %522
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #8
  %524 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %524, i1 noundef zeroext %87)
          to label %525 unwind label %528

525:                                              ; preds = %523
  invoke void @_ZN11spirv_cross4joinIJRA22_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 1 dereferenceable(22) @.str.1360, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %526 unwind label %530

526:                                              ; preds = %525
  %527 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #8
  br label %.thread457

528:                                              ; preds = %523
  %529 = landingpad { ptr, i32 }
          cleanup
  br label %532

530:                                              ; preds = %525
  %531 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  br label %532

532:                                              ; preds = %530, %528
  %.pn344 = phi { ptr, i32 } [ %531, %530 ], [ %529, %528 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #8
  br label %1103

533:                                              ; preds = %522
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #8
  %534 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %534, i1 noundef zeroext %87)
          to label %535 unwind label %538

535:                                              ; preds = %533
  invoke void @_ZN11spirv_cross4joinIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 1 dereferenceable(20) @.str.1356, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(3) @.str.1357, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %536 unwind label %540

536:                                              ; preds = %535
  %537 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #8
  br label %.thread457

538:                                              ; preds = %533
  %539 = landingpad { ptr, i32 }
          cleanup
  br label %542

540:                                              ; preds = %535
  %541 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  br label %542

542:                                              ; preds = %540, %538
  %.pn342 = phi { ptr, i32 } [ %541, %540 ], [ %539, %538 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #8
  br label %1103

543:                                              ; preds = %516, %515, %510
  %544 = load i8, ptr %215, align 2, !tbaa !144, !range !22, !noundef !23
  %545 = trunc nuw i8 %544 to i1
  br i1 %545, label %546, label %599

546:                                              ; preds = %543
  %547 = trunc nuw i8 %.2273 to i1
  br i1 %547, label %548, label %599

548:                                              ; preds = %546
  %549 = load ptr, ptr %11, align 8, !tbaa !24
  %550 = getelementptr inbounds i8, ptr %549, i64 276
  %551 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %550)
  %552 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %551)
          to label %553 unwind label %558

553:                                              ; preds = %548
  %554 = trunc nuw i8 %spec.select472 to i1
  br i1 %554, label %555, label %562

555:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #8
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 4 dereferenceable(4) %21)
  %556 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %557 unwind label %560

557:                                              ; preds = %555
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  br label %572

558:                                              ; preds = %.thread453, %594, %548
  %559 = landingpad { ptr, i32 }
          cleanup
  br label %1103

560:                                              ; preds = %555
  %561 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  br label %1103

562:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #8
  %563 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %563, i1 noundef zeroext %87)
          to label %564 unwind label %567

564:                                              ; preds = %562
  %565 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %566 unwind label %569

566:                                              ; preds = %564
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #8
  br label %572

567:                                              ; preds = %562
  %568 = landingpad { ptr, i32 }
          cleanup
  br label %571

569:                                              ; preds = %564
  %570 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %571

571:                                              ; preds = %569, %567
  %.pn346 = phi { ptr, i32 } [ %570, %569 ], [ %568, %567 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #8
  br label %1103

572:                                              ; preds = %566, %557
  %573 = getelementptr inbounds i8, ptr %552, i64 32
  %574 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %573) #8
  %575 = trunc i64 %574 to i32
  %.not3481076 = icmp eq i32 %575, 0
  br i1 %.not3481076, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %583, %572
  %576 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %573) #8
  br i1 %576, label %.thread453, label %594

.lr.ph:                                           ; preds = %572, %583
  %.02981077 = phi i32 [ %579, %583 ], [ %575, %572 ]
  %577 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.976)
          to label %578 unwind label %584

578:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #8
  %579 = add i32 %.02981077, -1
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_array_sizeB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %552, i32 noundef %579)
          to label %580 unwind label %586

580:                                              ; preds = %578
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %581 unwind label %588

581:                                              ; preds = %580
  %582 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %583 unwind label %590

583:                                              ; preds = %581
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  %.not348 = icmp eq i32 %579, 0
  br i1 %.not348, label %._crit_edge, label %.lr.ph, !llvm.loop !163

584:                                              ; preds = %.lr.ph
  %585 = landingpad { ptr, i32 }
          cleanup
  br label %1103

586:                                              ; preds = %578
  %587 = landingpad { ptr, i32 }
          cleanup
  br label %593

588:                                              ; preds = %580
  %589 = landingpad { ptr, i32 }
          cleanup
  br label %592

590:                                              ; preds = %581
  %591 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  br label %592

592:                                              ; preds = %590, %588
  %.pn350 = phi { ptr, i32 } [ %591, %590 ], [ %589, %588 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %593

593:                                              ; preds = %592, %586
  %.pn350.pn = phi { ptr, i32 } [ %.pn350, %592 ], [ %587, %586 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  br label %1103

594:                                              ; preds = %._crit_edge
  %595 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1102)
          to label %596 unwind label %558

596:                                              ; preds = %594
  %597 = trunc nuw i8 %.4267 to i1
  br i1 %597, label %613, label %.thread453

.thread453:                                       ; preds = %._crit_edge, %596
  %.5268455 = phi i8 [ %.4267, %596 ], [ 0, %._crit_edge ]
  %598 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.713)
          to label %613 unwind label %558

599:                                              ; preds = %546, %543
  br i1 %.not, label %600, label %610

600:                                              ; preds = %599
  %601 = load i32, ptr %8, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %58, i32 noundef %601)
  %602 = load i32, ptr %58, align 4
  %603 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %602, i32 noundef 11)
          to label %604 unwind label %452

604:                                              ; preds = %600
  %605 = load ptr, ptr %1, align 8, !tbaa !139
  %606 = getelementptr inbounds i8, ptr %605, i64 288
  %607 = load ptr, ptr %606, align 8
  %608 = invoke noundef zeroext i1 %607(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %603)
          to label %609 unwind label %452

609:                                              ; preds = %604
  br i1 %608, label %613, label %610

610:                                              ; preds = %609, %599
  %611 = load i32, ptr %21, align 4, !tbaa !5
  %612 = trunc nuw i8 %spec.select472 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56) %20, i32 noundef %611, i1 noundef zeroext %612, i1 noundef zeroext false)
          to label %613 unwind label %452

613:                                              ; preds = %596, %.thread453, %609, %610
  %.6269 = phi i8 [ %.4267, %610 ], [ %.4267, %609 ], [ %.5268455, %.thread453 ], [ %.4267, %596 ]
  br i1 %434, label %.thread457, label %625

.thread457:                                       ; preds = %.invoke1140, %526, %536, %501, %467, %490, %480, %613
  %.6269466 = phi i8 [ %.6269, %613 ], [ %.4267, %480 ], [ %.4267, %490 ], [ %.4267, %467 ], [ %.4267, %501 ], [ %.4267, %536 ], [ %.4267, %526 ], [ %.4267, %.invoke1140 ]
  %.1285464 = phi i8 [ %.02841089, %613 ], [ 1, %480 ], [ 1, %490 ], [ 1, %467 ], [ 1, %501 ], [ %.02841089, %536 ], [ %.02841089, %526 ], [ 1, %.invoke1140 ]
  %.1290462 = phi i32 [ %.02891088, %613 ], [ %448, %480 ], [ %448, %490 ], [ %448, %467 ], [ %448, %501 ], [ %.02891088, %536 ], [ %.02891088, %526 ], [ %448, %.invoke1140 ]
  %614 = getelementptr inbounds i8, ptr %430, i64 8
  %.sroa.049.0.copyload = load i32, ptr %614, align 8, !tbaa !5
  %615 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.049.0.copyload, i32 noundef 11)
          to label %616 unwind label %452

616:                                              ; preds = %.thread457
  br i1 %615, label %617, label %625

617:                                              ; preds = %616
  %.sroa.048.0.copyload = load i32, ptr %614, align 8, !tbaa !5
  %618 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.048.0.copyload, i32 noundef 11)
          to label %619 unwind label %452

619:                                              ; preds = %617
  %620 = icmp eq i32 %618, 0
  br i1 %620, label %621, label %625

621:                                              ; preds = %619
  %622 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %1)
          to label %623 unwind label %452

623:                                              ; preds = %621
  %624 = icmp eq i32 %622, 5365
  %spec.select = select i1 %624, i8 1, i8 %.12761090
  br label %625

625:                                              ; preds = %623, %619, %616, %613
  %.6269465 = phi i8 [ %.6269466, %619 ], [ %.6269466, %616 ], [ %.6269, %613 ], [ %.6269466, %623 ]
  %.1285463 = phi i8 [ %.1285464, %619 ], [ %.1285464, %616 ], [ %.02841089, %613 ], [ %.1285464, %623 ]
  %.1290461 = phi i32 [ %.1290462, %619 ], [ %.1290462, %616 ], [ %.02891088, %613 ], [ %.1290462, %623 ]
  %.2277 = phi i8 [ %.12761090, %619 ], [ %.12761090, %616 ], [ %.12761090, %613 ], [ %spec.select, %623 ]
  %626 = load ptr, ptr %11, align 8, !tbaa !24
  %627 = getelementptr inbounds i8, ptr %626, i64 276
  %628 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %627)
  %629 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %628)
          to label %630 unwind label %452

630:                                              ; preds = %625
  store ptr %629, ptr %11, align 8, !tbaa !24
  %631 = load i32, ptr %17, align 4, !tbaa !5
  %.not349 = icmp eq i32 %631, 0
  br i1 %.not349, label %650, label %632

632:                                              ; preds = %630
  %633 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_vectorERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %629)
          to label %634 unwind label %452

634:                                              ; preds = %632
  br i1 %633, label %639, label %635

635:                                              ; preds = %634
  %636 = load ptr, ptr %11, align 8, !tbaa !24
  %637 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %636)
          to label %638 unwind label %452

638:                                              ; preds = %635
  br i1 %637, label %639, label %650

639:                                              ; preds = %638, %634
  %640 = load i32, ptr %17, align 4, !tbaa !5
  %641 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %640)
          to label %642 unwind label %648

642:                                              ; preds = %639
  %643 = getelementptr inbounds i8, ptr %641, i64 24
  %644 = load i32, ptr %643, align 8, !tbaa !164
  %645 = icmp ugt i32 %644, 4
  br i1 %645, label %646, label %650

646:                                              ; preds = %642
  %647 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1361)
          to label %650 unwind label %648

648:                                              ; preds = %646, %639
  %649 = landingpad { ptr, i32 }
          cleanup
  br label %1103

650:                                              ; preds = %642, %646, %638, %630
  store i8 1, ptr %15, align 1, !tbaa !138
  br label %1102

651:                                              ; preds = %408
  %652 = load ptr, ptr %11, align 8, !tbaa !24
  %653 = getelementptr inbounds i8, ptr %652, i64 16
  %654 = load i32, ptr %653, align 8, !tbaa !127
  %655 = icmp eq i32 %654, 15
  br i1 %655, label %656, label %839

656:                                              ; preds = %651
  %657 = trunc nuw i8 %spec.select472 to i1
  %.pre = load i32, ptr %21, align 4, !tbaa !5
  br i1 %657, label %661, label %658

658:                                              ; preds = %656
  %659 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %.pre)
          to label %660 unwind label %.loopexit

660:                                              ; preds = %658
  store i32 %659, ptr %21, align 4, !tbaa !5
  %.pre1113 = load ptr, ptr %11, align 8, !tbaa !24
  br label %661

661:                                              ; preds = %660, %656
  %662 = phi ptr [ %.pre1113, %660 ], [ %652, %656 ]
  %663 = phi i32 [ %659, %660 ], [ %.pre, %656 ]
  %664 = getelementptr inbounds i8, ptr %662, i64 192
  %665 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %664) #8
  %666 = trunc i64 %665 to i32
  %667 = icmp ult i32 %663, %666
  %.pre1114 = load i32, ptr %21, align 4, !tbaa !5
  br i1 %667, label %668, label %674

668:                                              ; preds = %661
  %669 = load ptr, ptr %11, align 8, !tbaa !24
  %670 = getelementptr inbounds i8, ptr %669, i64 192
  %671 = zext i32 %.pre1114 to i64
  %672 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %670, i64 noundef %671) #8
  %673 = load i32, ptr %672, align 4, !tbaa !5
  store i32 %673, ptr %21, align 4, !tbaa !5
  br label %674

674:                                              ; preds = %668, %661
  %675 = phi i32 [ %673, %668 ], [ %.pre1114, %661 ]
  %676 = zext i32 %675 to i64
  %677 = load ptr, ptr %11, align 8, !tbaa !24
  %678 = getelementptr inbounds i8, ptr %677, i64 136
  %679 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %678) #8
  %.not385 = icmp ugt i64 %679, %676
  br i1 %.not385, label %685, label %680

680:                                              ; preds = %674
  %681 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %681, ptr noundef nonnull @.str.1362)
          to label %.invoke unwind label %683

.invoke:                                          ; preds = %1098, %680
  %682 = phi ptr [ %681, %680 ], [ %1099, %1098 ]
  invoke void @__cxa_throw(ptr nonnull %682, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %.cont unwind label %.loopexit.split-lp

.cont:                                            ; preds = %.invoke
  unreachable

683:                                              ; preds = %680
  %684 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %681) #8
  br label %1103

685:                                              ; preds = %674
  br i1 %.02941087, label %792, label %686

686:                                              ; preds = %685
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %59) #8
  store i32 2147483647, ptr %59, align 4, !tbaa !165
  %687 = load ptr, ptr %11, align 8, !tbaa !24
  %688 = load i32, ptr %21, align 4, !tbaa !5
  %689 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %687, i32 noundef %688, ptr noundef nonnull %59)
          to label %690 unwind label %714

690:                                              ; preds = %686
  br i1 %689, label %691, label %740

691:                                              ; preds = %690
  %692 = load i32, ptr %8, align 4, !tbaa !5
  %693 = load ptr, ptr %1, align 8, !tbaa !139
  %694 = getelementptr inbounds i8, ptr %693, i64 368
  %695 = load ptr, ptr %694, align 8
  %696 = invoke noundef zeroext i1 %695(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %692)
          to label %697 unwind label %714

697:                                              ; preds = %691
  br i1 %696, label %698, label %740

698:                                              ; preds = %697
  %699 = load i8, ptr %15, align 1, !tbaa !138, !range !22, !noundef !23
  %700 = trunc nuw i8 %699 to i1
  br i1 %700, label %701, label %721

701:                                              ; preds = %698
  %702 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.719)
          to label %703 unwind label %714

703:                                              ; preds = %701
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #8
  %704 = load i32, ptr %59, align 4, !tbaa !165
  %705 = load ptr, ptr %11, align 8, !tbaa !24
  %706 = getelementptr inbounds i8, ptr %705, i64 128
  %707 = load i32, ptr %706, align 8, !tbaa !166
  %708 = load ptr, ptr %1, align 8, !tbaa !139
  %709 = getelementptr inbounds i8, ptr %708, i64 160
  %710 = load ptr, ptr %709, align 8
  invoke void %710(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %704, i32 noundef %707)
          to label %711 unwind label %716

711:                                              ; preds = %703
  %712 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %713 unwind label %718

713:                                              ; preds = %711
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  br label %733

714:                                              ; preds = %736, %701, %691, %686
  %715 = landingpad { ptr, i32 }
          cleanup
  br label %791

716:                                              ; preds = %703
  %717 = landingpad { ptr, i32 }
          cleanup
  br label %720

718:                                              ; preds = %711
  %719 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %720

720:                                              ; preds = %718, %716
  %.pn393 = phi { ptr, i32 } [ %719, %718 ], [ %717, %716 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  br label %791

721:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #8
  %722 = load i32, ptr %59, align 4, !tbaa !165
  %723 = load ptr, ptr %11, align 8, !tbaa !24
  %724 = getelementptr inbounds i8, ptr %723, i64 128
  %725 = load i32, ptr %724, align 8, !tbaa !166
  %726 = load ptr, ptr %1, align 8, !tbaa !139
  %727 = getelementptr inbounds i8, ptr %726, i64 160
  %728 = load ptr, ptr %727, align 8
  invoke void %728(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %722, i32 noundef %725)
          to label %729 unwind label %731

729:                                              ; preds = %721
  %730 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  br label %733

731:                                              ; preds = %721
  %732 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  br label %791

733:                                              ; preds = %729, %713
  %734 = load i32, ptr %59, align 4, !tbaa !165
  %735 = icmp eq i32 %734, 0
  br i1 %735, label %736, label %790

736:                                              ; preds = %733
  %737 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %1)
          to label %738 unwind label %714

738:                                              ; preds = %736
  %739 = icmp eq i32 %737, 5365
  %spec.select435 = select i1 %739, i8 1, i8 %.12761090
  %.pre1115 = load i32, ptr %59, align 4, !tbaa !165
  br label %790

740:                                              ; preds = %697, %690
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %63, i32 noundef %.02481096)
  %741 = load i32, ptr %21, align 4, !tbaa !5
  %742 = load i32, ptr %63, align 4
  %743 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8Compiler25get_member_qualified_nameB5cxx11ENS_7TypedIDILNS_5TypesE1EEEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %742, i32 noundef %741)
          to label %744 unwind label %749

744:                                              ; preds = %740
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %743)
          to label %745 unwind label %749

745:                                              ; preds = %744
  %746 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  br i1 %746, label %753, label %747

747:                                              ; preds = %745
  %748 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %787 unwind label %751

749:                                              ; preds = %744, %740
  %750 = landingpad { ptr, i32 }
          cleanup
  br label %789

751:                                              ; preds = %747
  %752 = landingpad { ptr, i32 }
          cleanup
  br label %788

753:                                              ; preds = %745
  br i1 %.not319, label %769, label %754

754:                                              ; preds = %753
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #8
  %755 = load ptr, ptr %11, align 8, !tbaa !24
  %756 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %755, i32 noundef %756)
          to label %757 unwind label %761

757:                                              ; preds = %754
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %758 unwind label %763

758:                                              ; preds = %757
  %759 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %64)
          to label %760 unwind label %765

760:                                              ; preds = %758
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #8
  br label %787

761:                                              ; preds = %754
  %762 = landingpad { ptr, i32 }
          cleanup
  br label %768

763:                                              ; preds = %757
  %764 = landingpad { ptr, i32 }
          cleanup
  br label %767

765:                                              ; preds = %758
  %766 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  br label %767

767:                                              ; preds = %765, %763
  %.pn388 = phi { ptr, i32 } [ %766, %765 ], [ %764, %763 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %768

768:                                              ; preds = %767, %761
  %.pn388.pn = phi { ptr, i32 } [ %.pn388, %767 ], [ %762, %761 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #8
  br label %788

769:                                              ; preds = %753
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #8
  %770 = load i32, ptr %8, align 4, !tbaa !5
  %771 = load ptr, ptr %11, align 8, !tbaa !24
  %772 = load i32, ptr %21, align 4, !tbaa !5
  %773 = trunc nuw i64 %indvars.iv to i32
  %774 = or i32 %84, %773
  %775 = icmp ne i32 %774, 0
  %776 = load ptr, ptr %1, align 8, !tbaa !139
  %777 = getelementptr inbounds i8, ptr %776, i64 392
  %778 = load ptr, ptr %777, align 8
  invoke void %778(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %770, ptr noundef nonnull align 8 dereferenceable(336) %771, i32 noundef %772, i1 noundef zeroext %775)
          to label %779 unwind label %782

779:                                              ; preds = %769
  %780 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %781 unwind label %784

781:                                              ; preds = %779
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  br label %787

782:                                              ; preds = %769
  %783 = landingpad { ptr, i32 }
          cleanup
  br label %786

784:                                              ; preds = %779
  %785 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %786

786:                                              ; preds = %784, %782
  %.pn386 = phi { ptr, i32 } [ %785, %784 ], [ %783, %782 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  br label %788

787:                                              ; preds = %760, %781, %747
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #8
  br label %790

788:                                              ; preds = %786, %768, %751
  %.pn388.pn.pn = phi { ptr, i32 } [ %.pn388.pn, %768 ], [ %.pn386, %786 ], [ %752, %751 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  br label %789

789:                                              ; preds = %788, %749
  %.pn388.pn.pn.pn = phi { ptr, i32 } [ %.pn388.pn.pn, %788 ], [ %750, %749 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #8
  br label %791

790:                                              ; preds = %733, %738, %787
  %.2291 = phi i32 [ %.02891088, %787 ], [ %734, %733 ], [ %.pre1115, %738 ]
  %.2286 = phi i8 [ %.02841089, %787 ], [ 1, %733 ], [ 1, %738 ]
  %.4279 = phi i8 [ %.12761090, %787 ], [ %.12761090, %733 ], [ %spec.select435, %738 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %59) #8
  br label %792

791:                                              ; preds = %789, %731, %720, %714
  %.pn395 = phi { ptr, i32 } [ %715, %714 ], [ %.pn393, %720 ], [ %732, %731 ], [ %.pn388.pn.pn.pn, %789 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %59) #8
  br label %1103

792:                                              ; preds = %685, %790
  %.3292 = phi i32 [ %.2291, %790 ], [ %.02891088, %685 ]
  %.3287 = phi i8 [ %.2286, %790 ], [ %.02841089, %685 ]
  %.5280 = phi i8 [ %.4279, %790 ], [ %.12761090, %685 ]
  %793 = load ptr, ptr %11, align 8, !tbaa !24
  %794 = getelementptr inbounds i8, ptr %793, i64 8
  %795 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %794)
          to label %796 unwind label %.loopexit

796:                                              ; preds = %792
  %797 = load i32, ptr %21, align 4, !tbaa !5
  %798 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %795, i32 noundef %797, i32 noundef 18)
          to label %799 unwind label %.loopexit

799:                                              ; preds = %796
  %spec.select436 = select i1 %798, i8 1, i8 %.02531094
  %800 = load ptr, ptr %11, align 8, !tbaa !24
  %801 = getelementptr inbounds i8, ptr %800, i64 8
  %802 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %801)
          to label %803 unwind label %.loopexit

803:                                              ; preds = %799
  %804 = load i32, ptr %21, align 4, !tbaa !5
  %805 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %802, i32 noundef %804, i32 noundef 0)
          to label %806 unwind label %.loopexit

806:                                              ; preds = %803
  %spec.select437 = select i1 %805, i8 1, i8 %.02561093
  %807 = load ptr, ptr %11, align 8, !tbaa !24
  %808 = load i32, ptr %21, align 4, !tbaa !5
  %809 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30member_is_packed_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %807, i32 noundef %808)
          to label %810 unwind label %.loopexit

810:                                              ; preds = %806
  %811 = zext i1 %809 to i8
  store i8 %811, ptr %16, align 1, !tbaa !138
  %812 = load ptr, ptr %11, align 8, !tbaa !24
  %813 = load i32, ptr %21, align 4, !tbaa !5
  %814 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL32member_is_remapped_physical_typeERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %812, i32 noundef %813)
          to label %815 unwind label %.loopexit

815:                                              ; preds = %810
  br i1 %814, label %816, label %822

816:                                              ; preds = %815
  %817 = load ptr, ptr %11, align 8, !tbaa !24
  %818 = getelementptr inbounds i8, ptr %817, i64 8
  %819 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %818)
  %820 = load i32, ptr %21, align 4, !tbaa !5
  %821 = invoke noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %819, i32 noundef %820, i32 noundef 1)
          to label %822 unwind label %.loopexit

822:                                              ; preds = %815, %816
  %storemerge = phi i32 [ %821, %816 ], [ 0, %815 ]
  store i32 %storemerge, ptr %17, align 4, !tbaa !5
  %823 = load ptr, ptr %11, align 8, !tbaa !24
  %824 = load i32, ptr %21, align 4, !tbaa !5
  %825 = load ptr, ptr %1, align 8, !tbaa !139
  %826 = getelementptr inbounds i8, ptr %825, i64 328
  %827 = load ptr, ptr %826, align 8
  %828 = invoke noundef zeroext i1 %827(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %823, i32 noundef %824)
          to label %829 unwind label %.loopexit

829:                                              ; preds = %822
  %830 = load ptr, ptr %11, align 8, !tbaa !24
  %831 = getelementptr inbounds i8, ptr %830, i64 136
  %832 = load i32, ptr %21, align 4, !tbaa !5
  %833 = zext i32 %832 to i64
  %834 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %831, i64 noundef %833) #8
  %835 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %834)
  %836 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %835)
          to label %837 unwind label %.loopexit

837:                                              ; preds = %829
  %838 = zext i1 %828 to i8
  store ptr %836, ptr %11, align 8, !tbaa !24
  br label %1102

839:                                              ; preds = %651
  %840 = getelementptr inbounds i8, ptr %652, i64 28
  %841 = load i32, ptr %840, align 4, !tbaa !167
  %842 = icmp ugt i32 %841, 1
  br i1 %842, label %843, label %885

843:                                              ; preds = %839
  %844 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.308)
          to label %845 unwind label %.loopexit

845:                                              ; preds = %843
  %846 = trunc nuw i8 %spec.select472 to i1
  br i1 %846, label %847, label %852

847:                                              ; preds = %845
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #8
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 4 dereferenceable(4) %21)
  %848 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %67)
          to label %849 unwind label %850

849:                                              ; preds = %847
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #8
  br label %862

850:                                              ; preds = %847
  %851 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #8
  br label %1103

852:                                              ; preds = %845
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #8
  %853 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %853, i1 noundef zeroext %87)
          to label %854 unwind label %857

854:                                              ; preds = %852
  %855 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %856 unwind label %859

856:                                              ; preds = %854
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  br label %862

857:                                              ; preds = %852
  %858 = landingpad { ptr, i32 }
          cleanup
  br label %861

859:                                              ; preds = %854
  %860 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  br label %861

861:                                              ; preds = %859, %857
  %.pn382 = phi { ptr, i32 } [ %860, %859 ], [ %858, %857 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  br label %1103

862:                                              ; preds = %856, %849
  %863 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.713)
          to label %864 unwind label %.loopexit

864:                                              ; preds = %862
  %865 = load i32, ptr %17, align 4, !tbaa !5
  %.not384 = icmp eq i32 %865, 0
  br i1 %.not384, label %879, label %866

866:                                              ; preds = %864
  %867 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %865)
          to label %868 unwind label %877

868:                                              ; preds = %866
  %869 = getelementptr inbounds i8, ptr %867, i64 24
  %870 = load i32, ptr %869, align 8, !tbaa !164
  %871 = icmp ugt i32 %870, 4
  %872 = getelementptr inbounds i8, ptr %867, i64 28
  %873 = load i32, ptr %872, align 4
  %874 = icmp ugt i32 %873, 4
  %or.cond440 = select i1 %871, i1 true, i1 %874
  br i1 %or.cond440, label %875, label %879

875:                                              ; preds = %868
  %876 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1361)
          to label %879 unwind label %877

877:                                              ; preds = %875, %866
  %878 = landingpad { ptr, i32 }
          cleanup
  br label %1103

879:                                              ; preds = %875, %868, %864
  %880 = load ptr, ptr %11, align 8, !tbaa !24
  %881 = getelementptr inbounds i8, ptr %880, i64 276
  %882 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %881)
  %883 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %882)
          to label %884 unwind label %.loopexit

884:                                              ; preds = %879
  store ptr %883, ptr %11, align 8, !tbaa !24
  br label %1102

885:                                              ; preds = %839
  %886 = getelementptr inbounds i8, ptr %652, i64 24
  %887 = load i32, ptr %886, align 8, !tbaa !164
  %888 = icmp ugt i32 %887, 1
  br i1 %888, label %889, label %1095

889:                                              ; preds = %885
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  %890 = trunc nuw i8 %.02511095 to i1
  br i1 %890, label %891, label %918

891:                                              ; preds = %889
  %892 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 91, i64 noundef -1) #8
  %.not356 = icmp eq i64 %892, -1
  br i1 %.not356, label %918, label %893

893:                                              ; preds = %891
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #8
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %892, i64 noundef -1)
          to label %894 unwind label %905

894:                                              ; preds = %893
  %895 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  %896 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %69, i8 noundef signext 93, i64 noundef -1) #8
  %.not357 = icmp eq i64 %896, -1
  br i1 %.not357, label %915, label %897

897:                                              ; preds = %894
  %898 = add nuw i64 %896, 1
  %899 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  %.not358 = icmp eq i64 %898, %899
  br i1 %.not358, label %915, label %900

900:                                              ; preds = %897
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #8
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(32) %69, i64 noundef %898, i64 noundef -1)
          to label %901 unwind label %907

901:                                              ; preds = %900
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #8
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(32) %69, i64 noundef 0, i64 noundef %898)
          to label %902 unwind label %909

902:                                              ; preds = %901
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 8 dereferenceable(32) %73)
          to label %903 unwind label %911

903:                                              ; preds = %902
  %904 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #8
  br label %915

905:                                              ; preds = %893
  %906 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  br label %1094

907:                                              ; preds = %900
  %908 = landingpad { ptr, i32 }
          cleanup
  br label %914

909:                                              ; preds = %901
  %910 = landingpad { ptr, i32 }
          cleanup
  br label %913

911:                                              ; preds = %902
  %912 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  br label %913

913:                                              ; preds = %911, %909
  %.pn359 = phi { ptr, i32 } [ %912, %911 ], [ %910, %909 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  br label %914

914:                                              ; preds = %913, %907
  %.pn359.pn = phi { ptr, i32 } [ %.pn359, %913 ], [ %908, %907 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #8
  br label %1094

915:                                              ; preds = %903, %897, %894
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %0, i64 noundef %892)
          to label %918 unwind label %916

916:                                              ; preds = %915
  %917 = landingpad { ptr, i32 }
          cleanup
  br label %1094

918:                                              ; preds = %891, %915, %889
  %919 = load i32, ptr %9, align 4, !tbaa !5
  %920 = and i32 %919, 64
  %921 = icmp eq i32 %920, 0
  br i1 %921, label %922, label %.thread1129

922:                                              ; preds = %918
  %923 = load i32, ptr %8, align 4, !tbaa !5
  %924 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %923)
          to label %925 unwind label %932

925:                                              ; preds = %922
  %926 = getelementptr inbounds i8, ptr %924, i64 124
  %927 = load i8, ptr %926, align 4, !tbaa !168, !range !22, !noundef !23
  %928 = trunc nuw i8 %927 to i1
  br i1 %928, label %929, label %934

929:                                              ; preds = %925
  %930 = load i32, ptr %8, align 4, !tbaa !5
  %931 = invoke noundef i32 @_ZN11spirv_cross12CompilerGLSL38get_expression_effective_storage_classEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %930)
          to label %934 unwind label %932

932:                                              ; preds = %1088, %1086, %1056, %1051, %1043, %1037, %958, %953, %929, %922
  %933 = landingpad { ptr, i32 }
          cleanup
  br label %1094

934:                                              ; preds = %929, %925
  %.0261 = phi i32 [ 8, %925 ], [ %931, %929 ]
  %935 = load i32, ptr %8, align 4, !tbaa !5
  %936 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %935)
          to label %937 unwind label %950

937:                                              ; preds = %934
  %.not365 = icmp eq ptr %936, null
  br i1 %.not365, label %952, label %938

938:                                              ; preds = %937
  %939 = getelementptr inbounds i8, ptr %936, i64 16
  %940 = load i32, ptr %939, align 8, !tbaa !158
  %941 = icmp eq i32 %940, 3
  br i1 %941, label %942, label %952

942:                                              ; preds = %938
  %943 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %1)
          to label %944 unwind label %950

944:                                              ; preds = %942
  %945 = icmp eq i32 %943, 1
  br i1 %945, label %946, label %952

946:                                              ; preds = %944
  %947 = getelementptr inbounds i8, ptr %936, i64 8
  %.sroa.0.0.copyload = load i32, ptr %947, align 8, !tbaa !5
  %948 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.0.0.copyload, i32 noundef 15)
          to label %949 unwind label %950

949:                                              ; preds = %946
  %not. = xor i1 %948, true
  br label %952

950:                                              ; preds = %946, %942, %934
  %951 = landingpad { ptr, i32 }
          cleanup
  br label %1094

952:                                              ; preds = %949, %937, %938, %944
  %.1260 = phi i1 [ %not., %949 ], [ false, %944 ], [ false, %938 ], [ false, %937 ]
  %brmerge473 = or i1 %.1260, %890
  br i1 %brmerge473, label %.thread1129, label %953

953:                                              ; preds = %952
  %954 = load ptr, ptr %11, align 8, !tbaa !24
  %955 = getelementptr inbounds i8, ptr %954, i64 276
  %956 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %955)
  %957 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %956)
          to label %958 unwind label %932

958:                                              ; preds = %953
  %959 = load ptr, ptr %1, align 8, !tbaa !139
  %960 = getelementptr inbounds i8, ptr %959, i64 384
  %961 = load ptr, ptr %960, align 8
  %962 = invoke noundef zeroext i1 %961(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(336) %957, i32 noundef %.0261, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %.thread1129 unwind label %932

.thread1129:                                      ; preds = %918, %952, %958
  %.12601134 = phi i1 [ %.1260, %952 ], [ %.1260, %958 ], [ true, %918 ]
  %.12621133 = phi i32 [ %.0261, %952 ], [ %.0261, %958 ], [ 8, %918 ]
  %963 = trunc nuw i8 %spec.select472 to i1
  %964 = load i32, ptr %21, align 4
  br i1 %963, label %965, label %989

965:                                              ; preds = %.thread1129
  %966 = load ptr, ptr %11, align 8, !tbaa !24
  %967 = getelementptr inbounds i8, ptr %966, i64 24
  %968 = load i32, ptr %967, align 8, !tbaa !164
  %.not374 = icmp ult i32 %964, %968
  %969 = load i8, ptr %16, align 1, !tbaa !138, !range !22, !noundef !23
  %brmerge442469 = or i8 %969, %.02511095
  %brmerge442 = trunc nuw i8 %brmerge442469 to i1
  br i1 %brmerge442, label %979, label %970

970:                                              ; preds = %965
  %971 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.719)
          to label %972 unwind label %977

972:                                              ; preds = %970
  %973 = load i32, ptr %21, align 4
  %974 = select i1 %.not374, i32 %973, i32 0
  %975 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %974)
  %976 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %975)
          to label %1050 unwind label %977

977:                                              ; preds = %972, %970
  %978 = landingpad { ptr, i32 }
          cleanup
  br label %1094

979:                                              ; preds = %965
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %74) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %75) #8
  %980 = select i1 %.not374, i32 %964, i32 0
  store i32 %980, ptr %75, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA2_KcjS3_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 1 dereferenceable(2) @.str.308, ptr noundef nonnull align 4 dereferenceable(4) %75, ptr noundef nonnull align 1 dereferenceable(2) @.str.713)
          to label %981 unwind label %984

981:                                              ; preds = %979
  %982 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %74)
          to label %983 unwind label %986

983:                                              ; preds = %981
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %75) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #8
  br label %1050

984:                                              ; preds = %979
  %985 = landingpad { ptr, i32 }
          cleanup
  br label %988

986:                                              ; preds = %981
  %987 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  br label %988

988:                                              ; preds = %986, %984
  %.pn375 = phi { ptr, i32 } [ %987, %986 ], [ %985, %984 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %75) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #8
  br label %1094

989:                                              ; preds = %.thread1129
  %990 = zext i32 %964 to i64
  %991 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %220, i64 noundef %990) #8
  %992 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %991)
  %993 = icmp ne i32 %992, 3
  %994 = load i8, ptr %16, align 1, !range !22
  %brmerge443468 = or i8 %994, %.02511095
  %brmerge443 = trunc nuw i8 %brmerge443468 to i1
  %or.cond447 = select i1 %993, i1 true, i1 %brmerge443
  br i1 %or.cond447, label %1037, label %995

995:                                              ; preds = %989
  %996 = load i32, ptr %21, align 4, !tbaa !5
  %997 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %996)
          to label %998 unwind label %1015

998:                                              ; preds = %995
  %999 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %997, i32 noundef 0, i32 noundef 0)
  %1000 = load ptr, ptr %11, align 8, !tbaa !24
  %1001 = getelementptr inbounds i8, ptr %1000, i64 24
  %1002 = load i32, ptr %1001, align 8, !tbaa !164
  %.not366.not = icmp ult i32 %999, %1002
  %1003 = getelementptr inbounds i8, ptr %997, i64 264
  %1004 = load i8, ptr %1003, align 8, !tbaa !169, !range !22, !noundef !23
  %1005 = trunc nuw i8 %1004 to i1
  br i1 %1005, label %1006, label %1028

1006:                                             ; preds = %998
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %76) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %77) #8
  br i1 %.not366.not, label %1008, label %1007

1007:                                             ; preds = %1006
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %78) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %78) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull @.str.760, ptr noundef nonnull align 1 dereferenceable(1) %78)
          to label %1010 unwind label %1019

1008:                                             ; preds = %1006
  %1009 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1009, i1 noundef zeroext true)
          to label %1010 unwind label %1019

1010:                                             ; preds = %1008, %1007
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 1 dereferenceable(2) @.str.308, ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull align 1 dereferenceable(2) @.str.713)
          to label %1011 unwind label %1021

1011:                                             ; preds = %1010
  %1012 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %1013 unwind label %1023

1013:                                             ; preds = %1011
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  br i1 %.not366.not, label %.critedge, label %1014

1014:                                             ; preds = %1013
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %78) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %78) #8
  br label %.critedge

.critedge:                                        ; preds = %1013, %1014
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #8
  br label %1050

1015:                                             ; preds = %995
  %1016 = landingpad { ptr, i32 }
          cleanup
  br label %1094

1017:                                             ; preds = %1033, %1028
  %1018 = landingpad { ptr, i32 }
          cleanup
  br label %1094

1019:                                             ; preds = %1008, %1007
  %1020 = landingpad { ptr, i32 }
          cleanup
  br label %1026

1021:                                             ; preds = %1010
  %1022 = landingpad { ptr, i32 }
          cleanup
  br label %1025

1023:                                             ; preds = %1011
  %1024 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  br label %1025

1025:                                             ; preds = %1023, %1021
  %.pn367 = phi { ptr, i32 } [ %1024, %1023 ], [ %1022, %1021 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  br label %1026

1026:                                             ; preds = %1025, %1019
  %.pn367.pn = phi { ptr, i32 } [ %.pn367, %1025 ], [ %1020, %1019 ]
  br i1 %.not366.not, label %.critedge445, label %1027

1027:                                             ; preds = %1026
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %78) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %78) #8
  br label %.critedge445

.critedge445:                                     ; preds = %1026, %1027
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #8
  br label %1094

1028:                                             ; preds = %998
  %1029 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.719)
          to label %1030 unwind label %1017

1030:                                             ; preds = %1028
  br i1 %.not366.not, label %1031, label %1033

1031:                                             ; preds = %1030
  %1032 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %997, i32 noundef 0, i32 noundef 0)
  br label %1033

1033:                                             ; preds = %1030, %1031
  %1034 = phi i32 [ %1032, %1031 ], [ 0, %1030 ]
  %1035 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1034)
  %1036 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1035)
          to label %1050 unwind label %1017

1037:                                             ; preds = %989
  %1038 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.308)
          to label %1039 unwind label %932

1039:                                             ; preds = %1037
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %79) #8
  %1040 = load i32, ptr %21, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %1040, i1 noundef zeroext %87)
          to label %1041 unwind label %1045

1041:                                             ; preds = %1039
  %1042 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %79)
          to label %1043 unwind label %1047

1043:                                             ; preds = %1041
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #8
  %1044 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.713)
          to label %1050 unwind label %932

1045:                                             ; preds = %1039
  %1046 = landingpad { ptr, i32 }
          cleanup
  br label %1049

1047:                                             ; preds = %1041
  %1048 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  br label %1049

1049:                                             ; preds = %1047, %1045
  %.pn372 = phi { ptr, i32 } [ %1048, %1047 ], [ %1046, %1045 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #8
  br label %1094

1050:                                             ; preds = %.critedge, %1033, %983, %972, %1043
  %.not474 = xor i1 %890, true
  %brmerge475 = or i1 %.12601134, %.not474
  br i1 %brmerge475, label %1070, label %1051

1051:                                             ; preds = %1050
  %1052 = load ptr, ptr %11, align 8, !tbaa !24
  %1053 = getelementptr inbounds i8, ptr %1052, i64 276
  %1054 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1053)
  %1055 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1054)
          to label %1056 unwind label %932

1056:                                             ; preds = %1051
  %1057 = load ptr, ptr %1, align 8, !tbaa !139
  %1058 = getelementptr inbounds i8, ptr %1057, i64 384
  %1059 = load ptr, ptr %1058, align 8
  %1060 = invoke noundef zeroext i1 %1059(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(336) %1055, i32 noundef %.12621133, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %1061 unwind label %932

1061:                                             ; preds = %1056
  br i1 %1060, label %1062, label %1070

1062:                                             ; preds = %1061
  %1063 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %69, i8 noundef signext 91, i64 noundef 0) #8
  %1064 = add i64 %1063, -1
  %or.cond13 = icmp ult i64 %1064, -2
  br i1 %or.cond13, label %1065, label %1070

1065:                                             ; preds = %1062
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %80) #8
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(32) %69, i64 noundef %1063, i64 noundef -1)
          to label %1066 unwind label %1068

1066:                                             ; preds = %1065
  %1067 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #8
  br label %1070

1068:                                             ; preds = %1065
  %1069 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #8
  br label %1094

1070:                                             ; preds = %1050, %1062, %1066, %1061
  %1071 = trunc nuw i8 %.12761090 to i1
  br i1 %1071, label %1072, label %1086

1072:                                             ; preds = %1070
  %1073 = load i32, ptr %21, align 4, !tbaa !5
  br i1 %963, label %1074, label %1077

1074:                                             ; preds = %1072
  %1075 = icmp eq i32 %1073, 1
  %1076 = zext i1 %1075 to i8
  br label %1086

1077:                                             ; preds = %1072
  %1078 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1073)
          to label %1079 unwind label %1084

1079:                                             ; preds = %1077
  %.not378 = icmp eq ptr %1078, null
  br i1 %.not378, label %1086, label %1080

1080:                                             ; preds = %1079
  %1081 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1078, i32 noundef 0, i32 noundef 0)
  %1082 = icmp eq i32 %1081, 1
  %1083 = zext i1 %1082 to i8
  br label %1086

1084:                                             ; preds = %1077
  %1085 = landingpad { ptr, i32 }
          cleanup
  br label %1094

1086:                                             ; preds = %1080, %1079, %1074, %1070
  %.7282 = phi i8 [ %1076, %1074 ], [ %.12761090, %1070 ], [ %1083, %1080 ], [ 0, %1079 ]
  %1087 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %69)
          to label %1088 unwind label %932

1088:                                             ; preds = %1086
  store i8 0, ptr %16, align 1, !tbaa !138
  store i32 0, ptr %17, align 4, !tbaa !5
  %1089 = load ptr, ptr %11, align 8, !tbaa !24
  %1090 = getelementptr inbounds i8, ptr %1089, i64 276
  %1091 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1090)
  %1092 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %1091)
          to label %1093 unwind label %932

1093:                                             ; preds = %1088
  store ptr %1092, ptr %11, align 8, !tbaa !24
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  br label %1102

1094:                                             ; preds = %932, %950, %1049, %1068, %1084, %988, %977, %1017, %.critedge445, %1015, %905, %916, %914
  %.pn379.pn = phi { ptr, i32 } [ %906, %905 ], [ %917, %916 ], [ %.pn359.pn, %914 ], [ %933, %932 ], [ %1085, %1084 ], [ %1069, %1068 ], [ %.pn372, %1049 ], [ %951, %950 ], [ %.pn375, %988 ], [ %978, %977 ], [ %1016, %1015 ], [ %.pn367.pn, %.critedge445 ], [ %1018, %1017 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  br label %1103

1095:                                             ; preds = %885
  %1096 = load i8, ptr %219, align 1, !tbaa !175, !range !22, !noundef !23
  %1097 = trunc nuw i8 %1096 to i1
  br i1 %1097, label %1102, label %1098

1098:                                             ; preds = %1095
  %1099 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1099, ptr noundef nonnull @.str.1363)
          to label %.invoke unwind label %1100

1100:                                             ; preds = %1098
  %1101 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1099) #8
  br label %1103

1102:                                             ; preds = %650, %884, %1095, %1093, %837, %402, %404
  %.2296 = phi i1 [ %.02941087, %404 ], [ %.02941087, %402 ], [ false, %837 ], [ %.02941087, %884 ], [ %.02941087, %1093 ], [ %.02941087, %1095 ], [ %.02941087, %650 ]
  %.4293 = phi i32 [ %.02891088, %404 ], [ %.02891088, %402 ], [ %.3292, %837 ], [ %.02891088, %884 ], [ %.02891088, %1093 ], [ %.02891088, %1095 ], [ %.1290461, %650 ]
  %.4288 = phi i8 [ %.02841089, %404 ], [ %.02841089, %402 ], [ %.3287, %837 ], [ %.02841089, %884 ], [ %.02841089, %1093 ], [ %.02841089, %1095 ], [ %.1285463, %650 ]
  %.8283 = phi i8 [ %.12761090, %404 ], [ %.12761090, %402 ], [ %.5280, %837 ], [ %.12761090, %884 ], [ %.7282, %1093 ], [ %.12761090, %1095 ], [ %.2277, %650 ]
  %.3274 = phi i8 [ %.1272, %404 ], [ %.1272, %402 ], [ %.02711091, %837 ], [ %.02711091, %884 ], [ %.02711091, %1093 ], [ %.02711091, %1095 ], [ %.2273, %650 ]
  %.7270 = phi i8 [ %.3266, %404 ], [ %.3266, %402 ], [ %.02631092, %837 ], [ %.02631092, %884 ], [ %.02631092, %1093 ], [ %.02631092, %1095 ], [ %.6269465, %650 ]
  %.2258 = phi i8 [ %.02561093, %404 ], [ %.02561093, %402 ], [ %spec.select437, %837 ], [ %.02561093, %884 ], [ %.02561093, %1093 ], [ %.02561093, %1095 ], [ %.02561093, %650 ]
  %.2255 = phi i8 [ %.02531094, %404 ], [ %.02531094, %402 ], [ %spec.select436, %837 ], [ %.02531094, %884 ], [ %.02531094, %1093 ], [ %.02531094, %1095 ], [ %.02531094, %650 ]
  %.1252 = phi i8 [ %.02511095, %404 ], [ %.02511095, %402 ], [ %838, %837 ], [ %.02511095, %884 ], [ 0, %1093 ], [ %.02511095, %1095 ], [ %.02511095, %650 ]
  %.2250 = phi i32 [ %.1249, %404 ], [ %.1249, %402 ], [ %.02481096, %837 ], [ %882, %884 ], [ %1091, %1093 ], [ %.02481096, %1095 ], [ %628, %650 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge1100, label %226, !llvm.loop !176

1103:                                             ; preds = %.loopexit, %.loopexit.split-lp, %452, %532, %542, %648, %456, %473, %486, %496, %507, %454, %584, %593, %571, %560, %558, %295, %304, %1100, %1094, %877, %861, %850, %791, %683, %406, %388, %278, %267, %247
  %.pn417.pn.pn.pn = phi { ptr, i32 } [ %407, %406 ], [ %268, %267 ], [ %.pn414, %278 ], [ %.pn406.pn.pn.pn.pn.pn.pn, %388 ], [ %684, %683 ], [ %.pn395, %791 ], [ %878, %877 ], [ %851, %850 ], [ %.pn382, %861 ], [ %.pn379.pn, %1094 ], [ %1101, %1100 ], [ %.pn328, %247 ], [ %.pn417.pn, %304 ], [ %296, %295 ], [ %649, %648 ], [ %453, %452 ], [ %.pn344, %532 ], [ %.pn342, %542 ], [ %455, %454 ], [ %457, %456 ], [ %.pn331, %507 ], [ %.pn337, %473 ], [ %.pn335, %486 ], [ %.pn333, %496 ], [ %559, %558 ], [ %561, %560 ], [ %.pn346, %571 ], [ %.pn350.pn, %593 ], [ %585, %584 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  br label %1126

1104:                                             ; preds = %._crit_edge1100
  %1105 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1105, ptr noundef nonnull @.str.1364)
          to label %1106 unwind label %1107

1106:                                             ; preds = %1104
  invoke void @__cxa_throw(ptr nonnull %1105, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %1132 unwind label %1109

1107:                                             ; preds = %1104
  %1108 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1105) #8
  br label %1126

1109:                                             ; preds = %1106
  %1110 = landingpad { ptr, i32 }
          cleanup
  br label %1126

._crit_edge1100.thread:                           ; preds = %206, %._crit_edge1100
  %.0251.lcssa1128 = phi i8 [ %.1252, %._crit_edge1100 ], [ %162, %206 ]
  %.0253.lcssa1127 = phi i8 [ %.2255, %._crit_edge1100 ], [ %174, %206 ]
  %.0256.lcssa1126 = phi i8 [ %.2258, %._crit_edge1100 ], [ %179, %206 ]
  %.1276.lcssa1125 = phi i8 [ %.8283, %._crit_edge1100 ], [ %.0275, %206 ]
  %.0284.lcssa1124 = phi i8 [ %223, %._crit_edge1100 ], [ 0, %206 ]
  %.0289.lcssa1123 = phi i32 [ %.4293, %._crit_edge1100 ], [ 0, %206 ]
  %.not326 = icmp eq ptr %6, null
  br i1 %.not326, label %1125, label %1111

1111:                                             ; preds = %._crit_edge1100.thread
  %1112 = getelementptr inbounds i8, ptr %6, i64 4
  %1113 = and i8 %.0251.lcssa1128, 1
  store i8 %1113, ptr %1112, align 4, !tbaa !177
  %1114 = load i8, ptr %16, align 1, !tbaa !138, !range !22, !noundef !23
  %1115 = getelementptr inbounds i8, ptr %6, i64 5
  store i8 %1114, ptr %1115, align 1, !tbaa !179
  %1116 = getelementptr inbounds i8, ptr %6, i64 6
  %1117 = and i8 %.0253.lcssa1127, 1
  store i8 %1117, ptr %1116, align 2, !tbaa !180
  %1118 = load i32, ptr %17, align 4, !tbaa !5
  store i32 %1118, ptr %6, align 4, !tbaa !181
  %1119 = getelementptr inbounds i8, ptr %6, i64 8
  %1120 = and i8 %.0256.lcssa1126, 1
  store i8 %1120, ptr %1119, align 4, !tbaa !182
  %1121 = getelementptr inbounds i8, ptr %6, i64 9
  %1122 = and i8 %.1276.lcssa1125, 1
  store i8 %1122, ptr %1121, align 1, !tbaa !183
  %1123 = getelementptr inbounds i8, ptr %6, i64 10
  store i8 %.0284.lcssa1124, ptr %1123, align 2, !tbaa !184
  %1124 = getelementptr inbounds i8, ptr %6, i64 12
  store i32 %.0289.lcssa1123, ptr %1124, align 4, !tbaa !185
  br label %1125

1125:                                             ; preds = %1111, %._crit_edge1100.thread
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  ret void

1126:                                             ; preds = %1109, %1107, %1103
  %.pn417.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn417.pn.pn.pn, %1103 ], [ %1110, %1109 ], [ %1108, %1107 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %20) #8
  br label %1127

1127:                                             ; preds = %192, %196, %1126, %224, %194, %190
  %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %191, %190 ], [ %193, %192 ], [ %195, %194 ], [ %197, %196 ], [ %.pn417.pn.pn.pn.pn, %1126 ], [ %225, %224 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  br label %1128

1128:                                             ; preds = %1127, %188
  %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1127 ], [ %189, %188 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  br label %1129

1129:                                             ; preds = %1128, %186
  %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1128 ], [ %187, %186 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  br label %1130

1130:                                             ; preds = %1129, %151, %133, %122, %120
  %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1129 ], [ %.pn323, %151 ], [ %121, %120 ], [ %123, %122 ], [ %134, %133 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br label %1131

1131:                                             ; preds = %118, %1130, %95, %103
  %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %104, %103 ], [ %96, %95 ], [ %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1130 ], [ %119, %118 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  resume { ptr, i32 } %.pn417.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn

1132:                                             ; preds = %1106, %117
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i64 noundef) local_unnamed_addr #4 align 2

declare noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #5

declare noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i64 noundef) local_unnamed_addr #4 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA4_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_jEEES9_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), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaEENK3$_0clEjbb"(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #7 align 2

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

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler17is_member_builtinERKNS_8SPIRTypeEjPN3spv7BuiltInE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, ptr noundef) local_unnamed_addr #5

declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8Compiler25get_member_qualified_nameB5cxx11ENS_7TypedIDILNS_5TypesE1EEEj(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_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(2), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #5

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

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

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

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

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

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


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