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

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

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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.12 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.341 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.406 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.433 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.434 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.435 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.436 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.437 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.438 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.439 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.440 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.441 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.442 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.443 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.444 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.445 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.446 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.447 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.448 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.449 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.450 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.451 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.452 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.453 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.454 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.455 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.456 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.457 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.458 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.459 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.460 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.461 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.462 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.463 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.464 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.465 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.466 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.467 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.468 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.469 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.470 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.471 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.472 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.473 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.474 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.475 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.476 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.477 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.478 = external hidden unnamed_addr constant [9 x i8], align 1

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 #1 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16)) #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)) #1 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEb(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 4 dereferenceable(12) %1, i1 noundef zeroext %2) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"class.spirv_cross::SmallVector.92", align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %"class.spirv_cross::TypedID.330", align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i8, align 1
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.spirv_cross::TypedID.324", align 4
  %24 = alloca %"class.spirv_cross::TypedID.324", align 4
  %25 = alloca %"class.spirv_cross::TypedID.324", align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca %class.anon.431, align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %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.anon.432, align 1
  %49 = alloca i8, align 1
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca ptr, 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 i32, align 4
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca i32, align 4
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", 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 %"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 %"class.std::__cxx11::basic_string", align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca i32, align 4
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::allocator", align 1
  %83 = alloca i1, align 1
  %84 = alloca i1, align 1
  %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 %"class.std::__cxx11::basic_string", align 8
  %93 = alloca %"class.std::__cxx11::basic_string", align 8
  %94 = alloca %"class.std::__cxx11::basic_string", align 8
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca %"class.std::__cxx11::basic_string", align 8
  %97 = alloca %"class.std::__cxx11::basic_string", align 8
  %98 = alloca i8, align 1
  %99 = alloca ptr, align 8
  %100 = alloca ptr, align 8
  %101 = alloca ptr, align 8
  %102 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %103 = zext i1 %2 to i8
  store i8 %103, ptr %6, align 1, !tbaa !9
  %104 = load ptr, ptr %4, align 8
  %105 = load i8, ptr %6, align 1, !tbaa !9, !range !11, !noundef !12
  %106 = trunc i8 %105 to i1
  br i1 %106, label %107, label %114

107:                                              ; preds = %3
  %108 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %108, ptr noundef @.str.433)
          to label %109 unwind label %110

109:                                              ; preds = %107
  call void @__cxa_throw(ptr %108, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
  unreachable

110:                                              ; preds = %107
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %7, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %8, align 4
  call void @__cxa_free_exception(ptr %108) #7
  br label %1403

114:                                              ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %115 = load ptr, ptr %5, align 8, !tbaa !5
  %116 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %104, ptr noundef nonnull align 4 dereferenceable(12) %115)
  store ptr %116, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %117 = load ptr, ptr %5, align 8, !tbaa !5
  %118 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %117, i32 0, i32 0
  %119 = load i16, ptr %118, align 4, !tbaa !13
  %120 = zext i16 %119 to i32
  store i32 %120, ptr %10, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %121, i32 0, i32 3
  %123 = load i32, ptr %122, align 4, !tbaa !19
  store i32 %123, ptr %11, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 56, ptr %12) #7
  call void @_ZN11spirv_cross11SmallVectorIjLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %124 = load ptr, ptr %9, align 8, !tbaa !5
  %125 = getelementptr inbounds i32, ptr %124, i64 0
  %126 = load i32, ptr %125, align 4, !tbaa !20
  store i32 %126, ptr %13, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %127 = load ptr, ptr %9, align 8, !tbaa !5
  %128 = getelementptr inbounds i32, ptr %127, i64 1
  %129 = load i32, ptr %128, align 4, !tbaa !20
  store i32 %129, ptr %14, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %130 = load ptr, ptr %9, align 8, !tbaa !5
  %131 = getelementptr inbounds i32, ptr %130, i64 2
  %132 = load i32, ptr %131, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef %132)
          to label %133 unwind label %162

133:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %134 = load ptr, ptr %9, align 8, !tbaa !5
  %135 = getelementptr inbounds i32, ptr %134, i64 3
  %136 = load i32, ptr %135, align 4, !tbaa !20
  store i32 %136, ptr %16, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store i32 0, ptr %17, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #7
  store i8 0, ptr %19, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #7
  store i8 0, ptr %20, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %137 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %138 unwind label %166

138:                                              ; preds = %133
  %139 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 noundef %137)
          to label %140 unwind label %166

140:                                              ; preds = %138
  store ptr %139, ptr %22, align 8, !tbaa !5
  %141 = load ptr, ptr %22, align 8, !tbaa !5
  %142 = icmp ne ptr %141, null
  br i1 %142, label %143, label %170

143:                                              ; preds = %140
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %23, ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %144 unwind label %166

144:                                              ; preds = %143
  %145 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %23, i32 0, i32 0
  %146 = load i32, ptr %145, align 4
  %147 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 %146, i32 noundef 5300)
          to label %148 unwind label %166

148:                                              ; preds = %144
  br i1 %147, label %149, label %170

149:                                              ; preds = %148
  %150 = load ptr, ptr %22, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %150, i32 0, i32 2
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %151)
          to label %152 unwind label %166

152:                                              ; preds = %149
  %153 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %24, i32 0, i32 0
  %154 = load i32, ptr %153, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 %154, i32 noundef 5300, i32 noundef 0)
          to label %155 unwind label %166

155:                                              ; preds = %152
  %156 = load ptr, ptr %22, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %156, i32 0, i32 3
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 4 dereferenceable(4) %157)
          to label %158 unwind label %166

158:                                              ; preds = %155
  %159 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %25, i32 0, i32 0
  %160 = load i32, ptr %159, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 %160, i32 noundef 5300, i32 noundef 0)
          to label %161 unwind label %166

161:                                              ; preds = %158
  br label %170

162:                                              ; preds = %114
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %7, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %8, align 4
  br label %1402

166:                                              ; preds = %158, %155, %152, %149, %144, %143, %138, %133
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %7, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %8, align 4
  br label %1401

170:                                              ; preds = %161, %148, %140
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #7
  %171 = load ptr, ptr %22, align 8, !tbaa !5
  %172 = icmp ne ptr %171, null
  br i1 %172, label %173, label %176

173:                                              ; preds = %170
  %174 = load ptr, ptr %22, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %174, i32 0, i32 2
  br label %177

176:                                              ; preds = %170
  br label %177

177:                                              ; preds = %176, %173
  %178 = phi ptr [ %175, %173 ], [ %15, %176 ]
  %179 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %178)
          to label %180 unwind label %183

180:                                              ; preds = %177
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %179)
          to label %181 unwind label %183

181:                                              ; preds = %180
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %12, ptr noundef nonnull align 4 dereferenceable(4) %16) #7
  %182 = load i32, ptr %10, align 4, !tbaa !17
  switch i32 %182, label %229 [
    i32 89, label %187
    i32 90, label %187
    i32 93, label %195
    i32 94, label %195
    i32 97, label %203
    i32 96, label %211
    i32 91, label %219
    i32 92, label %219
    i32 105, label %224
  ]

183:                                              ; preds = %180, %177
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %7, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %8, align 4
  br label %1400

187:                                              ; preds = %181, %181
  %188 = load ptr, ptr %9, align 8, !tbaa !5
  %189 = getelementptr inbounds i32, ptr %188, i64 4
  %190 = load i32, ptr %189, align 4, !tbaa !20
  store i32 %190, ptr %17, align 4, !tbaa !20
  %191 = load ptr, ptr %9, align 8, !tbaa !5
  %192 = getelementptr inbounds i32, ptr %191, i64 5
  store ptr %192, ptr %21, align 8, !tbaa !5
  %193 = load i32, ptr %11, align 4, !tbaa !20
  %194 = sub i32 %193, 5
  store i32 %194, ptr %11, align 4, !tbaa !20
  br label %234

195:                                              ; preds = %181, %181
  %196 = load ptr, ptr %9, align 8, !tbaa !5
  %197 = getelementptr inbounds i32, ptr %196, i64 4
  %198 = load i32, ptr %197, align 4, !tbaa !20
  store i32 %198, ptr %17, align 4, !tbaa !20
  store i8 1, ptr %20, align 1, !tbaa !9
  %199 = load ptr, ptr %9, align 8, !tbaa !5
  %200 = getelementptr inbounds i32, ptr %199, i64 5
  store ptr %200, ptr %21, align 8, !tbaa !5
  %201 = load i32, ptr %11, align 4, !tbaa !20
  %202 = sub i32 %201, 5
  store i32 %202, ptr %11, align 4, !tbaa !20
  br label %234

203:                                              ; preds = %181
  %204 = load ptr, ptr %9, align 8, !tbaa !5
  %205 = getelementptr inbounds i32, ptr %204, i64 4
  %206 = load i32, ptr %205, align 4, !tbaa !20
  store i32 %206, ptr %17, align 4, !tbaa !20
  %207 = load ptr, ptr %9, align 8, !tbaa !5
  %208 = getelementptr inbounds i32, ptr %207, i64 5
  store ptr %208, ptr %21, align 8, !tbaa !5
  store i8 1, ptr %19, align 1, !tbaa !9
  %209 = load i32, ptr %11, align 4, !tbaa !20
  %210 = sub i32 %209, 5
  store i32 %210, ptr %11, align 4, !tbaa !20
  br label %234

211:                                              ; preds = %181
  %212 = load ptr, ptr %9, align 8, !tbaa !5
  %213 = getelementptr inbounds i32, ptr %212, i64 4
  %214 = load i32, ptr %213, align 4, !tbaa !20
  store i32 %214, ptr %18, align 4, !tbaa !20
  %215 = load ptr, ptr %9, align 8, !tbaa !5
  %216 = getelementptr inbounds i32, ptr %215, i64 5
  store ptr %216, ptr %21, align 8, !tbaa !5
  store i8 1, ptr %19, align 1, !tbaa !9
  %217 = load i32, ptr %11, align 4, !tbaa !20
  %218 = sub i32 %217, 5
  store i32 %218, ptr %11, align 4, !tbaa !20
  br label %234

219:                                              ; preds = %181, %181
  %220 = load ptr, ptr %9, align 8, !tbaa !5
  %221 = getelementptr inbounds i32, ptr %220, i64 4
  store ptr %221, ptr %21, align 8, !tbaa !5
  %222 = load i32, ptr %11, align 4, !tbaa !20
  %223 = sub i32 %222, 4
  store i32 %223, ptr %11, align 4, !tbaa !20
  store i8 1, ptr %20, align 1, !tbaa !9
  br label %234

224:                                              ; preds = %181
  %225 = load ptr, ptr %9, align 8, !tbaa !5
  %226 = getelementptr inbounds i32, ptr %225, i64 4
  store ptr %226, ptr %21, align 8, !tbaa !5
  %227 = load i32, ptr %11, align 4, !tbaa !20
  %228 = sub i32 %227, 4
  store i32 %228, ptr %11, align 4, !tbaa !20
  br label %234

229:                                              ; preds = %181
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  %231 = getelementptr inbounds i32, ptr %230, i64 4
  store ptr %231, ptr %21, align 8, !tbaa !5
  %232 = load i32, ptr %11, align 4, !tbaa !20
  %233 = sub i32 %232, 4
  store i32 %233, ptr %11, align 4, !tbaa !20
  br label %234

234:                                              ; preds = %229, %224, %219, %211, %203, %195, %187
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %235 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %236 unwind label %243

236:                                              ; preds = %234
  %237 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 noundef %235)
          to label %238 unwind label %243

238:                                              ; preds = %236
  store ptr %237, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  store i32 0, ptr %28, align 4, !tbaa !20
  %239 = load ptr, ptr %27, align 8, !tbaa !5
  %240 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %239, i32 0, i32 14
  %241 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %240, i32 0, i32 1
  %242 = load i32, ptr %241, align 4, !tbaa !21
  switch i32 %242, label %252 [
    i32 0, label %247
    i32 1, label %248
    i32 2, label %249
    i32 3, label %250
    i32 5, label %251
  ]

243:                                              ; preds = %236, %234
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %7, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %8, align 4
  br label %1399

247:                                              ; preds = %238
  store i32 1, ptr %28, align 4, !tbaa !20
  br label %253

248:                                              ; preds = %238
  store i32 2, ptr %28, align 4, !tbaa !20
  br label %253

249:                                              ; preds = %238
  store i32 3, ptr %28, align 4, !tbaa !20
  br label %253

250:                                              ; preds = %238
  store i32 3, ptr %28, align 4, !tbaa !20
  br label %253

251:                                              ; preds = %238
  store i32 1, ptr %28, align 4, !tbaa !20
  br label %253

252:                                              ; preds = %238
  store i32 2, ptr %28, align 4, !tbaa !20
  br label %253

253:                                              ; preds = %252, %251, %250, %249, %248, %247
  %254 = load i32, ptr %17, align 4, !tbaa !20
  %255 = icmp ne i32 %254, 0
  br i1 %255, label %256, label %257

256:                                              ; preds = %253
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %12, ptr noundef nonnull align 4 dereferenceable(4) %17) #7
  br label %257

257:                                              ; preds = %256, %253
  %258 = load ptr, ptr %27, align 8, !tbaa !5
  %259 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %258, i32 0, i32 14
  %260 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %259, i32 0, i32 3
  %261 = load i8, ptr %260, align 1, !tbaa !47, !range !11, !noundef !12
  %262 = trunc i8 %261 to i1
  br i1 %262, label %263, label %266

263:                                              ; preds = %257
  %264 = load i32, ptr %28, align 4, !tbaa !20
  %265 = add i32 %264, 1
  store i32 %265, ptr %28, align 4, !tbaa !20
  br label %266

266:                                              ; preds = %263, %257
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  store i32 0, ptr %29, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  store i32 0, ptr %30, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  store i32 0, ptr %31, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  store i32 0, ptr %32, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  store i32 0, ptr %33, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  store i32 0, ptr %34, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  store i32 0, ptr %35, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  store i32 0, ptr %36, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  store i32 0, ptr %37, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  store i32 0, ptr %38, align 4, !tbaa !20
  %267 = load i32, ptr %11, align 4, !tbaa !20
  %268 = icmp ne i32 %267, 0
  br i1 %268, label %269, label %277

269:                                              ; preds = %266
  %270 = load ptr, ptr %21, align 8, !tbaa !5
  %271 = getelementptr inbounds i32, ptr %270, i64 0
  %272 = load i32, ptr %271, align 4, !tbaa !20
  store i32 %272, ptr %38, align 4, !tbaa !20
  %273 = load ptr, ptr %21, align 8, !tbaa !5
  %274 = getelementptr inbounds i32, ptr %273, i32 1
  store ptr %274, ptr %21, align 8, !tbaa !5
  %275 = load i32, ptr %11, align 4, !tbaa !20
  %276 = add i32 %275, -1
  store i32 %276, ptr %11, align 4, !tbaa !20
  br label %277

277:                                              ; preds = %269, %266
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #7
  %278 = getelementptr inbounds %class.anon.431, ptr %39, i32 0, i32 0
  store ptr %11, ptr %278, align 8, !tbaa !5
  %279 = getelementptr inbounds %class.anon.431, ptr %39, i32 0, i32 1
  store ptr %38, ptr %279, align 8, !tbaa !5
  %280 = getelementptr inbounds %class.anon.431, ptr %39, i32 0, i32 2
  store ptr %21, ptr %280, align 8, !tbaa !5
  %281 = getelementptr inbounds %class.anon.431, ptr %39, i32 0, i32 3
  store ptr %12, ptr %281, align 8, !tbaa !5
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %29, i32 noundef 1)
          to label %282 unwind label %296

282:                                              ; preds = %277
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %30, i32 noundef 2)
          to label %283 unwind label %296

283:                                              ; preds = %282
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %31, i32 noundef 4)
          to label %284 unwind label %296

284:                                              ; preds = %283
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %32, i32 noundef 4)
          to label %285 unwind label %296

285:                                              ; preds = %284
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %33, i32 noundef 8)
          to label %286 unwind label %296

286:                                              ; preds = %285
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %34, i32 noundef 16)
          to label %287 unwind label %296

287:                                              ; preds = %286
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %35, i32 noundef 32)
          to label %288 unwind label %296

288:                                              ; preds = %287
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %36, i32 noundef 64)
          to label %289 unwind label %296

289:                                              ; preds = %288
  invoke void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef 128)
          to label %290 unwind label %296

290:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  %291 = load i32, ptr %37, align 4, !tbaa !20
  %292 = icmp ne i32 %291, 0
  br i1 %292, label %293, label %308

293:                                              ; preds = %290
  %294 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %294, ptr noundef @.str.434)
          to label %295 unwind label %300

295:                                              ; preds = %293
  invoke void @__cxa_throw(ptr %294, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %304

296:                                              ; preds = %289, %288, %287, %286, %285, %284, %283, %282, %277
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %7, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %8, align 4
  br label %1398

300:                                              ; preds = %293
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %7, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %8, align 4
  call void @__cxa_free_exception(ptr %294) #7
  br label %1397

304:                                              ; preds = %587, %575, %573, %333, %331, %325, %323, %318, %295
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %7, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %8, align 4
  br label %1397

308:                                              ; preds = %290
  %309 = load i32, ptr %10, align 4, !tbaa !17
  %310 = icmp eq i32 %309, 95
  br i1 %310, label %311, label %328

311:                                              ; preds = %308
  %312 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %313 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %312, i32 0, i32 0
  %314 = load i32, ptr %313, align 8, !tbaa !48
  %315 = icmp ult i32 %314, 40
  br i1 %315, label %316, label %323

316:                                              ; preds = %311
  %317 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %317, ptr noundef @.str.435)
          to label %318 unwind label %319

318:                                              ; preds = %316
  invoke void @__cxa_throw(ptr %317, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %304

319:                                              ; preds = %316
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %7, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %8, align 4
  call void @__cxa_free_exception(ptr %317) #7
  br label %1397

323:                                              ; preds = %311
  %324 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %325 unwind label %304

325:                                              ; preds = %323
  %326 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.436)
          to label %327 unwind label %304

327:                                              ; preds = %325
  br label %573

328:                                              ; preds = %308
  %329 = load i32, ptr %10, align 4, !tbaa !17
  %330 = icmp eq i32 %329, 105
  br i1 %330, label %331, label %336

331:                                              ; preds = %328
  %332 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %333 unwind label %304

333:                                              ; preds = %331
  %334 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.437)
          to label %335 unwind label %304

335:                                              ; preds = %333
  br label %572

336:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %337 = load ptr, ptr %27, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %337, i32 0, i32 14
  %339 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %338, i32 0, i32 0
  %340 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %339)
          to label %341 unwind label %356

341:                                              ; preds = %336
  %342 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 noundef %340)
          to label %343 unwind label %356

343:                                              ; preds = %341
  store ptr %342, ptr %42, align 8, !tbaa !5
  %344 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %345 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %344, i32 0, i32 0
  %346 = load i32, ptr %345, align 8, !tbaa !48
  %347 = icmp ult i32 %346, 67
  br i1 %347, label %348, label %364

348:                                              ; preds = %343
  %349 = load ptr, ptr %42, align 8, !tbaa !5
  %350 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %349, i32 0, i32 2
  %351 = load i32, ptr %350, align 8, !tbaa !162
  %352 = icmp ne i32 %351, 13
  br i1 %352, label %353, label %364

353:                                              ; preds = %348
  %354 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %354, ptr noundef @.str.438)
          to label %355 unwind label %360

355:                                              ; preds = %353
  invoke void @__cxa_throw(ptr %354, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %356

356:                                              ; preds = %563, %554, %548, %542, %531, %518, %508, %501, %496, %493, %490, %487, %474, %471, %465, %456, %395, %392, %380, %374, %371, %369, %355, %341, %336
  %357 = landingpad { ptr, i32 }
          cleanup
  %358 = extractvalue { ptr, i32 } %357, 0
  store ptr %358, ptr %7, align 8
  %359 = extractvalue { ptr, i32 } %357, 1
  store i32 %359, ptr %8, align 4
  br label %571

360:                                              ; preds = %353
  %361 = landingpad { ptr, i32 }
          cleanup
  %362 = extractvalue { ptr, i32 } %361, 0
  store ptr %362, ptr %7, align 8
  %363 = extractvalue { ptr, i32 } %361, 1
  store i32 %363, ptr %8, align 4
  call void @__cxa_free_exception(ptr %354) #7
  br label %571

364:                                              ; preds = %348, %343
  %365 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %366 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %365, i32 0, i32 0
  %367 = load i32, ptr %366, align 8, !tbaa !48
  %368 = icmp uge i32 %367, 40
  br i1 %368, label %369, label %482

369:                                              ; preds = %364
  %370 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %371 unwind label %356

371:                                              ; preds = %369
  %372 = load ptr, ptr %27, align 8, !tbaa !5
  %373 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %374 unwind label %356

374:                                              ; preds = %371
  %375 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_depth_imageERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %104, ptr noundef nonnull align 8 dereferenceable(336) %372, i32 noundef %373)
          to label %376 unwind label %356

376:                                              ; preds = %374
  br i1 %375, label %377, label %400

377:                                              ; preds = %376
  %378 = load i8, ptr %19, align 1, !tbaa !9, !range !11, !noundef !12
  %379 = trunc i8 %378 to i1
  br i1 %379, label %380, label %383

380:                                              ; preds = %377
  %381 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.439)
          to label %382 unwind label %356

382:                                              ; preds = %380
  br label %399

383:                                              ; preds = %377
  %384 = load i32, ptr %30, align 4, !tbaa !20
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %392, label %386

386:                                              ; preds = %383
  %387 = load i32, ptr %31, align 4, !tbaa !20
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %392, label %389

389:                                              ; preds = %386
  %390 = load i32, ptr %32, align 4, !tbaa !20
  %391 = icmp ne i32 %390, 0
  br i1 %391, label %392, label %395

392:                                              ; preds = %389, %386, %383
  %393 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.440)
          to label %394 unwind label %356

394:                                              ; preds = %392
  br label %398

395:                                              ; preds = %389
  %396 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.441)
          to label %397 unwind label %356

397:                                              ; preds = %395
  br label %398

398:                                              ; preds = %397, %394
  br label %399

399:                                              ; preds = %398, %382
  br label %481

400:                                              ; preds = %376
  %401 = load i8, ptr %19, align 1, !tbaa !9, !range !11, !noundef !12
  %402 = trunc i8 %401 to i1
  br i1 %402, label %403, label %453

403:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %404 = load i32, ptr %18, align 4, !tbaa !20
  %405 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 noundef %404)
          to label %406 unwind label %413

406:                                              ; preds = %403
  store i32 %405, ptr %43, align 4, !tbaa !20
  %407 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %408 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %407, i32 0, i32 0
  %409 = load i32, ptr %408, align 8, !tbaa !48
  %410 = icmp uge i32 %409, 50
  br i1 %410, label %411, label %437

411:                                              ; preds = %406
  %412 = load i32, ptr %43, align 4, !tbaa !20
  switch i32 %412, label %429 [
    i32 0, label %417
    i32 1, label %420
    i32 2, label %423
    i32 3, label %426
  ]

413:                                              ; preds = %445, %440, %431, %426, %423, %420, %417, %403
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %7, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %8, align 4
  br label %452

417:                                              ; preds = %411
  %418 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.442)
          to label %419 unwind label %413

419:                                              ; preds = %417
  br label %436

420:                                              ; preds = %411
  %421 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.443)
          to label %422 unwind label %413

422:                                              ; preds = %420
  br label %436

423:                                              ; preds = %411
  %424 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.444)
          to label %425 unwind label %413

425:                                              ; preds = %423
  br label %436

426:                                              ; preds = %411
  %427 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.445)
          to label %428 unwind label %413

428:                                              ; preds = %426
  br label %436

429:                                              ; preds = %411
  %430 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %430, ptr noundef @.str.446)
          to label %431 unwind label %432

431:                                              ; preds = %429
  invoke void @__cxa_throw(ptr %430, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %413

432:                                              ; preds = %429
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %7, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %8, align 4
  call void @__cxa_free_exception(ptr %430) #7
  br label %452

436:                                              ; preds = %428, %425, %422, %419
  br label %451

437:                                              ; preds = %406
  %438 = load i32, ptr %43, align 4, !tbaa !20
  %439 = icmp eq i32 %438, 0
  br i1 %439, label %440, label %443

440:                                              ; preds = %437
  %441 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.447)
          to label %442 unwind label %413

442:                                              ; preds = %440
  br label %450

443:                                              ; preds = %437
  %444 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %444, ptr noundef @.str.448)
          to label %445 unwind label %446

445:                                              ; preds = %443
  invoke void @__cxa_throw(ptr %444, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %413

446:                                              ; preds = %443
  %447 = landingpad { ptr, i32 }
          cleanup
  %448 = extractvalue { ptr, i32 } %447, 0
  store ptr %448, ptr %7, align 8
  %449 = extractvalue { ptr, i32 } %447, 1
  store i32 %449, ptr %8, align 4
  call void @__cxa_free_exception(ptr %444) #7
  br label %452

450:                                              ; preds = %442
  br label %451

451:                                              ; preds = %450, %436
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  br label %480

452:                                              ; preds = %446, %432, %413
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  br label %571

453:                                              ; preds = %400
  %454 = load i32, ptr %29, align 4, !tbaa !20
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %459

456:                                              ; preds = %453
  %457 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.449)
          to label %458 unwind label %356

458:                                              ; preds = %456
  br label %479

459:                                              ; preds = %453
  %460 = load i32, ptr %31, align 4, !tbaa !20
  %461 = icmp ne i32 %460, 0
  br i1 %461, label %465, label %462

462:                                              ; preds = %459
  %463 = load i32, ptr %32, align 4, !tbaa !20
  %464 = icmp ne i32 %463, 0
  br i1 %464, label %465, label %468

465:                                              ; preds = %462, %459
  %466 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.450)
          to label %467 unwind label %356

467:                                              ; preds = %465
  br label %478

468:                                              ; preds = %462
  %469 = load i32, ptr %30, align 4, !tbaa !20
  %470 = icmp ne i32 %469, 0
  br i1 %470, label %471, label %474

471:                                              ; preds = %468
  %472 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.451)
          to label %473 unwind label %356

473:                                              ; preds = %471
  br label %477

474:                                              ; preds = %468
  %475 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.452)
          to label %476 unwind label %356

476:                                              ; preds = %474
  br label %477

477:                                              ; preds = %476, %473
  br label %478

478:                                              ; preds = %477, %467
  br label %479

479:                                              ; preds = %478, %458
  br label %480

480:                                              ; preds = %479, %451
  br label %481

481:                                              ; preds = %480, %399
  br label %570

482:                                              ; preds = %364
  %483 = load ptr, ptr %27, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %483, i32 0, i32 14
  %485 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %484, i32 0, i32 1
  %486 = load i32, ptr %485, align 4, !tbaa !21
  switch i32 %486, label %506 [
    i32 0, label %487
    i32 1, label %490
    i32 2, label %493
    i32 3, label %496
    i32 4, label %499
    i32 5, label %499
    i32 6, label %499
  ]

487:                                              ; preds = %482
  %488 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.453)
          to label %489 unwind label %356

489:                                              ; preds = %487
  br label %513

490:                                              ; preds = %482
  %491 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.454)
          to label %492 unwind label %356

492:                                              ; preds = %490
  br label %513

493:                                              ; preds = %482
  %494 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.455)
          to label %495 unwind label %356

495:                                              ; preds = %493
  br label %513

496:                                              ; preds = %482
  %497 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.456)
          to label %498 unwind label %356

498:                                              ; preds = %496
  br label %513

499:                                              ; preds = %482, %482, %482
  %500 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %500, ptr noundef @.str.457)
          to label %501 unwind label %502

501:                                              ; preds = %499
  invoke void @__cxa_throw(ptr %500, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %356

502:                                              ; preds = %499
  %503 = landingpad { ptr, i32 }
          cleanup
  %504 = extractvalue { ptr, i32 } %503, 0
  store ptr %504, ptr %7, align 8
  %505 = extractvalue { ptr, i32 } %503, 1
  store i32 %505, ptr %8, align 4
  call void @__cxa_free_exception(ptr %500) #7
  br label %571

506:                                              ; preds = %482
  %507 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %507, ptr noundef @.str.12)
          to label %508 unwind label %509

508:                                              ; preds = %506
  invoke void @__cxa_throw(ptr %507, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %356

509:                                              ; preds = %506
  %510 = landingpad { ptr, i32 }
          cleanup
  %511 = extractvalue { ptr, i32 } %510, 0
  store ptr %511, ptr %7, align 8
  %512 = extractvalue { ptr, i32 } %510, 1
  store i32 %512, ptr %8, align 4
  call void @__cxa_free_exception(ptr %507) #7
  br label %571

513:                                              ; preds = %498, %495, %492, %489
  %514 = load i8, ptr %19, align 1, !tbaa !9, !range !11, !noundef !12
  %515 = trunc i8 %514 to i1
  br i1 %515, label %516, label %523

516:                                              ; preds = %513
  %517 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %517, ptr noundef @.str.458)
          to label %518 unwind label %519

518:                                              ; preds = %516
  invoke void @__cxa_throw(ptr %517, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %356

519:                                              ; preds = %516
  %520 = landingpad { ptr, i32 }
          cleanup
  %521 = extractvalue { ptr, i32 } %520, 0
  store ptr %521, ptr %7, align 8
  %522 = extractvalue { ptr, i32 } %520, 1
  store i32 %522, ptr %8, align 4
  call void @__cxa_free_exception(ptr %517) #7
  br label %571

523:                                              ; preds = %513
  %524 = load i32, ptr %34, align 4, !tbaa !20
  %525 = icmp ne i32 %524, 0
  br i1 %525, label %529, label %526

526:                                              ; preds = %523
  %527 = load i32, ptr %33, align 4, !tbaa !20
  %528 = icmp ne i32 %527, 0
  br i1 %528, label %529, label %536

529:                                              ; preds = %526, %523
  %530 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %530, ptr noundef @.str.459)
          to label %531 unwind label %532

531:                                              ; preds = %529
  invoke void @__cxa_throw(ptr %530, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %356

532:                                              ; preds = %529
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %7, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %8, align 4
  call void @__cxa_free_exception(ptr %530) #7
  br label %571

536:                                              ; preds = %526
  %537 = load i32, ptr %31, align 4, !tbaa !20
  %538 = icmp ne i32 %537, 0
  br i1 %538, label %542, label %539

539:                                              ; preds = %536
  %540 = load i32, ptr %32, align 4, !tbaa !20
  %541 = icmp ne i32 %540, 0
  br i1 %541, label %542, label %545

542:                                              ; preds = %539, %536
  %543 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.460)
          to label %544 unwind label %356

544:                                              ; preds = %542
  br label %569

545:                                              ; preds = %539
  %546 = load i32, ptr %30, align 4, !tbaa !20
  %547 = icmp ne i32 %546, 0
  br i1 %547, label %548, label %551

548:                                              ; preds = %545
  %549 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.461)
          to label %550 unwind label %356

550:                                              ; preds = %548
  br label %568

551:                                              ; preds = %545
  %552 = load i32, ptr %29, align 4, !tbaa !20
  %553 = icmp ne i32 %552, 0
  br i1 %553, label %554, label %557

554:                                              ; preds = %551
  %555 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.462)
          to label %556 unwind label %356

556:                                              ; preds = %554
  br label %567

557:                                              ; preds = %551
  %558 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %559 = trunc i8 %558 to i1
  br i1 %559, label %563, label %560

560:                                              ; preds = %557
  %561 = load i32, ptr %17, align 4, !tbaa !20
  %562 = icmp ne i32 %561, 0
  br i1 %562, label %563, label %566

563:                                              ; preds = %560, %557
  %564 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef @.str.463)
          to label %565 unwind label %356

565:                                              ; preds = %563
  br label %566

566:                                              ; preds = %565, %560
  br label %567

567:                                              ; preds = %566, %556
  br label %568

568:                                              ; preds = %567, %550
  br label %569

569:                                              ; preds = %568, %544
  br label %570

570:                                              ; preds = %569, %481
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %572

571:                                              ; preds = %532, %519, %509, %502, %452, %360, %356
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %1397

572:                                              ; preds = %570, %335
  br label %573

573:                                              ; preds = %572, %327
  %574 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %575 unwind label %304

575:                                              ; preds = %573
  %576 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.406)
          to label %577 unwind label %304

577:                                              ; preds = %575
  %578 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %579 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %578, i32 0, i32 0
  %580 = load i32, ptr %579, align 8, !tbaa !48
  %581 = icmp ult i32 %580, 40
  br i1 %581, label %582, label %607

582:                                              ; preds = %577
  %583 = load ptr, ptr %22, align 8, !tbaa !5
  %584 = icmp ne ptr %583, null
  br i1 %584, label %585, label %592

585:                                              ; preds = %582
  %586 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %586, ptr noundef @.str.464)
          to label %587 unwind label %588

587:                                              ; preds = %585
  invoke void @__cxa_throw(ptr %586, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %304

588:                                              ; preds = %585
  %589 = landingpad { ptr, i32 }
          cleanup
  %590 = extractvalue { ptr, i32 } %589, 0
  store ptr %590, ptr %7, align 8
  %591 = extractvalue { ptr, i32 } %589, 1
  store i32 %591, ptr %8, align 4
  call void @__cxa_free_exception(ptr %586) #7
  br label %1397

592:                                              ; preds = %582
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #7
  %593 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %594 unwind label %598

594:                                              ; preds = %592
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %593, i1 noundef zeroext true)
          to label %595 unwind label %598

595:                                              ; preds = %594
  %596 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %44)
          to label %597 unwind label %602

597:                                              ; preds = %595
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  br label %642

598:                                              ; preds = %594, %592
  %599 = landingpad { ptr, i32 }
          cleanup
  %600 = extractvalue { ptr, i32 } %599, 0
  store ptr %600, ptr %7, align 8
  %601 = extractvalue { ptr, i32 } %599, 1
  store i32 %601, ptr %8, align 4
  br label %606

602:                                              ; preds = %595
  %603 = landingpad { ptr, i32 }
          cleanup
  %604 = extractvalue { ptr, i32 } %603, 0
  store ptr %604, ptr %7, align 8
  %605 = extractvalue { ptr, i32 } %603, 1
  store i32 %605, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %606

606:                                              ; preds = %602, %598
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  br label %1397

607:                                              ; preds = %577
  %608 = load i32, ptr %10, align 4, !tbaa !17
  %609 = icmp ne i32 %608, 95
  br i1 %609, label %610, label %641

610:                                              ; preds = %607
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  %611 = load ptr, ptr %22, align 8, !tbaa !5
  %612 = icmp ne ptr %611, null
  br i1 %612, label %613, label %624

613:                                              ; preds = %610
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #7
  %614 = load ptr, ptr %22, align 8, !tbaa !5
  %615 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %614, i32 0, i32 3
  %616 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %615)
          to label %617 unwind label %620

617:                                              ; preds = %613
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %616)
          to label %618 unwind label %620

618:                                              ; preds = %617
  %619 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  br label %633

620:                                              ; preds = %617, %613
  %621 = landingpad { ptr, i32 }
          cleanup
  %622 = extractvalue { ptr, i32 } %621, 0
  store ptr %622, ptr %7, align 8
  %623 = extractvalue { ptr, i32 } %621, 1
  store i32 %623, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  br label %640

624:                                              ; preds = %610
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #7
  %625 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %626 unwind label %629

626:                                              ; preds = %624
  invoke void @_ZN11spirv_cross12CompilerHLSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(10528) %104, i32 noundef %625)
          to label %627 unwind label %629

627:                                              ; preds = %626
  %628 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  br label %633

629:                                              ; preds = %626, %624
  %630 = landingpad { ptr, i32 }
          cleanup
  %631 = extractvalue { ptr, i32 } %630, 0
  store ptr %631, ptr %7, align 8
  %632 = extractvalue { ptr, i32 } %630, 1
  store i32 %632, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  br label %640

633:                                              ; preds = %627, %618
  %634 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %635 unwind label %636

635:                                              ; preds = %633
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  br label %641

636:                                              ; preds = %633
  %637 = landingpad { ptr, i32 }
          cleanup
  %638 = extractvalue { ptr, i32 } %637, 0
  store ptr %638, ptr %7, align 8
  %639 = extractvalue { ptr, i32 } %637, 1
  store i32 %639, ptr %8, align 4
  br label %640

640:                                              ; preds = %636, %629, %620
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  br label %1397

641:                                              ; preds = %635, %607
  br label %642

642:                                              ; preds = %641, %597
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #7
  %643 = load i32, ptr %16, align 4, !tbaa !20
  %644 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %643)
          to label %645 unwind label %668

645:                                              ; preds = %642
  %646 = zext i1 %644 to i8
  store i8 %646, ptr %49, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  %647 = load i32, ptr %16, align 4, !tbaa !20
  %648 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 noundef %647)
          to label %649 unwind label %672

649:                                              ; preds = %645
  store ptr %648, ptr %51, align 8, !tbaa !5
  %650 = load i32, ptr %28, align 4, !tbaa !20
  %651 = load ptr, ptr %51, align 8, !tbaa !5
  %652 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %651, i32 0, i32 4
  %653 = load i32, ptr %652, align 8, !tbaa !163
  %654 = icmp ne i32 %650, %653
  br i1 %654, label %655, label %685

655:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #7
  %656 = load i32, ptr %16, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %656, i1 noundef zeroext true)
          to label %657 unwind label %676

657:                                              ; preds = %655
  %658 = load i32, ptr %28, align 4, !tbaa !20
  %659 = load i32, ptr %16, align 4, !tbaa !20
  %660 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 noundef %659)
          to label %661 unwind label %680

661:                                              ; preds = %657
  %662 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %660, i32 0, i32 4
  %663 = load i32, ptr %662, align 8, !tbaa !163
  %664 = invoke noundef ptr @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_1clEjj"(ptr noundef nonnull align 1 dereferenceable(1) %48, i32 noundef %658, i32 noundef %663)
          to label %665 unwind label %680

665:                                              ; preds = %661
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef %664)
          to label %666 unwind label %680

666:                                              ; preds = %665
  %667 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  br label %693

668:                                              ; preds = %642
  %669 = landingpad { ptr, i32 }
          cleanup
  %670 = extractvalue { ptr, i32 } %669, 0
  store ptr %670, ptr %7, align 8
  %671 = extractvalue { ptr, i32 } %669, 1
  store i32 %671, ptr %8, align 4
  br label %1396

672:                                              ; preds = %1390, %1358, %1343, %1342, %1336, %1326, %1310, %1288, %1284, %1260, %1256, %1232, %1228, %1196, %1192, %1150, %1142, %1138, %1129, %1061, %1057, %1044, %1041, %980, %781, %757, %744, %645
  %673 = landingpad { ptr, i32 }
          cleanup
  %674 = extractvalue { ptr, i32 } %673, 0
  store ptr %674, ptr %7, align 8
  %675 = extractvalue { ptr, i32 } %673, 1
  store i32 %675, ptr %8, align 4
  br label %1395

676:                                              ; preds = %655
  %677 = landingpad { ptr, i32 }
          cleanup
  %678 = extractvalue { ptr, i32 } %677, 0
  store ptr %678, ptr %7, align 8
  %679 = extractvalue { ptr, i32 } %677, 1
  store i32 %679, ptr %8, align 4
  br label %684

680:                                              ; preds = %665, %661, %657
  %681 = landingpad { ptr, i32 }
          cleanup
  %682 = extractvalue { ptr, i32 } %681, 0
  store ptr %682, ptr %7, align 8
  %683 = extractvalue { ptr, i32 } %681, 1
  store i32 %683, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  br label %684

684:                                              ; preds = %680, %676
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  br label %1395

685:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #7
  %686 = load i32, ptr %16, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %686, i1 noundef zeroext true)
          to label %687 unwind label %689

687:                                              ; preds = %685
  %688 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  br label %693

689:                                              ; preds = %685
  %690 = landingpad { ptr, i32 }
          cleanup
  %691 = extractvalue { ptr, i32 } %690, 0
  store ptr %691, ptr %7, align 8
  %692 = extractvalue { ptr, i32 } %690, 1
  store i32 %692, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  br label %1395

693:                                              ; preds = %687, %666
  %694 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %695 = trunc i8 %694 to i1
  br i1 %695, label %696, label %722

696:                                              ; preds = %693
  %697 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %698 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %697, i32 0, i32 0
  %699 = load i32, ptr %698, align 8, !tbaa !48
  %700 = icmp uge i32 %699, 40
  br i1 %700, label %701, label %722

701:                                              ; preds = %696
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef @.str.465)
          to label %702 unwind label %708

702:                                              ; preds = %701
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #7
  %703 = load i32, ptr %16, align 4, !tbaa !20
  %704 = load i32, ptr %28, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %703, i32 noundef %704)
          to label %705 unwind label %712

705:                                              ; preds = %702
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %706 unwind label %716

706:                                              ; preds = %705
  %707 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  br label %722

708:                                              ; preds = %701
  %709 = landingpad { ptr, i32 }
          cleanup
  %710 = extractvalue { ptr, i32 } %709, 0
  store ptr %710, ptr %7, align 8
  %711 = extractvalue { ptr, i32 } %709, 1
  store i32 %711, ptr %8, align 4
  br label %721

712:                                              ; preds = %702
  %713 = landingpad { ptr, i32 }
          cleanup
  %714 = extractvalue { ptr, i32 } %713, 0
  store ptr %714, ptr %7, align 8
  %715 = extractvalue { ptr, i32 } %713, 1
  store i32 %715, ptr %8, align 4
  br label %720

716:                                              ; preds = %705
  %717 = landingpad { ptr, i32 }
          cleanup
  %718 = extractvalue { ptr, i32 } %717, 0
  store ptr %718, ptr %7, align 8
  %719 = extractvalue { ptr, i32 } %717, 1
  store i32 %719, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  br label %720

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

721:                                              ; preds = %720, %708
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  br label %1395

722:                                              ; preds = %706, %696, %693
  %723 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %724 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %723, i32 0, i32 0
  %725 = load i32, ptr %724, align 8, !tbaa !48
  %726 = icmp ult i32 %725, 40
  br i1 %726, label %727, label %986

727:                                              ; preds = %722
  %728 = load i32, ptr %17, align 4, !tbaa !20
  %729 = icmp ne i32 %728, 0
  br i1 %729, label %730, label %807

730:                                              ; preds = %727
  %731 = load ptr, ptr %27, align 8, !tbaa !5
  %732 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %731, i32 0, i32 14
  %733 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %732, i32 0, i32 1
  %734 = load i32, ptr %733, align 4, !tbaa !21
  %735 = icmp ne i32 %734, 0
  br i1 %735, label %736, label %749

736:                                              ; preds = %730
  %737 = load ptr, ptr %27, align 8, !tbaa !5
  %738 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %737, i32 0, i32 14
  %739 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %738, i32 0, i32 1
  %740 = load i32, ptr %739, align 4, !tbaa !21
  %741 = icmp ne i32 %740, 1
  br i1 %741, label %742, label %749

742:                                              ; preds = %736
  %743 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %743, ptr noundef @.str.466)
          to label %744 unwind label %745

744:                                              ; preds = %742
  invoke void @__cxa_throw(ptr %743, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %672

745:                                              ; preds = %742
  %746 = landingpad { ptr, i32 }
          cleanup
  %747 = extractvalue { ptr, i32 } %746, 0
  store ptr %747, ptr %7, align 8
  %748 = extractvalue { ptr, i32 } %746, 1
  store i32 %748, ptr %8, align 4
  call void @__cxa_free_exception(ptr %743) #7
  br label %1395

749:                                              ; preds = %736, %730
  %750 = load i32, ptr %31, align 4, !tbaa !20
  %751 = icmp ne i32 %750, 0
  br i1 %751, label %755, label %752

752:                                              ; preds = %749
  %753 = load i32, ptr %32, align 4, !tbaa !20
  %754 = icmp ne i32 %753, 0
  br i1 %754, label %755, label %762

755:                                              ; preds = %752, %749
  %756 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %756, ptr noundef @.str.467)
          to label %757 unwind label %758

757:                                              ; preds = %755
  invoke void @__cxa_throw(ptr %756, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %672

758:                                              ; preds = %755
  %759 = landingpad { ptr, i32 }
          cleanup
  %760 = extractvalue { ptr, i32 } %759, 0
  store ptr %760, ptr %7, align 8
  %761 = extractvalue { ptr, i32 } %759, 1
  store i32 %761, ptr %8, align 4
  call void @__cxa_free_exception(ptr %756) #7
  br label %1395

762:                                              ; preds = %752
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #7
  %763 = load i32, ptr %28, align 4, !tbaa !20
  store i32 %763, ptr %58, align 4, !tbaa !20
  br label %764

764:                                              ; preds = %771, %762
  %765 = load i32, ptr %58, align 4, !tbaa !20
  %766 = icmp ult i32 %765, 2
  br i1 %766, label %768, label %767

767:                                              ; preds = %764
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  br label %778

768:                                              ; preds = %764
  %769 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef @.str.468)
          to label %770 unwind label %774

770:                                              ; preds = %768
  br label %771

771:                                              ; preds = %770
  %772 = load i32, ptr %58, align 4, !tbaa !20
  %773 = add i32 %772, 1
  store i32 %773, ptr %58, align 4, !tbaa !20
  br label %764, !llvm.loop !164

774:                                              ; preds = %768
  %775 = landingpad { ptr, i32 }
          cleanup
  %776 = extractvalue { ptr, i32 } %775, 0
  store ptr %776, ptr %7, align 8
  %777 = extractvalue { ptr, i32 } %775, 1
  store i32 %777, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  br label %1395

778:                                              ; preds = %767
  %779 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %780 = trunc i8 %779 to i1
  br i1 %780, label %781, label %785

781:                                              ; preds = %778
  %782 = load i32, ptr %17, align 4, !tbaa !20
  %783 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %782)
          to label %784 unwind label %672

784:                                              ; preds = %781
  br label %785

785:                                              ; preds = %784, %778
  %786 = phi i1 [ false, %778 ], [ %783, %784 ]
  %787 = zext i1 %786 to i8
  store i8 %787, ptr %49, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #7
  %788 = load i32, ptr %17, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %788, i1 noundef zeroext true)
          to label %789 unwind label %793

789:                                              ; preds = %785
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %790 unwind label %797

790:                                              ; preds = %789
  %791 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %792 unwind label %801

792:                                              ; preds = %790
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #7
  br label %834

793:                                              ; preds = %785
  %794 = landingpad { ptr, i32 }
          cleanup
  %795 = extractvalue { ptr, i32 } %794, 0
  store ptr %795, ptr %7, align 8
  %796 = extractvalue { ptr, i32 } %794, 1
  store i32 %796, ptr %8, align 4
  br label %806

797:                                              ; preds = %789
  %798 = landingpad { ptr, i32 }
          cleanup
  %799 = extractvalue { ptr, i32 } %798, 0
  store ptr %799, ptr %7, align 8
  %800 = extractvalue { ptr, i32 } %798, 1
  store i32 %800, ptr %8, align 4
  br label %805

801:                                              ; preds = %790
  %802 = landingpad { ptr, i32 }
          cleanup
  %803 = extractvalue { ptr, i32 } %802, 0
  store ptr %803, ptr %7, align 8
  %804 = extractvalue { ptr, i32 } %802, 1
  store i32 %804, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  br label %805

805:                                              ; preds = %801, %797
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  br label %806

806:                                              ; preds = %805, %793
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #7
  br label %1395

807:                                              ; preds = %727
  %808 = load i32, ptr %30, align 4, !tbaa !20
  %809 = icmp ne i32 %808, 0
  br i1 %809, label %816, label %810

810:                                              ; preds = %807
  %811 = load i32, ptr %29, align 4, !tbaa !20
  %812 = icmp ne i32 %811, 0
  br i1 %812, label %816, label %813

813:                                              ; preds = %810
  %814 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %815 = trunc i8 %814 to i1
  br i1 %815, label %816, label %833

816:                                              ; preds = %813, %810, %807
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #7
  %817 = load i32, ptr %28, align 4, !tbaa !20
  store i32 %817, ptr %61, align 4, !tbaa !20
  br label %818

818:                                              ; preds = %825, %816
  %819 = load i32, ptr %61, align 4, !tbaa !20
  %820 = icmp ult i32 %819, 3
  br i1 %820, label %822, label %821

821:                                              ; preds = %818
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #7
  br label %832

822:                                              ; preds = %818
  %823 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef @.str.468)
          to label %824 unwind label %828

824:                                              ; preds = %822
  br label %825

825:                                              ; preds = %824
  %826 = load i32, ptr %61, align 4, !tbaa !20
  %827 = add i32 %826, 1
  store i32 %827, ptr %61, align 4, !tbaa !20
  br label %818, !llvm.loop !166

828:                                              ; preds = %822
  %829 = landingpad { ptr, i32 }
          cleanup
  %830 = extractvalue { ptr, i32 } %829, 0
  store ptr %830, ptr %7, align 8
  %831 = extractvalue { ptr, i32 } %829, 1
  store i32 %831, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #7
  br label %1395

832:                                              ; preds = %821
  br label %833

833:                                              ; preds = %832, %813
  br label %834

834:                                              ; preds = %833, %792
  %835 = load i32, ptr %30, align 4, !tbaa !20
  %836 = icmp ne i32 %835, 0
  br i1 %836, label %837, label %869

837:                                              ; preds = %834
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef @.str.469, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %838 unwind label %845

838:                                              ; preds = %837
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef @.str.341)
          to label %839 unwind label %849

839:                                              ; preds = %838
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #7
  %840 = load i32, ptr %30, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %840, i1 noundef zeroext true)
          to label %841 unwind label %853

841:                                              ; preds = %839
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %842 unwind label %857

842:                                              ; preds = %841
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef @.str.78)
          to label %843 unwind label %861

843:                                              ; preds = %842
  %844 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #7
  br label %959

845:                                              ; preds = %837
  %846 = landingpad { ptr, i32 }
          cleanup
  %847 = extractvalue { ptr, i32 } %846, 0
  store ptr %847, ptr %7, align 8
  %848 = extractvalue { ptr, i32 } %846, 1
  store i32 %848, ptr %8, align 4
  br label %868

849:                                              ; preds = %838
  %850 = landingpad { ptr, i32 }
          cleanup
  %851 = extractvalue { ptr, i32 } %850, 0
  store ptr %851, ptr %7, align 8
  %852 = extractvalue { ptr, i32 } %850, 1
  store i32 %852, ptr %8, align 4
  br label %867

853:                                              ; preds = %839
  %854 = landingpad { ptr, i32 }
          cleanup
  %855 = extractvalue { ptr, i32 } %854, 0
  store ptr %855, ptr %7, align 8
  %856 = extractvalue { ptr, i32 } %854, 1
  store i32 %856, ptr %8, align 4
  br label %866

857:                                              ; preds = %841
  %858 = landingpad { ptr, i32 }
          cleanup
  %859 = extractvalue { ptr, i32 } %858, 0
  store ptr %859, ptr %7, align 8
  %860 = extractvalue { ptr, i32 } %858, 1
  store i32 %860, ptr %8, align 4
  br label %865

861:                                              ; preds = %842
  %862 = landingpad { ptr, i32 }
          cleanup
  %863 = extractvalue { ptr, i32 } %862, 0
  store ptr %863, ptr %7, align 8
  %864 = extractvalue { ptr, i32 } %862, 1
  store i32 %864, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  br label %865

865:                                              ; preds = %861, %857
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  br label %866

866:                                              ; preds = %865, %853
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  br label %867

867:                                              ; preds = %866, %849
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  br label %868

868:                                              ; preds = %867, %845
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #7
  br label %1395

869:                                              ; preds = %834
  %870 = load i32, ptr %29, align 4, !tbaa !20
  %871 = icmp ne i32 %870, 0
  br i1 %871, label %872, label %904

872:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef @.str.469, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %873 unwind label %880

873:                                              ; preds = %872
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef @.str.341)
          to label %874 unwind label %884

874:                                              ; preds = %873
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #7
  %875 = load i32, ptr %29, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %875, i1 noundef zeroext true)
          to label %876 unwind label %888

876:                                              ; preds = %874
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 8 dereferenceable(32) %71)
          to label %877 unwind label %892

877:                                              ; preds = %876
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef @.str.78)
          to label %878 unwind label %896

878:                                              ; preds = %877
  %879 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #7
  br label %958

880:                                              ; preds = %872
  %881 = landingpad { ptr, i32 }
          cleanup
  %882 = extractvalue { ptr, i32 } %881, 0
  store ptr %882, ptr %7, align 8
  %883 = extractvalue { ptr, i32 } %881, 1
  store i32 %883, ptr %8, align 4
  br label %903

884:                                              ; preds = %873
  %885 = landingpad { ptr, i32 }
          cleanup
  %886 = extractvalue { ptr, i32 } %885, 0
  store ptr %886, ptr %7, align 8
  %887 = extractvalue { ptr, i32 } %885, 1
  store i32 %887, ptr %8, align 4
  br label %902

888:                                              ; preds = %874
  %889 = landingpad { ptr, i32 }
          cleanup
  %890 = extractvalue { ptr, i32 } %889, 0
  store ptr %890, ptr %7, align 8
  %891 = extractvalue { ptr, i32 } %889, 1
  store i32 %891, ptr %8, align 4
  br label %901

892:                                              ; preds = %876
  %893 = landingpad { ptr, i32 }
          cleanup
  %894 = extractvalue { ptr, i32 } %893, 0
  store ptr %894, ptr %7, align 8
  %895 = extractvalue { ptr, i32 } %893, 1
  store i32 %895, ptr %8, align 4
  br label %900

896:                                              ; preds = %877
  %897 = landingpad { ptr, i32 }
          cleanup
  %898 = extractvalue { ptr, i32 } %897, 0
  store ptr %898, ptr %7, align 8
  %899 = extractvalue { ptr, i32 } %897, 1
  store i32 %899, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #7
  br label %900

900:                                              ; preds = %896, %892
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  br label %901

901:                                              ; preds = %900, %888
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #7
  br label %902

902:                                              ; preds = %901, %884
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  br label %903

903:                                              ; preds = %902, %880
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #7
  br label %1395

904:                                              ; preds = %869
  %905 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %906 = trunc i8 %905 to i1
  br i1 %906, label %907, label %940

907:                                              ; preds = %904
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef @.str.469, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %908 unwind label %916

908:                                              ; preds = %907
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef @.str.341)
          to label %909 unwind label %920

909:                                              ; preds = %908
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #7
  %910 = load i32, ptr %16, align 4, !tbaa !20
  %911 = load i32, ptr %28, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %910, i32 noundef %911)
          to label %912 unwind label %924

912:                                              ; preds = %909
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %913 unwind label %928

913:                                              ; preds = %912
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef @.str.78)
          to label %914 unwind label %932

914:                                              ; preds = %913
  %915 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %72) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #7
  br label %957

916:                                              ; preds = %907
  %917 = landingpad { ptr, i32 }
          cleanup
  %918 = extractvalue { ptr, i32 } %917, 0
  store ptr %918, ptr %7, align 8
  %919 = extractvalue { ptr, i32 } %917, 1
  store i32 %919, ptr %8, align 4
  br label %939

920:                                              ; preds = %908
  %921 = landingpad { ptr, i32 }
          cleanup
  %922 = extractvalue { ptr, i32 } %921, 0
  store ptr %922, ptr %7, align 8
  %923 = extractvalue { ptr, i32 } %921, 1
  store i32 %923, ptr %8, align 4
  br label %938

924:                                              ; preds = %909
  %925 = landingpad { ptr, i32 }
          cleanup
  %926 = extractvalue { ptr, i32 } %925, 0
  store ptr %926, ptr %7, align 8
  %927 = extractvalue { ptr, i32 } %925, 1
  store i32 %927, ptr %8, align 4
  br label %937

928:                                              ; preds = %912
  %929 = landingpad { ptr, i32 }
          cleanup
  %930 = extractvalue { ptr, i32 } %929, 0
  store ptr %930, ptr %7, align 8
  %931 = extractvalue { ptr, i32 } %929, 1
  store i32 %931, ptr %8, align 4
  br label %936

932:                                              ; preds = %913
  %933 = landingpad { ptr, i32 }
          cleanup
  %934 = extractvalue { ptr, i32 } %933, 0
  store ptr %934, ptr %7, align 8
  %935 = extractvalue { ptr, i32 } %933, 1
  store i32 %935, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  br label %936

936:                                              ; preds = %932, %928
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  br label %937

937:                                              ; preds = %936, %924
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #7
  br label %938

938:                                              ; preds = %937, %920
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #7
  br label %939

939:                                              ; preds = %938, %916
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #7
  br label %1395

940:                                              ; preds = %904
  %941 = load i32, ptr %17, align 4, !tbaa !20
  %942 = icmp ne i32 %941, 0
  br i1 %942, label %943, label %956

943:                                              ; preds = %940
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef @.str.469, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %944 unwind label %947

944:                                              ; preds = %943
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef @.str.470)
          to label %945 unwind label %951

945:                                              ; preds = %944
  %946 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %77) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #7
  br label %956

947:                                              ; preds = %943
  %948 = landingpad { ptr, i32 }
          cleanup
  %949 = extractvalue { ptr, i32 } %948, 0
  store ptr %949, ptr %7, align 8
  %950 = extractvalue { ptr, i32 } %948, 1
  store i32 %950, ptr %8, align 4
  br label %955

951:                                              ; preds = %944
  %952 = landingpad { ptr, i32 }
          cleanup
  %953 = extractvalue { ptr, i32 } %952, 0
  store ptr %953, ptr %7, align 8
  %954 = extractvalue { ptr, i32 } %952, 1
  store i32 %954, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #7
  br label %955

955:                                              ; preds = %951, %947
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #7
  br label %1395

956:                                              ; preds = %945, %940
  br label %957

957:                                              ; preds = %956, %914
  br label %958

958:                                              ; preds = %957, %878
  br label %959

959:                                              ; preds = %958, %843
  %960 = load i32, ptr %30, align 4, !tbaa !20
  %961 = icmp ne i32 %960, 0
  %962 = xor i1 %961, true
  %963 = xor i1 %962, true
  %964 = zext i1 %963 to i32
  %965 = load i32, ptr %29, align 4, !tbaa !20
  %966 = icmp ne i32 %965, 0
  %967 = xor i1 %966, true
  %968 = xor i1 %967, true
  %969 = zext i1 %968 to i32
  %970 = add nsw i32 %964, %969
  %971 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %972 = trunc i8 %971 to i1
  %973 = xor i1 %972, true
  %974 = xor i1 %973, true
  %975 = zext i1 %974 to i32
  %976 = add nsw i32 %970, %975
  %977 = icmp sgt i32 %976, 1
  br i1 %977, label %978, label %985

978:                                              ; preds = %959
  %979 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %979, ptr noundef @.str.471)
          to label %980 unwind label %981

980:                                              ; preds = %978
  invoke void @__cxa_throw(ptr %979, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %1408 unwind label %672

981:                                              ; preds = %978
  %982 = landingpad { ptr, i32 }
          cleanup
  %983 = extractvalue { ptr, i32 } %982, 0
  store ptr %983, ptr %7, align 8
  %984 = extractvalue { ptr, i32 } %982, 1
  store i32 %984, ptr %8, align 4
  call void @__cxa_free_exception(ptr %979) #7
  br label %1395

985:                                              ; preds = %959
  br label %986

986:                                              ; preds = %985, %722
  %987 = load i32, ptr %10, align 4, !tbaa !17
  %988 = icmp eq i32 %987, 95
  br i1 %988, label %989, label %1041

989:                                              ; preds = %986
  %990 = load ptr, ptr %27, align 8, !tbaa !5
  %991 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %990, i32 0, i32 14
  %992 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %991, i32 0, i32 1
  %993 = load i32, ptr %992, align 4, !tbaa !21
  %994 = icmp ne i32 %993, 5
  br i1 %994, label %995, label %1040

995:                                              ; preds = %989
  %996 = load ptr, ptr %27, align 8, !tbaa !5
  %997 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %996, i32 0, i32 14
  %998 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %997, i32 0, i32 4
  %999 = load i8, ptr %998, align 2, !tbaa !167, !range !11, !noundef !12
  %1000 = trunc i8 %999 to i1
  br i1 %1000, label %1040, label %1001

1001:                                             ; preds = %995
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  %1002 = load i32, ptr %28, align 4, !tbaa !20
  %1003 = add i32 %1002, 1
  store i32 %1003, ptr %80, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #7
  %1004 = load i32, ptr %30, align 4, !tbaa !20
  %1005 = icmp ne i32 %1004, 0
  store i1 false, ptr %83, align 1
  store i1 false, ptr %84, align 1
  br i1 %1005, label %1006, label %1009

1006:                                             ; preds = %1001
  %1007 = load i32, ptr %30, align 4, !tbaa !20
  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) %104, i32 noundef %1007, i1 noundef zeroext true)
          to label %1008 unwind label %1020

1008:                                             ; preds = %1006
  br label %1011

1009:                                             ; preds = %1001
  call void @llvm.lifetime.start.p0(i64 1, ptr %82) #7
  store i1 true, ptr %83, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #7
  store i1 true, ptr %84, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef @.str.472, ptr noundef nonnull align 1 dereferenceable(1) %82)
          to label %1010 unwind label %1024

1010:                                             ; preds = %1009
  br label %1011

1011:                                             ; preds = %1010, %1008
  invoke void @_ZN11spirv_cross4joinIJRA4_KcjRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 1 dereferenceable(4) @.str.47, ptr noundef nonnull align 4 dereferenceable(4) %80, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %1012 unwind label %1028

1012:                                             ; preds = %1011
  %1013 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %79) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #7
  %1014 = load i1, ptr %84, align 1
  br i1 %1014, label %1015, label %1016

1015:                                             ; preds = %1012
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #7
  br label %1016

1016:                                             ; preds = %1015, %1012
  %1017 = load i1, ptr %83, align 1
  br i1 %1017, label %1018, label %1019

1018:                                             ; preds = %1016
  call void @llvm.lifetime.end.p0(i64 1, ptr %82) #7
  br label %1019

1019:                                             ; preds = %1018, %1016
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #7
  br label %1040

1020:                                             ; preds = %1006
  %1021 = landingpad { ptr, i32 }
          cleanup
  %1022 = extractvalue { ptr, i32 } %1021, 0
  store ptr %1022, ptr %7, align 8
  %1023 = extractvalue { ptr, i32 } %1021, 1
  store i32 %1023, ptr %8, align 4
  br label %1039

1024:                                             ; preds = %1009
  %1025 = landingpad { ptr, i32 }
          cleanup
  %1026 = extractvalue { ptr, i32 } %1025, 0
  store ptr %1026, ptr %7, align 8
  %1027 = extractvalue { ptr, i32 } %1025, 1
  store i32 %1027, ptr %8, align 4
  br label %1032

1028:                                             ; preds = %1011
  %1029 = landingpad { ptr, i32 }
          cleanup
  %1030 = extractvalue { ptr, i32 } %1029, 0
  store ptr %1030, ptr %7, align 8
  %1031 = extractvalue { ptr, i32 } %1029, 1
  store i32 %1031, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #7
  br label %1032

1032:                                             ; preds = %1028, %1024
  %1033 = load i1, ptr %84, align 1
  br i1 %1033, label %1034, label %1035

1034:                                             ; preds = %1032
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #7
  br label %1035

1035:                                             ; preds = %1034, %1032
  %1036 = load i1, ptr %83, align 1
  br i1 %1036, label %1037, label %1038

1037:                                             ; preds = %1035
  call void @llvm.lifetime.end.p0(i64 1, ptr %82) #7
  br label %1038

1038:                                             ; preds = %1037, %1035
  br label %1039

1039:                                             ; preds = %1038, %1020
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #7
  br label %1395

1040:                                             ; preds = %1019, %995, %989
  br label %1044

1041:                                             ; preds = %986
  %1042 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1043 unwind label %672

1043:                                             ; preds = %1041
  br label %1044

1044:                                             ; preds = %1043, %1040
  %1045 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %1046 unwind label %672

1046:                                             ; preds = %1044
  %1047 = load i32, ptr %17, align 4, !tbaa !20
  %1048 = icmp ne i32 %1047, 0
  br i1 %1048, label %1049, label %1117

1049:                                             ; preds = %1046
  %1050 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %1051 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %1050, i32 0, i32 0
  %1052 = load i32, ptr %1051, align 8, !tbaa !48
  %1053 = icmp uge i32 %1052, 40
  br i1 %1053, label %1054, label %1117

1054:                                             ; preds = %1049
  %1055 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %1056 = trunc i8 %1055 to i1
  br i1 %1056, label %1057, label %1061

1057:                                             ; preds = %1054
  %1058 = load i32, ptr %17, align 4, !tbaa !20
  %1059 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1058)
          to label %1060 unwind label %672

1060:                                             ; preds = %1057
  br label %1061

1061:                                             ; preds = %1060, %1054
  %1062 = phi i1 [ false, %1054 ], [ %1059, %1060 ]
  %1063 = zext i1 %1062 to i8
  store i8 %1063, ptr %49, align 1, !tbaa !9
  %1064 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1065 unwind label %672

1065:                                             ; preds = %1061
  %1066 = load i8, ptr %20, align 1, !tbaa !9, !range !11, !noundef !12
  %1067 = trunc i8 %1066 to i1
  br i1 %1067, label %1068, label %1102

1068:                                             ; preds = %1065
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #7
  %1069 = load i32, ptr %17, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1069, i1 noundef zeroext true)
          to label %1070 unwind label %1078

1070:                                             ; preds = %1068
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef @.str.465)
          to label %1071 unwind label %1082

1071:                                             ; preds = %1070
  call void @llvm.lifetime.start.p0(i64 32, ptr %88) #7
  %1072 = load i32, ptr %16, align 4, !tbaa !20
  %1073 = load i32, ptr %28, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %88, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1072, i32 noundef %1073)
          to label %1074 unwind label %1086

1074:                                             ; preds = %1071
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef nonnull align 8 dereferenceable(32) %88)
          to label %1075 unwind label %1090

1075:                                             ; preds = %1074
  %1076 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %85)
          to label %1077 unwind label %1094

1077:                                             ; preds = %1075
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #7
  br label %1116

1078:                                             ; preds = %1068
  %1079 = landingpad { ptr, i32 }
          cleanup
  %1080 = extractvalue { ptr, i32 } %1079, 0
  store ptr %1080, ptr %7, align 8
  %1081 = extractvalue { ptr, i32 } %1079, 1
  store i32 %1081, ptr %8, align 4
  br label %1101

1082:                                             ; preds = %1070
  %1083 = landingpad { ptr, i32 }
          cleanup
  %1084 = extractvalue { ptr, i32 } %1083, 0
  store ptr %1084, ptr %7, align 8
  %1085 = extractvalue { ptr, i32 } %1083, 1
  store i32 %1085, ptr %8, align 4
  br label %1100

1086:                                             ; preds = %1071
  %1087 = landingpad { ptr, i32 }
          cleanup
  %1088 = extractvalue { ptr, i32 } %1087, 0
  store ptr %1088, ptr %7, align 8
  %1089 = extractvalue { ptr, i32 } %1087, 1
  store i32 %1089, ptr %8, align 4
  br label %1099

1090:                                             ; preds = %1074
  %1091 = landingpad { ptr, i32 }
          cleanup
  %1092 = extractvalue { ptr, i32 } %1091, 0
  store ptr %1092, ptr %7, align 8
  %1093 = extractvalue { ptr, i32 } %1091, 1
  store i32 %1093, ptr %8, align 4
  br label %1098

1094:                                             ; preds = %1075
  %1095 = landingpad { ptr, i32 }
          cleanup
  %1096 = extractvalue { ptr, i32 } %1095, 0
  store ptr %1096, ptr %7, align 8
  %1097 = extractvalue { ptr, i32 } %1095, 1
  store i32 %1097, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #7
  br label %1098

1098:                                             ; preds = %1094, %1090
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  br label %1099

1099:                                             ; preds = %1098, %1086
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #7
  br label %1100

1100:                                             ; preds = %1099, %1082
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #7
  br label %1101

1101:                                             ; preds = %1100, %1078
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #7
  br label %1395

1102:                                             ; preds = %1065
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #7
  %1103 = load i32, ptr %17, align 4, !tbaa !20
  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) %104, i32 noundef %1103, i1 noundef zeroext true)
          to label %1104 unwind label %1107

1104:                                             ; preds = %1102
  %1105 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %89)
          to label %1106 unwind label %1111

1106:                                             ; preds = %1104
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #7
  br label %1116

1107:                                             ; preds = %1102
  %1108 = landingpad { ptr, i32 }
          cleanup
  %1109 = extractvalue { ptr, i32 } %1108, 0
  store ptr %1109, ptr %7, align 8
  %1110 = extractvalue { ptr, i32 } %1108, 1
  store i32 %1110, ptr %8, align 4
  br label %1115

1111:                                             ; preds = %1104
  %1112 = landingpad { ptr, i32 }
          cleanup
  %1113 = extractvalue { ptr, i32 } %1112, 0
  store ptr %1113, ptr %7, align 8
  %1114 = extractvalue { ptr, i32 } %1112, 1
  store i32 %1114, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #7
  br label %1115

1115:                                             ; preds = %1111, %1107
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #7
  br label %1395

1116:                                             ; preds = %1106, %1077
  br label %1117

1117:                                             ; preds = %1116, %1049, %1046
  %1118 = load i32, ptr %17, align 4, !tbaa !20
  %1119 = icmp ne i32 %1118, 0
  br i1 %1119, label %1175, label %1120

1120:                                             ; preds = %1117
  %1121 = load i32, ptr %31, align 4, !tbaa !20
  %1122 = icmp ne i32 %1121, 0
  br i1 %1122, label %1126, label %1123

1123:                                             ; preds = %1120
  %1124 = load i32, ptr %32, align 4, !tbaa !20
  %1125 = icmp ne i32 %1124, 0
  br i1 %1125, label %1126, label %1175

1126:                                             ; preds = %1123, %1120
  %1127 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %1128 = trunc i8 %1127 to i1
  br i1 %1128, label %1129, label %1133

1129:                                             ; preds = %1126
  %1130 = load i32, ptr %31, align 4, !tbaa !20
  %1131 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1130)
          to label %1132 unwind label %672

1132:                                             ; preds = %1129
  br label %1133

1133:                                             ; preds = %1132, %1126
  %1134 = phi i1 [ false, %1126 ], [ %1131, %1132 ]
  %1135 = zext i1 %1134 to i8
  store i8 %1135, ptr %49, align 1, !tbaa !9
  %1136 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %1137 = trunc i8 %1136 to i1
  br i1 %1137, label %1138, label %1142

1138:                                             ; preds = %1133
  %1139 = load i32, ptr %32, align 4, !tbaa !20
  %1140 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1139)
          to label %1141 unwind label %672

1141:                                             ; preds = %1138
  br label %1142

1142:                                             ; preds = %1141, %1133
  %1143 = phi i1 [ false, %1133 ], [ %1140, %1141 ]
  %1144 = zext i1 %1143 to i8
  store i8 %1144, ptr %49, align 1, !tbaa !9
  %1145 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1146 unwind label %672

1146:                                             ; preds = %1142
  call void @llvm.lifetime.start.p0(i64 32, ptr %90) #7
  %1147 = load i32, ptr %31, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1147, i1 noundef zeroext true)
          to label %1148 unwind label %1157

1148:                                             ; preds = %1146
  %1149 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %90)
          to label %1150 unwind label %1161

1150:                                             ; preds = %1148
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #7
  %1151 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1152 unwind label %672

1152:                                             ; preds = %1150
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #7
  %1153 = load i32, ptr %32, align 4, !tbaa !20
  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) %104, i32 noundef %1153, i1 noundef zeroext true)
          to label %1154 unwind label %1166

1154:                                             ; preds = %1152
  %1155 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %91)
          to label %1156 unwind label %1170

1156:                                             ; preds = %1154
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #7
  br label %1175

1157:                                             ; preds = %1146
  %1158 = landingpad { ptr, i32 }
          cleanup
  %1159 = extractvalue { ptr, i32 } %1158, 0
  store ptr %1159, ptr %7, align 8
  %1160 = extractvalue { ptr, i32 } %1158, 1
  store i32 %1160, ptr %8, align 4
  br label %1165

1161:                                             ; preds = %1148
  %1162 = landingpad { ptr, i32 }
          cleanup
  %1163 = extractvalue { ptr, i32 } %1162, 0
  store ptr %1163, ptr %7, align 8
  %1164 = extractvalue { ptr, i32 } %1162, 1
  store i32 %1164, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #7
  br label %1165

1165:                                             ; preds = %1161, %1157
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #7
  br label %1395

1166:                                             ; preds = %1152
  %1167 = landingpad { ptr, i32 }
          cleanup
  %1168 = extractvalue { ptr, i32 } %1167, 0
  store ptr %1168, ptr %7, align 8
  %1169 = extractvalue { ptr, i32 } %1167, 1
  store i32 %1169, ptr %8, align 4
  br label %1174

1170:                                             ; preds = %1154
  %1171 = landingpad { ptr, i32 }
          cleanup
  %1172 = extractvalue { ptr, i32 } %1171, 0
  store ptr %1172, ptr %7, align 8
  %1173 = extractvalue { ptr, i32 } %1171, 1
  store i32 %1173, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #7
  br label %1174

1174:                                             ; preds = %1170, %1166
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #7
  br label %1395

1175:                                             ; preds = %1156, %1123, %1117
  %1176 = load i32, ptr %17, align 4, !tbaa !20
  %1177 = icmp ne i32 %1176, 0
  br i1 %1177, label %1214, label %1178

1178:                                             ; preds = %1175
  %1179 = load i32, ptr %30, align 4, !tbaa !20
  %1180 = icmp ne i32 %1179, 0
  br i1 %1180, label %1181, label %1214

1181:                                             ; preds = %1178
  %1182 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %1183 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %1182, i32 0, i32 0
  %1184 = load i32, ptr %1183, align 8, !tbaa !48
  %1185 = icmp uge i32 %1184, 40
  br i1 %1185, label %1186, label %1214

1186:                                             ; preds = %1181
  %1187 = load i32, ptr %10, align 4, !tbaa !17
  %1188 = icmp ne i32 %1187, 95
  br i1 %1188, label %1189, label %1214

1189:                                             ; preds = %1186
  %1190 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %1191 = trunc i8 %1190 to i1
  br i1 %1191, label %1192, label %1196

1192:                                             ; preds = %1189
  %1193 = load i32, ptr %30, align 4, !tbaa !20
  %1194 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1193)
          to label %1195 unwind label %672

1195:                                             ; preds = %1192
  br label %1196

1196:                                             ; preds = %1195, %1189
  %1197 = phi i1 [ false, %1189 ], [ %1194, %1195 ]
  %1198 = zext i1 %1197 to i8
  store i8 %1198, ptr %49, align 1, !tbaa !9
  %1199 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1200 unwind label %672

1200:                                             ; preds = %1196
  call void @llvm.lifetime.start.p0(i64 32, ptr %92) #7
  %1201 = load i32, ptr %30, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %92, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1201, i1 noundef zeroext true)
          to label %1202 unwind label %1205

1202:                                             ; preds = %1200
  %1203 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %92)
          to label %1204 unwind label %1209

1204:                                             ; preds = %1202
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #7
  br label %1214

1205:                                             ; preds = %1200
  %1206 = landingpad { ptr, i32 }
          cleanup
  %1207 = extractvalue { ptr, i32 } %1206, 0
  store ptr %1207, ptr %7, align 8
  %1208 = extractvalue { ptr, i32 } %1206, 1
  store i32 %1208, ptr %8, align 4
  br label %1213

1209:                                             ; preds = %1202
  %1210 = landingpad { ptr, i32 }
          cleanup
  %1211 = extractvalue { ptr, i32 } %1210, 0
  store ptr %1211, ptr %7, align 8
  %1212 = extractvalue { ptr, i32 } %1210, 1
  store i32 %1212, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #7
  br label %1213

1213:                                             ; preds = %1209, %1205
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #7
  br label %1395

1214:                                             ; preds = %1204, %1186, %1181, %1178, %1175
  %1215 = load i32, ptr %17, align 4, !tbaa !20
  %1216 = icmp ne i32 %1215, 0
  br i1 %1216, label %1250, label %1217

1217:                                             ; preds = %1214
  %1218 = load i32, ptr %29, align 4, !tbaa !20
  %1219 = icmp ne i32 %1218, 0
  br i1 %1219, label %1220, label %1250

1220:                                             ; preds = %1217
  %1221 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %1222 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %1221, i32 0, i32 0
  %1223 = load i32, ptr %1222, align 8, !tbaa !48
  %1224 = icmp uge i32 %1223, 40
  br i1 %1224, label %1225, label %1250

1225:                                             ; preds = %1220
  %1226 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %1227 = trunc i8 %1226 to i1
  br i1 %1227, label %1228, label %1232

1228:                                             ; preds = %1225
  %1229 = load i32, ptr %29, align 4, !tbaa !20
  %1230 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1229)
          to label %1231 unwind label %672

1231:                                             ; preds = %1228
  br label %1232

1232:                                             ; preds = %1231, %1225
  %1233 = phi i1 [ false, %1225 ], [ %1230, %1231 ]
  %1234 = zext i1 %1233 to i8
  store i8 %1234, ptr %49, align 1, !tbaa !9
  %1235 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1236 unwind label %672

1236:                                             ; preds = %1232
  call void @llvm.lifetime.start.p0(i64 32, ptr %93) #7
  %1237 = load i32, ptr %29, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1237, i1 noundef zeroext true)
          to label %1238 unwind label %1241

1238:                                             ; preds = %1236
  %1239 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %93)
          to label %1240 unwind label %1245

1240:                                             ; preds = %1238
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #7
  br label %1250

1241:                                             ; preds = %1236
  %1242 = landingpad { ptr, i32 }
          cleanup
  %1243 = extractvalue { ptr, i32 } %1242, 0
  store ptr %1243, ptr %7, align 8
  %1244 = extractvalue { ptr, i32 } %1242, 1
  store i32 %1244, ptr %8, align 4
  br label %1249

1245:                                             ; preds = %1238
  %1246 = landingpad { ptr, i32 }
          cleanup
  %1247 = extractvalue { ptr, i32 } %1246, 0
  store ptr %1247, ptr %7, align 8
  %1248 = extractvalue { ptr, i32 } %1246, 1
  store i32 %1248, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #7
  br label %1249

1249:                                             ; preds = %1245, %1241
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #7
  br label %1395

1250:                                             ; preds = %1240, %1220, %1217, %1214
  %1251 = load i32, ptr %33, align 4, !tbaa !20
  %1252 = icmp ne i32 %1251, 0
  br i1 %1252, label %1253, label %1278

1253:                                             ; preds = %1250
  %1254 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %1255 = trunc i8 %1254 to i1
  br i1 %1255, label %1256, label %1260

1256:                                             ; preds = %1253
  %1257 = load i32, ptr %33, align 4, !tbaa !20
  %1258 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1257)
          to label %1259 unwind label %672

1259:                                             ; preds = %1256
  br label %1260

1260:                                             ; preds = %1259, %1253
  %1261 = phi i1 [ false, %1253 ], [ %1258, %1259 ]
  %1262 = zext i1 %1261 to i8
  store i8 %1262, ptr %49, align 1, !tbaa !9
  %1263 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1264 unwind label %672

1264:                                             ; preds = %1260
  call void @llvm.lifetime.start.p0(i64 32, ptr %94) #7
  %1265 = load i32, ptr %33, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1265, i1 noundef zeroext true)
          to label %1266 unwind label %1269

1266:                                             ; preds = %1264
  %1267 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %94)
          to label %1268 unwind label %1273

1268:                                             ; preds = %1266
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #7
  br label %1307

1269:                                             ; preds = %1264
  %1270 = landingpad { ptr, i32 }
          cleanup
  %1271 = extractvalue { ptr, i32 } %1270, 0
  store ptr %1271, ptr %7, align 8
  %1272 = extractvalue { ptr, i32 } %1270, 1
  store i32 %1272, ptr %8, align 4
  br label %1277

1273:                                             ; preds = %1266
  %1274 = landingpad { ptr, i32 }
          cleanup
  %1275 = extractvalue { ptr, i32 } %1274, 0
  store ptr %1275, ptr %7, align 8
  %1276 = extractvalue { ptr, i32 } %1274, 1
  store i32 %1276, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #7
  br label %1277

1277:                                             ; preds = %1273, %1269
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #7
  br label %1395

1278:                                             ; preds = %1250
  %1279 = load i32, ptr %34, align 4, !tbaa !20
  %1280 = icmp ne i32 %1279, 0
  br i1 %1280, label %1281, label %1306

1281:                                             ; preds = %1278
  %1282 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %1283 = trunc i8 %1282 to i1
  br i1 %1283, label %1284, label %1288

1284:                                             ; preds = %1281
  %1285 = load i32, ptr %34, align 4, !tbaa !20
  %1286 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1285)
          to label %1287 unwind label %672

1287:                                             ; preds = %1284
  br label %1288

1288:                                             ; preds = %1287, %1281
  %1289 = phi i1 [ false, %1281 ], [ %1286, %1287 ]
  %1290 = zext i1 %1289 to i8
  store i8 %1290, ptr %49, align 1, !tbaa !9
  %1291 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1292 unwind label %672

1292:                                             ; preds = %1288
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #7
  %1293 = load i32, ptr %34, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1293, i1 noundef zeroext true)
          to label %1294 unwind label %1297

1294:                                             ; preds = %1292
  %1295 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %95)
          to label %1296 unwind label %1301

1296:                                             ; preds = %1294
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #7
  br label %1306

1297:                                             ; preds = %1292
  %1298 = landingpad { ptr, i32 }
          cleanup
  %1299 = extractvalue { ptr, i32 } %1298, 0
  store ptr %1299, ptr %7, align 8
  %1300 = extractvalue { ptr, i32 } %1298, 1
  store i32 %1300, ptr %8, align 4
  br label %1305

1301:                                             ; preds = %1294
  %1302 = landingpad { ptr, i32 }
          cleanup
  %1303 = extractvalue { ptr, i32 } %1302, 0
  store ptr %1303, ptr %7, align 8
  %1304 = extractvalue { ptr, i32 } %1302, 1
  store i32 %1304, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #7
  br label %1305

1305:                                             ; preds = %1301, %1297
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #7
  br label %1395

1306:                                             ; preds = %1296, %1278
  br label %1307

1307:                                             ; preds = %1306, %1268
  %1308 = load i32, ptr %36, align 4, !tbaa !20
  %1309 = icmp ne i32 %1308, 0
  br i1 %1309, label %1310, label %1326

1310:                                             ; preds = %1307
  %1311 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.341)
          to label %1312 unwind label %672

1312:                                             ; preds = %1310
  call void @llvm.lifetime.start.p0(i64 32, ptr %96) #7
  %1313 = load i32, ptr %36, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1313, i1 noundef zeroext true)
          to label %1314 unwind label %1317

1314:                                             ; preds = %1312
  %1315 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %96)
          to label %1316 unwind label %1321

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

1317:                                             ; preds = %1312
  %1318 = landingpad { ptr, i32 }
          cleanup
  %1319 = extractvalue { ptr, i32 } %1318, 0
  store ptr %1319, ptr %7, align 8
  %1320 = extractvalue { ptr, i32 } %1318, 1
  store i32 %1320, ptr %8, align 4
  br label %1325

1321:                                             ; preds = %1314
  %1322 = landingpad { ptr, i32 }
          cleanup
  %1323 = extractvalue { ptr, i32 } %1322, 0
  store ptr %1323, ptr %7, align 8
  %1324 = extractvalue { ptr, i32 } %1322, 1
  store i32 %1324, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #7
  br label %1325

1325:                                             ; preds = %1321, %1317
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #7
  br label %1395

1326:                                             ; preds = %1316, %1307
  %1327 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.78)
          to label %1328 unwind label %672

1328:                                             ; preds = %1326
  %1329 = load i32, ptr %17, align 4, !tbaa !20
  %1330 = icmp ne i32 %1329, 0
  br i1 %1330, label %1331, label %1339

1331:                                             ; preds = %1328
  %1332 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %104, i32 0, i32 1
  %1333 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %1332, i32 0, i32 0
  %1334 = load i32, ptr %1333, align 8, !tbaa !48
  %1335 = icmp ult i32 %1334, 40
  br i1 %1335, label %1336, label %1339

1336:                                             ; preds = %1331
  %1337 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.473)
          to label %1338 unwind label %672

1338:                                             ; preds = %1336
  br label %1339

1339:                                             ; preds = %1338, %1331, %1328
  %1340 = load i32, ptr %10, align 4, !tbaa !17
  %1341 = icmp eq i32 %1340, 105
  br i1 %1341, label %1342, label %1358

1342:                                             ; preds = %1339
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcRjS4_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %104, ptr noundef nonnull align 1 dereferenceable(8) @.str.474, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 1 dereferenceable(8) @.str.475, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1343 unwind label %672

1343:                                             ; preds = %1342
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRjRA5_S2_S5_S4_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %104, ptr noundef nonnull align 1 dereferenceable(9) @.str.476, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 1 dereferenceable(5) @.str.477, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 1 dereferenceable(9) @.str.478)
          to label %1344 unwind label %672

1344:                                             ; preds = %1343
  %1345 = load i32, ptr %14, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 32, ptr %97) #7
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %97, ptr noundef nonnull align 1 dereferenceable(2) @.str.62, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %1346 unwind label %1349

1346:                                             ; preds = %1344
  call void @llvm.lifetime.start.p0(i64 1, ptr %98) #7
  store i8 1, ptr %98, align 1, !tbaa !9
  %1347 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 noundef %1345, ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 1 dereferenceable(1) %98)
          to label %1348 unwind label %1353

1348:                                             ; preds = %1346
  call void @llvm.lifetime.end.p0(i64 1, ptr %98) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #7
  br label %1365

1349:                                             ; preds = %1344
  %1350 = landingpad { ptr, i32 }
          cleanup
  %1351 = extractvalue { ptr, i32 } %1350, 0
  store ptr %1351, ptr %7, align 8
  %1352 = extractvalue { ptr, i32 } %1350, 1
  store i32 %1352, ptr %8, align 4
  br label %1357

1353:                                             ; preds = %1346
  %1354 = landingpad { ptr, i32 }
          cleanup
  %1355 = extractvalue { ptr, i32 } %1354, 0
  store ptr %1355, ptr %7, align 8
  %1356 = extractvalue { ptr, i32 } %1354, 1
  store i32 %1356, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %98) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #7
  br label %1357

1357:                                             ; preds = %1353, %1349
  call void @llvm.lifetime.end.p0(i64 32, ptr %97) #7
  br label %1395

1358:                                             ; preds = %1339
  %1359 = load i32, ptr %13, align 4, !tbaa !20
  %1360 = load i32, ptr %14, align 4, !tbaa !20
  %1361 = load i8, ptr %49, align 1, !tbaa !9, !range !11, !noundef !12
  %1362 = trunc i8 %1361 to i1
  %1363 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1359, i32 noundef %1360, ptr noundef nonnull align 8 dereferenceable(32) %40, i1 noundef zeroext %1362, i1 noundef zeroext false)
          to label %1364 unwind label %672

1364:                                             ; preds = %1358
  br label %1365

1365:                                             ; preds = %1364, %1348
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #7
  store ptr %12, ptr %99, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #7
  %1366 = load ptr, ptr %99, align 8, !tbaa !5
  %1367 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1366) #7
  store ptr %1367, ptr %100, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #7
  %1368 = load ptr, ptr %99, align 8, !tbaa !5
  %1369 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1368) #7
  store ptr %1369, ptr %101, align 8, !tbaa !5
  br label %1370

1370:                                             ; preds = %1381, %1365
  %1371 = load ptr, ptr %100, align 8, !tbaa !5
  %1372 = load ptr, ptr %101, align 8, !tbaa !5
  %1373 = icmp ne ptr %1371, %1372
  br i1 %1373, label %1375, label %1374

1374:                                             ; preds = %1370
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #7
  br label %1388

1375:                                             ; preds = %1370
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #7
  %1376 = load ptr, ptr %100, align 8, !tbaa !5
  store ptr %1376, ptr %102, align 8, !tbaa !5
  %1377 = load i32, ptr %14, align 4, !tbaa !20
  %1378 = load ptr, ptr %102, align 8, !tbaa !5
  %1379 = load i32, ptr %1378, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %104, i32 noundef %1377, i32 noundef %1379)
          to label %1380 unwind label %1384

1380:                                             ; preds = %1375
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #7
  br label %1381

1381:                                             ; preds = %1380
  %1382 = load ptr, ptr %100, align 8, !tbaa !5
  %1383 = getelementptr inbounds i32, ptr %1382, i32 1
  store ptr %1383, ptr %100, align 8, !tbaa !5
  br label %1370

1384:                                             ; preds = %1375
  %1385 = landingpad { ptr, i32 }
          cleanup
  %1386 = extractvalue { ptr, i32 } %1385, 0
  store ptr %1386, ptr %7, align 8
  %1387 = extractvalue { ptr, i32 } %1385, 1
  store i32 %1387, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #7
  br label %1395

1388:                                             ; preds = %1374
  %1389 = load i32, ptr %10, align 4, !tbaa !17
  switch i32 %1389, label %1393 [
    i32 89, label %1390
    i32 87, label %1390
    i32 91, label %1390
    i32 93, label %1390
  ]

1390:                                             ; preds = %1388, %1388, %1388, %1388
  %1391 = load i32, ptr %14, align 4, !tbaa !20
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %104, i32 noundef %1391)
          to label %1392 unwind label %672

1392:                                             ; preds = %1390
  br label %1394

1393:                                             ; preds = %1388
  br label %1394

1394:                                             ; preds = %1393, %1392
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %12) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  ret void

1395:                                             ; preds = %1384, %1357, %1325, %1305, %1277, %1249, %1213, %1174, %1165, %1115, %1101, %1039, %981, %955, %939, %903, %868, %828, %806, %774, %758, %745, %721, %689, %684, %672
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  br label %1396

1396:                                             ; preds = %1395, %668
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #7
  br label %1397

1397:                                             ; preds = %1396, %640, %606, %588, %571, %319, %304, %300
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  br label %1398

1398:                                             ; preds = %1397, %296
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %1399

1399:                                             ; preds = %1398, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br label %1400

1400:                                             ; preds = %1399, %183
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %1401

1401:                                             ; preds = %1400, %166
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %1402

1402:                                             ; preds = %1401, %162
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %12) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %1403

1403:                                             ; preds = %1402, %110
  %1404 = load ptr, ptr %7, align 8
  %1405 = load i32, ptr %8, align 4
  %1406 = insertvalue { ptr, i32 } poison, ptr %1404, 0
  %1407 = insertvalue { ptr, i32 } %1406, i32 %1405, 1
  resume { ptr, i32 } %1407

1408:                                             ; preds = %980, %757, %744, %587, %531, %518, %508, %501, %445, %431, %355, %318, %295
  unreachable
}

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #6 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef ptr @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_1clEjj"(ptr noundef nonnull align 1 dereferenceable(1), i32 noundef, i32 noundef) #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)) #5

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__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)) #1

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

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

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

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

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

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


; 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::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"class.spirv_cross::TypedID.330" = type { i32 }
%"class.spirv_cross::TypedID.324" = type { i32 }
%class.anon.431 = type { ptr, ptr, ptr, ptr }
%class.anon.432 = type { i8 }
%"class.std::allocator" = type { i8 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.12 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.341 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.406 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.433 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.434 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.435 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.436 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.437 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.438 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.439 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.440 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.441 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.442 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.443 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.444 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.445 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.446 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.447 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.448 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.449 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.450 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.451 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.452 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.453 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.454 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.455 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.456 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.457 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.458 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.459 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.460 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.461 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.462 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.463 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.464 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.465 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.466 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.467 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.468 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.469 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.470 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.471 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.472 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.473 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.474 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.475 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.476 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.477 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.478 = external hidden unnamed_addr constant [9 x i8], align 1
@switch.table._ZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEb = private unnamed_addr constant [6 x i32] [i32 1, i32 2, i32 3, i32 3, i32 2, i32 1], align 4
@switch.table._ZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEb.1 = private unnamed_addr constant [4 x ptr] [ptr @.str.442, ptr @.str.443, ptr @.str.444, ptr @.str.445], align 8

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 #1 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16)) 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 #1 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEb(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 4 dereferenceable(12) %1, i1 noundef zeroext %2) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca %"class.spirv_cross::SmallVector.92", align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.spirv_cross::TypedID.330", align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca %"class.spirv_cross::TypedID.324", align 4
  %13 = alloca %"class.spirv_cross::TypedID.324", align 4
  %14 = alloca %"class.spirv_cross::TypedID.324", align 4
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca %class.anon.431, align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %class.anon.432, align 1
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %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.std::__cxx11::basic_string", align 8
  %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.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca i32, align 4
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::allocator", align 1
  %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 %"class.std::__cxx11::basic_string", align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca i8, align 1
  br i1 %2, label %78, label %83

78:                                               ; preds = %3
  %79 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %79, ptr noundef nonnull @.str.433)
          to label %80 unwind label %81

80:                                               ; preds = %78
  tail call void @__cxa_throw(ptr nonnull %79, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

81:                                               ; preds = %78
  %82 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %79) #7
  br label %825

83:                                               ; preds = %3
  %84 = tail call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  %85 = load i16, ptr %1, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #7
  %86 = getelementptr inbounds i8, ptr %1, i64 8
  %87 = load i32, ptr %86, align 4, !tbaa !11
  store i32 %87, ptr %4, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %5) #7
  call void @_ZN11spirv_cross11SmallVectorIjLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %5) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #7
  %88 = load i32, ptr %84, align 4, !tbaa !12
  store i32 %88, ptr %6, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #7
  %89 = getelementptr inbounds i8, ptr %84, i64 4
  %90 = load i32, ptr %89, align 4, !tbaa !12
  store i32 %90, ptr %7, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  %91 = getelementptr inbounds i8, ptr %84, i64 8
  %92 = load i32, ptr %91, align 4, !tbaa !12
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef %92)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  %93 = getelementptr inbounds i8, ptr %84, i64 12
  %94 = load i32, ptr %93, align 4, !tbaa !12
  store i32 %94, ptr %9, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #7
  store i32 0, ptr %10, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  store ptr null, ptr %11, align 8, !tbaa !13
  %95 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %8)
  %96 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %95)
          to label %97 unwind label %111

97:                                               ; preds = %83
  %.not = icmp eq ptr %96, null
  br i1 %.not, label %113, label %98

98:                                               ; preds = %97
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %99 unwind label %111

99:                                               ; preds = %98
  %100 = load i32, ptr %12, align 4
  %101 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %100, i32 noundef 5300)
          to label %102 unwind label %111

102:                                              ; preds = %99
  br i1 %101, label %103, label %113

103:                                              ; preds = %102
  %104 = getelementptr inbounds i8, ptr %96, i64 16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 4 dereferenceable(4) %104)
          to label %105 unwind label %111

105:                                              ; preds = %103
  %106 = load i32, ptr %13, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %106, i32 noundef 5300, i32 noundef 0)
          to label %107 unwind label %111

107:                                              ; preds = %105
  %108 = getelementptr inbounds i8, ptr %96, i64 20
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %108)
          to label %109 unwind label %111

109:                                              ; preds = %107
  %110 = load i32, ptr %14, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %110, i32 noundef 5300, i32 noundef 0)
          to label %113 unwind label %111

111:                                              ; preds = %109, %107, %105, %103, %99, %98, %83
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %824

113:                                              ; preds = %109, %102, %97
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  %114 = getelementptr inbounds i8, ptr %96, i64 16
  %115 = select i1 %.not, ptr %8, ptr %114
  %116 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %115)
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %116)
          to label %117 unwind label %118

117:                                              ; preds = %113
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %5, ptr noundef nonnull align 4 dereferenceable(4) %9) #7
  switch i16 %85, label %152 [
    i16 89, label %120
    i16 90, label %120
    i16 93, label %126
    i16 94, label %126
    i16 97, label %132
    i16 96, label %138
    i16 91, label %144
    i16 92, label %144
    i16 105, label %148
  ]

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

120:                                              ; preds = %117, %117
  %121 = getelementptr inbounds i8, ptr %84, i64 16
  %122 = load i32, ptr %121, align 4, !tbaa !12
  store i32 %122, ptr %10, align 4, !tbaa !12
  %123 = getelementptr inbounds i8, ptr %84, i64 20
  store ptr %123, ptr %11, align 8, !tbaa !13
  %124 = load i32, ptr %4, align 4, !tbaa !12
  %125 = add i32 %124, -5
  store i32 %125, ptr %4, align 4, !tbaa !12
  br label %156

126:                                              ; preds = %117, %117
  %127 = getelementptr inbounds i8, ptr %84, i64 16
  %128 = load i32, ptr %127, align 4, !tbaa !12
  store i32 %128, ptr %10, align 4, !tbaa !12
  %129 = getelementptr inbounds i8, ptr %84, i64 20
  store ptr %129, ptr %11, align 8, !tbaa !13
  %130 = load i32, ptr %4, align 4, !tbaa !12
  %131 = add i32 %130, -5
  store i32 %131, ptr %4, align 4, !tbaa !12
  br label %156

132:                                              ; preds = %117
  %133 = getelementptr inbounds i8, ptr %84, i64 16
  %134 = load i32, ptr %133, align 4, !tbaa !12
  store i32 %134, ptr %10, align 4, !tbaa !12
  %135 = getelementptr inbounds i8, ptr %84, i64 20
  store ptr %135, ptr %11, align 8, !tbaa !13
  %136 = load i32, ptr %4, align 4, !tbaa !12
  %137 = add i32 %136, -5
  store i32 %137, ptr %4, align 4, !tbaa !12
  br label %156

138:                                              ; preds = %117
  %139 = getelementptr inbounds i8, ptr %84, i64 16
  %140 = load i32, ptr %139, align 4, !tbaa !12
  %141 = getelementptr inbounds i8, ptr %84, i64 20
  store ptr %141, ptr %11, align 8, !tbaa !13
  %142 = load i32, ptr %4, align 4, !tbaa !12
  %143 = add i32 %142, -5
  store i32 %143, ptr %4, align 4, !tbaa !12
  br label %156

144:                                              ; preds = %117, %117
  %145 = getelementptr inbounds i8, ptr %84, i64 16
  store ptr %145, ptr %11, align 8, !tbaa !13
  %146 = load i32, ptr %4, align 4, !tbaa !12
  %147 = add i32 %146, -4
  store i32 %147, ptr %4, align 4, !tbaa !12
  br label %156

148:                                              ; preds = %117
  %149 = getelementptr inbounds i8, ptr %84, i64 16
  store ptr %149, ptr %11, align 8, !tbaa !13
  %150 = load i32, ptr %4, align 4, !tbaa !12
  %151 = add i32 %150, -4
  store i32 %151, ptr %4, align 4, !tbaa !12
  br label %156

152:                                              ; preds = %117
  %153 = getelementptr inbounds i8, ptr %84, i64 16
  store ptr %153, ptr %11, align 8, !tbaa !13
  %154 = load i32, ptr %4, align 4, !tbaa !12
  %155 = add i32 %154, -4
  store i32 %155, ptr %4, align 4, !tbaa !12
  br label %156

156:                                              ; preds = %152, %148, %144, %138, %132, %126, %120
  %.0176 = phi i1 [ false, %152 ], [ false, %148 ], [ true, %144 ], [ false, %138 ], [ false, %132 ], [ true, %126 ], [ false, %120 ]
  %.0168 = phi i1 [ false, %152 ], [ false, %148 ], [ false, %144 ], [ true, %138 ], [ true, %132 ], [ false, %126 ], [ false, %120 ]
  %.0161 = phi i32 [ 0, %152 ], [ 0, %148 ], [ 0, %144 ], [ %140, %138 ], [ 0, %132 ], [ 0, %126 ], [ 0, %120 ]
  %157 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %8)
  %158 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %157)
          to label %159 unwind label %164

159:                                              ; preds = %156
  %160 = getelementptr inbounds i8, ptr %158, i64 248
  %161 = getelementptr inbounds i8, ptr %158, i64 252
  %162 = load i32, ptr %161, align 4, !tbaa !15
  %163 = icmp ult i32 %162, 6
  br i1 %163, label %switch.lookup, label %167

164:                                              ; preds = %156
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %822

switch.lookup:                                    ; preds = %159
  %166 = zext nneg i32 %162 to i64
  %switch.gep = getelementptr inbounds [6 x i32], ptr @switch.table._ZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEb, i64 0, i64 %166
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %167

167:                                              ; preds = %159, %switch.lookup
  %.0177 = phi i32 [ %switch.load, %switch.lookup ], [ 2, %159 ]
  %168 = load i32, ptr %10, align 4, !tbaa !12
  %.not189 = icmp eq i32 %168, 0
  br i1 %.not189, label %170, label %169

169:                                              ; preds = %167
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %5, ptr noundef nonnull align 4 dereferenceable(4) %10) #7
  br label %170

170:                                              ; preds = %169, %167
  %171 = getelementptr inbounds i8, ptr %158, i64 257
  %172 = load i8, ptr %171, align 1, !tbaa !43, !range !44, !noundef !45
  %173 = zext nneg i8 %172 to i32
  %spec.select = add nuw nsw i32 %.0177, %173
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  store i32 0, ptr %16, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #7
  store i32 0, ptr %17, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #7
  store i32 0, ptr %18, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  store i32 0, ptr %19, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #7
  store i32 0, ptr %20, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #7
  store i32 0, ptr %21, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #7
  store i32 0, ptr %22, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #7
  store i32 0, ptr %23, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #7
  store i32 0, ptr %24, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #7
  store i32 0, ptr %25, align 4, !tbaa !12
  %174 = load i32, ptr %4, align 4, !tbaa !12
  %.not190 = icmp eq i32 %174, 0
  br i1 %.not190, label %180, label %175

175:                                              ; preds = %170
  %176 = load ptr, ptr %11, align 8, !tbaa !13
  %177 = load i32, ptr %176, align 4, !tbaa !12
  store i32 %177, ptr %25, align 4, !tbaa !12
  %178 = getelementptr inbounds i8, ptr %176, i64 4
  store ptr %178, ptr %11, align 8, !tbaa !13
  %179 = add i32 %174, -1
  store i32 %179, ptr %4, align 4, !tbaa !12
  br label %180

180:                                              ; preds = %175, %170
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  store ptr %4, ptr %26, align 8, !tbaa !13
  %181 = getelementptr inbounds i8, ptr %26, i64 8
  store ptr %25, ptr %181, align 8, !tbaa !13
  %182 = getelementptr inbounds i8, ptr %26, i64 16
  store ptr %11, ptr %182, align 8, !tbaa !13
  %183 = getelementptr inbounds i8, ptr %26, i64 24
  store ptr %5, ptr %183, align 8, !tbaa !13
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %16, i32 noundef 1)
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef 2)
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %18, i32 noundef 4)
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef 4)
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef 8)
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef 16)
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef 32)
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %23, i32 noundef 64)
  call void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 4 dereferenceable(4) %24, i32 noundef 128)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  %184 = load i32, ptr %24, align 4, !tbaa !12
  %.not191 = icmp eq i32 %184, 0
  br i1 %.not191, label %191, label %185

185:                                              ; preds = %180
  %186 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %186, ptr noundef nonnull @.str.434)
          to label %.invoke unwind label %187

187:                                              ; preds = %185
  %188 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %186) #7
  br label %821

189:                                              ; preds = %.invoke325, %.invoke, %319, %317, %205, %201
  %190 = landingpad { ptr, i32 }
          cleanup
  br label %821

191:                                              ; preds = %180
  %192 = icmp eq i16 %85, 95
  br i1 %192, label %193, label %203

193:                                              ; preds = %191
  %194 = getelementptr inbounds i8, ptr %0, i64 9848
  %195 = load i32, ptr %194, align 8, !tbaa !46
  %196 = icmp ult i32 %195, 40
  br i1 %196, label %197, label %201

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

199:                                              ; preds = %197
  %200 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %198) #7
  br label %821

201:                                              ; preds = %193
  %202 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %.invoke325 unwind label %189

203:                                              ; preds = %191
  %204 = icmp eq i16 %85, 105
  br i1 %204, label %205, label %209

205:                                              ; preds = %203
  %206 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %.invoke325 unwind label %189

.invoke325:                                       ; preds = %205, %201
  %207 = phi ptr [ @.str.436, %201 ], [ @.str.437, %205 ]
  %208 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull %207)
          to label %317 unwind label %189

209:                                              ; preds = %203
  %210 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %160)
  %211 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %210)
          to label %212 unwind label %220

212:                                              ; preds = %209
  %213 = getelementptr inbounds i8, ptr %0, i64 9848
  %214 = load i32, ptr %213, align 8, !tbaa !46
  %215 = icmp ugt i32 %214, 66
  %216 = getelementptr inbounds i8, ptr %211, i64 16
  %217 = load i32, ptr %216, align 8
  %.not192 = icmp eq i32 %217, 13
  %or.cond283 = select i1 %215, i1 true, i1 %.not192
  br i1 %or.cond283, label %224, label %218

218:                                              ; preds = %212
  %219 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %219, ptr noundef nonnull @.str.438)
          to label %.invoke327 unwind label %222

220:                                              ; preds = %.invoke329, %.invoke327, %.invoke326, %228, %226, %209
  %221 = landingpad { ptr, i32 }
          cleanup
  br label %821

222:                                              ; preds = %218
  %223 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %219) #7
  br label %821

224:                                              ; preds = %212
  %225 = icmp ugt i32 %214, 39
  br i1 %225, label %226, label %273

226:                                              ; preds = %224
  %227 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %228 unwind label %220

228:                                              ; preds = %226
  %229 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %8)
  %230 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_depth_imageERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %158, i32 noundef %229)
          to label %231 unwind label %220

231:                                              ; preds = %228
  br i1 %230, label %232, label %240

232:                                              ; preds = %231
  br i1 %.0168, label %.invoke326, label %233

233:                                              ; preds = %232
  %234 = load i32, ptr %17, align 4, !tbaa !12
  %235 = icmp ne i32 %234, 0
  %236 = load i32, ptr %18, align 4
  %237 = icmp ne i32 %236, 0
  %or.cond = select i1 %235, i1 true, i1 %237
  %238 = load i32, ptr %19, align 4
  %239 = icmp ne i32 %238, 0
  %or.cond3 = select i1 %or.cond, i1 true, i1 %239
  %.str.440..str.441 = select i1 %or.cond3, ptr @.str.440, ptr @.str.441
  br label %.invoke326

240:                                              ; preds = %231
  br i1 %.0168, label %241, label %264

241:                                              ; preds = %240
  %242 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %.0161)
          to label %243 unwind label %248

243:                                              ; preds = %241
  %244 = load i32, ptr %213, align 8, !tbaa !46
  %245 = icmp ugt i32 %244, 49
  br i1 %245, label %246, label %254

246:                                              ; preds = %243
  %247 = icmp ult i32 %242, 4
  br i1 %247, label %switch.lookup335, label %250

248:                                              ; preds = %.invoke332, %.invoke330, %241
  %249 = landingpad { ptr, i32 }
          cleanup
  br label %821

250:                                              ; preds = %246
  %251 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %251, ptr noundef nonnull @.str.446)
          to label %.invoke330 unwind label %252

252:                                              ; preds = %250
  %253 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %251) #7
  br label %821

254:                                              ; preds = %243
  %255 = icmp eq i32 %242, 0
  br i1 %255, label %.invoke332, label %259

switch.lookup335:                                 ; preds = %246
  %256 = zext nneg i32 %242 to i64
  %switch.gep336 = getelementptr inbounds [4 x ptr], ptr @switch.table._ZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEb.1, i64 0, i64 %256
  %switch.load337 = load ptr, ptr %switch.gep336, align 8
  br label %.invoke332

.invoke332:                                       ; preds = %switch.lookup335, %254
  %257 = phi ptr [ @.str.447, %254 ], [ %switch.load337, %switch.lookup335 ]
  %258 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull %257)
          to label %317 unwind label %248

259:                                              ; preds = %254
  %260 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %260, ptr noundef nonnull @.str.448)
          to label %.invoke330 unwind label %262

.invoke330:                                       ; preds = %259, %250
  %261 = phi ptr [ %251, %250 ], [ %260, %259 ]
  invoke void @__cxa_throw(ptr nonnull %261, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont331 unwind label %248

.cont331:                                         ; preds = %.invoke330
  unreachable

262:                                              ; preds = %259
  %263 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %260) #7
  br label %821

264:                                              ; preds = %240
  %265 = load i32, ptr %16, align 4, !tbaa !12
  %.not195 = icmp eq i32 %265, 0
  br i1 %.not195, label %266, label %.invoke326

266:                                              ; preds = %264
  %267 = load i32, ptr %18, align 4, !tbaa !12
  %268 = icmp ne i32 %267, 0
  %269 = load i32, ptr %19, align 4
  %270 = icmp ne i32 %269, 0
  %or.cond5 = select i1 %268, i1 true, i1 %270
  br i1 %or.cond5, label %.invoke326, label %271

271:                                              ; preds = %266
  %272 = load i32, ptr %17, align 4, !tbaa !12
  %.not196 = icmp eq i32 %272, 0
  %.str.452..str.451 = select i1 %.not196, ptr @.str.452, ptr @.str.451
  br label %.invoke326

273:                                              ; preds = %224
  %274 = load i32, ptr %161, align 4, !tbaa !15
  switch i32 %274, label %284 [
    i32 0, label %.invoke329
    i32 1, label %275
    i32 2, label %276
    i32 3, label %277
    i32 4, label %280
    i32 5, label %280
    i32 6, label %280
  ]

275:                                              ; preds = %273
  br label %.invoke329

276:                                              ; preds = %273
  br label %.invoke329

277:                                              ; preds = %273
  br label %.invoke329

.invoke329:                                       ; preds = %273, %275, %276, %277
  %278 = phi ptr [ @.str.456, %277 ], [ @.str.455, %276 ], [ @.str.454, %275 ], [ @.str.453, %273 ]
  %279 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull %278)
          to label %288 unwind label %220

280:                                              ; preds = %273, %273, %273
  %281 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %281, ptr noundef nonnull @.str.457)
          to label %.invoke327 unwind label %282

282:                                              ; preds = %280
  %283 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %281) #7
  br label %821

284:                                              ; preds = %273
  %285 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %285, ptr noundef nonnull @.str.12)
          to label %.invoke327 unwind label %286

286:                                              ; preds = %284
  %287 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %285) #7
  br label %821

288:                                              ; preds = %.invoke329
  br i1 %.0168, label %289, label %293

289:                                              ; preds = %288
  %290 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %290, ptr noundef nonnull @.str.458)
          to label %.invoke327 unwind label %291

291:                                              ; preds = %289
  %292 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %290) #7
  br label %821

293:                                              ; preds = %288
  %294 = load i32, ptr %21, align 4, !tbaa !12
  %295 = icmp ne i32 %294, 0
  %296 = load i32, ptr %20, align 4
  %297 = icmp ne i32 %296, 0
  %or.cond7 = select i1 %295, i1 true, i1 %297
  br i1 %or.cond7, label %298, label %303

298:                                              ; preds = %293
  %299 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %299, ptr noundef nonnull @.str.459)
          to label %.invoke327 unwind label %301

.invoke327:                                       ; preds = %218, %298, %289, %284, %280
  %300 = phi ptr [ %281, %280 ], [ %285, %284 ], [ %290, %289 ], [ %299, %298 ], [ %219, %218 ]
  invoke void @__cxa_throw(ptr nonnull %300, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont328 unwind label %220

.cont328:                                         ; preds = %.invoke327
  unreachable

301:                                              ; preds = %298
  %302 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %299) #7
  br label %821

303:                                              ; preds = %293
  %304 = load i32, ptr %18, align 4, !tbaa !12
  %305 = icmp ne i32 %304, 0
  %306 = load i32, ptr %19, align 4
  %307 = icmp ne i32 %306, 0
  %or.cond9 = select i1 %305, i1 true, i1 %307
  br i1 %or.cond9, label %.invoke326, label %308

308:                                              ; preds = %303
  %309 = load i32, ptr %17, align 4, !tbaa !12
  %.not193 = icmp eq i32 %309, 0
  br i1 %.not193, label %310, label %.invoke326

310:                                              ; preds = %308
  %311 = load i32, ptr %16, align 4, !tbaa !12
  %.not194 = icmp eq i32 %311, 0
  br i1 %.not194, label %312, label %.invoke326

312:                                              ; preds = %310
  %313 = load i32, ptr %10, align 4
  %314 = icmp ne i32 %313, 0
  %or.cond11 = select i1 %.0176, i1 true, i1 %314
  br i1 %or.cond11, label %.invoke326, label %317

.invoke326:                                       ; preds = %312, %310, %308, %303, %271, %266, %264, %233, %232
  %315 = phi ptr [ @.str.439, %232 ], [ %.str.440..str.441, %233 ], [ @.str.449, %264 ], [ @.str.450, %266 ], [ %.str.452..str.451, %271 ], [ @.str.460, %303 ], [ @.str.461, %308 ], [ @.str.462, %310 ], [ @.str.463, %312 ]
  %316 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull %315)
          to label %317 unwind label %220

317:                                              ; preds = %.invoke332, %.invoke326, %.invoke325, %312
  %318 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %319 unwind label %189

319:                                              ; preds = %317
  %320 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.406)
          to label %321 unwind label %189

321:                                              ; preds = %319
  %322 = getelementptr inbounds i8, ptr %0, i64 9848
  %323 = load i32, ptr %322, align 8, !tbaa !46
  %324 = icmp ult i32 %323, 40
  br i1 %324, label %325, label %341

325:                                              ; preds = %321
  br i1 %.not, label %331, label %326

326:                                              ; preds = %325
  %327 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %327, ptr noundef nonnull @.str.464)
          to label %.invoke unwind label %329

.invoke:                                          ; preds = %185, %326, %197
  %328 = phi ptr [ %198, %197 ], [ %327, %326 ], [ %186, %185 ]
  invoke void @__cxa_throw(ptr nonnull %328, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont unwind label %189

.cont:                                            ; preds = %.invoke
  unreachable

329:                                              ; preds = %326
  %330 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %327) #7
  br label %821

331:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #7
  %332 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %8)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %332, i1 noundef zeroext true)
          to label %333 unwind label %336

333:                                              ; preds = %331
  %334 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %335 unwind label %338

335:                                              ; preds = %333
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  br label %362

336:                                              ; preds = %331
  %337 = landingpad { ptr, i32 }
          cleanup
  br label %340

338:                                              ; preds = %333
  %339 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  br label %340

340:                                              ; preds = %338, %336
  %.pn203 = phi { ptr, i32 } [ %339, %338 ], [ %337, %336 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  br label %821

341:                                              ; preds = %321
  br i1 %192, label %362, label %342

342:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br i1 %.not, label %350, label %343

343:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #7
  %344 = getelementptr inbounds i8, ptr %96, i64 20
  %345 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %344)
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %345)
          to label %346 unwind label %348

346:                                              ; preds = %343
  %347 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #7
  br label %356

348:                                              ; preds = %343
  %349 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #7
  br label %361

350:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #7
  %351 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %8)
  invoke void @_ZN11spirv_cross12CompilerHLSL21to_sampler_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %351)
          to label %352 unwind label %354

352:                                              ; preds = %350
  %353 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  br label %356

354:                                              ; preds = %350
  %355 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  br label %361

356:                                              ; preds = %352, %346
  %357 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %358 unwind label %359

358:                                              ; preds = %356
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  br label %362

359:                                              ; preds = %356
  %360 = landingpad { ptr, i32 }
          cleanup
  br label %361

361:                                              ; preds = %359, %354, %348
  %.pn201 = phi { ptr, i32 } [ %360, %359 ], [ %349, %348 ], [ %355, %354 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  br label %821

362:                                              ; preds = %341, %358, %335
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #7
  %363 = load i32, ptr %9, align 4, !tbaa !12
  %364 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %363)
          to label %365 unwind label %383

365:                                              ; preds = %362
  %366 = zext i1 %364 to i8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  %367 = load i32, ptr %9, align 4, !tbaa !12
  %368 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %367)
          to label %369 unwind label %385

369:                                              ; preds = %365
  %370 = getelementptr inbounds i8, ptr %368, i64 24
  %371 = load i32, ptr %370, align 8, !tbaa !160
  %.not205 = icmp eq i32 %spec.select, %371
  br i1 %.not205, label %392, label %372

372:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  %373 = load i32, ptr %9, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %373, i1 noundef zeroext true)
          to label %374 unwind label %387

374:                                              ; preds = %372
  %375 = load i32, ptr %9, align 4, !tbaa !12
  %376 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %375)
          to label %377 unwind label %389

377:                                              ; preds = %374
  %378 = getelementptr inbounds i8, ptr %376, i64 24
  %379 = load i32, ptr %378, align 8, !tbaa !160
  %380 = call noundef ptr @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_1clEjj"(ptr noundef nonnull align 1 dereferenceable(1) %33, i32 noundef %spec.select, i32 noundef %379)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef %380)
          to label %381 unwind label %389

381:                                              ; preds = %377
  %382 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  br label %398

383:                                              ; preds = %362
  %384 = landingpad { ptr, i32 }
          cleanup
  br label %820

385:                                              ; preds = %.invoke333, %816, %802, %791, %790, %786, %780, %768, %752, %750, %732, %730, %713, %711, %688, %686, %659, %.critedge291, %649, %646, %599, %597, %589, %587, %439, %365
  %386 = landingpad { ptr, i32 }
          cleanup
  br label %819

387:                                              ; preds = %372
  %388 = landingpad { ptr, i32 }
          cleanup
  br label %391

389:                                              ; preds = %377, %374
  %390 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %391

391:                                              ; preds = %389, %387
  %.pn206 = phi { ptr, i32 } [ %390, %389 ], [ %388, %387 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  br label %819

392:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #7
  %393 = load i32, ptr %9, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %393, i1 noundef zeroext true)
          to label %394 unwind label %396

394:                                              ; preds = %392
  %395 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  br label %398

396:                                              ; preds = %392
  %397 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  br label %819

398:                                              ; preds = %394, %381
  %399 = load i32, ptr %322, align 8
  %400 = icmp ugt i32 %399, 39
  %or.cond285 = select i1 %.0176, i1 %400, i1 false
  br i1 %or.cond285, label %401, label %415

401:                                              ; preds = %398
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.465)
          to label %402 unwind label %407

402:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #7
  %403 = load i32, ptr %9, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %403, i32 noundef %spec.select)
          to label %404 unwind label %409

404:                                              ; preds = %402
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %405 unwind label %411

405:                                              ; preds = %404
  %406 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  %.pr = load i32, ptr %322, align 8, !tbaa !46
  br label %415

407:                                              ; preds = %401
  %408 = landingpad { ptr, i32 }
          cleanup
  br label %414

409:                                              ; preds = %402
  %410 = landingpad { ptr, i32 }
          cleanup
  br label %413

411:                                              ; preds = %404
  %412 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  br label %413

413:                                              ; preds = %411, %409
  %.pn208 = phi { ptr, i32 } [ %412, %411 ], [ %410, %409 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  br label %414

414:                                              ; preds = %413, %407
  %.pn208.pn = phi { ptr, i32 } [ %.pn208, %413 ], [ %408, %407 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  br label %819

415:                                              ; preds = %405, %398
  %416 = phi i32 [ %.pr, %405 ], [ %399, %398 ]
  %417 = icmp ult i32 %416, 40
  br i1 %417, label %418, label %565

418:                                              ; preds = %415
  %419 = load i32, ptr %10, align 4, !tbaa !12
  %.not211 = icmp eq i32 %419, 0
  br i1 %.not211, label %457, label %420

420:                                              ; preds = %418
  %421 = load i32, ptr %161, align 4, !tbaa !15
  %switch = icmp ult i32 %421, 2
  br i1 %switch, label %426, label %422

422:                                              ; preds = %420
  %423 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %423, ptr noundef nonnull @.str.466)
          to label %.invoke333 unwind label %424

424:                                              ; preds = %422
  %425 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %423) #7
  br label %819

426:                                              ; preds = %420
  %427 = load i32, ptr %18, align 4, !tbaa !12
  %428 = icmp ne i32 %427, 0
  %429 = load i32, ptr %19, align 4
  %430 = icmp ne i32 %429, 0
  %or.cond13 = select i1 %428, i1 true, i1 %430
  br i1 %or.cond13, label %433, label %.preheader300

.preheader300:                                    ; preds = %426
  %431 = icmp ult i32 %spec.select, 2
  br i1 %431, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.preheader300
  %432 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.468)
          to label %._crit_edge.loopexit unwind label %437

433:                                              ; preds = %426
  %434 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %434, ptr noundef nonnull @.str.467)
          to label %.invoke333 unwind label %435

435:                                              ; preds = %433
  %436 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %434) #7
  br label %819

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader300
  %.pre311 = phi i32 [ %.pre311.pre, %._crit_edge.loopexit ], [ %419, %.preheader300 ]
  br i1 %364, label %439, label %441

._crit_edge.loopexit:                             ; preds = %.lr.ph.preheader
  %.pre311.pre = load i32, ptr %10, align 4, !tbaa !12
  br label %._crit_edge

437:                                              ; preds = %.lr.ph.preheader
  %438 = landingpad { ptr, i32 }
          cleanup
  br label %819

439:                                              ; preds = %._crit_edge
  %440 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.pre311)
          to label %._crit_edge310 unwind label %385

._crit_edge310:                                   ; preds = %439
  %.pre = load i32, ptr %10, align 4, !tbaa !12
  br label %441

441:                                              ; preds = %._crit_edge310, %._crit_edge
  %442 = phi i32 [ %.pre311, %._crit_edge ], [ %.pre, %._crit_edge310 ]
  %443 = phi i1 [ false, %._crit_edge ], [ %440, %._crit_edge310 ]
  %444 = zext i1 %443 to i8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %442, i1 noundef zeroext true)
          to label %445 unwind label %449

445:                                              ; preds = %441
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %446 unwind label %451

446:                                              ; preds = %445
  %447 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %448 unwind label %453

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

449:                                              ; preds = %441
  %450 = landingpad { ptr, i32 }
          cleanup
  br label %456

451:                                              ; preds = %445
  %452 = landingpad { ptr, i32 }
          cleanup
  br label %455

453:                                              ; preds = %446
  %454 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  br label %455

455:                                              ; preds = %453, %451
  %.pn214 = phi { ptr, i32 } [ %454, %453 ], [ %452, %451 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %456

456:                                              ; preds = %455, %449
  %.pn214.pn = phi { ptr, i32 } [ %.pn214, %455 ], [ %450, %449 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #7
  br label %819

457:                                              ; preds = %418
  %458 = load i32, ptr %17, align 4, !tbaa !12
  %459 = icmp ne i32 %458, 0
  %460 = load i32, ptr %16, align 4
  %461 = icmp ne i32 %460, 0
  %or.cond15 = select i1 %459, i1 true, i1 %461
  %brmerge = or i1 %.0176, %or.cond15
  %462 = icmp ult i32 %spec.select, 3
  %or.cond309 = select i1 %brmerge, i1 %462, i1 false
  br i1 %or.cond309, label %.lr.ph303, label %.loopexit

.lr.ph303:                                        ; preds = %457, %464
  %.0166302 = phi i32 [ %465, %464 ], [ %spec.select, %457 ]
  %463 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.468)
          to label %464 unwind label %466

464:                                              ; preds = %.lr.ph303
  %465 = add nuw nsw i32 %.0166302, 1
  %exitcond.not = icmp eq i32 %465, 3
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph303, !llvm.loop !161

466:                                              ; preds = %.lr.ph303
  %467 = landingpad { ptr, i32 }
          cleanup
  br label %819

.loopexit:                                        ; preds = %464, %457, %448
  %.0169 = phi i8 [ %444, %448 ], [ %366, %457 ], [ %366, %464 ]
  %468 = load i32, ptr %17, align 4, !tbaa !12
  %.not217 = icmp eq i32 %468, 0
  br i1 %.not217, label %491, label %469

469:                                              ; preds = %.loopexit
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull @.str.469, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %470 unwind label %477

470:                                              ; preds = %469
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull @.str.341)
          to label %471 unwind label %479

471:                                              ; preds = %470
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #7
  %472 = load i32, ptr %17, align 4, !tbaa !12
  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) %0, i32 noundef %472, i1 noundef zeroext true)
          to label %473 unwind label %481

473:                                              ; preds = %471
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %474 unwind label %483

474:                                              ; preds = %473
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull @.str.78)
          to label %475 unwind label %485

475:                                              ; preds = %474
  %476 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %549

477:                                              ; preds = %469
  %478 = landingpad { ptr, i32 }
          cleanup
  br label %490

479:                                              ; preds = %470
  %480 = landingpad { ptr, i32 }
          cleanup
  br label %489

481:                                              ; preds = %471
  %482 = landingpad { ptr, i32 }
          cleanup
  br label %488

483:                                              ; preds = %473
  %484 = landingpad { ptr, i32 }
          cleanup
  br label %487

485:                                              ; preds = %474
  %486 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %487

487:                                              ; preds = %485, %483
  %.pn232 = phi { ptr, i32 } [ %486, %485 ], [ %484, %483 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  br label %488

488:                                              ; preds = %487, %481
  %.pn232.pn = phi { ptr, i32 } [ %.pn232, %487 ], [ %482, %481 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  br label %489

489:                                              ; preds = %488, %479
  %.pn232.pn.pn = phi { ptr, i32 } [ %.pn232.pn, %488 ], [ %480, %479 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br label %490

490:                                              ; preds = %489, %477
  %.pn232.pn.pn.pn = phi { ptr, i32 } [ %.pn232.pn.pn, %489 ], [ %478, %477 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %819

491:                                              ; preds = %.loopexit
  %492 = load i32, ptr %16, align 4, !tbaa !12
  %.not218 = icmp eq i32 %492, 0
  br i1 %.not218, label %515, label %493

493:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull @.str.469, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %494 unwind label %501

494:                                              ; preds = %493
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull @.str.341)
          to label %495 unwind label %503

495:                                              ; preds = %494
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #7
  %496 = load i32, ptr %16, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %496, i1 noundef zeroext true)
          to label %497 unwind label %505

497:                                              ; preds = %495
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %498 unwind label %507

498:                                              ; preds = %497
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull @.str.78)
          to label %499 unwind label %509

499:                                              ; preds = %498
  %500 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  br label %549

501:                                              ; preds = %493
  %502 = landingpad { ptr, i32 }
          cleanup
  br label %514

503:                                              ; preds = %494
  %504 = landingpad { ptr, i32 }
          cleanup
  br label %513

505:                                              ; preds = %495
  %506 = landingpad { ptr, i32 }
          cleanup
  br label %512

507:                                              ; preds = %497
  %508 = landingpad { ptr, i32 }
          cleanup
  br label %511

509:                                              ; preds = %498
  %510 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  br label %511

511:                                              ; preds = %509, %507
  %.pn227 = phi { ptr, i32 } [ %510, %509 ], [ %508, %507 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  br label %512

512:                                              ; preds = %511, %505
  %.pn227.pn = phi { ptr, i32 } [ %.pn227, %511 ], [ %506, %505 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  br label %513

513:                                              ; preds = %512, %503
  %.pn227.pn.pn = phi { ptr, i32 } [ %.pn227.pn, %512 ], [ %504, %503 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  br label %514

514:                                              ; preds = %513, %501
  %.pn227.pn.pn.pn = phi { ptr, i32 } [ %.pn227.pn.pn, %513 ], [ %502, %501 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  br label %819

515:                                              ; preds = %491
  br i1 %.0176, label %516, label %538

516:                                              ; preds = %515
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull @.str.469, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %517 unwind label %524

517:                                              ; preds = %516
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull @.str.341)
          to label %518 unwind label %526

518:                                              ; preds = %517
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #7
  %519 = load i32, ptr %9, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %519, i32 noundef %spec.select)
          to label %520 unwind label %528

520:                                              ; preds = %518
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %521 unwind label %530

521:                                              ; preds = %520
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull @.str.78)
          to label %522 unwind label %532

522:                                              ; preds = %521
  %523 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #7
  br label %549

524:                                              ; preds = %516
  %525 = landingpad { ptr, i32 }
          cleanup
  br label %537

526:                                              ; preds = %517
  %527 = landingpad { ptr, i32 }
          cleanup
  br label %536

528:                                              ; preds = %518
  %529 = landingpad { ptr, i32 }
          cleanup
  br label %535

530:                                              ; preds = %520
  %531 = landingpad { ptr, i32 }
          cleanup
  br label %534

532:                                              ; preds = %521
  %533 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  br label %534

534:                                              ; preds = %532, %530
  %.pn222 = phi { ptr, i32 } [ %533, %532 ], [ %531, %530 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  br label %535

535:                                              ; preds = %534, %528
  %.pn222.pn = phi { ptr, i32 } [ %.pn222, %534 ], [ %529, %528 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  br label %536

536:                                              ; preds = %535, %526
  %.pn222.pn.pn = phi { ptr, i32 } [ %.pn222.pn, %535 ], [ %527, %526 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  br label %537

537:                                              ; preds = %536, %524
  %.pn222.pn.pn.pn = phi { ptr, i32 } [ %.pn222.pn.pn, %536 ], [ %525, %524 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #7
  br label %819

538:                                              ; preds = %515
  %539 = load i32, ptr %10, align 4, !tbaa !12
  %.not219 = icmp eq i32 %539, 0
  br i1 %.not219, label %549, label %540

540:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull @.str.469, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %541 unwind label %544

541:                                              ; preds = %540
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull @.str.470)
          to label %542 unwind label %546

542:                                              ; preds = %541
  %543 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #7
  br label %549

544:                                              ; preds = %540
  %545 = landingpad { ptr, i32 }
          cleanup
  br label %548

546:                                              ; preds = %541
  %547 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  br label %548

548:                                              ; preds = %546, %544
  %.pn220 = phi { ptr, i32 } [ %547, %546 ], [ %545, %544 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #7
  br label %819

549:                                              ; preds = %499, %538, %542, %522, %475
  %550 = load i32, ptr %17, align 4, !tbaa !12
  %551 = icmp ne i32 %550, 0
  %552 = zext i1 %551 to i32
  %553 = load i32, ptr %16, align 4, !tbaa !12
  %554 = icmp ne i32 %553, 0
  %555 = zext i1 %554 to i32
  %556 = zext i1 %.0176 to i32
  %557 = add nuw nsw i32 %552, %556
  %558 = add nuw nsw i32 %557, %555
  %559 = icmp ugt i32 %558, 1
  br i1 %559, label %560, label %565

560:                                              ; preds = %549
  %561 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %561, ptr noundef nonnull @.str.471)
          to label %.invoke333 unwind label %563

.invoke333:                                       ; preds = %560, %433, %422
  %562 = phi ptr [ %423, %422 ], [ %434, %433 ], [ %561, %560 ]
  invoke void @__cxa_throw(ptr nonnull %562, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont334 unwind label %385

.cont334:                                         ; preds = %.invoke333
  unreachable

563:                                              ; preds = %560
  %564 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %561) #7
  br label %819

565:                                              ; preds = %549, %415
  %.1170 = phi i8 [ %.0169, %549 ], [ %366, %415 ]
  br i1 %192, label %566, label %587

566:                                              ; preds = %565
  %567 = load i32, ptr %161, align 4, !tbaa !15
  %.not237 = icmp eq i32 %567, 5
  br i1 %.not237, label %589, label %568

568:                                              ; preds = %566
  %569 = getelementptr inbounds i8, ptr %158, i64 258
  %570 = load i8, ptr %569, align 2, !tbaa !163, !range !44, !noundef !45
  %571 = trunc nuw i8 %570 to i1
  br i1 %571, label %589, label %572

572:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %61) #7
  %573 = add nuw nsw i32 %spec.select, 1
  store i32 %573, ptr %61, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #7
  %574 = load i32, ptr %17, align 4, !tbaa !12
  %.not238 = icmp eq i32 %574, 0
  br i1 %.not238, label %576, label %575

575:                                              ; preds = %572
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574, i1 noundef zeroext true)
          to label %577 unwind label %581

576:                                              ; preds = %572
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %63) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %63) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull @.str.472, ptr noundef nonnull align 1 dereferenceable(1) %63)
          to label %577 unwind label %.thread

577:                                              ; preds = %576, %575
  invoke void @_ZN11spirv_cross4joinIJRA4_KcjRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 1 dereferenceable(4) @.str.47, ptr noundef nonnull align 4 dereferenceable(4) %61, ptr noundef nonnull align 1 dereferenceable(2) @.str.406, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %578 unwind label %584

578:                                              ; preds = %577
  %579 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  br i1 %.not238, label %580, label %.critedge

580:                                              ; preds = %578
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %63) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %63) #7
  br label %.critedge

.critedge:                                        ; preds = %578, %580
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #7
  br label %589

581:                                              ; preds = %575
  %582 = landingpad { ptr, i32 }
          cleanup
  br label %.critedge287

.thread:                                          ; preds = %576
  %583 = landingpad { ptr, i32 }
          cleanup
  br label %586

584:                                              ; preds = %577
  %585 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  br i1 %.not238, label %586, label %.critedge287

586:                                              ; preds = %.thread, %584
  %.pn239298 = phi { ptr, i32 } [ %583, %.thread ], [ %585, %584 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %63) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %63) #7
  br label %.critedge287

.critedge287:                                     ; preds = %584, %586, %581
  %.pn239.pn = phi { ptr, i32 } [ %.pn239298, %586 ], [ %582, %581 ], [ %585, %584 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #7
  br label %819

587:                                              ; preds = %565
  %588 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %589 unwind label %385

589:                                              ; preds = %587, %566, %568, %.critedge
  %590 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %591 unwind label %385

591:                                              ; preds = %589
  %592 = load i32, ptr %10, align 4, !tbaa !12
  %.not242 = icmp ne i32 %592, 0
  %593 = load i32, ptr %322, align 8
  %594 = icmp ugt i32 %593, 39
  %or.cond289 = select i1 %.not242, i1 %594, i1 false
  br i1 %or.cond289, label %595, label %637

595:                                              ; preds = %591
  %596 = trunc nuw i8 %.1170 to i1
  br i1 %596, label %597, label %599

597:                                              ; preds = %595
  %598 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %592)
          to label %599 unwind label %385

599:                                              ; preds = %597, %595
  %600 = phi i1 [ false, %595 ], [ %598, %597 ]
  %601 = zext i1 %600 to i8
  %602 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %603 unwind label %385

603:                                              ; preds = %599
  br i1 %.0176, label %604, label %627

604:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #7
  %605 = load i32, ptr %10, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %605, i1 noundef zeroext true)
          to label %606 unwind label %613

606:                                              ; preds = %604
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull @.str.465)
          to label %607 unwind label %615

607:                                              ; preds = %606
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #7
  %608 = load i32, ptr %9, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %608, i32 noundef %spec.select)
          to label %609 unwind label %617

609:                                              ; preds = %607
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 8 dereferenceable(32) %67)
          to label %610 unwind label %619

610:                                              ; preds = %609
  %611 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %64)
          to label %612 unwind label %621

612:                                              ; preds = %610
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #7
  br label %thread-pre-split

613:                                              ; preds = %604
  %614 = landingpad { ptr, i32 }
          cleanup
  br label %626

615:                                              ; preds = %606
  %616 = landingpad { ptr, i32 }
          cleanup
  br label %625

617:                                              ; preds = %607
  %618 = landingpad { ptr, i32 }
          cleanup
  br label %624

619:                                              ; preds = %609
  %620 = landingpad { ptr, i32 }
          cleanup
  br label %623

621:                                              ; preds = %610
  %622 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  br label %623

623:                                              ; preds = %621, %619
  %.pn245 = phi { ptr, i32 } [ %622, %621 ], [ %620, %619 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  br label %624

624:                                              ; preds = %623, %617
  %.pn245.pn = phi { ptr, i32 } [ %.pn245, %623 ], [ %618, %617 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  br label %625

625:                                              ; preds = %624, %615
  %.pn245.pn.pn = phi { ptr, i32 } [ %.pn245.pn, %624 ], [ %616, %615 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  br label %626

626:                                              ; preds = %625, %613
  %.pn245.pn.pn.pn = phi { ptr, i32 } [ %.pn245.pn.pn, %625 ], [ %614, %613 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #7
  br label %819

627:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #7
  %628 = load i32, ptr %10, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %628, i1 noundef zeroext true)
          to label %629 unwind label %632

629:                                              ; preds = %627
  %630 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %631 unwind label %634

631:                                              ; preds = %629
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #7
  br label %thread-pre-split

632:                                              ; preds = %627
  %633 = landingpad { ptr, i32 }
          cleanup
  br label %636

634:                                              ; preds = %629
  %635 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #7
  br label %636

636:                                              ; preds = %634, %632
  %.pn243 = phi { ptr, i32 } [ %635, %634 ], [ %633, %632 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #7
  br label %819

thread-pre-split:                                 ; preds = %631, %612
  %.pr299 = load i32, ptr %10, align 4, !tbaa !12
  br label %637

637:                                              ; preds = %thread-pre-split, %591
  %638 = phi i32 [ %.pr299, %thread-pre-split ], [ %592, %591 ]
  %.2171 = phi i8 [ %601, %thread-pre-split ], [ %.1170, %591 ]
  %.not250 = icmp eq i32 %638, 0
  br i1 %.not250, label %639, label %.thread321

639:                                              ; preds = %637
  %640 = load i32, ptr %18, align 4, !tbaa !12
  %641 = icmp ne i32 %640, 0
  %642 = load i32, ptr %19, align 4
  %643 = icmp ne i32 %642, 0
  %or.cond17 = select i1 %641, i1 true, i1 %643
  br i1 %or.cond17, label %644, label %676

644:                                              ; preds = %639
  %645 = trunc nuw i8 %.2171 to i1
  br i1 %645, label %646, label %.critedge291

646:                                              ; preds = %644
  %647 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %640)
          to label %648 unwind label %385

648:                                              ; preds = %646
  br i1 %647, label %649, label %.critedge291

649:                                              ; preds = %648
  %650 = load i32, ptr %19, align 4, !tbaa !12
  %651 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %650)
          to label %.critedge291 unwind label %385

.critedge291:                                     ; preds = %644, %649, %648
  %652 = phi i1 [ false, %648 ], [ %651, %649 ], [ false, %644 ]
  %653 = zext i1 %652 to i8
  %654 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %655 unwind label %385

655:                                              ; preds = %.critedge291
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #7
  %656 = load i32, ptr %18, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %656, i1 noundef zeroext true)
          to label %657 unwind label %666

657:                                              ; preds = %655
  %658 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %69)
          to label %659 unwind label %668

659:                                              ; preds = %657
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #7
  %660 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %661 unwind label %385

661:                                              ; preds = %659
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #7
  %662 = load i32, ptr %19, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %662, i1 noundef zeroext true)
          to label %663 unwind label %671

663:                                              ; preds = %661
  %664 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %70)
          to label %665 unwind label %673

665:                                              ; preds = %663
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #7
  %.pre312 = load i32, ptr %10, align 4, !tbaa !12
  br label %676

666:                                              ; preds = %655
  %667 = landingpad { ptr, i32 }
          cleanup
  br label %670

668:                                              ; preds = %657
  %669 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #7
  br label %670

670:                                              ; preds = %668, %666
  %.pn251 = phi { ptr, i32 } [ %669, %668 ], [ %667, %666 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #7
  br label %819

671:                                              ; preds = %661
  %672 = landingpad { ptr, i32 }
          cleanup
  br label %675

673:                                              ; preds = %663
  %674 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  br label %675

675:                                              ; preds = %673, %671
  %.pn253 = phi { ptr, i32 } [ %674, %673 ], [ %672, %671 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #7
  br label %819

676:                                              ; preds = %639, %665
  %677 = phi i32 [ %.pre312, %665 ], [ 0, %639 ]
  %.3172 = phi i8 [ %653, %665 ], [ %.2171, %639 ]
  %678 = icmp eq i32 %677, 0
  %679 = load i32, ptr %17, align 4
  %680 = icmp ne i32 %679, 0
  %or.cond19 = select i1 %678, i1 %680, i1 false
  %.pre315 = load i32, ptr %322, align 8
  br i1 %or.cond19, label %681, label %702

681:                                              ; preds = %676
  %682 = icmp ugt i32 %.pre315, 39
  %683 = icmp ne i16 %85, 95
  %or.cond21 = select i1 %682, i1 %683, i1 false
  br i1 %or.cond21, label %684, label %702

684:                                              ; preds = %681
  %685 = trunc nuw i8 %.3172 to i1
  br i1 %685, label %686, label %688

686:                                              ; preds = %684
  %687 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %679)
          to label %688 unwind label %385

688:                                              ; preds = %686, %684
  %689 = phi i1 [ false, %684 ], [ %687, %686 ]
  %690 = zext i1 %689 to i8
  %691 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %692 unwind label %385

692:                                              ; preds = %688
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #7
  %693 = load i32, ptr %17, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %693, i1 noundef zeroext true)
          to label %694 unwind label %697

694:                                              ; preds = %692
  %695 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %71)
          to label %696 unwind label %699

696:                                              ; preds = %694
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #7
  %.pre313 = load i32, ptr %10, align 4, !tbaa !12
  %.pre314 = load i32, ptr %322, align 8
  br label %702

697:                                              ; preds = %692
  %698 = landingpad { ptr, i32 }
          cleanup
  br label %701

699:                                              ; preds = %694
  %700 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #7
  br label %701

701:                                              ; preds = %699, %697
  %.pn255 = phi { ptr, i32 } [ %700, %699 ], [ %698, %697 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #7
  br label %819

702:                                              ; preds = %696, %681, %676
  %703 = phi i32 [ %.pre314, %696 ], [ %.pre315, %681 ], [ %.pre315, %676 ]
  %704 = phi i32 [ %.pre313, %696 ], [ 0, %681 ], [ %677, %676 ]
  %.4173 = phi i8 [ %690, %696 ], [ %.3172, %681 ], [ %.3172, %676 ]
  %705 = icmp eq i32 %704, 0
  %706 = load i32, ptr %16, align 4
  %707 = icmp ne i32 %706, 0
  %or.cond23 = select i1 %705, i1 %707, i1 false
  %708 = icmp ugt i32 %703, 39
  %or.cond293 = select i1 %or.cond23, i1 %708, i1 false
  br i1 %or.cond293, label %709, label %.thread321

709:                                              ; preds = %702
  %710 = trunc nuw i8 %.4173 to i1
  br i1 %710, label %711, label %713

711:                                              ; preds = %709
  %712 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %706)
          to label %713 unwind label %385

713:                                              ; preds = %711, %709
  %714 = phi i1 [ false, %709 ], [ %712, %711 ]
  %715 = zext i1 %714 to i8
  %716 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %717 unwind label %385

717:                                              ; preds = %713
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #7
  %718 = load i32, ptr %16, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %718, i1 noundef zeroext true)
          to label %719 unwind label %722

719:                                              ; preds = %717
  %720 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %72)
          to label %721 unwind label %724

721:                                              ; preds = %719
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #7
  br label %.thread321

722:                                              ; preds = %717
  %723 = landingpad { ptr, i32 }
          cleanup
  br label %726

724:                                              ; preds = %719
  %725 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #7
  br label %726

726:                                              ; preds = %724, %722
  %.pn257 = phi { ptr, i32 } [ %725, %724 ], [ %723, %722 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #7
  br label %819

.thread321:                                       ; preds = %637, %721, %702
  %.5174 = phi i8 [ %715, %721 ], [ %.4173, %702 ], [ %.2171, %637 ]
  %727 = load i32, ptr %20, align 4, !tbaa !12
  %.not259 = icmp eq i32 %727, 0
  br i1 %.not259, label %746, label %728

728:                                              ; preds = %.thread321
  %729 = trunc nuw i8 %.5174 to i1
  br i1 %729, label %730, label %732

730:                                              ; preds = %728
  %731 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %727)
          to label %732 unwind label %385

732:                                              ; preds = %730, %728
  %733 = phi i1 [ false, %728 ], [ %731, %730 ]
  %734 = zext i1 %733 to i8
  %735 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %736 unwind label %385

736:                                              ; preds = %732
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #7
  %737 = load i32, ptr %20, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %737, i1 noundef zeroext true)
          to label %738 unwind label %741

738:                                              ; preds = %736
  %739 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %73)
          to label %740 unwind label %743

740:                                              ; preds = %738
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #7
  br label %766

741:                                              ; preds = %736
  %742 = landingpad { ptr, i32 }
          cleanup
  br label %745

743:                                              ; preds = %738
  %744 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  br label %745

745:                                              ; preds = %743, %741
  %.pn263 = phi { ptr, i32 } [ %744, %743 ], [ %742, %741 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #7
  br label %819

746:                                              ; preds = %.thread321
  %747 = load i32, ptr %21, align 4, !tbaa !12
  %.not260 = icmp eq i32 %747, 0
  br i1 %.not260, label %766, label %748

748:                                              ; preds = %746
  %749 = trunc nuw i8 %.5174 to i1
  br i1 %749, label %750, label %752

750:                                              ; preds = %748
  %751 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %747)
          to label %752 unwind label %385

752:                                              ; preds = %750, %748
  %753 = phi i1 [ false, %748 ], [ %751, %750 ]
  %754 = zext i1 %753 to i8
  %755 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %756 unwind label %385

756:                                              ; preds = %752
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %74) #7
  %757 = load i32, ptr %21, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %757, i1 noundef zeroext true)
          to label %758 unwind label %761

758:                                              ; preds = %756
  %759 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %74)
          to label %760 unwind label %763

760:                                              ; preds = %758
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #7
  br label %766

761:                                              ; preds = %756
  %762 = landingpad { ptr, i32 }
          cleanup
  br label %765

763:                                              ; preds = %758
  %764 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #7
  br label %765

765:                                              ; preds = %763, %761
  %.pn261 = phi { ptr, i32 } [ %764, %763 ], [ %762, %761 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #7
  br label %819

766:                                              ; preds = %746, %760, %740
  %.6175 = phi i8 [ %734, %740 ], [ %754, %760 ], [ %.5174, %746 ]
  %767 = load i32, ptr %23, align 4, !tbaa !12
  %.not265 = icmp eq i32 %767, 0
  br i1 %.not265, label %780, label %768

768:                                              ; preds = %766
  %769 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.341)
          to label %770 unwind label %385

770:                                              ; preds = %768
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %75) #7
  %771 = load i32, ptr %23, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %771, i1 noundef zeroext true)
          to label %772 unwind label %775

772:                                              ; preds = %770
  %773 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %75)
          to label %774 unwind label %777

774:                                              ; preds = %772
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #7
  br label %780

775:                                              ; preds = %770
  %776 = landingpad { ptr, i32 }
          cleanup
  br label %779

777:                                              ; preds = %772
  %778 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #7
  br label %779

779:                                              ; preds = %777, %775
  %.pn266 = phi { ptr, i32 } [ %778, %777 ], [ %776, %775 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #7
  br label %819

780:                                              ; preds = %774, %766
  %781 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.78)
          to label %782 unwind label %385

782:                                              ; preds = %780
  %783 = load i32, ptr %10, align 4, !tbaa !12
  %.not268 = icmp ne i32 %783, 0
  %784 = load i32, ptr %322, align 8
  %785 = icmp ult i32 %784, 40
  %or.cond295 = select i1 %.not268, i1 %785, i1 false
  br i1 %or.cond295, label %786, label %788

786:                                              ; preds = %782
  %787 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.473)
          to label %788 unwind label %385

788:                                              ; preds = %786, %782
  %789 = icmp eq i16 %85, 105
  br i1 %789, label %790, label %802

790:                                              ; preds = %788
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcRjS4_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.474, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 1 dereferenceable(8) @.str.475, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %791 unwind label %385

791:                                              ; preds = %790
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRjRA5_S2_S5_S4_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.476, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 1 dereferenceable(5) @.str.477, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 1 dereferenceable(9) @.str.478)
          to label %792 unwind label %385

792:                                              ; preds = %791
  %793 = load i32, ptr %7, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %76) #7
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 1 dereferenceable(2) @.str.62, ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %794 unwind label %797

794:                                              ; preds = %792
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %77) #7
  store i8 1, ptr %77, align 1, !tbaa !164
  %795 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %793, ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %796 unwind label %799

796:                                              ; preds = %794
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %77) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #7
  br label %807

797:                                              ; preds = %792
  %798 = landingpad { ptr, i32 }
          cleanup
  br label %801

799:                                              ; preds = %794
  %800 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %77) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  br label %801

801:                                              ; preds = %799, %797
  %.pn269 = phi { ptr, i32 } [ %800, %799 ], [ %798, %797 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #7
  br label %819

802:                                              ; preds = %788
  %803 = load i32, ptr %6, align 4, !tbaa !12
  %804 = load i32, ptr %7, align 4, !tbaa !12
  %805 = trunc nuw i8 %.6175 to i1
  %806 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %803, i32 noundef %804, ptr noundef nonnull align 8 dereferenceable(32) %27, i1 noundef zeroext %805, i1 noundef zeroext false)
          to label %807 unwind label %385

807:                                              ; preds = %802, %796
  %808 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %5) #7
  %809 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %5) #7
  %.not271304 = icmp eq ptr %808, %809
  br i1 %.not271304, label %._crit_edge308, label %.lr.ph307

._crit_edge308:                                   ; preds = %812, %807
  switch i16 %85, label %818 [
    i16 89, label %816
    i16 87, label %816
    i16 91, label %816
    i16 93, label %816
  ]

.lr.ph307:                                        ; preds = %807, %812
  %.0160305 = phi ptr [ %813, %812 ], [ %808, %807 ]
  %810 = load i32, ptr %7, align 4, !tbaa !12
  %811 = load i32, ptr %.0160305, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %810, i32 noundef %811)
          to label %812 unwind label %814

812:                                              ; preds = %.lr.ph307
  %813 = getelementptr inbounds i8, ptr %.0160305, i64 4
  %.not271 = icmp eq ptr %813, %809
  br i1 %.not271, label %._crit_edge308, label %.lr.ph307

814:                                              ; preds = %.lr.ph307
  %815 = landingpad { ptr, i32 }
          cleanup
  br label %819

816:                                              ; preds = %._crit_edge308, %._crit_edge308, %._crit_edge308, %._crit_edge308
  %817 = load i32, ptr %7, align 4, !tbaa !12
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %817)
          to label %818 unwind label %385

818:                                              ; preds = %._crit_edge308, %816
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %5) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  ret void

819:                                              ; preds = %814, %801, %779, %765, %745, %726, %701, %675, %670, %636, %626, %.critedge287, %563, %548, %537, %514, %490, %466, %456, %437, %435, %424, %414, %396, %391, %385
  %.pn272 = phi { ptr, i32 } [ %386, %385 ], [ %425, %424 ], [ %436, %435 ], [ %438, %437 ], [ %564, %563 ], [ %815, %814 ], [ %.pn269, %801 ], [ %.pn266, %779 ], [ %.pn263, %745 ], [ %.pn261, %765 ], [ %.pn257, %726 ], [ %.pn255, %701 ], [ %.pn253, %675 ], [ %.pn251, %670 ], [ %.pn245.pn.pn.pn, %626 ], [ %.pn243, %636 ], [ %.pn239.pn, %.critedge287 ], [ %.pn232.pn.pn.pn, %490 ], [ %.pn227.pn.pn.pn, %514 ], [ %.pn222.pn.pn.pn, %537 ], [ %.pn220, %548 ], [ %.pn214.pn, %456 ], [ %467, %466 ], [ %.pn208.pn, %414 ], [ %.pn206, %391 ], [ %397, %396 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  br label %820

820:                                              ; preds = %819, %383
  %.pn272.pn = phi { ptr, i32 } [ %.pn272, %819 ], [ %384, %383 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #7
  br label %821

821:                                              ; preds = %220, %222, %282, %286, %291, %301, %262, %252, %248, %820, %361, %340, %329, %199, %189, %187
  %.pn275 = phi { ptr, i32 } [ %190, %189 ], [ %188, %187 ], [ %200, %199 ], [ %330, %329 ], [ %.pn272.pn, %820 ], [ %.pn203, %340 ], [ %.pn201, %361 ], [ %221, %220 ], [ %223, %222 ], [ %287, %286 ], [ %283, %282 ], [ %292, %291 ], [ %302, %301 ], [ %249, %248 ], [ %253, %252 ], [ %263, %262 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  br label %822

822:                                              ; preds = %821, %164
  %.pn275.pn = phi { ptr, i32 } [ %.pn275, %821 ], [ %165, %164 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %823

823:                                              ; preds = %822, %118
  %.pn275.pn.pn = phi { ptr, i32 } [ %.pn275.pn, %822 ], [ %119, %118 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %824

824:                                              ; preds = %823, %111
  %.pn275.pn.pn.pn = phi { ptr, i32 } [ %.pn275.pn.pn, %823 ], [ %112, %111 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %5) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  br label %825

825:                                              ; preds = %824, %81
  %.pn280 = phi { ptr, i32 } [ %82, %81 ], [ %.pn275.pn.pn.pn, %824 ]
  resume { ptr, i32 } %.pn280
}

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_0clERjj"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #6 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef ptr @"_ZZN11spirv_cross12CompilerHLSL15emit_texture_opERKNS_11InstructionEbENK3$_1clEjj"(ptr noundef nonnull align 1 dereferenceable(1), i32 noundef, i32 noundef) local_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 #5

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcRjEEENSt7__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)) local_unnamed_addr #1

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

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

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

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

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

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


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