; 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::TypedID.328" = type { i32 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.spirv_cross::TypedID.324" = type { i32 }
%"struct.std::pair" = type <{ %"struct.std::__detail::_Node_iterator", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.325", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.328", %"class.spirv_cross::TypedID.328", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.324" }>
%"class.spirv_cross::SmallVector.325" = type { %"class.spirv_cross::VectorView.326", i64, %"class.spirv_cross::AlignedBuffer.327" }
%"class.spirv_cross::VectorView.326" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.327" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.328", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::allocator" = type { i8 }
%"struct.spirv_cross::Instruction" = type { i16, i16, i32, i32 }
%"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 }
%"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" }
%"class.spirv_cross::TypedID.330" = type { i32 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.324", [4 x i8] }>
%"struct.spirv_cross::SPIRExpression" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.324", %"class.std::__cxx11::basic_string", %"class.spirv_cross::TypedID.328", %"class.spirv_cross::TypedID.324", i8, i8, i8, i8, [4 x i8], %"class.spirv_cross::SmallVector.10", %"class.spirv_cross::SmallVector.10", %"class.spirv_cross::SmallVector.10", i32, [4 x i8] }>
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.328", i32, i32, %"class.spirv_cross::TypedID.324", %"class.spirv_cross::TypedID.330", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.324", %"class.spirv_cross::SmallVector.10", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.331", i8, i8, i8, ptr }
%"class.spirv_cross::TypedID.331" = type { i32 }
%"struct.spirv_cross::SPIREntryPoint" = type <{ %"class.spirv_cross::TypedID", [4 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::SmallVector.334", %"class.spirv_cross::Bitset", %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", i32, i32, i32, i32, i8, [3 x i8] }>
%"class.spirv_cross::SmallVector.334" = type { %"class.spirv_cross::VectorView.335", i64, %"class.spirv_cross::AlignedBuffer.336" }
%"class.spirv_cross::VectorView.335" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.336" = type { [32 x i8] }
%"struct.spirv_cross::SPIREntryPoint::WorkgroupSize" = type { i32, i32, i32, i32, i32, i32, i32 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.341 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.379 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.406 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.417 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.528 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.530 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.539 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.617 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.618 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.619 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.620 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.621 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.622 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.623 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.624 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.625 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.626 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.627 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.628 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.629 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.630 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.631 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.632 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.633 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.634 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.635 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.636 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.637 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.638 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.639 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.640 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.641 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.642 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.643 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.644 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.645 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.646 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerHLSL16emit_instructionERKNS_11InstructionE = external hidden unnamed_addr constant [78 x i8], align 1
@.str.647 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.648 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.649 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.650 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.651 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.652 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.653 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.654 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.655 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.656 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.657 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.658 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.659 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.660 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.661 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.662 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.663 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.664 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.665 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.666 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.667 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.668 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.669 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.670 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.671 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.672 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.673 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.674 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.675 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.676 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.677 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.678 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.679 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.680 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.681 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.682 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.683 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.684 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.685 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.686 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.687 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.688 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.689 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.690 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.691 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.692 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.693 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.694 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.695 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.696 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.697 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.698 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.699 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.700 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.701 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.702 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.703 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.704 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.705 = external hidden unnamed_addr constant [21 x i8], align 1

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA35_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(35)) #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #1 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 i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #3

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

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_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

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

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 @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(20)) #6 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

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

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

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: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #6 align 2

declare void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef) #6

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56)) #7

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

declare void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__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_cross12CompilerHLSL10emit_storeERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528), ptr noundef nonnull align 4 dereferenceable(12)) #1 align 2

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL33get_integer_width_for_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerHLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 4 dereferenceable(12) %1) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca %"class.spirv_cross::TypedID.328", align 4
  %13 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca i32, align 4
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::__cxx11::basic_string", align 8
  %84 = alloca %"class.spirv_cross::TypedID.324", align 4
  %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 ptr, align 8
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca i8, align 1
  %93 = alloca ptr, align 8
  %94 = alloca %"class.spirv_cross::TypedID.324", align 4
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca %"class.std::__cxx11::basic_string", align 8
  %97 = alloca %"class.spirv_cross::TypedID.324", align 4
  %98 = alloca %"class.std::__cxx11::basic_string", align 8
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca %"class.std::__cxx11::basic_string", align 8
  %101 = alloca %"class.std::__cxx11::basic_string", align 8
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca ptr, align 8
  %104 = alloca %"class.std::__cxx11::basic_string", align 8
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca i8, align 1
  %108 = alloca ptr, align 8
  %109 = alloca %"class.spirv_cross::TypedID.324", align 4
  %110 = alloca %"struct.std::pair", align 8
  %111 = alloca ptr, align 8
  %112 = alloca %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"class.std::__cxx11::basic_string", align 8
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca %"class.std::__cxx11::basic_string", align 8
  %116 = alloca %"class.std::__cxx11::basic_string", align 8
  %117 = alloca %"class.std::__cxx11::basic_string", align 8
  %118 = alloca ptr, align 8
  %119 = alloca %"class.std::__cxx11::basic_string", align 8
  %120 = alloca %"class.std::__cxx11::basic_string", align 8
  %121 = alloca i8, align 1
  %122 = alloca i32, align 4
  %123 = alloca i32, align 4
  %124 = alloca ptr, align 8
  %125 = alloca ptr, align 8
  %126 = alloca i8, align 1
  %127 = alloca i8, align 1
  %128 = alloca %"class.std::__cxx11::basic_string", align 8
  %129 = alloca i32, align 4
  %130 = alloca i32, align 4
  %131 = alloca %"class.std::__cxx11::basic_string", align 8
  %132 = alloca %"class.std::__cxx11::basic_string", align 8
  %133 = alloca %"class.std::__cxx11::basic_string", align 8
  %134 = alloca %"class.std::__cxx11::basic_string", align 8
  %135 = alloca %"class.std::__cxx11::basic_string", align 8
  %136 = alloca %"class.std::__cxx11::basic_string", align 8
  %137 = alloca %"class.std::__cxx11::basic_string", align 8
  %138 = alloca %"class.std::__cxx11::basic_string", align 8
  %139 = alloca i8, align 1
  %140 = alloca %"class.spirv_cross::TypedID.324", align 4
  %141 = alloca %"class.std::__cxx11::basic_string", align 8
  %142 = alloca i8, align 1
  %143 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %144 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %145 = alloca ptr, align 8
  %146 = alloca %"class.spirv_cross::TypedID.324", align 4
  %147 = alloca ptr, align 8
  %148 = alloca %"class.std::__cxx11::basic_string", align 8
  %149 = alloca ptr, align 8
  %150 = alloca %"struct.spirv_cross::SPIRType", align 8
  %151 = alloca %"class.std::__cxx11::basic_string", align 8
  %152 = alloca %"class.std::__cxx11::basic_string", align 8
  %153 = alloca %"class.std::__cxx11::basic_string", align 8
  %154 = alloca i32, align 4
  %155 = alloca i32, align 4
  %156 = alloca %"class.std::__cxx11::basic_string", align 8
  %157 = alloca %"class.std::__cxx11::basic_string", align 8
  %158 = alloca %"class.std::__cxx11::basic_string", align 8
  %159 = alloca ptr, align 8
  %160 = alloca i8, align 1
  %161 = alloca ptr, align 8
  %162 = alloca %"class.spirv_cross::TypedID.324", align 4
  %163 = alloca i32, align 4
  %164 = alloca i32, align 4
  %165 = alloca i32, align 4
  %166 = alloca ptr, align 8
  %167 = alloca ptr, align 8
  %168 = alloca i32, align 4
  %169 = alloca i32, align 4
  %170 = alloca i8, align 1
  %171 = alloca %"class.std::__cxx11::basic_string", align 8
  %172 = alloca %"class.std::__cxx11::basic_string", align 8
  %173 = alloca %"class.std::__cxx11::basic_string", align 8
  %174 = alloca %"class.std::__cxx11::basic_string", align 8
  %175 = alloca %"class.std::__cxx11::basic_string", align 8
  %176 = alloca i8, align 1
  %177 = alloca ptr, align 8
  %178 = alloca %"class.std::__cxx11::basic_string", align 8
  %179 = alloca i32, align 4
  %180 = alloca ptr, align 8
  %181 = alloca ptr, align 8
  %182 = alloca %"class.spirv_cross::TypedID.324", align 4
  %183 = alloca %"class.spirv_cross::TypedID.324", align 4
  %184 = alloca %"class.std::__cxx11::basic_string", align 8
  %185 = alloca %"class.std::__cxx11::basic_string", align 8
  %186 = alloca i32, align 4
  %187 = alloca i32, align 4
  %188 = alloca %"class.std::__cxx11::basic_string", align 8
  %189 = alloca %"class.std::__cxx11::basic_string", align 8
  %190 = alloca %"class.std::__cxx11::basic_string", align 8
  %191 = alloca %"class.std::allocator", align 1
  %192 = alloca %"class.std::__cxx11::basic_string", align 8
  %193 = alloca %"class.std::__cxx11::basic_string", align 8
  %194 = alloca %"class.std::__cxx11::basic_string", align 8
  %195 = alloca %"class.std::__cxx11::basic_string", align 8
  %196 = alloca %"class.std::__cxx11::basic_string", align 8
  %197 = alloca %"class.std::__cxx11::basic_string", align 8
  %198 = alloca %"class.std::__cxx11::basic_string", align 8
  %199 = alloca %"class.std::__cxx11::basic_string", align 8
  %200 = alloca %"class.std::__cxx11::basic_string", align 8
  %201 = alloca %"class.std::__cxx11::basic_string", align 8
  %202 = alloca %"class.std::__cxx11::basic_string", align 8
  %203 = alloca %"class.std::__cxx11::basic_string", align 8
  %204 = alloca %"class.std::__cxx11::basic_string", align 8
  %205 = alloca %"class.std::__cxx11::basic_string", align 8
  %206 = alloca %"class.std::__cxx11::basic_string", align 8
  %207 = alloca %"class.std::__cxx11::basic_string", align 8
  %208 = alloca %"class.std::__cxx11::basic_string", align 8
  %209 = alloca %"class.std::__cxx11::basic_string", align 8
  %210 = alloca %"class.std::__cxx11::basic_string", align 8
  %211 = alloca %"class.std::__cxx11::basic_string", align 8
  %212 = alloca %"class.std::__cxx11::basic_string", align 8
  %213 = alloca %"class.std::__cxx11::basic_string", align 8
  %214 = alloca %"class.std::__cxx11::basic_string", align 8
  %215 = alloca %"class.std::__cxx11::basic_string", align 8
  %216 = alloca %"class.std::__cxx11::basic_string", align 8
  %217 = alloca %"class.std::__cxx11::basic_string", align 8
  %218 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %219 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  %220 = load ptr, ptr %4, align 8, !tbaa !5
  %221 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %219, ptr noundef nonnull align 4 dereferenceable(12) %220)
  store ptr %221, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  %222 = load ptr, ptr %4, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %222, i32 0, i32 0
  %224 = load i16, ptr %223, align 4, !tbaa !9
  %225 = zext i16 %224 to i32
  store i32 %225, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL33get_integer_width_for_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %226)
  store i32 %227, ptr %7, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  %228 = load i32, ptr %7, align 4, !tbaa !15
  %229 = call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %228)
  store i32 %229, ptr %8, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  %230 = load i32, ptr %7, align 4, !tbaa !15
  %231 = call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %230)
  store i32 %231, ptr %9, align 4, !tbaa !16
  %232 = load i32, ptr %6, align 4, !tbaa !13
  %233 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21get_remapped_spirv_opEN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %232)
  store i32 %233, ptr %6, align 4, !tbaa !13
  %234 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %234, label %2901 [
    i32 65, label %235
    i32 66, label %235
    i32 124, label %237
    i32 169, label %280
    i32 62, label %361
    i32 61, label %363
    i32 145, label %365
    i32 144, label %378
    i32 146, label %391
    i32 147, label %404
    i32 141, label %504
    i32 140, label %512
    i32 100, label %525
    i32 207, label %588
    i32 208, label %601
    i32 210, label %614
    i32 211, label %627
    i32 213, label %640
    i32 214, label %653
    i32 209, label %666
    i32 215, label %666
    i32 212, label %666
    i32 168, label %679
    i32 170, label %709
    i32 164, label %749
    i32 180, label %749
    i32 181, label %749
    i32 171, label %786
    i32 165, label %826
    i32 182, label %826
    i32 183, label %826
    i32 172, label %863
    i32 173, label %863
    i32 186, label %912
    i32 187, label %949
    i32 174, label %975
    i32 175, label %975
    i32 190, label %1024
    i32 191, label %1061
    i32 176, label %1087
    i32 177, label %1087
    i32 184, label %1136
    i32 185, label %1173
    i32 178, label %1199
    i32 179, label %1199
    i32 188, label %1248
    i32 189, label %1285
    i32 105, label %1311
    i32 103, label %1316
    i32 104, label %1389
    i32 107, label %1503
    i32 106, label %1503
    i32 98, label %1647
    i32 99, label %1919
    i32 60, label %2017
    i32 6035, label %2086
    i32 5614, label %2086
    i32 5615, label %2086
    i32 230, label %2093
    i32 229, label %2093
    i32 235, label %2093
    i32 236, label %2093
    i32 237, label %2093
    i32 238, label %2093
    i32 239, label %2093
    i32 240, label %2093
    i32 241, label %2093
    i32 242, label %2093
    i32 234, label %2093
    i32 232, label %2093
    i32 233, label %2093
    i32 227, label %2093
    i32 228, label %2093
    i32 224, label %2099
    i32 225, label %2099
    i32 201, label %2261
    i32 202, label %2362
    i32 203, label %2362
    i32 205, label %2404
    i32 204, label %2422
    i32 68, label %2432
    i32 5381, label %2523
    i32 5364, label %2559
    i32 5365, label %2559
    i32 4473, label %2572
    i32 4477, label %2659
    i32 4474, label %2684
    i32 4475, label %2696
    i32 4476, label %2717
    i32 4479, label %2729
    i32 6018, label %2731
    i32 6019, label %2733
    i32 6020, label %2735
    i32 6021, label %2737
    i32 6022, label %2739
    i32 6023, label %2741
    i32 6024, label %2743
    i32 6025, label %2745
    i32 6026, label %2747
    i32 6027, label %2772
    i32 6028, label %2774
    i32 6031, label %2779
    i32 6032, label %2781
    i32 6017, label %2783
    i32 6016, label %2808
    i32 6030, label %2833
    i32 6029, label %2858
    i32 5295, label %2883
  ]

235:                                              ; preds = %2, %2
  %236 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL17emit_access_chainERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef nonnull align 4 dereferenceable(12) %236)
  br label %2903

237:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  %238 = load ptr, ptr %5, align 8, !tbaa !5
  %239 = getelementptr inbounds i32, ptr %238, i64 0
  %240 = load i32, ptr %239, align 4, !tbaa !15
  %241 = load ptr, ptr %5, align 8, !tbaa !5
  %242 = getelementptr inbounds i32, ptr %241, i64 2
  %243 = load i32, ptr %242, align 4, !tbaa !15
  %244 = call noundef i32 @_ZN11spirv_cross12CompilerHLSL16get_bitcast_typeEjj(ptr noundef nonnull align 8 dereferenceable(10528) %219, i32 noundef %240, i32 noundef %243)
  store i32 %244, ptr %10, align 4, !tbaa !18
  %245 = load i32, ptr %10, align 4, !tbaa !18
  %246 = icmp eq i32 %245, 0
  br i1 %246, label %247, label %249

247:                                              ; preds = %237
  %248 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %248)
  br label %279

249:                                              ; preds = %237
  %250 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 4
  %251 = load i8, ptr %250, align 2, !tbaa !20, !range !147, !noundef !148
  %252 = trunc i8 %251 to i1
  br i1 %252, label %255, label %253

253:                                              ; preds = %249
  %254 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 4
  store i8 1, ptr %254, align 2, !tbaa !20
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %219)
  br label %255

255:                                              ; preds = %253, %249
  %256 = load i32, ptr %10, align 4, !tbaa !18
  %257 = icmp eq i32 %256, 1
  br i1 %257, label %258, label %268

258:                                              ; preds = %255
  %259 = load ptr, ptr %5, align 8, !tbaa !5
  %260 = getelementptr inbounds i32, ptr %259, i64 0
  %261 = load i32, ptr %260, align 4, !tbaa !15
  %262 = load ptr, ptr %5, align 8, !tbaa !5
  %263 = getelementptr inbounds i32, ptr %262, i64 1
  %264 = load i32, ptr %263, align 4, !tbaa !15
  %265 = load ptr, ptr %5, align 8, !tbaa !5
  %266 = getelementptr inbounds i32, ptr %265, i64 2
  %267 = load i32, ptr %266, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %261, i32 noundef %264, i32 noundef %267, ptr noundef @.str.617)
  br label %278

268:                                              ; preds = %255
  %269 = load ptr, ptr %5, align 8, !tbaa !5
  %270 = getelementptr inbounds i32, ptr %269, i64 0
  %271 = load i32, ptr %270, align 4, !tbaa !15
  %272 = load ptr, ptr %5, align 8, !tbaa !5
  %273 = getelementptr inbounds i32, ptr %272, i64 1
  %274 = load i32, ptr %273, align 4, !tbaa !15
  %275 = load ptr, ptr %5, align 8, !tbaa !5
  %276 = getelementptr inbounds i32, ptr %275, i64 2
  %277 = load i32, ptr %276, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %271, i32 noundef %274, i32 noundef %277, ptr noundef @.str.618)
  br label %278

278:                                              ; preds = %268, %258
  br label %279

279:                                              ; preds = %278, %247
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  br label %2903

280:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  %281 = load ptr, ptr %5, align 8, !tbaa !5
  %282 = getelementptr inbounds i32, ptr %281, i64 3
  %283 = load i32, ptr %282, align 4, !tbaa !15
  %284 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %283)
  store ptr %284, ptr %11, align 8, !tbaa !5
  %285 = load ptr, ptr %11, align 8, !tbaa !5
  %286 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %285, i32 0, i32 2
  %287 = load i32, ptr %286, align 8, !tbaa !149
  %288 = icmp eq i32 %287, 15
  br i1 %288, label %292, label %289

289:                                              ; preds = %280
  %290 = load ptr, ptr %11, align 8, !tbaa !5
  %291 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %219, ptr noundef nonnull align 8 dereferenceable(336) %290)
  br i1 %291, label %292, label %358

292:                                              ; preds = %289, %280
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = getelementptr inbounds i32, ptr %293, i64 3
  %295 = load i32, ptr %294, align 4, !tbaa !15
  %296 = call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %295)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %12, i32 noundef %296)
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %297 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 29
  %298 = call ptr @_ZNSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %297) #9
  %299 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %14, i32 0, i32 0
  store ptr %298, ptr %299, align 8
  %300 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 29
  %301 = call ptr @_ZNSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %300) #9
  %302 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %15, i32 0, i32 0
  store ptr %301, ptr %302, align 8
  %303 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %14, i32 0, i32 0
  %304 = load ptr, ptr %303, align 8
  %305 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %15, i32 0, i32 0
  %306 = load ptr, ptr %305, align 8
  %307 = call ptr @_ZSt4findIN9__gnu_cxx17__normal_iteratorIPN11spirv_cross7TypedIDILNS2_5TypesE1EEESt6vectorIS5_SaIS5_EEEES5_ET_SB_SB_RKT0_(ptr %304, ptr %306, ptr noundef nonnull align 4 dereferenceable(4) %12)
  %308 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %13, i32 0, i32 0
  store ptr %307, ptr %308, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %309 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 29
  %310 = call ptr @_ZNSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %309) #9
  %311 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %16, i32 0, i32 0
  store ptr %310, ptr %311, align 8
  %312 = call noundef zeroext i1 @_ZN9__gnu_cxxeqIPN11spirv_cross7TypedIDILNS1_5TypesE1EEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  br i1 %312, label %313, label %315

313:                                              ; preds = %292
  %314 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 29
  call void @_ZNSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %314, ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %219)
  br label %315

315:                                              ; preds = %313, %292
  %316 = load ptr, ptr %5, align 8, !tbaa !5
  %317 = getelementptr inbounds i32, ptr %316, i64 0
  %318 = load i32, ptr %317, align 4, !tbaa !15
  %319 = load ptr, ptr %5, align 8, !tbaa !5
  %320 = getelementptr inbounds i32, ptr %319, i64 1
  %321 = load i32, ptr %320, align 4, !tbaa !15
  %322 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %318, i32 noundef %321)
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #9
  %323 = load ptr, ptr %5, align 8, !tbaa !5
  %324 = getelementptr inbounds i32, ptr %323, i64 1
  %325 = load i32, ptr %324, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %325, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #9
  %326 = load ptr, ptr %5, align 8, !tbaa !5
  %327 = getelementptr inbounds i32, ptr %326, i64 2
  %328 = load i32, ptr %327, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %328, i1 noundef zeroext true)
          to label %329 unwind label %339

329:                                              ; preds = %315
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #9
  %330 = load ptr, ptr %5, align 8, !tbaa !5
  %331 = getelementptr inbounds i32, ptr %330, i64 3
  %332 = load i32, ptr %331, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %332, i1 noundef zeroext true)
          to label %333 unwind label %343

333:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #9
  %334 = load ptr, ptr %5, align 8, !tbaa !5
  %335 = getelementptr inbounds i32, ptr %334, i64 4
  %336 = load i32, ptr %335, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %336, i1 noundef zeroext true)
          to label %337 unwind label %347

337:                                              ; preds = %333
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(20) @.str.619, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %338 unwind label %351

338:                                              ; preds = %337
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %360

339:                                              ; preds = %315
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %19, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %20, align 4
  br label %357

343:                                              ; preds = %329
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %19, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %20, align 4
  br label %356

347:                                              ; preds = %333
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %19, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %20, align 4
  br label %355

351:                                              ; preds = %337
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %19, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  br label %355

355:                                              ; preds = %351, %347
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  br label %356

356:                                              ; preds = %355, %343
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  br label %357

357:                                              ; preds = %356, %339
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  br label %2904

358:                                              ; preds = %289
  %359 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %359)
  br label %360

360:                                              ; preds = %358, %338
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  br label %2903

361:                                              ; preds = %2
  %362 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL10emit_storeERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef nonnull align 4 dereferenceable(12) %362)
  br label %2903

363:                                              ; preds = %2
  %364 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL9emit_loadERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef nonnull align 4 dereferenceable(12) %364)
  br label %2903

365:                                              ; preds = %2
  %366 = load ptr, ptr %5, align 8, !tbaa !5
  %367 = getelementptr inbounds i32, ptr %366, i64 0
  %368 = load i32, ptr %367, align 4, !tbaa !15
  %369 = load ptr, ptr %5, align 8, !tbaa !5
  %370 = getelementptr inbounds i32, ptr %369, i64 1
  %371 = load i32, ptr %370, align 4, !tbaa !15
  %372 = load ptr, ptr %5, align 8, !tbaa !5
  %373 = getelementptr inbounds i32, ptr %372, i64 3
  %374 = load i32, ptr %373, align 4, !tbaa !15
  %375 = load ptr, ptr %5, align 8, !tbaa !5
  %376 = getelementptr inbounds i32, ptr %375, i64 2
  %377 = load i32, ptr %376, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %368, i32 noundef %371, i32 noundef %374, i32 noundef %377, ptr noundef @.str.620)
  br label %2903

378:                                              ; preds = %2
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = getelementptr inbounds i32, ptr %379, i64 0
  %381 = load i32, ptr %380, align 4, !tbaa !15
  %382 = load ptr, ptr %5, align 8, !tbaa !5
  %383 = getelementptr inbounds i32, ptr %382, i64 1
  %384 = load i32, ptr %383, align 4, !tbaa !15
  %385 = load ptr, ptr %5, align 8, !tbaa !5
  %386 = getelementptr inbounds i32, ptr %385, i64 3
  %387 = load i32, ptr %386, align 4, !tbaa !15
  %388 = load ptr, ptr %5, align 8, !tbaa !5
  %389 = getelementptr inbounds i32, ptr %388, i64 2
  %390 = load i32, ptr %389, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %381, i32 noundef %384, i32 noundef %387, i32 noundef %390, ptr noundef @.str.620)
  br label %2903

391:                                              ; preds = %2
  %392 = load ptr, ptr %5, align 8, !tbaa !5
  %393 = getelementptr inbounds i32, ptr %392, i64 0
  %394 = load i32, ptr %393, align 4, !tbaa !15
  %395 = load ptr, ptr %5, align 8, !tbaa !5
  %396 = getelementptr inbounds i32, ptr %395, i64 1
  %397 = load i32, ptr %396, align 4, !tbaa !15
  %398 = load ptr, ptr %5, align 8, !tbaa !5
  %399 = getelementptr inbounds i32, ptr %398, i64 3
  %400 = load i32, ptr %399, align 4, !tbaa !15
  %401 = load ptr, ptr %5, align 8, !tbaa !5
  %402 = getelementptr inbounds i32, ptr %401, i64 2
  %403 = load i32, ptr %402, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %394, i32 noundef %397, i32 noundef %400, i32 noundef %403, ptr noundef @.str.620)
  br label %2903

404:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  %405 = load ptr, ptr %5, align 8, !tbaa !5
  %406 = getelementptr inbounds i32, ptr %405, i64 0
  %407 = load i32, ptr %406, align 4, !tbaa !15
  store i32 %407, ptr %23, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %408 = load ptr, ptr %5, align 8, !tbaa !5
  %409 = getelementptr inbounds i32, ptr %408, i64 1
  %410 = load i32, ptr %409, align 4, !tbaa !15
  store i32 %410, ptr %24, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %411 = load ptr, ptr %5, align 8, !tbaa !5
  %412 = getelementptr inbounds i32, ptr %411, i64 2
  %413 = load i32, ptr %412, align 4, !tbaa !15
  store i32 %413, ptr %25, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %414 = load ptr, ptr %5, align 8, !tbaa !5
  %415 = getelementptr inbounds i32, ptr %414, i64 3
  %416 = load i32, ptr %415, align 4, !tbaa !15
  store i32 %416, ptr %26, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %417 = load i32, ptr %23, align 4, !tbaa !15
  %418 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %417)
  store ptr %418, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #9
  %419 = load ptr, ptr %27, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(336) %419)
  %420 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.406)
          to label %421 unwind label %429

421:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  store i32 0, ptr %29, align 4, !tbaa !15
  br label %422

422:                                              ; preds = %477, %421
  %423 = load i32, ptr %29, align 4, !tbaa !15
  %424 = load ptr, ptr %27, align 8, !tbaa !5
  %425 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %424, i32 0, i32 5
  %426 = load i32, ptr %425, align 4, !tbaa !162
  %427 = icmp ult i32 %423, %426
  br i1 %427, label %433, label %428

428:                                              ; preds = %422
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %481

429:                                              ; preds = %499, %496, %493, %489, %483, %481, %404
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %19, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %20, align 4
  br label %503

433:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #9
  %434 = load i32, ptr %25, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %434, i1 noundef zeroext true)
          to label %435 unwind label %454

435:                                              ; preds = %433
  %436 = 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) %30)
          to label %437 unwind label %458

437:                                              ; preds = %435
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  %438 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.528)
          to label %439 unwind label %463

439:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #9
  %440 = load i32, ptr %26, align 4, !tbaa !15
  %441 = load i32, ptr %29, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %440, i32 noundef %441)
          to label %442 unwind label %467

442:                                              ; preds = %439
  %443 = 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) %31)
          to label %444 unwind label %471

444:                                              ; preds = %442
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  %445 = load i32, ptr %29, align 4, !tbaa !15
  %446 = add i32 %445, 1
  %447 = load ptr, ptr %27, align 8, !tbaa !5
  %448 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %447, i32 0, i32 5
  %449 = load i32, ptr %448, align 4, !tbaa !162
  %450 = icmp ult i32 %446, %449
  br i1 %450, label %451, label %476

451:                                              ; preds = %444
  %452 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.341)
          to label %453 unwind label %463

453:                                              ; preds = %451
  br label %476

454:                                              ; preds = %433
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %19, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %20, align 4
  br label %462

458:                                              ; preds = %435
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %19, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  br label %462

462:                                              ; preds = %458, %454
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %480

463:                                              ; preds = %451, %437
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %19, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %20, align 4
  br label %480

467:                                              ; preds = %439
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %19, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %20, align 4
  br label %475

471:                                              ; preds = %442
  %472 = landingpad { ptr, i32 }
          cleanup
  %473 = extractvalue { ptr, i32 } %472, 0
  store ptr %473, ptr %19, align 8
  %474 = extractvalue { ptr, i32 } %472, 1
  store i32 %474, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  br label %475

475:                                              ; preds = %471, %467
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  br label %480

476:                                              ; preds = %453, %444
  br label %477

477:                                              ; preds = %476
  %478 = load i32, ptr %29, align 4, !tbaa !15
  %479 = add i32 %478, 1
  store i32 %479, ptr %29, align 4, !tbaa !15
  br label %422, !llvm.loop !163

480:                                              ; preds = %475, %463, %462
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %503

481:                                              ; preds = %428
  %482 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.78)
          to label %483 unwind label %429

483:                                              ; preds = %481
  %484 = load i32, ptr %23, align 4, !tbaa !15
  %485 = load i32, ptr %24, align 4, !tbaa !15
  %486 = load i32, ptr %25, align 4, !tbaa !15
  %487 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %486)
          to label %488 unwind label %429

488:                                              ; preds = %483
  br i1 %487, label %489, label %493

489:                                              ; preds = %488
  %490 = load i32, ptr %26, align 4, !tbaa !15
  %491 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %490)
          to label %492 unwind label %429

492:                                              ; preds = %489
  br label %493

493:                                              ; preds = %492, %488
  %494 = phi i1 [ false, %488 ], [ %491, %492 ]
  %495 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %484, i32 noundef %485, ptr noundef nonnull align 8 dereferenceable(32) %28, i1 noundef zeroext %494, i1 noundef zeroext false)
          to label %496 unwind label %429

496:                                              ; preds = %493
  %497 = load i32, ptr %24, align 4, !tbaa !15
  %498 = load i32, ptr %25, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %497, i32 noundef %498)
          to label %499 unwind label %429

499:                                              ; preds = %496
  %500 = load i32, ptr %24, align 4, !tbaa !15
  %501 = load i32, ptr %26, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %500, i32 noundef %501)
          to label %502 unwind label %429

502:                                              ; preds = %499
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %2903

503:                                              ; preds = %480, %429
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %2904

504:                                              ; preds = %2
  %505 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 2
  %506 = load i8, ptr %505, align 8, !tbaa !165, !range !147, !noundef !148
  %507 = trunc i8 %506 to i1
  br i1 %507, label %510, label %508

508:                                              ; preds = %504
  %509 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 2
  store i8 1, ptr %509, align 8, !tbaa !165
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %219)
  br label %510

510:                                              ; preds = %508, %504
  %511 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %511)
  br label %2903

512:                                              ; preds = %2
  %513 = load ptr, ptr %5, align 8, !tbaa !5
  %514 = getelementptr inbounds i32, ptr %513, i64 0
  %515 = load i32, ptr %514, align 4, !tbaa !15
  %516 = load ptr, ptr %5, align 8, !tbaa !5
  %517 = getelementptr inbounds i32, ptr %516, i64 1
  %518 = load i32, ptr %517, align 4, !tbaa !15
  %519 = load ptr, ptr %5, align 8, !tbaa !5
  %520 = getelementptr inbounds i32, ptr %519, i64 2
  %521 = load i32, ptr %520, align 4, !tbaa !15
  %522 = load ptr, ptr %5, align 8, !tbaa !5
  %523 = getelementptr inbounds i32, ptr %522, i64 3
  %524 = load i32, ptr %523, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %515, i32 noundef %518, i32 noundef %521, i32 noundef %524, ptr noundef @.str.621)
  br label %2903

525:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %526 = load ptr, ptr %5, align 8, !tbaa !5
  %527 = getelementptr inbounds i32, ptr %526, i64 0
  %528 = load i32, ptr %527, align 4, !tbaa !15
  store i32 %528, ptr %32, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %529 = load ptr, ptr %5, align 8, !tbaa !5
  %530 = getelementptr inbounds i32, ptr %529, i64 1
  %531 = load i32, ptr %530, align 4, !tbaa !15
  store i32 %531, ptr %33, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %532 = load ptr, ptr %5, align 8, !tbaa !5
  %533 = getelementptr inbounds i32, ptr %532, i64 2
  %534 = load i32, ptr %533, align 4, !tbaa !15
  %535 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %534)
  store ptr %535, ptr %34, align 8, !tbaa !5
  %536 = load ptr, ptr %34, align 8, !tbaa !5
  %537 = icmp ne ptr %536, null
  br i1 %537, label %538, label %562

538:                                              ; preds = %525
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %539 = load i32, ptr %32, align 4, !tbaa !15
  %540 = load i32, ptr %33, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #9
  %541 = load ptr, ptr %34, align 8, !tbaa !5
  %542 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %541, i32 0, i32 2
  %543 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %542)
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %543, i1 noundef zeroext true)
  %544 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %539, i32 noundef %540, ptr noundef nonnull align 8 dereferenceable(32) %36, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %545 unwind label %557

545:                                              ; preds = %538
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #9
  store ptr %544, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %546 = load ptr, ptr %34, align 8, !tbaa !5
  %547 = getelementptr inbounds %"struct.spirv_cross::SPIRCombinedImageSampler", ptr %546, i32 0, i32 2
  %548 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %547)
  %549 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %548)
  store ptr %549, ptr %37, align 8, !tbaa !5
  %550 = load ptr, ptr %37, align 8, !tbaa !5
  %551 = icmp ne ptr %550, null
  br i1 %551, label %552, label %561

552:                                              ; preds = %545
  %553 = load ptr, ptr %37, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %553, i32 0, i32 1
  %555 = load ptr, ptr %35, align 8, !tbaa !5
  %556 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %555, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %556, ptr align 8 %554, i64 4, i1 false), !tbaa.struct !166
  br label %561

557:                                              ; preds = %538
  %558 = landingpad { ptr, i32 }
          cleanup
  %559 = extractvalue { ptr, i32 } %558, 0
  store ptr %559, ptr %19, align 8
  %560 = extractvalue { ptr, i32 } %558, 1
  store i32 %560, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %587

561:                                              ; preds = %552, %545
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %586

562:                                              ; preds = %525
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %563 = load i32, ptr %32, align 4, !tbaa !15
  %564 = load i32, ptr %33, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #9
  %565 = load ptr, ptr %5, align 8, !tbaa !5
  %566 = getelementptr inbounds i32, ptr %565, i64 2
  %567 = load i32, ptr %566, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %567, i1 noundef zeroext true)
  %568 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %563, i32 noundef %564, ptr noundef nonnull align 8 dereferenceable(32) %39, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %569 unwind label %581

569:                                              ; preds = %562
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #9
  store ptr %568, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  %570 = load ptr, ptr %5, align 8, !tbaa !5
  %571 = getelementptr inbounds i32, ptr %570, i64 2
  %572 = load i32, ptr %571, align 4, !tbaa !15
  %573 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %572)
  store ptr %573, ptr %40, align 8, !tbaa !5
  %574 = load ptr, ptr %40, align 8, !tbaa !5
  %575 = icmp ne ptr %574, null
  br i1 %575, label %576, label %585

576:                                              ; preds = %569
  %577 = load ptr, ptr %40, align 8, !tbaa !5
  %578 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %577, i32 0, i32 1
  %579 = load ptr, ptr %38, align 8, !tbaa !5
  %580 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %579, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %580, ptr align 8 %578, i64 4, i1 false), !tbaa.struct !166
  br label %585

581:                                              ; preds = %562
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %19, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  br label %587

585:                                              ; preds = %576, %569
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  br label %586

586:                                              ; preds = %585, %561
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %2903

587:                                              ; preds = %581, %557
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %2904

588:                                              ; preds = %2
  %589 = load ptr, ptr %5, align 8, !tbaa !5
  %590 = getelementptr inbounds i32, ptr %589, i64 0
  %591 = load i32, ptr %590, align 4, !tbaa !15
  %592 = load ptr, ptr %5, align 8, !tbaa !5
  %593 = getelementptr inbounds i32, ptr %592, i64 1
  %594 = load i32, ptr %593, align 4, !tbaa !15
  %595 = load ptr, ptr %5, align 8, !tbaa !5
  %596 = getelementptr inbounds i32, ptr %595, i64 2
  %597 = load i32, ptr %596, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %591, i32 noundef %594, i32 noundef %597, ptr noundef @.str.622)
  %598 = load ptr, ptr %5, align 8, !tbaa !5
  %599 = getelementptr inbounds i32, ptr %598, i64 1
  %600 = load i32, ptr %599, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %600)
  br label %2903

601:                                              ; preds = %2
  %602 = load ptr, ptr %5, align 8, !tbaa !5
  %603 = getelementptr inbounds i32, ptr %602, i64 0
  %604 = load i32, ptr %603, align 4, !tbaa !15
  %605 = load ptr, ptr %5, align 8, !tbaa !5
  %606 = getelementptr inbounds i32, ptr %605, i64 1
  %607 = load i32, ptr %606, align 4, !tbaa !15
  %608 = load ptr, ptr %5, align 8, !tbaa !5
  %609 = getelementptr inbounds i32, ptr %608, i64 2
  %610 = load i32, ptr %609, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %604, i32 noundef %607, i32 noundef %610, ptr noundef @.str.623)
  %611 = load ptr, ptr %5, align 8, !tbaa !5
  %612 = getelementptr inbounds i32, ptr %611, i64 1
  %613 = load i32, ptr %612, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %613)
  br label %2903

614:                                              ; preds = %2
  %615 = load ptr, ptr %5, align 8, !tbaa !5
  %616 = getelementptr inbounds i32, ptr %615, i64 0
  %617 = load i32, ptr %616, align 4, !tbaa !15
  %618 = load ptr, ptr %5, align 8, !tbaa !5
  %619 = getelementptr inbounds i32, ptr %618, i64 1
  %620 = load i32, ptr %619, align 4, !tbaa !15
  %621 = load ptr, ptr %5, align 8, !tbaa !5
  %622 = getelementptr inbounds i32, ptr %621, i64 2
  %623 = load i32, ptr %622, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %617, i32 noundef %620, i32 noundef %623, ptr noundef @.str.624)
  %624 = load ptr, ptr %5, align 8, !tbaa !5
  %625 = getelementptr inbounds i32, ptr %624, i64 1
  %626 = load i32, ptr %625, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %626)
  br label %2903

627:                                              ; preds = %2
  %628 = load ptr, ptr %5, align 8, !tbaa !5
  %629 = getelementptr inbounds i32, ptr %628, i64 0
  %630 = load i32, ptr %629, align 4, !tbaa !15
  %631 = load ptr, ptr %5, align 8, !tbaa !5
  %632 = getelementptr inbounds i32, ptr %631, i64 1
  %633 = load i32, ptr %632, align 4, !tbaa !15
  %634 = load ptr, ptr %5, align 8, !tbaa !5
  %635 = getelementptr inbounds i32, ptr %634, i64 2
  %636 = load i32, ptr %635, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %630, i32 noundef %633, i32 noundef %636, ptr noundef @.str.625)
  %637 = load ptr, ptr %5, align 8, !tbaa !5
  %638 = getelementptr inbounds i32, ptr %637, i64 1
  %639 = load i32, ptr %638, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %639)
  br label %2903

640:                                              ; preds = %2
  %641 = load ptr, ptr %5, align 8, !tbaa !5
  %642 = getelementptr inbounds i32, ptr %641, i64 0
  %643 = load i32, ptr %642, align 4, !tbaa !15
  %644 = load ptr, ptr %5, align 8, !tbaa !5
  %645 = getelementptr inbounds i32, ptr %644, i64 1
  %646 = load i32, ptr %645, align 4, !tbaa !15
  %647 = load ptr, ptr %5, align 8, !tbaa !5
  %648 = getelementptr inbounds i32, ptr %647, i64 2
  %649 = load i32, ptr %648, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %643, i32 noundef %646, i32 noundef %649, ptr noundef @.str.626)
  %650 = load ptr, ptr %5, align 8, !tbaa !5
  %651 = getelementptr inbounds i32, ptr %650, i64 1
  %652 = load i32, ptr %651, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %652)
  br label %2903

653:                                              ; preds = %2
  %654 = load ptr, ptr %5, align 8, !tbaa !5
  %655 = getelementptr inbounds i32, ptr %654, i64 0
  %656 = load i32, ptr %655, align 4, !tbaa !15
  %657 = load ptr, ptr %5, align 8, !tbaa !5
  %658 = getelementptr inbounds i32, ptr %657, i64 1
  %659 = load i32, ptr %658, align 4, !tbaa !15
  %660 = load ptr, ptr %5, align 8, !tbaa !5
  %661 = getelementptr inbounds i32, ptr %660, i64 2
  %662 = load i32, ptr %661, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %656, i32 noundef %659, i32 noundef %662, ptr noundef @.str.627)
  %663 = load ptr, ptr %5, align 8, !tbaa !5
  %664 = getelementptr inbounds i32, ptr %663, i64 1
  %665 = load i32, ptr %664, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %665)
  br label %2903

666:                                              ; preds = %2, %2, %2
  %667 = load ptr, ptr %5, align 8, !tbaa !5
  %668 = getelementptr inbounds i32, ptr %667, i64 0
  %669 = load i32, ptr %668, align 4, !tbaa !15
  %670 = load ptr, ptr %5, align 8, !tbaa !5
  %671 = getelementptr inbounds i32, ptr %670, i64 1
  %672 = load i32, ptr %671, align 4, !tbaa !15
  %673 = load ptr, ptr %5, align 8, !tbaa !5
  %674 = getelementptr inbounds i32, ptr %673, i64 2
  %675 = load i32, ptr %674, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %669, i32 noundef %672, i32 noundef %675, ptr noundef @.str.628)
  %676 = load ptr, ptr %5, align 8, !tbaa !5
  %677 = getelementptr inbounds i32, ptr %676, i64 1
  %678 = load i32, ptr %677, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %678)
  br label %2903

679:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %680 = load ptr, ptr %5, align 8, !tbaa !5
  %681 = getelementptr inbounds i32, ptr %680, i64 0
  %682 = load i32, ptr %681, align 4, !tbaa !15
  store i32 %682, ptr %41, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  %683 = load ptr, ptr %5, align 8, !tbaa !5
  %684 = getelementptr inbounds i32, ptr %683, i64 1
  %685 = load i32, ptr %684, align 4, !tbaa !15
  store i32 %685, ptr %42, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %686 = load i32, ptr %41, align 4, !tbaa !15
  %687 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %686)
  store ptr %687, ptr %43, align 8, !tbaa !5
  %688 = load ptr, ptr %43, align 8, !tbaa !5
  %689 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %688, i32 0, i32 4
  %690 = load i32, ptr %689, align 8, !tbaa !167
  %691 = icmp ugt i32 %690, 1
  br i1 %691, label %692, label %698

692:                                              ; preds = %679
  %693 = load i32, ptr %41, align 4, !tbaa !15
  %694 = load i32, ptr %42, align 4, !tbaa !15
  %695 = load ptr, ptr %5, align 8, !tbaa !5
  %696 = getelementptr inbounds i32, ptr %695, i64 2
  %697 = load i32, ptr %696, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL22emit_unrolled_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %693, i32 noundef %694, i32 noundef %697, ptr noundef @.str.629)
  br label %708

698:                                              ; preds = %679
  %699 = load ptr, ptr %5, align 8, !tbaa !5
  %700 = getelementptr inbounds i32, ptr %699, i64 0
  %701 = load i32, ptr %700, align 4, !tbaa !15
  %702 = load ptr, ptr %5, align 8, !tbaa !5
  %703 = getelementptr inbounds i32, ptr %702, i64 1
  %704 = load i32, ptr %703, align 4, !tbaa !15
  %705 = load ptr, ptr %5, align 8, !tbaa !5
  %706 = getelementptr inbounds i32, ptr %705, i64 2
  %707 = load i32, ptr %706, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %701, i32 noundef %704, i32 noundef %707, ptr noundef @.str.629)
  br label %708

708:                                              ; preds = %698, %692
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  br label %2903

709:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  %710 = load ptr, ptr %5, align 8, !tbaa !5
  %711 = getelementptr inbounds i32, ptr %710, i64 0
  %712 = load i32, ptr %711, align 4, !tbaa !15
  store i32 %712, ptr %44, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %713 = load ptr, ptr %5, align 8, !tbaa !5
  %714 = getelementptr inbounds i32, ptr %713, i64 1
  %715 = load i32, ptr %714, align 4, !tbaa !15
  store i32 %715, ptr %45, align 4, !tbaa !15
  %716 = load ptr, ptr %5, align 8, !tbaa !5
  %717 = getelementptr inbounds i32, ptr %716, i64 2
  %718 = load i32, ptr %717, align 4, !tbaa !15
  %719 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %718)
  %720 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %719, i32 0, i32 4
  %721 = load i32, ptr %720, align 8, !tbaa !167
  %722 = icmp ugt i32 %721, 1
  br i1 %722, label %723, label %732

723:                                              ; preds = %709
  %724 = load i32, ptr %44, align 4, !tbaa !15
  %725 = load i32, ptr %45, align 4, !tbaa !15
  %726 = load ptr, ptr %5, align 8, !tbaa !5
  %727 = getelementptr inbounds i32, ptr %726, i64 2
  %728 = load i32, ptr %727, align 4, !tbaa !15
  %729 = load ptr, ptr %5, align 8, !tbaa !5
  %730 = getelementptr inbounds i32, ptr %729, i64 3
  %731 = load i32, ptr %730, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %724, i32 noundef %725, i32 noundef %728, i32 noundef %731, ptr noundef @.str.630, i1 noundef zeroext false, i32 noundef 0)
  br label %748

732:                                              ; preds = %709
  %733 = load ptr, ptr %5, align 8, !tbaa !5
  %734 = getelementptr inbounds i32, ptr %733, i64 0
  %735 = load i32, ptr %734, align 4, !tbaa !15
  %736 = load ptr, ptr %5, align 8, !tbaa !5
  %737 = getelementptr inbounds i32, ptr %736, i64 1
  %738 = load i32, ptr %737, align 4, !tbaa !15
  %739 = load ptr, ptr %5, align 8, !tbaa !5
  %740 = getelementptr inbounds i32, ptr %739, i64 2
  %741 = load i32, ptr %740, align 4, !tbaa !15
  %742 = load ptr, ptr %5, align 8, !tbaa !5
  %743 = getelementptr inbounds i32, ptr %742, i64 3
  %744 = load i32, ptr %743, align 4, !tbaa !15
  %745 = load i32, ptr %8, align 4, !tbaa !16
  %746 = load i32, ptr %6, align 4, !tbaa !13
  %747 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %746)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %735, i32 noundef %738, i32 noundef %741, i32 noundef %744, ptr noundef @.str.630, i32 noundef %745, i1 noundef zeroext %747, i1 noundef zeroext false)
  br label %748

748:                                              ; preds = %732, %723
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  br label %2903

749:                                              ; preds = %2, %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  %750 = load ptr, ptr %5, align 8, !tbaa !5
  %751 = getelementptr inbounds i32, ptr %750, i64 0
  %752 = load i32, ptr %751, align 4, !tbaa !15
  store i32 %752, ptr %46, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %753 = load ptr, ptr %5, align 8, !tbaa !5
  %754 = getelementptr inbounds i32, ptr %753, i64 1
  %755 = load i32, ptr %754, align 4, !tbaa !15
  store i32 %755, ptr %47, align 4, !tbaa !15
  %756 = load ptr, ptr %5, align 8, !tbaa !5
  %757 = getelementptr inbounds i32, ptr %756, i64 2
  %758 = load i32, ptr %757, align 4, !tbaa !15
  %759 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %758)
  %760 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %759, i32 0, i32 4
  %761 = load i32, ptr %760, align 8, !tbaa !167
  %762 = icmp ugt i32 %761, 1
  br i1 %762, label %763, label %772

763:                                              ; preds = %749
  %764 = load i32, ptr %46, align 4, !tbaa !15
  %765 = load i32, ptr %47, align 4, !tbaa !15
  %766 = load ptr, ptr %5, align 8, !tbaa !5
  %767 = getelementptr inbounds i32, ptr %766, i64 2
  %768 = load i32, ptr %767, align 4, !tbaa !15
  %769 = load ptr, ptr %5, align 8, !tbaa !5
  %770 = getelementptr inbounds i32, ptr %769, i64 3
  %771 = load i32, ptr %770, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %764, i32 noundef %765, i32 noundef %768, i32 noundef %771, ptr noundef @.str.630, i1 noundef zeroext false, i32 noundef 0)
  br label %785

772:                                              ; preds = %749
  %773 = load ptr, ptr %5, align 8, !tbaa !5
  %774 = getelementptr inbounds i32, ptr %773, i64 0
  %775 = load i32, ptr %774, align 4, !tbaa !15
  %776 = load ptr, ptr %5, align 8, !tbaa !5
  %777 = getelementptr inbounds i32, ptr %776, i64 1
  %778 = load i32, ptr %777, align 4, !tbaa !15
  %779 = load ptr, ptr %5, align 8, !tbaa !5
  %780 = getelementptr inbounds i32, ptr %779, i64 2
  %781 = load i32, ptr %780, align 4, !tbaa !15
  %782 = load ptr, ptr %5, align 8, !tbaa !5
  %783 = getelementptr inbounds i32, ptr %782, i64 3
  %784 = load i32, ptr %783, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %775, i32 noundef %778, i32 noundef %781, i32 noundef %784, ptr noundef @.str.630)
  br label %785

785:                                              ; preds = %772, %763
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %2903

786:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %787 = load ptr, ptr %5, align 8, !tbaa !5
  %788 = getelementptr inbounds i32, ptr %787, i64 0
  %789 = load i32, ptr %788, align 4, !tbaa !15
  store i32 %789, ptr %48, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %790 = load ptr, ptr %5, align 8, !tbaa !5
  %791 = getelementptr inbounds i32, ptr %790, i64 1
  %792 = load i32, ptr %791, align 4, !tbaa !15
  store i32 %792, ptr %49, align 4, !tbaa !15
  %793 = load ptr, ptr %5, align 8, !tbaa !5
  %794 = getelementptr inbounds i32, ptr %793, i64 2
  %795 = load i32, ptr %794, align 4, !tbaa !15
  %796 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %795)
  %797 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %796, i32 0, i32 4
  %798 = load i32, ptr %797, align 8, !tbaa !167
  %799 = icmp ugt i32 %798, 1
  br i1 %799, label %800, label %809

800:                                              ; preds = %786
  %801 = load i32, ptr %48, align 4, !tbaa !15
  %802 = load i32, ptr %49, align 4, !tbaa !15
  %803 = load ptr, ptr %5, align 8, !tbaa !5
  %804 = getelementptr inbounds i32, ptr %803, i64 2
  %805 = load i32, ptr %804, align 4, !tbaa !15
  %806 = load ptr, ptr %5, align 8, !tbaa !5
  %807 = getelementptr inbounds i32, ptr %806, i64 3
  %808 = load i32, ptr %807, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %801, i32 noundef %802, i32 noundef %805, i32 noundef %808, ptr noundef @.str.631, i1 noundef zeroext false, i32 noundef 0)
  br label %825

809:                                              ; preds = %786
  %810 = load ptr, ptr %5, align 8, !tbaa !5
  %811 = getelementptr inbounds i32, ptr %810, i64 0
  %812 = load i32, ptr %811, align 4, !tbaa !15
  %813 = load ptr, ptr %5, align 8, !tbaa !5
  %814 = getelementptr inbounds i32, ptr %813, i64 1
  %815 = load i32, ptr %814, align 4, !tbaa !15
  %816 = load ptr, ptr %5, align 8, !tbaa !5
  %817 = getelementptr inbounds i32, ptr %816, i64 2
  %818 = load i32, ptr %817, align 4, !tbaa !15
  %819 = load ptr, ptr %5, align 8, !tbaa !5
  %820 = getelementptr inbounds i32, ptr %819, i64 3
  %821 = load i32, ptr %820, align 4, !tbaa !15
  %822 = load i32, ptr %8, align 4, !tbaa !16
  %823 = load i32, ptr %6, align 4, !tbaa !13
  %824 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %823)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %812, i32 noundef %815, i32 noundef %818, i32 noundef %821, ptr noundef @.str.631, i32 noundef %822, i1 noundef zeroext %824, i1 noundef zeroext false)
  br label %825

825:                                              ; preds = %809, %800
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %2903

826:                                              ; preds = %2, %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  %827 = load ptr, ptr %5, align 8, !tbaa !5
  %828 = getelementptr inbounds i32, ptr %827, i64 0
  %829 = load i32, ptr %828, align 4, !tbaa !15
  store i32 %829, ptr %50, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  %830 = load ptr, ptr %5, align 8, !tbaa !5
  %831 = getelementptr inbounds i32, ptr %830, i64 1
  %832 = load i32, ptr %831, align 4, !tbaa !15
  store i32 %832, ptr %51, align 4, !tbaa !15
  %833 = load ptr, ptr %5, align 8, !tbaa !5
  %834 = getelementptr inbounds i32, ptr %833, i64 2
  %835 = load i32, ptr %834, align 4, !tbaa !15
  %836 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %835)
  %837 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %836, i32 0, i32 4
  %838 = load i32, ptr %837, align 8, !tbaa !167
  %839 = icmp ugt i32 %838, 1
  br i1 %839, label %840, label %849

840:                                              ; preds = %826
  %841 = load i32, ptr %50, align 4, !tbaa !15
  %842 = load i32, ptr %51, align 4, !tbaa !15
  %843 = load ptr, ptr %5, align 8, !tbaa !5
  %844 = getelementptr inbounds i32, ptr %843, i64 2
  %845 = load i32, ptr %844, align 4, !tbaa !15
  %846 = load ptr, ptr %5, align 8, !tbaa !5
  %847 = getelementptr inbounds i32, ptr %846, i64 3
  %848 = load i32, ptr %847, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %841, i32 noundef %842, i32 noundef %845, i32 noundef %848, ptr noundef @.str.631, i1 noundef zeroext false, i32 noundef 0)
  br label %862

849:                                              ; preds = %826
  %850 = load ptr, ptr %5, align 8, !tbaa !5
  %851 = getelementptr inbounds i32, ptr %850, i64 0
  %852 = load i32, ptr %851, align 4, !tbaa !15
  %853 = load ptr, ptr %5, align 8, !tbaa !5
  %854 = getelementptr inbounds i32, ptr %853, i64 1
  %855 = load i32, ptr %854, align 4, !tbaa !15
  %856 = load ptr, ptr %5, align 8, !tbaa !5
  %857 = getelementptr inbounds i32, ptr %856, i64 2
  %858 = load i32, ptr %857, align 4, !tbaa !15
  %859 = load ptr, ptr %5, align 8, !tbaa !5
  %860 = getelementptr inbounds i32, ptr %859, i64 3
  %861 = load i32, ptr %860, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %852, i32 noundef %855, i32 noundef %858, i32 noundef %861, ptr noundef @.str.631)
  br label %862

862:                                              ; preds = %849, %840
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  br label %2903

863:                                              ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  %864 = load ptr, ptr %5, align 8, !tbaa !5
  %865 = getelementptr inbounds i32, ptr %864, i64 0
  %866 = load i32, ptr %865, align 4, !tbaa !15
  store i32 %866, ptr %52, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  %867 = load ptr, ptr %5, align 8, !tbaa !5
  %868 = getelementptr inbounds i32, ptr %867, i64 1
  %869 = load i32, ptr %868, align 4, !tbaa !15
  store i32 %869, ptr %53, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  %870 = load i32, ptr %6, align 4, !tbaa !13
  %871 = icmp eq i32 %870, 172
  br i1 %871, label %872, label %874

872:                                              ; preds = %863
  %873 = load i32, ptr %9, align 4, !tbaa !16
  br label %876

874:                                              ; preds = %863
  %875 = load i32, ptr %8, align 4, !tbaa !16
  br label %876

876:                                              ; preds = %874, %872
  %877 = phi i32 [ %873, %872 ], [ %875, %874 ]
  store i32 %877, ptr %54, align 4, !tbaa !16
  %878 = load ptr, ptr %5, align 8, !tbaa !5
  %879 = getelementptr inbounds i32, ptr %878, i64 2
  %880 = load i32, ptr %879, align 4, !tbaa !15
  %881 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %880)
  %882 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %881, i32 0, i32 4
  %883 = load i32, ptr %882, align 8, !tbaa !167
  %884 = icmp ugt i32 %883, 1
  br i1 %884, label %885, label %895

885:                                              ; preds = %876
  %886 = load i32, ptr %52, align 4, !tbaa !15
  %887 = load i32, ptr %53, align 4, !tbaa !15
  %888 = load ptr, ptr %5, align 8, !tbaa !5
  %889 = getelementptr inbounds i32, ptr %888, i64 2
  %890 = load i32, ptr %889, align 4, !tbaa !15
  %891 = load ptr, ptr %5, align 8, !tbaa !5
  %892 = getelementptr inbounds i32, ptr %891, i64 3
  %893 = load i32, ptr %892, align 4, !tbaa !15
  %894 = load i32, ptr %54, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %886, i32 noundef %887, i32 noundef %890, i32 noundef %893, ptr noundef @.str.7, i1 noundef zeroext false, i32 noundef %894)
  br label %911

895:                                              ; preds = %876
  %896 = load ptr, ptr %5, align 8, !tbaa !5
  %897 = getelementptr inbounds i32, ptr %896, i64 0
  %898 = load i32, ptr %897, align 4, !tbaa !15
  %899 = load ptr, ptr %5, align 8, !tbaa !5
  %900 = getelementptr inbounds i32, ptr %899, i64 1
  %901 = load i32, ptr %900, align 4, !tbaa !15
  %902 = load ptr, ptr %5, align 8, !tbaa !5
  %903 = getelementptr inbounds i32, ptr %902, i64 2
  %904 = load i32, ptr %903, align 4, !tbaa !15
  %905 = load ptr, ptr %5, align 8, !tbaa !5
  %906 = getelementptr inbounds i32, ptr %905, i64 3
  %907 = load i32, ptr %906, align 4, !tbaa !15
  %908 = load i32, ptr %54, align 4, !tbaa !16
  %909 = load i32, ptr %6, align 4, !tbaa !13
  %910 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %909)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %898, i32 noundef %901, i32 noundef %904, i32 noundef %907, ptr noundef @.str.7, i32 noundef %908, i1 noundef zeroext %910, i1 noundef zeroext false)
  br label %911

911:                                              ; preds = %895, %885
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  br label %2903

912:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %913 = load ptr, ptr %5, align 8, !tbaa !5
  %914 = getelementptr inbounds i32, ptr %913, i64 0
  %915 = load i32, ptr %914, align 4, !tbaa !15
  store i32 %915, ptr %55, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  %916 = load ptr, ptr %5, align 8, !tbaa !5
  %917 = getelementptr inbounds i32, ptr %916, i64 1
  %918 = load i32, ptr %917, align 4, !tbaa !15
  store i32 %918, ptr %56, align 4, !tbaa !15
  %919 = load ptr, ptr %5, align 8, !tbaa !5
  %920 = getelementptr inbounds i32, ptr %919, i64 2
  %921 = load i32, ptr %920, align 4, !tbaa !15
  %922 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %921)
  %923 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %922, i32 0, i32 4
  %924 = load i32, ptr %923, align 8, !tbaa !167
  %925 = icmp ugt i32 %924, 1
  br i1 %925, label %926, label %935

926:                                              ; preds = %912
  %927 = load i32, ptr %55, align 4, !tbaa !15
  %928 = load i32, ptr %56, align 4, !tbaa !15
  %929 = load ptr, ptr %5, align 8, !tbaa !5
  %930 = getelementptr inbounds i32, ptr %929, i64 2
  %931 = load i32, ptr %930, align 4, !tbaa !15
  %932 = load ptr, ptr %5, align 8, !tbaa !5
  %933 = getelementptr inbounds i32, ptr %932, i64 3
  %934 = load i32, ptr %933, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %927, i32 noundef %928, i32 noundef %931, i32 noundef %934, ptr noundef @.str.7, i1 noundef zeroext false, i32 noundef 0)
  br label %948

935:                                              ; preds = %912
  %936 = load ptr, ptr %5, align 8, !tbaa !5
  %937 = getelementptr inbounds i32, ptr %936, i64 0
  %938 = load i32, ptr %937, align 4, !tbaa !15
  %939 = load ptr, ptr %5, align 8, !tbaa !5
  %940 = getelementptr inbounds i32, ptr %939, i64 1
  %941 = load i32, ptr %940, align 4, !tbaa !15
  %942 = load ptr, ptr %5, align 8, !tbaa !5
  %943 = getelementptr inbounds i32, ptr %942, i64 2
  %944 = load i32, ptr %943, align 4, !tbaa !15
  %945 = load ptr, ptr %5, align 8, !tbaa !5
  %946 = getelementptr inbounds i32, ptr %945, i64 3
  %947 = load i32, ptr %946, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %938, i32 noundef %941, i32 noundef %944, i32 noundef %947, ptr noundef @.str.7)
  br label %948

948:                                              ; preds = %935, %926
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %2903

949:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  %950 = load ptr, ptr %5, align 8, !tbaa !5
  %951 = getelementptr inbounds i32, ptr %950, i64 0
  %952 = load i32, ptr %951, align 4, !tbaa !15
  store i32 %952, ptr %57, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #9
  %953 = load ptr, ptr %5, align 8, !tbaa !5
  %954 = getelementptr inbounds i32, ptr %953, i64 1
  %955 = load i32, ptr %954, align 4, !tbaa !15
  store i32 %955, ptr %58, align 4, !tbaa !15
  %956 = load ptr, ptr %5, align 8, !tbaa !5
  %957 = getelementptr inbounds i32, ptr %956, i64 2
  %958 = load i32, ptr %957, align 4, !tbaa !15
  %959 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %958)
  %960 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %959, i32 0, i32 4
  %961 = load i32, ptr %960, align 8, !tbaa !167
  %962 = icmp ugt i32 %961, 1
  br i1 %962, label %963, label %972

963:                                              ; preds = %949
  %964 = load i32, ptr %57, align 4, !tbaa !15
  %965 = load i32, ptr %58, align 4, !tbaa !15
  %966 = load ptr, ptr %5, align 8, !tbaa !5
  %967 = getelementptr inbounds i32, ptr %966, i64 2
  %968 = load i32, ptr %967, align 4, !tbaa !15
  %969 = load ptr, ptr %5, align 8, !tbaa !5
  %970 = getelementptr inbounds i32, ptr %969, i64 3
  %971 = load i32, ptr %970, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %964, i32 noundef %965, i32 noundef %968, i32 noundef %971, ptr noundef @.str.632, i1 noundef zeroext true, i32 noundef 0)
  br label %974

972:                                              ; preds = %949
  %973 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %973)
  br label %974

974:                                              ; preds = %972, %963
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  br label %2903

975:                                              ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  %976 = load ptr, ptr %5, align 8, !tbaa !5
  %977 = getelementptr inbounds i32, ptr %976, i64 0
  %978 = load i32, ptr %977, align 4, !tbaa !15
  store i32 %978, ptr %59, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #9
  %979 = load ptr, ptr %5, align 8, !tbaa !5
  %980 = getelementptr inbounds i32, ptr %979, i64 1
  %981 = load i32, ptr %980, align 4, !tbaa !15
  store i32 %981, ptr %60, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  %982 = load i32, ptr %6, align 4, !tbaa !13
  %983 = icmp eq i32 %982, 174
  br i1 %983, label %984, label %986

984:                                              ; preds = %975
  %985 = load i32, ptr %9, align 4, !tbaa !16
  br label %988

986:                                              ; preds = %975
  %987 = load i32, ptr %8, align 4, !tbaa !16
  br label %988

988:                                              ; preds = %986, %984
  %989 = phi i32 [ %985, %984 ], [ %987, %986 ]
  store i32 %989, ptr %61, align 4, !tbaa !16
  %990 = load ptr, ptr %5, align 8, !tbaa !5
  %991 = getelementptr inbounds i32, ptr %990, i64 2
  %992 = load i32, ptr %991, align 4, !tbaa !15
  %993 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %992)
  %994 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %993, i32 0, i32 4
  %995 = load i32, ptr %994, align 8, !tbaa !167
  %996 = icmp ugt i32 %995, 1
  br i1 %996, label %997, label %1007

997:                                              ; preds = %988
  %998 = load i32, ptr %59, align 4, !tbaa !15
  %999 = load i32, ptr %60, align 4, !tbaa !15
  %1000 = load ptr, ptr %5, align 8, !tbaa !5
  %1001 = getelementptr inbounds i32, ptr %1000, i64 2
  %1002 = load i32, ptr %1001, align 4, !tbaa !15
  %1003 = load ptr, ptr %5, align 8, !tbaa !5
  %1004 = getelementptr inbounds i32, ptr %1003, i64 3
  %1005 = load i32, ptr %1004, align 4, !tbaa !15
  %1006 = load i32, ptr %61, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %998, i32 noundef %999, i32 noundef %1002, i32 noundef %1005, ptr noundef @.str.633, i1 noundef zeroext false, i32 noundef %1006)
  br label %1023

1007:                                             ; preds = %988
  %1008 = load ptr, ptr %5, align 8, !tbaa !5
  %1009 = getelementptr inbounds i32, ptr %1008, i64 0
  %1010 = load i32, ptr %1009, align 4, !tbaa !15
  %1011 = load ptr, ptr %5, align 8, !tbaa !5
  %1012 = getelementptr inbounds i32, ptr %1011, i64 1
  %1013 = load i32, ptr %1012, align 4, !tbaa !15
  %1014 = load ptr, ptr %5, align 8, !tbaa !5
  %1015 = getelementptr inbounds i32, ptr %1014, i64 2
  %1016 = load i32, ptr %1015, align 4, !tbaa !15
  %1017 = load ptr, ptr %5, align 8, !tbaa !5
  %1018 = getelementptr inbounds i32, ptr %1017, i64 3
  %1019 = load i32, ptr %1018, align 4, !tbaa !15
  %1020 = load i32, ptr %61, align 4, !tbaa !16
  %1021 = load i32, ptr %6, align 4, !tbaa !13
  %1022 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %1021)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1010, i32 noundef %1013, i32 noundef %1016, i32 noundef %1019, ptr noundef @.str.633, i32 noundef %1020, i1 noundef zeroext %1022, i1 noundef zeroext false)
  br label %1023

1023:                                             ; preds = %1007, %997
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  br label %2903

1024:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #9
  %1025 = load ptr, ptr %5, align 8, !tbaa !5
  %1026 = getelementptr inbounds i32, ptr %1025, i64 0
  %1027 = load i32, ptr %1026, align 4, !tbaa !15
  store i32 %1027, ptr %62, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #9
  %1028 = load ptr, ptr %5, align 8, !tbaa !5
  %1029 = getelementptr inbounds i32, ptr %1028, i64 1
  %1030 = load i32, ptr %1029, align 4, !tbaa !15
  store i32 %1030, ptr %63, align 4, !tbaa !15
  %1031 = load ptr, ptr %5, align 8, !tbaa !5
  %1032 = getelementptr inbounds i32, ptr %1031, i64 2
  %1033 = load i32, ptr %1032, align 4, !tbaa !15
  %1034 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1033)
  %1035 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1034, i32 0, i32 4
  %1036 = load i32, ptr %1035, align 8, !tbaa !167
  %1037 = icmp ugt i32 %1036, 1
  br i1 %1037, label %1038, label %1047

1038:                                             ; preds = %1024
  %1039 = load i32, ptr %62, align 4, !tbaa !15
  %1040 = load i32, ptr %63, align 4, !tbaa !15
  %1041 = load ptr, ptr %5, align 8, !tbaa !5
  %1042 = getelementptr inbounds i32, ptr %1041, i64 2
  %1043 = load i32, ptr %1042, align 4, !tbaa !15
  %1044 = load ptr, ptr %5, align 8, !tbaa !5
  %1045 = getelementptr inbounds i32, ptr %1044, i64 3
  %1046 = load i32, ptr %1045, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1039, i32 noundef %1040, i32 noundef %1043, i32 noundef %1046, ptr noundef @.str.633, i1 noundef zeroext false, i32 noundef 0)
  br label %1060

1047:                                             ; preds = %1024
  %1048 = load ptr, ptr %5, align 8, !tbaa !5
  %1049 = getelementptr inbounds i32, ptr %1048, i64 0
  %1050 = load i32, ptr %1049, align 4, !tbaa !15
  %1051 = load ptr, ptr %5, align 8, !tbaa !5
  %1052 = getelementptr inbounds i32, ptr %1051, i64 1
  %1053 = load i32, ptr %1052, align 4, !tbaa !15
  %1054 = load ptr, ptr %5, align 8, !tbaa !5
  %1055 = getelementptr inbounds i32, ptr %1054, i64 2
  %1056 = load i32, ptr %1055, align 4, !tbaa !15
  %1057 = load ptr, ptr %5, align 8, !tbaa !5
  %1058 = getelementptr inbounds i32, ptr %1057, i64 3
  %1059 = load i32, ptr %1058, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1050, i32 noundef %1053, i32 noundef %1056, i32 noundef %1059, ptr noundef @.str.633)
  br label %1060

1060:                                             ; preds = %1047, %1038
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #9
  br label %2903

1061:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #9
  %1062 = load ptr, ptr %5, align 8, !tbaa !5
  %1063 = getelementptr inbounds i32, ptr %1062, i64 0
  %1064 = load i32, ptr %1063, align 4, !tbaa !15
  store i32 %1064, ptr %64, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #9
  %1065 = load ptr, ptr %5, align 8, !tbaa !5
  %1066 = getelementptr inbounds i32, ptr %1065, i64 1
  %1067 = load i32, ptr %1066, align 4, !tbaa !15
  store i32 %1067, ptr %65, align 4, !tbaa !15
  %1068 = load ptr, ptr %5, align 8, !tbaa !5
  %1069 = getelementptr inbounds i32, ptr %1068, i64 2
  %1070 = load i32, ptr %1069, align 4, !tbaa !15
  %1071 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1070)
  %1072 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1071, i32 0, i32 4
  %1073 = load i32, ptr %1072, align 8, !tbaa !167
  %1074 = icmp ugt i32 %1073, 1
  br i1 %1074, label %1075, label %1084

1075:                                             ; preds = %1061
  %1076 = load i32, ptr %64, align 4, !tbaa !15
  %1077 = load i32, ptr %65, align 4, !tbaa !15
  %1078 = load ptr, ptr %5, align 8, !tbaa !5
  %1079 = getelementptr inbounds i32, ptr %1078, i64 2
  %1080 = load i32, ptr %1079, align 4, !tbaa !15
  %1081 = load ptr, ptr %5, align 8, !tbaa !5
  %1082 = getelementptr inbounds i32, ptr %1081, i64 3
  %1083 = load i32, ptr %1082, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1076, i32 noundef %1077, i32 noundef %1080, i32 noundef %1083, ptr noundef @.str.17, i1 noundef zeroext true, i32 noundef 0)
  br label %1086

1084:                                             ; preds = %1061
  %1085 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %1085)
  br label %1086

1086:                                             ; preds = %1084, %1075
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #9
  br label %2903

1087:                                             ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #9
  %1088 = load ptr, ptr %5, align 8, !tbaa !5
  %1089 = getelementptr inbounds i32, ptr %1088, i64 0
  %1090 = load i32, ptr %1089, align 4, !tbaa !15
  store i32 %1090, ptr %66, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #9
  %1091 = load ptr, ptr %5, align 8, !tbaa !5
  %1092 = getelementptr inbounds i32, ptr %1091, i64 1
  %1093 = load i32, ptr %1092, align 4, !tbaa !15
  store i32 %1093, ptr %67, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #9
  %1094 = load i32, ptr %6, align 4, !tbaa !13
  %1095 = icmp eq i32 %1094, 176
  br i1 %1095, label %1096, label %1098

1096:                                             ; preds = %1087
  %1097 = load i32, ptr %9, align 4, !tbaa !16
  br label %1100

1098:                                             ; preds = %1087
  %1099 = load i32, ptr %8, align 4, !tbaa !16
  br label %1100

1100:                                             ; preds = %1098, %1096
  %1101 = phi i32 [ %1097, %1096 ], [ %1099, %1098 ]
  store i32 %1101, ptr %68, align 4, !tbaa !16
  %1102 = load ptr, ptr %5, align 8, !tbaa !5
  %1103 = getelementptr inbounds i32, ptr %1102, i64 2
  %1104 = load i32, ptr %1103, align 4, !tbaa !15
  %1105 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1104)
  %1106 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1105, i32 0, i32 4
  %1107 = load i32, ptr %1106, align 8, !tbaa !167
  %1108 = icmp ugt i32 %1107, 1
  br i1 %1108, label %1109, label %1119

1109:                                             ; preds = %1100
  %1110 = load i32, ptr %66, align 4, !tbaa !15
  %1111 = load i32, ptr %67, align 4, !tbaa !15
  %1112 = load ptr, ptr %5, align 8, !tbaa !5
  %1113 = getelementptr inbounds i32, ptr %1112, i64 2
  %1114 = load i32, ptr %1113, align 4, !tbaa !15
  %1115 = load ptr, ptr %5, align 8, !tbaa !5
  %1116 = getelementptr inbounds i32, ptr %1115, i64 3
  %1117 = load i32, ptr %1116, align 4, !tbaa !15
  %1118 = load i32, ptr %68, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1110, i32 noundef %1111, i32 noundef %1114, i32 noundef %1117, ptr noundef @.str.17, i1 noundef zeroext false, i32 noundef %1118)
  br label %1135

1119:                                             ; preds = %1100
  %1120 = load ptr, ptr %5, align 8, !tbaa !5
  %1121 = getelementptr inbounds i32, ptr %1120, i64 0
  %1122 = load i32, ptr %1121, align 4, !tbaa !15
  %1123 = load ptr, ptr %5, align 8, !tbaa !5
  %1124 = getelementptr inbounds i32, ptr %1123, i64 1
  %1125 = load i32, ptr %1124, align 4, !tbaa !15
  %1126 = load ptr, ptr %5, align 8, !tbaa !5
  %1127 = getelementptr inbounds i32, ptr %1126, i64 2
  %1128 = load i32, ptr %1127, align 4, !tbaa !15
  %1129 = load ptr, ptr %5, align 8, !tbaa !5
  %1130 = getelementptr inbounds i32, ptr %1129, i64 3
  %1131 = load i32, ptr %1130, align 4, !tbaa !15
  %1132 = load i32, ptr %68, align 4, !tbaa !16
  %1133 = load i32, ptr %6, align 4, !tbaa !13
  %1134 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %1133)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1122, i32 noundef %1125, i32 noundef %1128, i32 noundef %1131, ptr noundef @.str.17, i32 noundef %1132, i1 noundef zeroext %1134, i1 noundef zeroext false)
  br label %1135

1135:                                             ; preds = %1119, %1109
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #9
  br label %2903

1136:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #9
  %1137 = load ptr, ptr %5, align 8, !tbaa !5
  %1138 = getelementptr inbounds i32, ptr %1137, i64 0
  %1139 = load i32, ptr %1138, align 4, !tbaa !15
  store i32 %1139, ptr %69, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #9
  %1140 = load ptr, ptr %5, align 8, !tbaa !5
  %1141 = getelementptr inbounds i32, ptr %1140, i64 1
  %1142 = load i32, ptr %1141, align 4, !tbaa !15
  store i32 %1142, ptr %70, align 4, !tbaa !15
  %1143 = load ptr, ptr %5, align 8, !tbaa !5
  %1144 = getelementptr inbounds i32, ptr %1143, i64 2
  %1145 = load i32, ptr %1144, align 4, !tbaa !15
  %1146 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1145)
  %1147 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1146, i32 0, i32 4
  %1148 = load i32, ptr %1147, align 8, !tbaa !167
  %1149 = icmp ugt i32 %1148, 1
  br i1 %1149, label %1150, label %1159

1150:                                             ; preds = %1136
  %1151 = load i32, ptr %69, align 4, !tbaa !15
  %1152 = load i32, ptr %70, align 4, !tbaa !15
  %1153 = load ptr, ptr %5, align 8, !tbaa !5
  %1154 = getelementptr inbounds i32, ptr %1153, i64 2
  %1155 = load i32, ptr %1154, align 4, !tbaa !15
  %1156 = load ptr, ptr %5, align 8, !tbaa !5
  %1157 = getelementptr inbounds i32, ptr %1156, i64 3
  %1158 = load i32, ptr %1157, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1151, i32 noundef %1152, i32 noundef %1155, i32 noundef %1158, ptr noundef @.str.17, i1 noundef zeroext false, i32 noundef 0)
  br label %1172

1159:                                             ; preds = %1136
  %1160 = load ptr, ptr %5, align 8, !tbaa !5
  %1161 = getelementptr inbounds i32, ptr %1160, i64 0
  %1162 = load i32, ptr %1161, align 4, !tbaa !15
  %1163 = load ptr, ptr %5, align 8, !tbaa !5
  %1164 = getelementptr inbounds i32, ptr %1163, i64 1
  %1165 = load i32, ptr %1164, align 4, !tbaa !15
  %1166 = load ptr, ptr %5, align 8, !tbaa !5
  %1167 = getelementptr inbounds i32, ptr %1166, i64 2
  %1168 = load i32, ptr %1167, align 4, !tbaa !15
  %1169 = load ptr, ptr %5, align 8, !tbaa !5
  %1170 = getelementptr inbounds i32, ptr %1169, i64 3
  %1171 = load i32, ptr %1170, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1162, i32 noundef %1165, i32 noundef %1168, i32 noundef %1171, ptr noundef @.str.17)
  br label %1172

1172:                                             ; preds = %1159, %1150
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  br label %2903

1173:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #9
  %1174 = load ptr, ptr %5, align 8, !tbaa !5
  %1175 = getelementptr inbounds i32, ptr %1174, i64 0
  %1176 = load i32, ptr %1175, align 4, !tbaa !15
  store i32 %1176, ptr %71, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #9
  %1177 = load ptr, ptr %5, align 8, !tbaa !5
  %1178 = getelementptr inbounds i32, ptr %1177, i64 1
  %1179 = load i32, ptr %1178, align 4, !tbaa !15
  store i32 %1179, ptr %72, align 4, !tbaa !15
  %1180 = load ptr, ptr %5, align 8, !tbaa !5
  %1181 = getelementptr inbounds i32, ptr %1180, i64 2
  %1182 = load i32, ptr %1181, align 4, !tbaa !15
  %1183 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1182)
  %1184 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1183, i32 0, i32 4
  %1185 = load i32, ptr %1184, align 8, !tbaa !167
  %1186 = icmp ugt i32 %1185, 1
  br i1 %1186, label %1187, label %1196

1187:                                             ; preds = %1173
  %1188 = load i32, ptr %71, align 4, !tbaa !15
  %1189 = load i32, ptr %72, align 4, !tbaa !15
  %1190 = load ptr, ptr %5, align 8, !tbaa !5
  %1191 = getelementptr inbounds i32, ptr %1190, i64 2
  %1192 = load i32, ptr %1191, align 4, !tbaa !15
  %1193 = load ptr, ptr %5, align 8, !tbaa !5
  %1194 = getelementptr inbounds i32, ptr %1193, i64 3
  %1195 = load i32, ptr %1194, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1188, i32 noundef %1189, i32 noundef %1192, i32 noundef %1195, ptr noundef @.str.633, i1 noundef zeroext true, i32 noundef 0)
  br label %1198

1196:                                             ; preds = %1173
  %1197 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %1197)
  br label %1198

1198:                                             ; preds = %1196, %1187
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  br label %2903

1199:                                             ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  %1200 = load ptr, ptr %5, align 8, !tbaa !5
  %1201 = getelementptr inbounds i32, ptr %1200, i64 0
  %1202 = load i32, ptr %1201, align 4, !tbaa !15
  store i32 %1202, ptr %73, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #9
  %1203 = load ptr, ptr %5, align 8, !tbaa !5
  %1204 = getelementptr inbounds i32, ptr %1203, i64 1
  %1205 = load i32, ptr %1204, align 4, !tbaa !15
  store i32 %1205, ptr %74, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  %1206 = load i32, ptr %6, align 4, !tbaa !13
  %1207 = icmp eq i32 %1206, 178
  br i1 %1207, label %1208, label %1210

1208:                                             ; preds = %1199
  %1209 = load i32, ptr %9, align 4, !tbaa !16
  br label %1212

1210:                                             ; preds = %1199
  %1211 = load i32, ptr %8, align 4, !tbaa !16
  br label %1212

1212:                                             ; preds = %1210, %1208
  %1213 = phi i32 [ %1209, %1208 ], [ %1211, %1210 ]
  store i32 %1213, ptr %75, align 4, !tbaa !16
  %1214 = load ptr, ptr %5, align 8, !tbaa !5
  %1215 = getelementptr inbounds i32, ptr %1214, i64 2
  %1216 = load i32, ptr %1215, align 4, !tbaa !15
  %1217 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1216)
  %1218 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1217, i32 0, i32 4
  %1219 = load i32, ptr %1218, align 8, !tbaa !167
  %1220 = icmp ugt i32 %1219, 1
  br i1 %1220, label %1221, label %1231

1221:                                             ; preds = %1212
  %1222 = load i32, ptr %73, align 4, !tbaa !15
  %1223 = load i32, ptr %74, align 4, !tbaa !15
  %1224 = load ptr, ptr %5, align 8, !tbaa !5
  %1225 = getelementptr inbounds i32, ptr %1224, i64 2
  %1226 = load i32, ptr %1225, align 4, !tbaa !15
  %1227 = load ptr, ptr %5, align 8, !tbaa !5
  %1228 = getelementptr inbounds i32, ptr %1227, i64 3
  %1229 = load i32, ptr %1228, align 4, !tbaa !15
  %1230 = load i32, ptr %75, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1222, i32 noundef %1223, i32 noundef %1226, i32 noundef %1229, ptr noundef @.str.632, i1 noundef zeroext false, i32 noundef %1230)
  br label %1247

1231:                                             ; preds = %1212
  %1232 = load ptr, ptr %5, align 8, !tbaa !5
  %1233 = getelementptr inbounds i32, ptr %1232, i64 0
  %1234 = load i32, ptr %1233, align 4, !tbaa !15
  %1235 = load ptr, ptr %5, align 8, !tbaa !5
  %1236 = getelementptr inbounds i32, ptr %1235, i64 1
  %1237 = load i32, ptr %1236, align 4, !tbaa !15
  %1238 = load ptr, ptr %5, align 8, !tbaa !5
  %1239 = getelementptr inbounds i32, ptr %1238, i64 2
  %1240 = load i32, ptr %1239, align 4, !tbaa !15
  %1241 = load ptr, ptr %5, align 8, !tbaa !5
  %1242 = getelementptr inbounds i32, ptr %1241, i64 3
  %1243 = load i32, ptr %1242, align 4, !tbaa !15
  %1244 = load i32, ptr %75, align 4, !tbaa !16
  %1245 = load i32, ptr %6, align 4, !tbaa !13
  %1246 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %1245)
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1234, i32 noundef %1237, i32 noundef %1240, i32 noundef %1243, ptr noundef @.str.632, i32 noundef %1244, i1 noundef zeroext %1246, i1 noundef zeroext false)
  br label %1247

1247:                                             ; preds = %1231, %1221
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  br label %2903

1248:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #9
  %1249 = load ptr, ptr %5, align 8, !tbaa !5
  %1250 = getelementptr inbounds i32, ptr %1249, i64 0
  %1251 = load i32, ptr %1250, align 4, !tbaa !15
  store i32 %1251, ptr %76, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #9
  %1252 = load ptr, ptr %5, align 8, !tbaa !5
  %1253 = getelementptr inbounds i32, ptr %1252, i64 1
  %1254 = load i32, ptr %1253, align 4, !tbaa !15
  store i32 %1254, ptr %77, align 4, !tbaa !15
  %1255 = load ptr, ptr %5, align 8, !tbaa !5
  %1256 = getelementptr inbounds i32, ptr %1255, i64 2
  %1257 = load i32, ptr %1256, align 4, !tbaa !15
  %1258 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1257)
  %1259 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1258, i32 0, i32 4
  %1260 = load i32, ptr %1259, align 8, !tbaa !167
  %1261 = icmp ugt i32 %1260, 1
  br i1 %1261, label %1262, label %1271

1262:                                             ; preds = %1248
  %1263 = load i32, ptr %76, align 4, !tbaa !15
  %1264 = load i32, ptr %77, align 4, !tbaa !15
  %1265 = load ptr, ptr %5, align 8, !tbaa !5
  %1266 = getelementptr inbounds i32, ptr %1265, i64 2
  %1267 = load i32, ptr %1266, align 4, !tbaa !15
  %1268 = load ptr, ptr %5, align 8, !tbaa !5
  %1269 = getelementptr inbounds i32, ptr %1268, i64 3
  %1270 = load i32, ptr %1269, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1263, i32 noundef %1264, i32 noundef %1267, i32 noundef %1270, ptr noundef @.str.632, i1 noundef zeroext false, i32 noundef 0)
  br label %1284

1271:                                             ; preds = %1248
  %1272 = load ptr, ptr %5, align 8, !tbaa !5
  %1273 = getelementptr inbounds i32, ptr %1272, i64 0
  %1274 = load i32, ptr %1273, align 4, !tbaa !15
  %1275 = load ptr, ptr %5, align 8, !tbaa !5
  %1276 = getelementptr inbounds i32, ptr %1275, i64 1
  %1277 = load i32, ptr %1276, align 4, !tbaa !15
  %1278 = load ptr, ptr %5, align 8, !tbaa !5
  %1279 = getelementptr inbounds i32, ptr %1278, i64 2
  %1280 = load i32, ptr %1279, align 4, !tbaa !15
  %1281 = load ptr, ptr %5, align 8, !tbaa !5
  %1282 = getelementptr inbounds i32, ptr %1281, i64 3
  %1283 = load i32, ptr %1282, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1274, i32 noundef %1277, i32 noundef %1280, i32 noundef %1283, ptr noundef @.str.632)
  br label %1284

1284:                                             ; preds = %1271, %1262
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #9
  br label %2903

1285:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  %1286 = load ptr, ptr %5, align 8, !tbaa !5
  %1287 = getelementptr inbounds i32, ptr %1286, i64 0
  %1288 = load i32, ptr %1287, align 4, !tbaa !15
  store i32 %1288, ptr %78, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #9
  %1289 = load ptr, ptr %5, align 8, !tbaa !5
  %1290 = getelementptr inbounds i32, ptr %1289, i64 1
  %1291 = load i32, ptr %1290, align 4, !tbaa !15
  store i32 %1291, ptr %79, align 4, !tbaa !15
  %1292 = load ptr, ptr %5, align 8, !tbaa !5
  %1293 = getelementptr inbounds i32, ptr %1292, i64 2
  %1294 = load i32, ptr %1293, align 4, !tbaa !15
  %1295 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1294)
  %1296 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1295, i32 0, i32 4
  %1297 = load i32, ptr %1296, align 8, !tbaa !167
  %1298 = icmp ugt i32 %1297, 1
  br i1 %1298, label %1299, label %1308

1299:                                             ; preds = %1285
  %1300 = load i32, ptr %78, align 4, !tbaa !15
  %1301 = load i32, ptr %79, align 4, !tbaa !15
  %1302 = load ptr, ptr %5, align 8, !tbaa !5
  %1303 = getelementptr inbounds i32, ptr %1302, i64 2
  %1304 = load i32, ptr %1303, align 4, !tbaa !15
  %1305 = load ptr, ptr %5, align 8, !tbaa !5
  %1306 = getelementptr inbounds i32, ptr %1305, i64 3
  %1307 = load i32, ptr %1306, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1300, i32 noundef %1301, i32 noundef %1304, i32 noundef %1307, ptr noundef @.str.7, i1 noundef zeroext true, i32 noundef 0)
  br label %1310

1308:                                             ; preds = %1285
  %1309 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %1309)
  br label %1310

1310:                                             ; preds = %1308, %1299
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  br label %2903

1311:                                             ; preds = %2
  %1312 = load ptr, ptr %4, align 8, !tbaa !5
  %1313 = load ptr, ptr %219, align 8, !tbaa !168
  %1314 = getelementptr inbounds ptr, ptr %1313, i64 16
  %1315 = load ptr, ptr %1314, align 8
  call void %1315(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef nonnull align 4 dereferenceable(12) %1312, i1 noundef zeroext false)
  br label %2903

1316:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #9
  %1317 = load ptr, ptr %5, align 8, !tbaa !5
  %1318 = getelementptr inbounds i32, ptr %1317, i64 0
  %1319 = load i32, ptr %1318, align 4, !tbaa !15
  store i32 %1319, ptr %80, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #9
  %1320 = load ptr, ptr %5, align 8, !tbaa !5
  %1321 = getelementptr inbounds i32, ptr %1320, i64 1
  %1322 = load i32, ptr %1321, align 4, !tbaa !15
  store i32 %1322, ptr %81, align 4, !tbaa !15
  %1323 = load ptr, ptr %5, align 8, !tbaa !5
  %1324 = getelementptr inbounds i32, ptr %1323, i64 2
  %1325 = load i32, ptr %1324, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerHLSL29require_texture_query_variantEj(ptr noundef nonnull align 8 dereferenceable(10528) %219, i32 noundef %1325)
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #9
  %1326 = load i32, ptr %81, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %84, i32 noundef %1326)
  %1327 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %84, i32 0, i32 0
  %1328 = load i32, ptr %1327, align 4
  %1329 = load ptr, ptr %219, align 8, !tbaa !168
  %1330 = getelementptr inbounds ptr, ptr %1329, i64 3
  %1331 = load ptr, ptr %1330, align 8
  call void %1331(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 %1328)
  invoke void @_ZN11spirv_cross4joinIJKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(32) %83, ptr noundef nonnull align 1 dereferenceable(17) @.str.634)
          to label %1332 unwind label %1355

1332:                                             ; preds = %1316
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(6) @.str.635, ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1333 unwind label %1359

1333:                                             ; preds = %1332
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #9
  %1334 = load ptr, ptr %5, align 8, !tbaa !5
  %1335 = getelementptr inbounds i32, ptr %1334, i64 2
  %1336 = load i32, ptr %1335, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1336)
          to label %1337 unwind label %1363

1337:                                             ; preds = %1333
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #9
  %1338 = load ptr, ptr %5, align 8, !tbaa !5
  %1339 = getelementptr inbounds i32, ptr %1338, i64 3
  %1340 = load i32, ptr %1339, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef 8, i32 noundef %1340)
          to label %1341 unwind label %1367

1341:                                             ; preds = %1337
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 1 dereferenceable(16) @.str.636, ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %1342 unwind label %1371

1342:                                             ; preds = %1341
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #9
  %1343 = load ptr, ptr %5, align 8, !tbaa !5
  %1344 = getelementptr inbounds i32, ptr %1343, i64 0
  %1345 = load i32, ptr %1344, align 4, !tbaa !15
  %1346 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1345)
          to label %1347 unwind label %1377

1347:                                             ; preds = %1342
  store ptr %1346, ptr %88, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #9
  %1348 = load ptr, ptr %88, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(336) %1348, i32 noundef 8, ptr noundef nonnull align 8 dereferenceable(32) %85)
          to label %1349 unwind label %1381

1349:                                             ; preds = %1347
  %1350 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull align 8 dereferenceable(32) %89) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #9
  %1351 = load i32, ptr %80, align 4, !tbaa !15
  %1352 = load i32, ptr %81, align 4, !tbaa !15
  %1353 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1351, i32 noundef %1352, ptr noundef nonnull align 8 dereferenceable(32) %85, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %1354 unwind label %1377

1354:                                             ; preds = %1349
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  br label %2903

1355:                                             ; preds = %1316
  %1356 = landingpad { ptr, i32 }
          cleanup
  %1357 = extractvalue { ptr, i32 } %1356, 0
  store ptr %1357, ptr %19, align 8
  %1358 = extractvalue { ptr, i32 } %1356, 1
  store i32 %1358, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #9
  br label %1388

1359:                                             ; preds = %1332
  %1360 = landingpad { ptr, i32 }
          cleanup
  %1361 = extractvalue { ptr, i32 } %1360, 0
  store ptr %1361, ptr %19, align 8
  %1362 = extractvalue { ptr, i32 } %1360, 1
  store i32 %1362, ptr %20, align 4
  br label %1387

1363:                                             ; preds = %1333
  %1364 = landingpad { ptr, i32 }
          cleanup
  %1365 = extractvalue { ptr, i32 } %1364, 0
  store ptr %1365, ptr %19, align 8
  %1366 = extractvalue { ptr, i32 } %1364, 1
  store i32 %1366, ptr %20, align 4
  br label %1376

1367:                                             ; preds = %1337
  %1368 = landingpad { ptr, i32 }
          cleanup
  %1369 = extractvalue { ptr, i32 } %1368, 0
  store ptr %1369, ptr %19, align 8
  %1370 = extractvalue { ptr, i32 } %1368, 1
  store i32 %1370, ptr %20, align 4
  br label %1375

1371:                                             ; preds = %1341
  %1372 = landingpad { ptr, i32 }
          cleanup
  %1373 = extractvalue { ptr, i32 } %1372, 0
  store ptr %1373, ptr %19, align 8
  %1374 = extractvalue { ptr, i32 } %1372, 1
  store i32 %1374, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #9
  br label %1375

1375:                                             ; preds = %1371, %1367
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #9
  br label %1376

1376:                                             ; preds = %1375, %1363
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #9
  br label %1386

1377:                                             ; preds = %1349, %1342
  %1378 = landingpad { ptr, i32 }
          cleanup
  %1379 = extractvalue { ptr, i32 } %1378, 0
  store ptr %1379, ptr %19, align 8
  %1380 = extractvalue { ptr, i32 } %1378, 1
  store i32 %1380, ptr %20, align 4
  br label %1385

1381:                                             ; preds = %1347
  %1382 = landingpad { ptr, i32 }
          cleanup
  %1383 = extractvalue { ptr, i32 } %1382, 0
  store ptr %1383, ptr %19, align 8
  %1384 = extractvalue { ptr, i32 } %1382, 1
  store i32 %1384, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #9
  br label %1385

1385:                                             ; preds = %1381, %1377
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #9
  br label %1386

1386:                                             ; preds = %1385, %1376
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #9
  br label %1387

1387:                                             ; preds = %1386, %1359
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  br label %1388

1388:                                             ; preds = %1387, %1355
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  br label %2904

1389:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #9
  %1390 = load ptr, ptr %5, align 8, !tbaa !5
  %1391 = getelementptr inbounds i32, ptr %1390, i64 0
  %1392 = load i32, ptr %1391, align 4, !tbaa !15
  store i32 %1392, ptr %90, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #9
  %1393 = load ptr, ptr %5, align 8, !tbaa !5
  %1394 = getelementptr inbounds i32, ptr %1393, i64 1
  %1395 = load i32, ptr %1394, align 4, !tbaa !15
  store i32 %1395, ptr %91, align 4, !tbaa !15
  %1396 = load ptr, ptr %5, align 8, !tbaa !5
  %1397 = getelementptr inbounds i32, ptr %1396, i64 2
  %1398 = load i32, ptr %1397, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerHLSL29require_texture_query_variantEj(ptr noundef nonnull align 8 dereferenceable(10528) %219, i32 noundef %1398)
  call void @llvm.lifetime.start.p0(i64 1, ptr %92) #9
  %1399 = load ptr, ptr %5, align 8, !tbaa !5
  %1400 = getelementptr inbounds i32, ptr %1399, i64 2
  %1401 = load i32, ptr %1400, align 4, !tbaa !15
  %1402 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1401)
  %1403 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1402, i32 0, i32 14
  %1404 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1403, i32 0, i32 5
  %1405 = load i32, ptr %1404, align 4, !tbaa !170
  %1406 = icmp eq i32 %1405, 2
  %1407 = zext i1 %1406 to i8
  store i8 %1407, ptr %92, align 1, !tbaa !171
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #9
  %1408 = load ptr, ptr %5, align 8, !tbaa !5
  %1409 = getelementptr inbounds i32, ptr %1408, i64 2
  %1410 = load i32, ptr %1409, align 4, !tbaa !15
  %1411 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1410)
  store ptr %1411, ptr %93, align 8, !tbaa !5
  %1412 = load ptr, ptr %93, align 8, !tbaa !5
  %1413 = icmp ne ptr %1412, null
  br i1 %1413, label %1414, label %1427

1414:                                             ; preds = %1389
  %1415 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 1
  %1416 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %1415, i32 0, i32 5
  %1417 = load i8, ptr %1416, align 8, !tbaa !172, !range !147, !noundef !148
  %1418 = trunc i8 %1417 to i1
  br i1 %1418, label %1419, label %1426

1419:                                             ; preds = %1414
  %1420 = load ptr, ptr %93, align 8, !tbaa !5
  %1421 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1420, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %94, ptr align 8 %1421, i64 4, i1 false), !tbaa.struct !166
  %1422 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %94, i32 0, i32 0
  %1423 = load i32, ptr %1422, align 4
  %1424 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 %1423, i32 noundef 24)
  br i1 %1424, label %1425, label %1426

1425:                                             ; preds = %1419
  store i8 0, ptr %92, align 1, !tbaa !171
  br label %1426

1426:                                             ; preds = %1425, %1419, %1414
  br label %1427

1427:                                             ; preds = %1426, %1389
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %96) #9
  %1428 = load i32, ptr %91, align 4, !tbaa !15
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %97, i32 noundef %1428)
  %1429 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %97, i32 0, i32 0
  %1430 = load i32, ptr %1429, align 4
  %1431 = load ptr, ptr %219, align 8, !tbaa !168
  %1432 = getelementptr inbounds ptr, ptr %1431, i64 3
  %1433 = load ptr, ptr %1432, align 8
  call void %1433(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 %1430)
  invoke void @_ZN11spirv_cross4joinIJKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 8 dereferenceable(32) %96, ptr noundef nonnull align 1 dereferenceable(17) @.str.634)
          to label %1434 unwind label %1445

1434:                                             ; preds = %1427
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(6) @.str.635, ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1435 unwind label %1449

1435:                                             ; preds = %1434
  call void @llvm.lifetime.start.p0(i64 32, ptr %98) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #9
  %1436 = load i8, ptr %92, align 1, !tbaa !171, !range !147, !noundef !148
  %1437 = trunc i8 %1436 to i1
  br i1 %1437, label %1438, label %1462

1438:                                             ; preds = %1435
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %100) #9
  %1439 = load ptr, ptr %5, align 8, !tbaa !5
  %1440 = getelementptr inbounds i32, ptr %1439, i64 2
  %1441 = load i32, ptr %1440, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1441)
          to label %1442 unwind label %1453

1442:                                             ; preds = %1438
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef nonnull align 1 dereferenceable(14) @.str.637, ptr noundef nonnull align 8 dereferenceable(32) %100, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %1443 unwind label %1457

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

1445:                                             ; preds = %1427
  %1446 = landingpad { ptr, i32 }
          cleanup
  %1447 = extractvalue { ptr, i32 } %1446, 0
  store ptr %1447, ptr %19, align 8
  %1448 = extractvalue { ptr, i32 } %1446, 1
  store i32 %1448, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #9
  br label %1502

1449:                                             ; preds = %1434
  %1450 = landingpad { ptr, i32 }
          cleanup
  %1451 = extractvalue { ptr, i32 } %1450, 0
  store ptr %1451, ptr %19, align 8
  %1452 = extractvalue { ptr, i32 } %1450, 1
  store i32 %1452, ptr %20, align 4
  br label %1501

1453:                                             ; preds = %1438
  %1454 = landingpad { ptr, i32 }
          cleanup
  %1455 = extractvalue { ptr, i32 } %1454, 0
  store ptr %1455, ptr %19, align 8
  %1456 = extractvalue { ptr, i32 } %1454, 1
  store i32 %1456, ptr %20, align 4
  br label %1461

1457:                                             ; preds = %1442
  %1458 = landingpad { ptr, i32 }
          cleanup
  %1459 = extractvalue { ptr, i32 } %1458, 0
  store ptr %1459, ptr %19, align 8
  %1460 = extractvalue { ptr, i32 } %1458, 1
  store i32 %1460, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #9
  br label %1461

1461:                                             ; preds = %1457, %1453
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #9
  br label %1500

1462:                                             ; preds = %1435
  call void @llvm.lifetime.start.p0(i64 32, ptr %101) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %102) #9
  %1463 = load ptr, ptr %5, align 8, !tbaa !5
  %1464 = getelementptr inbounds i32, ptr %1463, i64 2
  %1465 = load i32, ptr %1464, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1465)
          to label %1466 unwind label %1469

1466:                                             ; preds = %1462
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %101, ptr noundef nonnull align 1 dereferenceable(16) @.str.636, ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef nonnull align 1 dereferenceable(7) @.str.638, ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %1467 unwind label %1473

1467:                                             ; preds = %1466
  %1468 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %98, ptr noundef nonnull align 8 dereferenceable(32) %101) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #9
  br label %1478

1469:                                             ; preds = %1462
  %1470 = landingpad { ptr, i32 }
          cleanup
  %1471 = extractvalue { ptr, i32 } %1470, 0
  store ptr %1471, ptr %19, align 8
  %1472 = extractvalue { ptr, i32 } %1470, 1
  store i32 %1472, ptr %20, align 4
  br label %1477

1473:                                             ; preds = %1466
  %1474 = landingpad { ptr, i32 }
          cleanup
  %1475 = extractvalue { ptr, i32 } %1474, 0
  store ptr %1475, ptr %19, align 8
  %1476 = extractvalue { ptr, i32 } %1474, 1
  store i32 %1476, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  br label %1477

1477:                                             ; preds = %1473, %1469
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #9
  br label %1500

1478:                                             ; preds = %1467, %1443
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #9
  %1479 = load ptr, ptr %5, align 8, !tbaa !5
  %1480 = getelementptr inbounds i32, ptr %1479, i64 0
  %1481 = load i32, ptr %1480, align 4, !tbaa !15
  %1482 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1481)
          to label %1483 unwind label %1491

1483:                                             ; preds = %1478
  store ptr %1482, ptr %103, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #9
  %1484 = load ptr, ptr %103, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(336) %1484, i32 noundef 8, ptr noundef nonnull align 8 dereferenceable(32) %98)
          to label %1485 unwind label %1495

1485:                                             ; preds = %1483
  %1486 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %98, ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  %1487 = load i32, ptr %90, align 4, !tbaa !15
  %1488 = load i32, ptr %91, align 4, !tbaa !15
  %1489 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1487, i32 noundef %1488, ptr noundef nonnull align 8 dereferenceable(32) %98, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %1490 unwind label %1491

1490:                                             ; preds = %1485
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %98) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  br label %2903

1491:                                             ; preds = %1485, %1478
  %1492 = landingpad { ptr, i32 }
          cleanup
  %1493 = extractvalue { ptr, i32 } %1492, 0
  store ptr %1493, ptr %19, align 8
  %1494 = extractvalue { ptr, i32 } %1492, 1
  store i32 %1494, ptr %20, align 4
  br label %1499

1495:                                             ; preds = %1483
  %1496 = landingpad { ptr, i32 }
          cleanup
  %1497 = extractvalue { ptr, i32 } %1496, 0
  store ptr %1497, ptr %19, align 8
  %1498 = extractvalue { ptr, i32 } %1496, 1
  store i32 %1498, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  br label %1499

1499:                                             ; preds = %1495, %1491
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #9
  br label %1500

1500:                                             ; preds = %1499, %1477, %1461
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %98) #9
  br label %1501

1501:                                             ; preds = %1500, %1449
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #9
  br label %1502

1502:                                             ; preds = %1501, %1445
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  br label %2904

1503:                                             ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #9
  %1504 = load ptr, ptr %5, align 8, !tbaa !5
  %1505 = getelementptr inbounds i32, ptr %1504, i64 0
  %1506 = load i32, ptr %1505, align 4, !tbaa !15
  store i32 %1506, ptr %105, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #9
  %1507 = load ptr, ptr %5, align 8, !tbaa !5
  %1508 = getelementptr inbounds i32, ptr %1507, i64 1
  %1509 = load i32, ptr %1508, align 4, !tbaa !15
  store i32 %1509, ptr %106, align 4, !tbaa !15
  %1510 = load ptr, ptr %5, align 8, !tbaa !5
  %1511 = getelementptr inbounds i32, ptr %1510, i64 2
  %1512 = load i32, ptr %1511, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerHLSL29require_texture_query_variantEj(ptr noundef nonnull align 8 dereferenceable(10528) %219, i32 noundef %1512)
  call void @llvm.lifetime.start.p0(i64 1, ptr %107) #9
  %1513 = load ptr, ptr %5, align 8, !tbaa !5
  %1514 = getelementptr inbounds i32, ptr %1513, i64 2
  %1515 = load i32, ptr %1514, align 4, !tbaa !15
  %1516 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1515)
  %1517 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1516, i32 0, i32 14
  %1518 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1517, i32 0, i32 5
  %1519 = load i32, ptr %1518, align 4, !tbaa !170
  %1520 = icmp eq i32 %1519, 2
  %1521 = zext i1 %1520 to i8
  store i8 %1521, ptr %107, align 1, !tbaa !171
  %1522 = load i32, ptr %6, align 4, !tbaa !13
  %1523 = icmp eq i32 %1522, 106
  br i1 %1523, label %1524, label %1534

1524:                                             ; preds = %1503
  %1525 = load i8, ptr %107, align 1, !tbaa !171, !range !147, !noundef !148
  %1526 = trunc i8 %1525 to i1
  br i1 %1526, label %1527, label %1534

1527:                                             ; preds = %1524
  %1528 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1528, ptr noundef @.str.639)
          to label %1529 unwind label %1530

1529:                                             ; preds = %1527
  call void @__cxa_throw(ptr %1528, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

1530:                                             ; preds = %1527
  %1531 = landingpad { ptr, i32 }
          cleanup
  %1532 = extractvalue { ptr, i32 } %1531, 0
  store ptr %1532, ptr %19, align 8
  %1533 = extractvalue { ptr, i32 } %1531, 1
  store i32 %1533, ptr %20, align 4
  call void @__cxa_free_exception(ptr %1528) #9
  br label %1646

1534:                                             ; preds = %1524, %1503
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #9
  %1535 = load ptr, ptr %5, align 8, !tbaa !5
  %1536 = getelementptr inbounds i32, ptr %1535, i64 2
  %1537 = load i32, ptr %1536, align 4, !tbaa !15
  %1538 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1537)
  store ptr %1538, ptr %108, align 8, !tbaa !5
  %1539 = load ptr, ptr %108, align 8, !tbaa !5
  %1540 = icmp ne ptr %1539, null
  br i1 %1540, label %1541, label %1554

1541:                                             ; preds = %1534
  %1542 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 1
  %1543 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %1542, i32 0, i32 5
  %1544 = load i8, ptr %1543, align 8, !tbaa !172, !range !147, !noundef !148
  %1545 = trunc i8 %1544 to i1
  br i1 %1545, label %1546, label %1553

1546:                                             ; preds = %1541
  %1547 = load ptr, ptr %108, align 8, !tbaa !5
  %1548 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1547, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %109, ptr align 8 %1548, i64 4, i1 false), !tbaa.struct !166
  %1549 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %109, i32 0, i32 0
  %1550 = load i32, ptr %1549, align 4
  %1551 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 %1550, i32 noundef 24)
  br i1 %1551, label %1552, label %1553

1552:                                             ; preds = %1546
  store i8 0, ptr %107, align 1, !tbaa !171
  br label %1553

1553:                                             ; preds = %1552, %1546, %1541
  br label %1554

1554:                                             ; preds = %1553, %1534
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  %1555 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %219, i32 0, i32 15
  %1556 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %1555, ptr noundef nonnull align 4 dereferenceable(4) %106)
  %1557 = getelementptr inbounds { ptr, i8 }, ptr %110, i32 0, i32 0
  %1558 = extractvalue { ptr, i8 } %1556, 0
  store ptr %1558, ptr %1557, align 8
  %1559 = getelementptr inbounds { ptr, i8 }, ptr %110, i32 0, i32 1
  %1560 = extractvalue { ptr, i8 } %1556, 1
  store i8 %1560, ptr %1559, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #9
  %1561 = load i32, ptr %105, align 4, !tbaa !15
  %1562 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1561)
  store ptr %1562, ptr %111, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %112) #9
  %1563 = load ptr, ptr %111, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #9
  %1564 = load i32, ptr %106, align 4, !tbaa !15
  %1565 = load ptr, ptr %219, align 8, !tbaa !168
  %1566 = getelementptr inbounds ptr, ptr %1565, i64 6
  %1567 = load ptr, ptr %1566, align 8
  call void %1567(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %113, ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1564, i1 noundef zeroext true)
  %1568 = load ptr, ptr %219, align 8, !tbaa !168
  %1569 = getelementptr inbounds ptr, ptr %1568, i64 27
  %1570 = load ptr, ptr %1569, align 8
  invoke void %1570(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %112, ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(336) %1563, ptr noundef nonnull align 8 dereferenceable(32) %113, i32 noundef 0)
          to label %1571 unwind label %1585

1571:                                             ; preds = %1554
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1572 unwind label %1589

1572:                                             ; preds = %1571
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #9
  %1573 = load i8, ptr %107, align 1, !tbaa !171, !range !147, !noundef !148
  %1574 = trunc i8 %1573 to i1
  br i1 %1574, label %1575, label %1603

1575:                                             ; preds = %1572
  call void @llvm.lifetime.start.p0(i64 32, ptr %114) #9
  %1576 = load ptr, ptr %5, align 8, !tbaa !5
  %1577 = getelementptr inbounds i32, ptr %1576, i64 2
  %1578 = load i32, ptr %1577, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %114, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1578)
  call void @llvm.lifetime.start.p0(i64 32, ptr %115) #9
  %1579 = load i32, ptr %106, align 4, !tbaa !15
  %1580 = load ptr, ptr %219, align 8, !tbaa !168
  %1581 = getelementptr inbounds ptr, ptr %1580, i64 6
  %1582 = load ptr, ptr %1581, align 8
  invoke void %1582(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %115, ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1579, i1 noundef zeroext true)
          to label %1583 unwind label %1594

1583:                                             ; preds = %1575
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(14) @.str.637, ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %1584 unwind label %1598

1584:                                             ; preds = %1583
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #9
  br label %1622

1585:                                             ; preds = %1554
  %1586 = landingpad { ptr, i32 }
          cleanup
  %1587 = extractvalue { ptr, i32 } %1586, 0
  store ptr %1587, ptr %19, align 8
  %1588 = extractvalue { ptr, i32 } %1586, 1
  store i32 %1588, ptr %20, align 4
  br label %1593

1589:                                             ; preds = %1571
  %1590 = landingpad { ptr, i32 }
          cleanup
  %1591 = extractvalue { ptr, i32 } %1590, 0
  store ptr %1591, ptr %19, align 8
  %1592 = extractvalue { ptr, i32 } %1590, 1
  store i32 %1592, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #9
  br label %1593

1593:                                             ; preds = %1589, %1585
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #9
  br label %1645

1594:                                             ; preds = %1575
  %1595 = landingpad { ptr, i32 }
          cleanup
  %1596 = extractvalue { ptr, i32 } %1595, 0
  store ptr %1596, ptr %19, align 8
  %1597 = extractvalue { ptr, i32 } %1595, 1
  store i32 %1597, ptr %20, align 4
  br label %1602

1598:                                             ; preds = %1583
  %1599 = landingpad { ptr, i32 }
          cleanup
  %1600 = extractvalue { ptr, i32 } %1599, 0
  store ptr %1600, ptr %19, align 8
  %1601 = extractvalue { ptr, i32 } %1599, 1
  store i32 %1601, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  br label %1602

1602:                                             ; preds = %1598, %1594
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #9
  br label %1645

1603:                                             ; preds = %1572
  call void @llvm.lifetime.start.p0(i64 32, ptr %116) #9
  %1604 = load ptr, ptr %5, align 8, !tbaa !5
  %1605 = getelementptr inbounds i32, ptr %1604, i64 2
  %1606 = load i32, ptr %1605, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %116, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1606)
  call void @llvm.lifetime.start.p0(i64 32, ptr %117) #9
  %1607 = load i32, ptr %106, align 4, !tbaa !15
  %1608 = load ptr, ptr %219, align 8, !tbaa !168
  %1609 = getelementptr inbounds ptr, ptr %1608, i64 6
  %1610 = load ptr, ptr %1609, align 8
  invoke void %1610(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1607, i1 noundef zeroext true)
          to label %1611 unwind label %1613

1611:                                             ; preds = %1603
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_S2_SA_RA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(16) @.str.636, ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef nonnull align 1 dereferenceable(7) @.str.638, ptr noundef nonnull align 8 dereferenceable(32) %117, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %1612 unwind label %1617

1612:                                             ; preds = %1611
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #9
  br label %1622

1613:                                             ; preds = %1603
  %1614 = landingpad { ptr, i32 }
          cleanup
  %1615 = extractvalue { ptr, i32 } %1614, 0
  store ptr %1615, ptr %19, align 8
  %1616 = extractvalue { ptr, i32 } %1614, 1
  store i32 %1616, ptr %20, align 4
  br label %1621

1617:                                             ; preds = %1611
  %1618 = landingpad { ptr, i32 }
          cleanup
  %1619 = extractvalue { ptr, i32 } %1618, 0
  store ptr %1619, ptr %19, align 8
  %1620 = extractvalue { ptr, i32 } %1618, 1
  store i32 %1620, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #9
  br label %1621

1621:                                             ; preds = %1617, %1613
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #9
  br label %1645

1622:                                             ; preds = %1612, %1584
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #9
  %1623 = load ptr, ptr %5, align 8, !tbaa !5
  %1624 = getelementptr inbounds i32, ptr %1623, i64 0
  %1625 = load i32, ptr %1624, align 4, !tbaa !15
  %1626 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1625)
  store ptr %1626, ptr %118, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %119) #9
  %1627 = load ptr, ptr %118, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %120) #9
  %1628 = load i32, ptr %106, align 4, !tbaa !15
  %1629 = load ptr, ptr %219, align 8, !tbaa !168
  %1630 = getelementptr inbounds ptr, ptr %1629, i64 6
  %1631 = load ptr, ptr %1630, align 8
  call void %1631(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %120, ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1628, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %119, ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(336) %1627, i32 noundef 8, ptr noundef nonnull align 8 dereferenceable(32) %120)
          to label %1632 unwind label %1636

1632:                                             ; preds = %1622
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  %1633 = load i32, ptr %106, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %121) #9
  store i8 1, ptr %121, align 1, !tbaa !171
  %1634 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1633, ptr noundef nonnull align 8 dereferenceable(32) %119, ptr noundef nonnull align 4 dereferenceable(4) %105, ptr noundef nonnull align 1 dereferenceable(1) %121)
          to label %1635 unwind label %1640

1635:                                             ; preds = %1632
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #9
  br label %2903

1636:                                             ; preds = %1622
  %1637 = landingpad { ptr, i32 }
          cleanup
  %1638 = extractvalue { ptr, i32 } %1637, 0
  store ptr %1638, ptr %19, align 8
  %1639 = extractvalue { ptr, i32 } %1637, 1
  store i32 %1639, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  br label %1644

1640:                                             ; preds = %1632
  %1641 = landingpad { ptr, i32 }
          cleanup
  %1642 = extractvalue { ptr, i32 } %1641, 0
  store ptr %1642, ptr %19, align 8
  %1643 = extractvalue { ptr, i32 } %1641, 1
  store i32 %1643, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #9
  br label %1644

1644:                                             ; preds = %1640, %1636
  call void @llvm.lifetime.end.p0(i64 32, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  br label %1645

1645:                                             ; preds = %1644, %1621, %1602, %1593
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  br label %1646

1646:                                             ; preds = %1645, %1530
  call void @llvm.lifetime.end.p0(i64 1, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #9
  br label %2904

1647:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #9
  %1648 = load ptr, ptr %5, align 8, !tbaa !5
  %1649 = getelementptr inbounds i32, ptr %1648, i64 0
  %1650 = load i32, ptr %1649, align 4, !tbaa !15
  store i32 %1650, ptr %122, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #9
  %1651 = load ptr, ptr %5, align 8, !tbaa !5
  %1652 = getelementptr inbounds i32, ptr %1651, i64 1
  %1653 = load i32, ptr %1652, align 4, !tbaa !15
  store i32 %1653, ptr %123, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #9
  %1654 = load ptr, ptr %5, align 8, !tbaa !5
  %1655 = getelementptr inbounds i32, ptr %1654, i64 2
  %1656 = load i32, ptr %1655, align 4, !tbaa !15
  %1657 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1656)
  store ptr %1657, ptr %124, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #9
  %1658 = load ptr, ptr %5, align 8, !tbaa !5
  %1659 = getelementptr inbounds i32, ptr %1658, i64 2
  %1660 = load i32, ptr %1659, align 4, !tbaa !15
  %1661 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1660)
  store ptr %1661, ptr %125, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %126) #9
  %1662 = load ptr, ptr %125, align 8, !tbaa !5
  %1663 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1662, i32 0, i32 14
  %1664 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1663, i32 0, i32 1
  %1665 = load i32, ptr %1664, align 4, !tbaa !173
  %1666 = icmp eq i32 %1665, 6
  %1667 = zext i1 %1666 to i8
  store i8 %1667, ptr %126, align 1, !tbaa !171
  call void @llvm.lifetime.start.p0(i64 1, ptr %127) #9
  store i8 0, ptr %127, align 1, !tbaa !171
  call void @llvm.lifetime.start.p0(i64 32, ptr %128) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #9
  %1668 = load i8, ptr %126, align 1, !tbaa !171, !range !147, !noundef !148
  %1669 = trunc i8 %1668 to i1
  br i1 %1669, label %1670, label %1758

1670:                                             ; preds = %1647
  %1671 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 1
  %1672 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %1671, i32 0, i32 0
  %1673 = load i32, ptr %1672, align 8, !tbaa !174
  %1674 = icmp ult i32 %1673, 40
  br i1 %1674, label %1675, label %1686

1675:                                             ; preds = %1670
  %1676 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1676, ptr noundef @.str.640)
          to label %1677 unwind label %1678

1677:                                             ; preds = %1675
  invoke void @__cxa_throw(ptr %1676, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %2910 unwind label %1682

1678:                                             ; preds = %1675
  %1679 = landingpad { ptr, i32 }
          cleanup
  %1680 = extractvalue { ptr, i32 } %1679, 0
  store ptr %1680, ptr %19, align 8
  %1681 = extractvalue { ptr, i32 } %1679, 1
  store i32 %1681, ptr %20, align 4
  call void @__cxa_free_exception(ptr %1676) #9
  br label %1918

1682:                                             ; preds = %1911, %1900, %1895, %1677
  %1683 = landingpad { ptr, i32 }
          cleanup
  %1684 = extractvalue { ptr, i32 } %1683, 0
  store ptr %1684, ptr %19, align 8
  %1685 = extractvalue { ptr, i32 } %1683, 1
  store i32 %1685, ptr %20, align 4
  br label %1918

1686:                                             ; preds = %1670
  %1687 = load ptr, ptr %125, align 8, !tbaa !5
  %1688 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1687, i32 0, i32 14
  %1689 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1688, i32 0, i32 4
  %1690 = load i8, ptr %1689, align 2, !tbaa !175, !range !147, !noundef !148
  %1691 = trunc i8 %1690 to i1
  br i1 %1691, label %1692, label %1741

1692:                                             ; preds = %1686
  call void @llvm.lifetime.start.p0(i64 4, ptr %129) #9
  %1693 = load ptr, ptr %5, align 8, !tbaa !5
  %1694 = getelementptr inbounds i32, ptr %1693, i64 4
  %1695 = load i32, ptr %1694, align 4, !tbaa !15
  store i32 %1695, ptr %129, align 4, !tbaa !15
  %1696 = load i32, ptr %129, align 4, !tbaa !15
  %1697 = icmp ne i32 %1696, 64
  br i1 %1697, label %1703, label %1698

1698:                                             ; preds = %1692
  %1699 = load ptr, ptr %4, align 8, !tbaa !5
  %1700 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %1699, i32 0, i32 3
  %1701 = load i32, ptr %1700, align 4, !tbaa !176
  %1702 = icmp ne i32 %1701, 6
  br i1 %1702, label %1703, label %1714

1703:                                             ; preds = %1698, %1692
  %1704 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1704, ptr noundef @.str.641)
          to label %1705 unwind label %1706

1705:                                             ; preds = %1703
  invoke void @__cxa_throw(ptr %1704, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %2910 unwind label %1710

1706:                                             ; preds = %1703
  %1707 = landingpad { ptr, i32 }
          cleanup
  %1708 = extractvalue { ptr, i32 } %1707, 0
  store ptr %1708, ptr %19, align 8
  %1709 = extractvalue { ptr, i32 } %1707, 1
  store i32 %1709, ptr %20, align 4
  call void @__cxa_free_exception(ptr %1704) #9
  br label %1740

1710:                                             ; preds = %1705
  %1711 = landingpad { ptr, i32 }
          cleanup
  %1712 = extractvalue { ptr, i32 } %1711, 0
  store ptr %1712, ptr %19, align 8
  %1713 = extractvalue { ptr, i32 } %1711, 1
  store i32 %1713, ptr %20, align 4
  br label %1740

1714:                                             ; preds = %1698
  call void @llvm.lifetime.start.p0(i64 4, ptr %130) #9
  %1715 = load ptr, ptr %5, align 8, !tbaa !5
  %1716 = getelementptr inbounds i32, ptr %1715, i64 5
  %1717 = load i32, ptr %1716, align 4, !tbaa !15
  store i32 %1717, ptr %130, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %131) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %132) #9
  %1718 = load ptr, ptr %5, align 8, !tbaa !5
  %1719 = getelementptr inbounds i32, ptr %1718, i64 2
  %1720 = load i32, ptr %1719, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %132, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1720)
          to label %1721 unwind label %1726

1721:                                             ; preds = %1714
  call void @llvm.lifetime.start.p0(i64 32, ptr %133) #9
  %1722 = load i32, ptr %130, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %133, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1722, i1 noundef zeroext true)
          to label %1723 unwind label %1730

1723:                                             ; preds = %1721
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcS6_RA2_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %131, ptr noundef nonnull align 8 dereferenceable(32) %132, ptr noundef nonnull align 1 dereferenceable(30) @.str.642, ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %1724 unwind label %1734

1724:                                             ; preds = %1723
  %1725 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef nonnull align 8 dereferenceable(32) %131) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %133) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #9
  br label %1757

1726:                                             ; preds = %1714
  %1727 = landingpad { ptr, i32 }
          cleanup
  %1728 = extractvalue { ptr, i32 } %1727, 0
  store ptr %1728, ptr %19, align 8
  %1729 = extractvalue { ptr, i32 } %1727, 1
  store i32 %1729, ptr %20, align 4
  br label %1739

1730:                                             ; preds = %1721
  %1731 = landingpad { ptr, i32 }
          cleanup
  %1732 = extractvalue { ptr, i32 } %1731, 0
  store ptr %1732, ptr %19, align 8
  %1733 = extractvalue { ptr, i32 } %1731, 1
  store i32 %1733, ptr %20, align 4
  br label %1738

1734:                                             ; preds = %1723
  %1735 = landingpad { ptr, i32 }
          cleanup
  %1736 = extractvalue { ptr, i32 } %1735, 0
  store ptr %1736, ptr %19, align 8
  %1737 = extractvalue { ptr, i32 } %1735, 1
  store i32 %1737, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  br label %1738

1738:                                             ; preds = %1734, %1730
  call void @llvm.lifetime.end.p0(i64 32, ptr %133) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #9
  br label %1739

1739:                                             ; preds = %1738, %1726
  call void @llvm.lifetime.end.p0(i64 32, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #9
  br label %1740

1740:                                             ; preds = %1739, %1710, %1706
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #9
  br label %1918

1741:                                             ; preds = %1686
  call void @llvm.lifetime.start.p0(i64 32, ptr %134) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %135) #9
  %1742 = load ptr, ptr %5, align 8, !tbaa !5
  %1743 = getelementptr inbounds i32, ptr %1742, i64 2
  %1744 = load i32, ptr %1743, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %135, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1744)
          to label %1745 unwind label %1748

1745:                                             ; preds = %1741
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA38_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %134, ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull align 1 dereferenceable(38) @.str.643)
          to label %1746 unwind label %1752

1746:                                             ; preds = %1745
  %1747 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef nonnull align 8 dereferenceable(32) %134) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %134) #9
  br label %1757

1748:                                             ; preds = %1741
  %1749 = landingpad { ptr, i32 }
          cleanup
  %1750 = extractvalue { ptr, i32 } %1749, 0
  store ptr %1750, ptr %19, align 8
  %1751 = extractvalue { ptr, i32 } %1749, 1
  store i32 %1751, ptr %20, align 4
  br label %1756

1752:                                             ; preds = %1745
  %1753 = landingpad { ptr, i32 }
          cleanup
  %1754 = extractvalue { ptr, i32 } %1753, 0
  store ptr %1754, ptr %19, align 8
  %1755 = extractvalue { ptr, i32 } %1753, 1
  store i32 %1755, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #9
  br label %1756

1756:                                             ; preds = %1752, %1748
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %134) #9
  br label %1918

1757:                                             ; preds = %1746, %1724
  store i8 1, ptr %127, align 1, !tbaa !171
  br label %1838

1758:                                             ; preds = %1647
  call void @llvm.lifetime.start.p0(i64 32, ptr %136) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %137) #9
  %1759 = load ptr, ptr %5, align 8, !tbaa !5
  %1760 = getelementptr inbounds i32, ptr %1759, i64 2
  %1761 = load i32, ptr %1760, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %137, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1761)
          to label %1762 unwind label %1814

1762:                                             ; preds = %1758
  call void @llvm.lifetime.start.p0(i64 32, ptr %138) #9
  %1763 = load ptr, ptr %5, align 8, !tbaa !5
  %1764 = getelementptr inbounds i32, ptr %1763, i64 3
  %1765 = load i32, ptr %1764, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %138, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1765, i1 noundef zeroext true)
          to label %1766 unwind label %1818

1766:                                             ; preds = %1762
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %136, ptr noundef nonnull align 8 dereferenceable(32) %137, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 8 dereferenceable(32) %138, ptr noundef nonnull align 1 dereferenceable(2) @.str.417)
          to label %1767 unwind label %1822

1767:                                             ; preds = %1766
  %1768 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef nonnull align 8 dereferenceable(32) %136) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %138) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %137) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %136) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %139) #9
  %1769 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 1
  %1770 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %1769, i32 0, i32 5
  %1771 = load i8, ptr %1770, align 8, !tbaa !172, !range !147, !noundef !148
  %1772 = trunc i8 %1771 to i1
  br i1 %1772, label %1773, label %1783

1773:                                             ; preds = %1767
  %1774 = load ptr, ptr %124, align 8, !tbaa !5
  %1775 = icmp ne ptr %1774, null
  br i1 %1775, label %1776, label %1783

1776:                                             ; preds = %1773
  %1777 = load ptr, ptr %124, align 8, !tbaa !5
  %1778 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1777, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %140, ptr align 8 %1778, i64 4, i1 false), !tbaa.struct !166
  %1779 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %140, i32 0, i32 0
  %1780 = load i32, ptr %1779, align 4
  %1781 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 %1780, i32 noundef 24)
          to label %1782 unwind label %1828

1782:                                             ; preds = %1776
  br label %1783

1783:                                             ; preds = %1782, %1773, %1767
  %1784 = phi i1 [ false, %1773 ], [ false, %1767 ], [ %1781, %1782 ]
  %1785 = zext i1 %1784 to i8
  store i8 %1785, ptr %139, align 1, !tbaa !171
  %1786 = load i8, ptr %139, align 1, !tbaa !171, !range !147, !noundef !148
  %1787 = trunc i8 %1786 to i1
  %1788 = zext i1 %1787 to i8
  store i8 %1788, ptr %127, align 1, !tbaa !171
  %1789 = load ptr, ptr %124, align 8, !tbaa !5
  %1790 = icmp ne ptr %1789, null
  br i1 %1790, label %1791, label %1836

1791:                                             ; preds = %1783
  %1792 = load i8, ptr %126, align 1, !tbaa !171, !range !147, !noundef !148
  %1793 = trunc i8 %1792 to i1
  br i1 %1793, label %1836, label %1794

1794:                                             ; preds = %1791
  %1795 = load i8, ptr %139, align 1, !tbaa !171, !range !147, !noundef !148
  %1796 = trunc i8 %1795 to i1
  br i1 %1796, label %1836, label %1797

1797:                                             ; preds = %1794
  call void @llvm.lifetime.start.p0(i64 32, ptr %141) #9
  %1798 = load i32, ptr %122, align 4, !tbaa !15
  %1799 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1798)
          to label %1800 unwind label %1832

1800:                                             ; preds = %1797
  %1801 = load ptr, ptr %124, align 8, !tbaa !5
  %1802 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1801, i32 0, i32 1
  %1803 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1802)
          to label %1804 unwind label %1832

1804:                                             ; preds = %1800
  %1805 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1803)
          to label %1806 unwind label %1832

1806:                                             ; preds = %1804
  %1807 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1805, i32 0, i32 14
  %1808 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1807, i32 0, i32 6
  %1809 = load i32, ptr %1808, align 8, !tbaa !177
  %1810 = invoke noundef i32 @_ZL26image_format_to_componentsN3spv11ImageFormatE(i32 noundef %1809)
          to label %1811 unwind label %1832

1811:                                             ; preds = %1806
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %141, ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(336) %1799, i32 noundef %1810, ptr noundef nonnull align 8 dereferenceable(32) %128)
          to label %1812 unwind label %1832

1812:                                             ; preds = %1811
  %1813 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef nonnull align 8 dereferenceable(32) %141) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %141) #9
  br label %1836

1814:                                             ; preds = %1758
  %1815 = landingpad { ptr, i32 }
          cleanup
  %1816 = extractvalue { ptr, i32 } %1815, 0
  store ptr %1816, ptr %19, align 8
  %1817 = extractvalue { ptr, i32 } %1815, 1
  store i32 %1817, ptr %20, align 4
  br label %1827

1818:                                             ; preds = %1762
  %1819 = landingpad { ptr, i32 }
          cleanup
  %1820 = extractvalue { ptr, i32 } %1819, 0
  store ptr %1820, ptr %19, align 8
  %1821 = extractvalue { ptr, i32 } %1819, 1
  store i32 %1821, ptr %20, align 4
  br label %1826

1822:                                             ; preds = %1766
  %1823 = landingpad { ptr, i32 }
          cleanup
  %1824 = extractvalue { ptr, i32 } %1823, 0
  store ptr %1824, ptr %19, align 8
  %1825 = extractvalue { ptr, i32 } %1823, 1
  store i32 %1825, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  br label %1826

1826:                                             ; preds = %1822, %1818
  call void @llvm.lifetime.end.p0(i64 32, ptr %138) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #9
  br label %1827

1827:                                             ; preds = %1826, %1814
  call void @llvm.lifetime.end.p0(i64 32, ptr %137) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %136) #9
  br label %1918

1828:                                             ; preds = %1776
  %1829 = landingpad { ptr, i32 }
          cleanup
  %1830 = extractvalue { ptr, i32 } %1829, 0
  store ptr %1830, ptr %19, align 8
  %1831 = extractvalue { ptr, i32 } %1829, 1
  store i32 %1831, ptr %20, align 4
  br label %1837

1832:                                             ; preds = %1811, %1806, %1804, %1800, %1797
  %1833 = landingpad { ptr, i32 }
          cleanup
  %1834 = extractvalue { ptr, i32 } %1833, 0
  store ptr %1834, ptr %19, align 8
  %1835 = extractvalue { ptr, i32 } %1833, 1
  store i32 %1835, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %141) #9
  br label %1837

1836:                                             ; preds = %1812, %1794, %1791, %1783
  call void @llvm.lifetime.end.p0(i64 1, ptr %139) #9
  br label %1838

1837:                                             ; preds = %1832, %1828
  call void @llvm.lifetime.end.p0(i64 1, ptr %139) #9
  br label %1918

1838:                                             ; preds = %1836, %1757
  %1839 = load ptr, ptr %124, align 8, !tbaa !5
  %1840 = icmp ne ptr %1839, null
  br i1 %1840, label %1841, label %1895

1841:                                             ; preds = %1838
  call void @llvm.lifetime.start.p0(i64 1, ptr %142) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #9
  %1842 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %219, i32 0, i32 15
  %1843 = invoke ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %1842, ptr noundef nonnull align 4 dereferenceable(4) %123)
          to label %1844 unwind label %1874

1844:                                             ; preds = %1841
  %1845 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %143, i32 0, i32 0
  %1846 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %1845, i32 0, i32 0
  store ptr %1843, ptr %1846, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #9
  %1847 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %219, i32 0, i32 15
  %1848 = invoke ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %1847)
          to label %1849 unwind label %1878

1849:                                             ; preds = %1844
  %1850 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %144, i32 0, i32 0
  %1851 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %1850, i32 0, i32 0
  store ptr %1848, ptr %1851, align 8
  %1852 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %143, ptr noundef nonnull align 8 dereferenceable(8) %144) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  %1853 = zext i1 %1852 to i8
  store i8 %1853, ptr %142, align 1, !tbaa !171
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #9
  %1854 = load i32, ptr %122, align 4, !tbaa !15
  %1855 = load i32, ptr %123, align 4, !tbaa !15
  %1856 = load i8, ptr %142, align 1, !tbaa !171, !range !147, !noundef !148
  %1857 = trunc i8 %1856 to i1
  %1858 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1854, i32 noundef %1855, ptr noundef nonnull align 8 dereferenceable(32) %128, i1 noundef zeroext %1857, i1 noundef zeroext false)
          to label %1859 unwind label %1883

1859:                                             ; preds = %1849
  store ptr %1858, ptr %145, align 8, !tbaa !5
  %1860 = load i8, ptr %127, align 1, !tbaa !171, !range !147, !noundef !148
  %1861 = trunc i8 %1860 to i1
  br i1 %1861, label %1892, label %1862

1862:                                             ; preds = %1859
  %1863 = load ptr, ptr %124, align 8, !tbaa !5
  %1864 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1863, i32 0, i32 1
  %1865 = load ptr, ptr %145, align 8, !tbaa !5
  %1866 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1865, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1866, ptr align 8 %1864, i64 4, i1 false), !tbaa.struct !166
  %1867 = load i8, ptr %142, align 1, !tbaa !171, !range !147, !noundef !148
  %1868 = trunc i8 %1867 to i1
  br i1 %1868, label %1869, label %1891

1869:                                             ; preds = %1862
  %1870 = load ptr, ptr %124, align 8, !tbaa !5
  %1871 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1870, i32 0, i32 10
  call void @llvm.lifetime.start.p0(i64 4, ptr %146) #9
  %1872 = load i32, ptr %123, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %146, i32 noundef %1872)
          to label %1873 unwind label %1887

1873:                                             ; preds = %1869
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1871, ptr noundef nonnull align 4 dereferenceable(4) %146) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #9
  br label %1891

1874:                                             ; preds = %1841
  %1875 = landingpad { ptr, i32 }
          cleanup
  %1876 = extractvalue { ptr, i32 } %1875, 0
  store ptr %1876, ptr %19, align 8
  %1877 = extractvalue { ptr, i32 } %1875, 1
  store i32 %1877, ptr %20, align 4
  br label %1882

1878:                                             ; preds = %1844
  %1879 = landingpad { ptr, i32 }
          cleanup
  %1880 = extractvalue { ptr, i32 } %1879, 0
  store ptr %1880, ptr %19, align 8
  %1881 = extractvalue { ptr, i32 } %1879, 1
  store i32 %1881, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  br label %1882

1882:                                             ; preds = %1878, %1874
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  br label %1894

1883:                                             ; preds = %1849
  %1884 = landingpad { ptr, i32 }
          cleanup
  %1885 = extractvalue { ptr, i32 } %1884, 0
  store ptr %1885, ptr %19, align 8
  %1886 = extractvalue { ptr, i32 } %1884, 1
  store i32 %1886, ptr %20, align 4
  br label %1893

1887:                                             ; preds = %1869
  %1888 = landingpad { ptr, i32 }
          cleanup
  %1889 = extractvalue { ptr, i32 } %1888, 0
  store ptr %1889, ptr %19, align 8
  %1890 = extractvalue { ptr, i32 } %1888, 1
  store i32 %1890, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #9
  br label %1893

1891:                                             ; preds = %1873, %1862
  br label %1892

1892:                                             ; preds = %1891, %1859
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %142) #9
  br label %1900

1893:                                             ; preds = %1887, %1883
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #9
  br label %1894

1894:                                             ; preds = %1893, %1882
  call void @llvm.lifetime.end.p0(i64 1, ptr %142) #9
  br label %1918

1895:                                             ; preds = %1838
  %1896 = load i32, ptr %122, align 4, !tbaa !15
  %1897 = load i32, ptr %123, align 4, !tbaa !15
  %1898 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1896, i32 noundef %1897, ptr noundef nonnull align 8 dereferenceable(32) %128, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1899 unwind label %1682

1899:                                             ; preds = %1895
  br label %1900

1900:                                             ; preds = %1899, %1892
  %1901 = load i32, ptr %123, align 4, !tbaa !15
  %1902 = load ptr, ptr %5, align 8, !tbaa !5
  %1903 = getelementptr inbounds i32, ptr %1902, i64 2
  %1904 = load i32, ptr %1903, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1901, i32 noundef %1904)
          to label %1905 unwind label %1682

1905:                                             ; preds = %1900
  %1906 = load ptr, ptr %125, align 8, !tbaa !5
  %1907 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1906, i32 0, i32 14
  %1908 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1907, i32 0, i32 4
  %1909 = load i8, ptr %1908, align 2, !tbaa !175, !range !147, !noundef !148
  %1910 = trunc i8 %1909 to i1
  br i1 %1910, label %1911, label %1917

1911:                                             ; preds = %1905
  %1912 = load i32, ptr %123, align 4, !tbaa !15
  %1913 = load ptr, ptr %5, align 8, !tbaa !5
  %1914 = getelementptr inbounds i32, ptr %1913, i64 5
  %1915 = load i32, ptr %1914, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1912, i32 noundef %1915)
          to label %1916 unwind label %1682

1916:                                             ; preds = %1911
  br label %1917

1917:                                             ; preds = %1916, %1905
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %128) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %127) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %126) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #9
  br label %2903

1918:                                             ; preds = %1894, %1837, %1827, %1756, %1740, %1682, %1678
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %128) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %127) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %126) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #9
  br label %2904

1919:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #9
  %1920 = load ptr, ptr %5, align 8, !tbaa !5
  %1921 = getelementptr inbounds i32, ptr %1920, i64 0
  %1922 = load i32, ptr %1921, align 4, !tbaa !15
  %1923 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1922)
  store ptr %1923, ptr %147, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %148) #9
  %1924 = load ptr, ptr %5, align 8, !tbaa !5
  %1925 = getelementptr inbounds i32, ptr %1924, i64 2
  %1926 = load i32, ptr %1925, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %148, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1926, i1 noundef zeroext true)
  %1927 = load ptr, ptr %147, align 8, !tbaa !5
  %1928 = icmp ne ptr %1927, null
  br i1 %1928, label %1929, label %1979

1929:                                             ; preds = %1919
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #9
  %1930 = load ptr, ptr %147, align 8, !tbaa !5
  %1931 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1930, i32 0, i32 1
  %1932 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1931)
          to label %1933 unwind label %1960

1933:                                             ; preds = %1929
  %1934 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1932)
          to label %1935 unwind label %1960

1935:                                             ; preds = %1933
  store ptr %1934, ptr %149, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %150) #9
  %1936 = load ptr, ptr %149, align 8, !tbaa !5
  %1937 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1936, i32 0, i32 14
  %1938 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1937, i32 0, i32 0
  %1939 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1938)
          to label %1940 unwind label %1964

1940:                                             ; preds = %1935
  %1941 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1939)
          to label %1942 unwind label %1964

1942:                                             ; preds = %1940
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %150, ptr noundef nonnull align 8 dereferenceable(336) %1941)
          to label %1943 unwind label %1964

1943:                                             ; preds = %1942
  %1944 = load ptr, ptr %149, align 8, !tbaa !5
  %1945 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1944, i32 0, i32 14
  %1946 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1945, i32 0, i32 6
  %1947 = load i32, ptr %1946, align 8, !tbaa !177
  %1948 = invoke noundef i32 @_ZL26image_format_to_componentsN3spv11ImageFormatE(i32 noundef %1947)
          to label %1949 unwind label %1968

1949:                                             ; preds = %1943
  %1950 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %150, i32 0, i32 4
  store i32 %1948, ptr %1950, align 8, !tbaa !167
  call void @llvm.lifetime.start.p0(i64 32, ptr %151) #9
  %1951 = load ptr, ptr %5, align 8, !tbaa !5
  %1952 = getelementptr inbounds i32, ptr %1951, i64 2
  %1953 = load i32, ptr %1952, align 4, !tbaa !15
  %1954 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %1953)
          to label %1955 unwind label %1972

1955:                                             ; preds = %1949
  %1956 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1954, i32 0, i32 4
  %1957 = load i32, ptr %1956, align 8, !tbaa !167
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %151, ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(336) %150, i32 noundef %1957, ptr noundef nonnull align 8 dereferenceable(32) %148)
          to label %1958 unwind label %1972

1958:                                             ; preds = %1955
  %1959 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull align 8 dereferenceable(32) %151) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %151) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %150) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %150) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #9
  br label %1979

1960:                                             ; preds = %1933, %1929
  %1961 = landingpad { ptr, i32 }
          cleanup
  %1962 = extractvalue { ptr, i32 } %1961, 0
  store ptr %1962, ptr %19, align 8
  %1963 = extractvalue { ptr, i32 } %1961, 1
  store i32 %1963, ptr %20, align 4
  br label %1978

1964:                                             ; preds = %1942, %1940, %1935
  %1965 = landingpad { ptr, i32 }
          cleanup
  %1966 = extractvalue { ptr, i32 } %1965, 0
  store ptr %1966, ptr %19, align 8
  %1967 = extractvalue { ptr, i32 } %1965, 1
  store i32 %1967, ptr %20, align 4
  br label %1977

1968:                                             ; preds = %1943
  %1969 = landingpad { ptr, i32 }
          cleanup
  %1970 = extractvalue { ptr, i32 } %1969, 0
  store ptr %1970, ptr %19, align 8
  %1971 = extractvalue { ptr, i32 } %1969, 1
  store i32 %1971, ptr %20, align 4
  br label %1976

1972:                                             ; preds = %1955, %1949
  %1973 = landingpad { ptr, i32 }
          cleanup
  %1974 = extractvalue { ptr, i32 } %1973, 0
  store ptr %1974, ptr %19, align 8
  %1975 = extractvalue { ptr, i32 } %1973, 1
  store i32 %1975, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %151) #9
  br label %1976

1976:                                             ; preds = %1972, %1968
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %150) #9
  br label %1977

1977:                                             ; preds = %1976, %1964
  call void @llvm.lifetime.end.p0(i64 336, ptr %150) #9
  br label %1978

1978:                                             ; preds = %1977, %1960
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #9
  br label %2016

1979:                                             ; preds = %1958, %1919
  call void @llvm.lifetime.start.p0(i64 32, ptr %152) #9
  %1980 = load ptr, ptr %5, align 8, !tbaa !5
  %1981 = getelementptr inbounds i32, ptr %1980, i64 0
  %1982 = load i32, ptr %1981, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %152, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1982)
          to label %1983 unwind label %1997

1983:                                             ; preds = %1979
  call void @llvm.lifetime.start.p0(i64 32, ptr %153) #9
  %1984 = load ptr, ptr %5, align 8, !tbaa !5
  %1985 = getelementptr inbounds i32, ptr %1984, i64 1
  %1986 = load i32, ptr %1985, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %153, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %1986, i1 noundef zeroext true)
          to label %1987 unwind label %2001

1987:                                             ; preds = %1983
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA5_S8_RS7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(32) %152, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 8 dereferenceable(32) %153, ptr noundef nonnull align 1 dereferenceable(5) @.str.644, ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1988 unwind label %2005

1988:                                             ; preds = %1987
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %153) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #9
  %1989 = load ptr, ptr %147, align 8, !tbaa !5
  %1990 = icmp ne ptr %1989, null
  br i1 %1990, label %1991, label %2015

1991:                                             ; preds = %1988
  %1992 = load ptr, ptr %147, align 8, !tbaa !5
  %1993 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler27variable_storage_is_aliasedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %219, ptr noundef nonnull align 8 dereferenceable(176) %1992)
          to label %1994 unwind label %2011

1994:                                             ; preds = %1991
  br i1 %1993, label %1995, label %2015

1995:                                             ; preds = %1994
  invoke void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %219)
          to label %1996 unwind label %2011

1996:                                             ; preds = %1995
  br label %2015

1997:                                             ; preds = %1979
  %1998 = landingpad { ptr, i32 }
          cleanup
  %1999 = extractvalue { ptr, i32 } %1998, 0
  store ptr %1999, ptr %19, align 8
  %2000 = extractvalue { ptr, i32 } %1998, 1
  store i32 %2000, ptr %20, align 4
  br label %2010

2001:                                             ; preds = %1983
  %2002 = landingpad { ptr, i32 }
          cleanup
  %2003 = extractvalue { ptr, i32 } %2002, 0
  store ptr %2003, ptr %19, align 8
  %2004 = extractvalue { ptr, i32 } %2002, 1
  store i32 %2004, ptr %20, align 4
  br label %2009

2005:                                             ; preds = %1987
  %2006 = landingpad { ptr, i32 }
          cleanup
  %2007 = extractvalue { ptr, i32 } %2006, 0
  store ptr %2007, ptr %19, align 8
  %2008 = extractvalue { ptr, i32 } %2006, 1
  store i32 %2008, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #9
  br label %2009

2009:                                             ; preds = %2005, %2001
  call void @llvm.lifetime.end.p0(i64 32, ptr %153) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #9
  br label %2010

2010:                                             ; preds = %2009, %1997
  call void @llvm.lifetime.end.p0(i64 32, ptr %152) #9
  br label %2016

2011:                                             ; preds = %1995, %1991
  %2012 = landingpad { ptr, i32 }
          cleanup
  %2013 = extractvalue { ptr, i32 } %2012, 0
  store ptr %2013, ptr %19, align 8
  %2014 = extractvalue { ptr, i32 } %2012, 1
  store i32 %2014, ptr %20, align 4
  br label %2016

2015:                                             ; preds = %1996, %1994, %1988
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #9
  br label %2903

2016:                                             ; preds = %2011, %2010, %1978
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #9
  br label %2904

2017:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %154) #9
  %2018 = load ptr, ptr %5, align 8, !tbaa !5
  %2019 = getelementptr inbounds i32, ptr %2018, i64 0
  %2020 = load i32, ptr %2019, align 4, !tbaa !15
  store i32 %2020, ptr %154, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %155) #9
  %2021 = load ptr, ptr %5, align 8, !tbaa !5
  %2022 = getelementptr inbounds i32, ptr %2021, i64 1
  %2023 = load i32, ptr %2022, align 4, !tbaa !15
  store i32 %2023, ptr %155, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %156) #9
  %2024 = load ptr, ptr %5, align 8, !tbaa !5
  %2025 = getelementptr inbounds i32, ptr %2024, i64 2
  %2026 = load i32, ptr %2025, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %156, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2026, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %157) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %158) #9
  %2027 = load ptr, ptr %5, align 8, !tbaa !5
  %2028 = getelementptr inbounds i32, ptr %2027, i64 3
  %2029 = load i32, ptr %2028, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %158, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2029, i1 noundef zeroext true)
          to label %2030 unwind label %2057

2030:                                             ; preds = %2017
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %157, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 8 dereferenceable(32) %158, ptr noundef nonnull align 1 dereferenceable(2) @.str.417)
          to label %2031 unwind label %2061

2031:                                             ; preds = %2030
  %2032 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %156, ptr noundef nonnull align 8 dereferenceable(32) %157)
          to label %2033 unwind label %2065

2033:                                             ; preds = %2031
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #9
  %2034 = load i32, ptr %155, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %160) #9
  store i8 1, ptr %160, align 1, !tbaa !171
  %2035 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2034, ptr noundef nonnull align 8 dereferenceable(32) %156, ptr noundef nonnull align 4 dereferenceable(4) %154, ptr noundef nonnull align 1 dereferenceable(1) %160)
          to label %2036 unwind label %2071

2036:                                             ; preds = %2033
  call void @llvm.lifetime.end.p0(i64 1, ptr %160) #9
  store ptr %2035, ptr %159, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #9
  %2037 = load ptr, ptr %5, align 8, !tbaa !5
  %2038 = getelementptr inbounds i32, ptr %2037, i64 2
  %2039 = load i32, ptr %2038, align 4, !tbaa !15
  %2040 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2039)
          to label %2041 unwind label %2075

2041:                                             ; preds = %2036
  store ptr %2040, ptr %161, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %162) #9
  %2042 = load ptr, ptr %161, align 8, !tbaa !5
  %2043 = icmp ne ptr %2042, null
  br i1 %2043, label %2044, label %2047

2044:                                             ; preds = %2041
  %2045 = load ptr, ptr %161, align 8, !tbaa !5
  %2046 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2045, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %162, ptr align 8 %2046, i64 4, i1 false), !tbaa.struct !166
  br label %2049

2047:                                             ; preds = %2041
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %162, i32 noundef 0)
          to label %2048 unwind label %2079

2048:                                             ; preds = %2047
  br label %2049

2049:                                             ; preds = %2048, %2044
  %2050 = load ptr, ptr %159, align 8, !tbaa !5
  %2051 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2050, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2051, ptr align 4 %162, i64 4, i1 false), !tbaa.struct !166
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #9
  %2052 = load i32, ptr %155, align 4, !tbaa !15
  %2053 = load ptr, ptr %5, align 8, !tbaa !5
  %2054 = getelementptr inbounds i32, ptr %2053, i64 3
  %2055 = load i32, ptr %2054, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2052, i32 noundef %2055)
          to label %2056 unwind label %2075

2056:                                             ; preds = %2049
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %156) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #9
  br label %2903

2057:                                             ; preds = %2017
  %2058 = landingpad { ptr, i32 }
          cleanup
  %2059 = extractvalue { ptr, i32 } %2058, 0
  store ptr %2059, ptr %19, align 8
  %2060 = extractvalue { ptr, i32 } %2058, 1
  store i32 %2060, ptr %20, align 4
  br label %2070

2061:                                             ; preds = %2030
  %2062 = landingpad { ptr, i32 }
          cleanup
  %2063 = extractvalue { ptr, i32 } %2062, 0
  store ptr %2063, ptr %19, align 8
  %2064 = extractvalue { ptr, i32 } %2062, 1
  store i32 %2064, ptr %20, align 4
  br label %2069

2065:                                             ; preds = %2031
  %2066 = landingpad { ptr, i32 }
          cleanup
  %2067 = extractvalue { ptr, i32 } %2066, 0
  store ptr %2067, ptr %19, align 8
  %2068 = extractvalue { ptr, i32 } %2066, 1
  store i32 %2068, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  br label %2069

2069:                                             ; preds = %2065, %2061
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %158) #9
  br label %2070

2070:                                             ; preds = %2069, %2057
  call void @llvm.lifetime.end.p0(i64 32, ptr %158) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #9
  br label %2085

2071:                                             ; preds = %2033
  %2072 = landingpad { ptr, i32 }
          cleanup
  %2073 = extractvalue { ptr, i32 } %2072, 0
  store ptr %2073, ptr %19, align 8
  %2074 = extractvalue { ptr, i32 } %2072, 1
  store i32 %2074, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %160) #9
  br label %2084

2075:                                             ; preds = %2049, %2036
  %2076 = landingpad { ptr, i32 }
          cleanup
  %2077 = extractvalue { ptr, i32 } %2076, 0
  store ptr %2077, ptr %19, align 8
  %2078 = extractvalue { ptr, i32 } %2076, 1
  store i32 %2078, ptr %20, align 4
  br label %2083

2079:                                             ; preds = %2047
  %2080 = landingpad { ptr, i32 }
          cleanup
  %2081 = extractvalue { ptr, i32 } %2080, 0
  store ptr %2081, ptr %19, align 8
  %2082 = extractvalue { ptr, i32 } %2080, 1
  store i32 %2082, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #9
  br label %2083

2083:                                             ; preds = %2079, %2075
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #9
  br label %2084

2084:                                             ; preds = %2083, %2071
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #9
  br label %2085

2085:                                             ; preds = %2084, %2070
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %156) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #9
  br label %2904

2086:                                             ; preds = %2, %2, %2
  %2087 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2087, ptr noundef @.str.645)
          to label %2088 unwind label %2089

2088:                                             ; preds = %2086
  call void @__cxa_throw(ptr %2087, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2089:                                             ; preds = %2086
  %2090 = landingpad { ptr, i32 }
          cleanup
  %2091 = extractvalue { ptr, i32 } %2090, 0
  store ptr %2091, ptr %19, align 8
  %2092 = extractvalue { ptr, i32 } %2090, 1
  store i32 %2092, ptr %20, align 4
  call void @__cxa_free_exception(ptr %2087) #9
  br label %2904

2093:                                             ; preds = %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2
  %2094 = load ptr, ptr %5, align 8, !tbaa !5
  %2095 = load ptr, ptr %4, align 8, !tbaa !5
  %2096 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %2095, i32 0, i32 3
  %2097 = load i32, ptr %2096, align 4, !tbaa !176
  %2098 = load i32, ptr %6, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerHLSL11emit_atomicEPKjjN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef %2094, i32 noundef %2097, i32 noundef %2098)
  br label %2903

2099:                                             ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %163) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %164) #9
  %2100 = load i32, ptr %6, align 4, !tbaa !13
  %2101 = icmp eq i32 %2100, 225
  br i1 %2101, label %2102, label %2111

2102:                                             ; preds = %2099
  %2103 = load ptr, ptr %5, align 8, !tbaa !5
  %2104 = getelementptr inbounds i32, ptr %2103, i64 0
  %2105 = load i32, ptr %2104, align 4, !tbaa !15
  %2106 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2105)
  store i32 %2106, ptr %163, align 4, !tbaa !15
  %2107 = load ptr, ptr %5, align 8, !tbaa !5
  %2108 = getelementptr inbounds i32, ptr %2107, i64 1
  %2109 = load i32, ptr %2108, align 4, !tbaa !15
  %2110 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2109)
  store i32 %2110, ptr %164, align 4, !tbaa !15
  br label %2120

2111:                                             ; preds = %2099
  %2112 = load ptr, ptr %5, align 8, !tbaa !5
  %2113 = getelementptr inbounds i32, ptr %2112, i64 1
  %2114 = load i32, ptr %2113, align 4, !tbaa !15
  %2115 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2114)
  store i32 %2115, ptr %163, align 4, !tbaa !15
  %2116 = load ptr, ptr %5, align 8, !tbaa !5
  %2117 = getelementptr inbounds i32, ptr %2116, i64 2
  %2118 = load i32, ptr %2117, align 4, !tbaa !15
  %2119 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2118)
  store i32 %2119, ptr %164, align 4, !tbaa !15
  br label %2120

2120:                                             ; preds = %2111, %2102
  %2121 = load i32, ptr %163, align 4, !tbaa !15
  %2122 = icmp eq i32 %2121, 3
  br i1 %2122, label %2123, label %2124

2123:                                             ; preds = %2120
  store i32 2, ptr %165, align 4
  br label %2260

2124:                                             ; preds = %2120
  %2125 = load i32, ptr %164, align 4, !tbaa !15
  %2126 = call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %2125)
  store i32 %2126, ptr %164, align 4, !tbaa !15
  %2127 = load i32, ptr %6, align 4, !tbaa !13
  %2128 = icmp eq i32 %2127, 225
  br i1 %2128, label %2129, label %2205

2129:                                             ; preds = %2124
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #9
  %2130 = load ptr, ptr %4, align 8, !tbaa !5
  %2131 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL29get_next_instruction_in_blockERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %2130)
  store ptr %2131, ptr %166, align 8, !tbaa !5
  %2132 = load ptr, ptr %166, align 8, !tbaa !5
  %2133 = icmp ne ptr %2132, null
  br i1 %2133, label %2134, label %2201

2134:                                             ; preds = %2129
  %2135 = load ptr, ptr %166, align 8, !tbaa !5
  %2136 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %2135, i32 0, i32 0
  %2137 = load i16, ptr %2136, align 4, !tbaa !9
  %2138 = zext i16 %2137 to i32
  %2139 = icmp eq i32 %2138, 224
  br i1 %2139, label %2140, label %2201

2140:                                             ; preds = %2134
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #9
  %2141 = load ptr, ptr %166, align 8, !tbaa !5
  %2142 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %219, ptr noundef nonnull align 4 dereferenceable(12) %2141)
  store ptr %2142, ptr %167, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %168) #9
  %2143 = load ptr, ptr %167, align 8, !tbaa !5
  %2144 = getelementptr inbounds i32, ptr %2143, i64 1
  %2145 = load i32, ptr %2144, align 4, !tbaa !15
  %2146 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2145)
  store i32 %2146, ptr %168, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %169) #9
  %2147 = load ptr, ptr %167, align 8, !tbaa !5
  %2148 = getelementptr inbounds i32, ptr %2147, i64 2
  %2149 = load i32, ptr %2148, align 4, !tbaa !15
  %2150 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2149)
  store i32 %2150, ptr %169, align 4, !tbaa !15
  %2151 = load i32, ptr %169, align 4, !tbaa !15
  %2152 = call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %2151)
  store i32 %2152, ptr %169, align 4, !tbaa !15
  %2153 = load i32, ptr %169, align 4, !tbaa !15
  %2154 = icmp eq i32 %2153, 0
  br i1 %2154, label %2155, label %2156

2155:                                             ; preds = %2140
  store i32 256, ptr %169, align 4, !tbaa !15
  br label %2156

2156:                                             ; preds = %2155, %2140
  call void @llvm.lifetime.start.p0(i64 1, ptr %170) #9
  store i8 0, ptr %170, align 1, !tbaa !171
  %2157 = load i32, ptr %168, align 4, !tbaa !15
  %2158 = load i32, ptr %163, align 4, !tbaa !15
  %2159 = icmp eq i32 %2157, %2158
  br i1 %2159, label %2160, label %2161

2160:                                             ; preds = %2156
  store i8 1, ptr %170, align 1, !tbaa !171
  br label %2187

2161:                                             ; preds = %2156
  %2162 = load i32, ptr %169, align 4, !tbaa !15
  %2163 = icmp eq i32 %2162, 256
  br i1 %2163, label %2164, label %2178

2164:                                             ; preds = %2161
  %2165 = load i32, ptr %168, align 4, !tbaa !15
  %2166 = icmp eq i32 %2165, 1
  br i1 %2166, label %2170, label %2167

2167:                                             ; preds = %2164
  %2168 = load i32, ptr %168, align 4, !tbaa !15
  %2169 = icmp eq i32 %2168, 2
  br i1 %2169, label %2170, label %2177

2170:                                             ; preds = %2167, %2164
  %2171 = load i32, ptr %163, align 4, !tbaa !15
  %2172 = icmp eq i32 %2171, 1
  br i1 %2172, label %2176, label %2173

2173:                                             ; preds = %2170
  %2174 = load i32, ptr %163, align 4, !tbaa !15
  %2175 = icmp eq i32 %2174, 2
  br i1 %2175, label %2176, label %2177

2176:                                             ; preds = %2173, %2170
  store i8 1, ptr %170, align 1, !tbaa !171
  br label %2177

2177:                                             ; preds = %2176, %2173, %2167
  br label %2186

2178:                                             ; preds = %2161
  %2179 = load i32, ptr %163, align 4, !tbaa !15
  %2180 = icmp eq i32 %2179, 2
  br i1 %2180, label %2181, label %2185

2181:                                             ; preds = %2178
  %2182 = load i32, ptr %168, align 4, !tbaa !15
  %2183 = icmp eq i32 %2182, 1
  br i1 %2183, label %2184, label %2185

2184:                                             ; preds = %2181
  store i8 1, ptr %170, align 1, !tbaa !171
  br label %2185

2185:                                             ; preds = %2184, %2181, %2178
  br label %2186

2186:                                             ; preds = %2185, %2177
  br label %2187

2187:                                             ; preds = %2186, %2160
  %2188 = load i8, ptr %170, align 1, !tbaa !171, !range !147, !noundef !148
  %2189 = trunc i8 %2188 to i1
  br i1 %2189, label %2190, label %2197

2190:                                             ; preds = %2187
  %2191 = load i32, ptr %164, align 4, !tbaa !15
  %2192 = load i32, ptr %169, align 4, !tbaa !15
  %2193 = and i32 %2191, %2192
  %2194 = load i32, ptr %164, align 4, !tbaa !15
  %2195 = icmp eq i32 %2193, %2194
  br i1 %2195, label %2196, label %2197

2196:                                             ; preds = %2190
  store i32 2, ptr %165, align 4
  br label %2198

2197:                                             ; preds = %2190, %2187
  store i32 0, ptr %165, align 4
  br label %2198

2198:                                             ; preds = %2197, %2196
  call void @llvm.lifetime.end.p0(i64 1, ptr %170) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #9
  %2199 = load i32, ptr %165, align 4
  switch i32 %2199, label %2202 [
    i32 0, label %2200
  ]

2200:                                             ; preds = %2198
  br label %2201

2201:                                             ; preds = %2200, %2134, %2129
  store i32 0, ptr %165, align 4
  br label %2202

2202:                                             ; preds = %2201, %2198
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #9
  %2203 = load i32, ptr %165, align 4
  switch i32 %2203, label %2260 [
    i32 0, label %2204
  ]

2204:                                             ; preds = %2202
  br label %2205

2205:                                             ; preds = %2204, %2124
  %2206 = load i32, ptr %164, align 4, !tbaa !15
  %2207 = icmp ne i32 %2206, 0
  br i1 %2207, label %2211, label %2208

2208:                                             ; preds = %2205
  %2209 = load i32, ptr %6, align 4, !tbaa !13
  %2210 = icmp eq i32 %2209, 224
  br i1 %2210, label %2211, label %2223

2211:                                             ; preds = %2208, %2205
  %2212 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %219, i32 0, i32 1
  %2213 = load ptr, ptr %2212, align 8, !tbaa !178
  %2214 = icmp ne ptr %2213, null
  br i1 %2214, label %2215, label %2216

2215:                                             ; preds = %2211
  br label %2218

2216:                                             ; preds = %2211
  call void @__assert_fail(ptr noundef @.str.646, ptr noundef @.str.539, i32 noundef 6345, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerHLSL16emit_instructionERKNS_11InstructionE) #11
  unreachable

2217:                                             ; No predecessors!
  br label %2218

2218:                                             ; preds = %2217, %2215
  %2219 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %219, i32 0, i32 1
  %2220 = load ptr, ptr %2219, align 8, !tbaa !178
  %2221 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2220, i32 0, i32 1
  %2222 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2221)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2222)
  call void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %219)
  br label %2223

2223:                                             ; preds = %2218, %2208
  %2224 = load i32, ptr %6, align 4, !tbaa !13
  %2225 = icmp eq i32 %2224, 224
  br i1 %2225, label %2226, label %2244

2226:                                             ; preds = %2223
  %2227 = load i32, ptr %164, align 4, !tbaa !15
  %2228 = icmp eq i32 %2227, 256
  br i1 %2228, label %2232, label %2229

2229:                                             ; preds = %2226
  %2230 = load i32, ptr %164, align 4, !tbaa !15
  %2231 = icmp eq i32 %2230, 0
  br i1 %2231, label %2232, label %2233

2232:                                             ; preds = %2229, %2226
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA35_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(35) @.str.647)
  br label %2243

2233:                                             ; preds = %2229
  %2234 = load i32, ptr %164, align 4, !tbaa !15
  %2235 = icmp ne i32 %2234, 0
  br i1 %2235, label %2236, label %2241

2236:                                             ; preds = %2233
  %2237 = load i32, ptr %164, align 4, !tbaa !15
  %2238 = and i32 %2237, 256
  %2239 = icmp eq i32 %2238, 0
  br i1 %2239, label %2240, label %2241

2240:                                             ; preds = %2236
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA36_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(36) @.str.648)
  br label %2242

2241:                                             ; preds = %2236, %2233
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA33_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(33) @.str.649)
  br label %2242

2242:                                             ; preds = %2241, %2240
  br label %2243

2243:                                             ; preds = %2242, %2232
  br label %2259

2244:                                             ; preds = %2223
  %2245 = load i32, ptr %164, align 4, !tbaa !15
  %2246 = icmp eq i32 %2245, 256
  br i1 %2246, label %2247, label %2248

2247:                                             ; preds = %2244
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(22) @.str.650)
  br label %2258

2248:                                             ; preds = %2244
  %2249 = load i32, ptr %164, align 4, !tbaa !15
  %2250 = icmp ne i32 %2249, 0
  br i1 %2250, label %2251, label %2256

2251:                                             ; preds = %2248
  %2252 = load i32, ptr %164, align 4, !tbaa !15
  %2253 = and i32 %2252, 256
  %2254 = icmp eq i32 %2253, 0
  br i1 %2254, label %2255, label %2256

2255:                                             ; preds = %2251
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(23) @.str.651)
  br label %2257

2256:                                             ; preds = %2251, %2248
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(20) @.str.652)
  br label %2257

2257:                                             ; preds = %2256, %2255
  br label %2258

2258:                                             ; preds = %2257, %2247
  br label %2259

2259:                                             ; preds = %2258, %2243
  store i32 2, ptr %165, align 4
  br label %2260

2260:                                             ; preds = %2259, %2202, %2123
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #9
  br label %2903

2261:                                             ; preds = %2
  %2262 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 10
  %2263 = load i8, ptr %2262, align 8, !tbaa !179, !range !147, !noundef !148
  %2264 = trunc i8 %2263 to i1
  br i1 %2264, label %2267, label %2265

2265:                                             ; preds = %2261
  %2266 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 10
  store i8 1, ptr %2266, align 8, !tbaa !179
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %219)
  br label %2267

2267:                                             ; preds = %2265, %2261
  call void @llvm.lifetime.start.p0(i64 32, ptr %171) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %172) #9
  %2268 = load ptr, ptr %5, align 8, !tbaa !5
  %2269 = getelementptr inbounds i32, ptr %2268, i64 2
  %2270 = load i32, ptr %2269, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %172, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2270, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %173) #9
  %2271 = load ptr, ptr %5, align 8, !tbaa !5
  %2272 = getelementptr inbounds i32, ptr %2271, i64 3
  %2273 = load i32, ptr %2272, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %173, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2273, i1 noundef zeroext true)
          to label %2274 unwind label %2328

2274:                                             ; preds = %2267
  call void @llvm.lifetime.start.p0(i64 32, ptr %174) #9
  %2275 = load ptr, ptr %5, align 8, !tbaa !5
  %2276 = getelementptr inbounds i32, ptr %2275, i64 4
  %2277 = load i32, ptr %2276, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %174, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2277, i1 noundef zeroext true)
          to label %2278 unwind label %2332

2278:                                             ; preds = %2274
  call void @llvm.lifetime.start.p0(i64 32, ptr %175) #9
  %2279 = load ptr, ptr %5, align 8, !tbaa !5
  %2280 = getelementptr inbounds i32, ptr %2279, i64 5
  %2281 = load i32, ptr %2280, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %175, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2281, i1 noundef zeroext true)
          to label %2282 unwind label %2336

2282:                                             ; preds = %2278
  invoke void @_ZN11spirv_cross4joinIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_S9_SB_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %171, ptr noundef nonnull align 1 dereferenceable(19) @.str.653, ptr noundef nonnull align 8 dereferenceable(32) %172, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %173, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %2283 unwind label %2340

2283:                                             ; preds = %2282
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %175) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %174) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %173) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %172) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %176) #9
  %2284 = load ptr, ptr %5, align 8, !tbaa !5
  %2285 = getelementptr inbounds i32, ptr %2284, i64 2
  %2286 = load i32, ptr %2285, align 4, !tbaa !15
  %2287 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2286)
          to label %2288 unwind label %2347

2288:                                             ; preds = %2283
  br i1 %2287, label %2289, label %2307

2289:                                             ; preds = %2288
  %2290 = load ptr, ptr %5, align 8, !tbaa !5
  %2291 = getelementptr inbounds i32, ptr %2290, i64 3
  %2292 = load i32, ptr %2291, align 4, !tbaa !15
  %2293 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2292)
          to label %2294 unwind label %2347

2294:                                             ; preds = %2289
  br i1 %2293, label %2295, label %2307

2295:                                             ; preds = %2294
  %2296 = load ptr, ptr %5, align 8, !tbaa !5
  %2297 = getelementptr inbounds i32, ptr %2296, i64 4
  %2298 = load i32, ptr %2297, align 4, !tbaa !15
  %2299 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2298)
          to label %2300 unwind label %2347

2300:                                             ; preds = %2295
  br i1 %2299, label %2301, label %2307

2301:                                             ; preds = %2300
  %2302 = load ptr, ptr %5, align 8, !tbaa !5
  %2303 = getelementptr inbounds i32, ptr %2302, i64 5
  %2304 = load i32, ptr %2303, align 4, !tbaa !15
  %2305 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2304)
          to label %2306 unwind label %2347

2306:                                             ; preds = %2301
  br label %2307

2307:                                             ; preds = %2306, %2300, %2294, %2288
  %2308 = phi i1 [ false, %2300 ], [ false, %2294 ], [ false, %2288 ], [ %2305, %2306 ]
  %2309 = zext i1 %2308 to i8
  store i8 %2309, ptr %176, align 1, !tbaa !171
  call void @llvm.lifetime.start.p0(i64 8, ptr %177) #9
  %2310 = load ptr, ptr %5, align 8, !tbaa !5
  %2311 = getelementptr inbounds i32, ptr %2310, i64 0
  %2312 = load i32, ptr %2311, align 4, !tbaa !15
  %2313 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2312)
          to label %2314 unwind label %2351

2314:                                             ; preds = %2307
  store ptr %2313, ptr %177, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %178) #9
  %2315 = load ptr, ptr %177, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %178, ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(336) %2315, i32 noundef 8, ptr noundef nonnull align 8 dereferenceable(32) %171)
          to label %2316 unwind label %2355

2316:                                             ; preds = %2314
  %2317 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %171, ptr noundef nonnull align 8 dereferenceable(32) %178) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %178) #9
  %2318 = load ptr, ptr %5, align 8, !tbaa !5
  %2319 = getelementptr inbounds i32, ptr %2318, i64 0
  %2320 = load i32, ptr %2319, align 4, !tbaa !15
  %2321 = load ptr, ptr %5, align 8, !tbaa !5
  %2322 = getelementptr inbounds i32, ptr %2321, i64 1
  %2323 = load i32, ptr %2322, align 4, !tbaa !15
  %2324 = load i8, ptr %176, align 1, !tbaa !171, !range !147, !noundef !148
  %2325 = trunc i8 %2324 to i1
  %2326 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2320, i32 noundef %2323, ptr noundef nonnull align 8 dereferenceable(32) %171, i1 noundef zeroext %2325, i1 noundef zeroext false)
          to label %2327 unwind label %2351

2327:                                             ; preds = %2316
  store i32 2, ptr %165, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %176) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %171) #9
  br label %2903

2328:                                             ; preds = %2267
  %2329 = landingpad { ptr, i32 }
          cleanup
  %2330 = extractvalue { ptr, i32 } %2329, 0
  store ptr %2330, ptr %19, align 8
  %2331 = extractvalue { ptr, i32 } %2329, 1
  store i32 %2331, ptr %20, align 4
  br label %2346

2332:                                             ; preds = %2274
  %2333 = landingpad { ptr, i32 }
          cleanup
  %2334 = extractvalue { ptr, i32 } %2333, 0
  store ptr %2334, ptr %19, align 8
  %2335 = extractvalue { ptr, i32 } %2333, 1
  store i32 %2335, ptr %20, align 4
  br label %2345

2336:                                             ; preds = %2278
  %2337 = landingpad { ptr, i32 }
          cleanup
  %2338 = extractvalue { ptr, i32 } %2337, 0
  store ptr %2338, ptr %19, align 8
  %2339 = extractvalue { ptr, i32 } %2337, 1
  store i32 %2339, ptr %20, align 4
  br label %2344

2340:                                             ; preds = %2282
  %2341 = landingpad { ptr, i32 }
          cleanup
  %2342 = extractvalue { ptr, i32 } %2341, 0
  store ptr %2342, ptr %19, align 8
  %2343 = extractvalue { ptr, i32 } %2341, 1
  store i32 %2343, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #9
  br label %2344

2344:                                             ; preds = %2340, %2336
  call void @llvm.lifetime.end.p0(i64 32, ptr %175) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #9
  br label %2345

2345:                                             ; preds = %2344, %2332
  call void @llvm.lifetime.end.p0(i64 32, ptr %174) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #9
  br label %2346

2346:                                             ; preds = %2345, %2328
  call void @llvm.lifetime.end.p0(i64 32, ptr %173) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %172) #9
  br label %2361

2347:                                             ; preds = %2301, %2295, %2289, %2283
  %2348 = landingpad { ptr, i32 }
          cleanup
  %2349 = extractvalue { ptr, i32 } %2348, 0
  store ptr %2349, ptr %19, align 8
  %2350 = extractvalue { ptr, i32 } %2348, 1
  store i32 %2350, ptr %20, align 4
  br label %2360

2351:                                             ; preds = %2316, %2307
  %2352 = landingpad { ptr, i32 }
          cleanup
  %2353 = extractvalue { ptr, i32 } %2352, 0
  store ptr %2353, ptr %19, align 8
  %2354 = extractvalue { ptr, i32 } %2352, 1
  store i32 %2354, ptr %20, align 4
  br label %2359

2355:                                             ; preds = %2314
  %2356 = landingpad { ptr, i32 }
          cleanup
  %2357 = extractvalue { ptr, i32 } %2356, 0
  store ptr %2357, ptr %19, align 8
  %2358 = extractvalue { ptr, i32 } %2356, 1
  store i32 %2358, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %178) #9
  br label %2359

2359:                                             ; preds = %2355, %2351
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #9
  br label %2360

2360:                                             ; preds = %2359, %2347
  call void @llvm.lifetime.end.p0(i64 1, ptr %176) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #9
  br label %2361

2361:                                             ; preds = %2360, %2346
  call void @llvm.lifetime.end.p0(i64 32, ptr %171) #9
  br label %2904

2362:                                             ; preds = %2, %2
  %2363 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 11
  %2364 = load i8, ptr %2363, align 1, !tbaa !180, !range !147, !noundef !148
  %2365 = trunc i8 %2364 to i1
  br i1 %2365, label %2368, label %2366

2366:                                             ; preds = %2362
  %2367 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 11
  store i8 1, ptr %2367, align 1, !tbaa !180
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %219)
  br label %2368

2368:                                             ; preds = %2366, %2362
  %2369 = load i32, ptr %6, align 4, !tbaa !13
  %2370 = icmp eq i32 %2369, 202
  br i1 %2370, label %2371, label %2387

2371:                                             ; preds = %2368
  %2372 = load ptr, ptr %5, align 8, !tbaa !5
  %2373 = getelementptr inbounds i32, ptr %2372, i64 0
  %2374 = load i32, ptr %2373, align 4, !tbaa !15
  %2375 = load ptr, ptr %5, align 8, !tbaa !5
  %2376 = getelementptr inbounds i32, ptr %2375, i64 1
  %2377 = load i32, ptr %2376, align 4, !tbaa !15
  %2378 = load ptr, ptr %5, align 8, !tbaa !5
  %2379 = getelementptr inbounds i32, ptr %2378, i64 2
  %2380 = load i32, ptr %2379, align 4, !tbaa !15
  %2381 = load ptr, ptr %5, align 8, !tbaa !5
  %2382 = getelementptr inbounds i32, ptr %2381, i64 3
  %2383 = load i32, ptr %2382, align 4, !tbaa !15
  %2384 = load ptr, ptr %5, align 8, !tbaa !5
  %2385 = getelementptr inbounds i32, ptr %2384, i64 4
  %2386 = load i32, ptr %2385, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2374, i32 noundef %2377, i32 noundef %2380, i32 noundef %2383, i32 noundef %2386, ptr noundef @.str.654)
  br label %2403

2387:                                             ; preds = %2368
  %2388 = load ptr, ptr %5, align 8, !tbaa !5
  %2389 = getelementptr inbounds i32, ptr %2388, i64 0
  %2390 = load i32, ptr %2389, align 4, !tbaa !15
  %2391 = load ptr, ptr %5, align 8, !tbaa !5
  %2392 = getelementptr inbounds i32, ptr %2391, i64 1
  %2393 = load i32, ptr %2392, align 4, !tbaa !15
  %2394 = load ptr, ptr %5, align 8, !tbaa !5
  %2395 = getelementptr inbounds i32, ptr %2394, i64 2
  %2396 = load i32, ptr %2395, align 4, !tbaa !15
  %2397 = load ptr, ptr %5, align 8, !tbaa !5
  %2398 = getelementptr inbounds i32, ptr %2397, i64 3
  %2399 = load i32, ptr %2398, align 4, !tbaa !15
  %2400 = load ptr, ptr %5, align 8, !tbaa !5
  %2401 = getelementptr inbounds i32, ptr %2400, i64 4
  %2402 = load i32, ptr %2401, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2390, i32 noundef %2393, i32 noundef %2396, i32 noundef %2399, i32 noundef %2402, ptr noundef @.str.655)
  br label %2403

2403:                                             ; preds = %2387, %2371
  br label %2903

2404:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %179) #9
  %2405 = load ptr, ptr %5, align 8, !tbaa !5
  %2406 = getelementptr inbounds i32, ptr %2405, i64 2
  %2407 = load i32, ptr %2406, align 4, !tbaa !15
  %2408 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2407)
  %2409 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2408, i32 0, i32 2
  %2410 = load i32, ptr %2409, align 8, !tbaa !149
  store i32 %2410, ptr %179, align 4, !tbaa !16
  %2411 = load ptr, ptr %5, align 8, !tbaa !5
  %2412 = getelementptr inbounds i32, ptr %2411, i64 0
  %2413 = load i32, ptr %2412, align 4, !tbaa !15
  %2414 = load ptr, ptr %5, align 8, !tbaa !5
  %2415 = getelementptr inbounds i32, ptr %2414, i64 1
  %2416 = load i32, ptr %2415, align 4, !tbaa !15
  %2417 = load ptr, ptr %5, align 8, !tbaa !5
  %2418 = getelementptr inbounds i32, ptr %2417, i64 2
  %2419 = load i32, ptr %2418, align 4, !tbaa !15
  %2420 = load i32, ptr %179, align 4, !tbaa !16
  %2421 = load i32, ptr %179, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2413, i32 noundef %2416, i32 noundef %2419, ptr noundef @.str.656, i32 noundef %2420, i32 noundef %2421)
  store i32 2, ptr %165, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %179) #9
  br label %2903

2422:                                             ; preds = %2
  %2423 = load ptr, ptr %5, align 8, !tbaa !5
  %2424 = getelementptr inbounds i32, ptr %2423, i64 0
  %2425 = load i32, ptr %2424, align 4, !tbaa !15
  %2426 = load ptr, ptr %5, align 8, !tbaa !5
  %2427 = getelementptr inbounds i32, ptr %2426, i64 1
  %2428 = load i32, ptr %2427, align 4, !tbaa !15
  %2429 = load ptr, ptr %5, align 8, !tbaa !5
  %2430 = getelementptr inbounds i32, ptr %2429, i64 2
  %2431 = load i32, ptr %2430, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2425, i32 noundef %2428, i32 noundef %2431, ptr noundef @.str.657)
  br label %2903

2432:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %180) #9
  %2433 = load ptr, ptr %5, align 8, !tbaa !5
  %2434 = getelementptr inbounds i32, ptr %2433, i64 2
  %2435 = load i32, ptr %2434, align 4, !tbaa !15
  %2436 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2435)
  store ptr %2436, ptr %180, align 8, !tbaa !5
  %2437 = load ptr, ptr %180, align 8, !tbaa !5
  %2438 = icmp ne ptr %2437, null
  br i1 %2438, label %2446, label %2439

2439:                                             ; preds = %2432
  %2440 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2440, ptr noundef @.str.658)
          to label %2441 unwind label %2442

2441:                                             ; preds = %2439
  call void @__cxa_throw(ptr %2440, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2442:                                             ; preds = %2439
  %2443 = landingpad { ptr, i32 }
          cleanup
  %2444 = extractvalue { ptr, i32 } %2443, 0
  store ptr %2444, ptr %19, align 8
  %2445 = extractvalue { ptr, i32 } %2443, 1
  store i32 %2445, ptr %20, align 4
  call void @__cxa_free_exception(ptr %2440) #9
  br label %2522

2446:                                             ; preds = %2432
  call void @llvm.lifetime.start.p0(i64 8, ptr %181) #9
  %2447 = load ptr, ptr %180, align 8, !tbaa !5
  %2448 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %2447, i32 0, i32 1
  %2449 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2448)
  %2450 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 noundef %2449)
  store ptr %2450, ptr %181, align 8, !tbaa !5
  %2451 = load ptr, ptr %181, align 8, !tbaa !5
  %2452 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2451, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %182, ptr align 8 %2452, i64 4, i1 false), !tbaa.struct !166
  %2453 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %182, i32 0, i32 0
  %2454 = load i32, ptr %2453, align 4
  %2455 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 %2454, i32 noundef 2)
  br i1 %2455, label %2469, label %2456

2456:                                             ; preds = %2446
  %2457 = load ptr, ptr %181, align 8, !tbaa !5
  %2458 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2457, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %183, ptr align 8 %2458, i64 4, i1 false), !tbaa.struct !166
  %2459 = getelementptr inbounds %"class.spirv_cross::TypedID.324", ptr %183, i32 0, i32 0
  %2460 = load i32, ptr %2459, align 4
  %2461 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %219, i32 %2460, i32 noundef 3)
  br i1 %2461, label %2469, label %2462

2462:                                             ; preds = %2456
  %2463 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2463, ptr noundef @.str.659)
          to label %2464 unwind label %2465

2464:                                             ; preds = %2462
  call void @__cxa_throw(ptr %2463, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2465:                                             ; preds = %2462
  %2466 = landingpad { ptr, i32 }
          cleanup
  %2467 = extractvalue { ptr, i32 } %2466, 0
  store ptr %2467, ptr %19, align 8
  %2468 = extractvalue { ptr, i32 } %2466, 1
  store i32 %2468, ptr %20, align 4
  call void @__cxa_free_exception(ptr %2463) #9
  br label %2521

2469:                                             ; preds = %2456, %2446
  %2470 = load ptr, ptr %5, align 8, !tbaa !5
  %2471 = getelementptr inbounds i32, ptr %2470, i64 0
  %2472 = load i32, ptr %2471, align 4, !tbaa !15
  %2473 = load ptr, ptr %5, align 8, !tbaa !5
  %2474 = getelementptr inbounds i32, ptr %2473, i64 1
  %2475 = load i32, ptr %2474, align 4, !tbaa !15
  %2476 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2472, i32 noundef %2475)
  call void @llvm.lifetime.start.p0(i64 32, ptr %184) #9
  %2477 = load ptr, ptr %5, align 8, !tbaa !5
  %2478 = getelementptr inbounds i32, ptr %2477, i64 2
  %2479 = load i32, ptr %2478, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %184, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2479)
  call void @llvm.lifetime.start.p0(i64 32, ptr %185) #9
  %2480 = load ptr, ptr %5, align 8, !tbaa !5
  %2481 = getelementptr inbounds i32, ptr %2480, i64 1
  %2482 = load i32, ptr %2481, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %185, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2482, i1 noundef zeroext true)
          to label %2483 unwind label %2503

2483:                                             ; preds = %2469
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(32) %184, ptr noundef nonnull align 1 dereferenceable(16) @.str.660, ptr noundef nonnull align 8 dereferenceable(32) %185, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %2484 unwind label %2507

2484:                                             ; preds = %2483
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %185) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %184) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %186) #9
  %2485 = load ptr, ptr %181, align 8, !tbaa !5
  %2486 = load ptr, ptr %5, align 8, !tbaa !5
  %2487 = getelementptr inbounds i32, ptr %2486, i64 3
  %2488 = load i32, ptr %2487, align 4, !tbaa !15
  %2489 = call noundef i32 @_ZNK11spirv_cross8Compiler25type_struct_member_offsetERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, ptr noundef nonnull align 8 dereferenceable(336) %2485, i32 noundef %2488)
  store i32 %2489, ptr %186, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %187) #9
  %2490 = load ptr, ptr %181, align 8, !tbaa !5
  %2491 = load ptr, ptr %5, align 8, !tbaa !5
  %2492 = getelementptr inbounds i32, ptr %2491, i64 3
  %2493 = load i32, ptr %2492, align 4, !tbaa !15
  %2494 = call noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %219, ptr noundef nonnull align 8 dereferenceable(336) %2490, i32 noundef %2493)
  store i32 %2494, ptr %187, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %188) #9
  %2495 = load ptr, ptr %5, align 8, !tbaa !5
  %2496 = getelementptr inbounds i32, ptr %2495, i64 1
  %2497 = load i32, ptr %2496, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %188, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2497, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %189) #9
  %2498 = load ptr, ptr %5, align 8, !tbaa !5
  %2499 = getelementptr inbounds i32, ptr %2498, i64 1
  %2500 = load i32, ptr %2499, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %189, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2500, i1 noundef zeroext true)
          to label %2501 unwind label %2512

2501:                                             ; preds = %2484
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcS7_RA4_S8_RjSA_SD_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(32) %188, ptr noundef nonnull align 1 dereferenceable(5) @.str.661, ptr noundef nonnull align 8 dereferenceable(32) %189, ptr noundef nonnull align 1 dereferenceable(4) @.str.662, ptr noundef nonnull align 4 dereferenceable(4) %186, ptr noundef nonnull align 1 dereferenceable(5) @.str.663, ptr noundef nonnull align 4 dereferenceable(4) %187, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %2502 unwind label %2516

2502:                                             ; preds = %2501
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %189) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %189) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %188) #9
  store i32 2, ptr %165, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %186) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #9
  br label %2903

2503:                                             ; preds = %2469
  %2504 = landingpad { ptr, i32 }
          cleanup
  %2505 = extractvalue { ptr, i32 } %2504, 0
  store ptr %2505, ptr %19, align 8
  %2506 = extractvalue { ptr, i32 } %2504, 1
  store i32 %2506, ptr %20, align 4
  br label %2511

2507:                                             ; preds = %2483
  %2508 = landingpad { ptr, i32 }
          cleanup
  %2509 = extractvalue { ptr, i32 } %2508, 0
  store ptr %2509, ptr %19, align 8
  %2510 = extractvalue { ptr, i32 } %2508, 1
  store i32 %2510, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #9
  br label %2511

2511:                                             ; preds = %2507, %2503
  call void @llvm.lifetime.end.p0(i64 32, ptr %185) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %184) #9
  br label %2521

2512:                                             ; preds = %2484
  %2513 = landingpad { ptr, i32 }
          cleanup
  %2514 = extractvalue { ptr, i32 } %2513, 0
  store ptr %2514, ptr %19, align 8
  %2515 = extractvalue { ptr, i32 } %2513, 1
  store i32 %2515, ptr %20, align 4
  br label %2520

2516:                                             ; preds = %2501
  %2517 = landingpad { ptr, i32 }
          cleanup
  %2518 = extractvalue { ptr, i32 } %2517, 0
  store ptr %2518, ptr %19, align 8
  %2519 = extractvalue { ptr, i32 } %2517, 1
  store i32 %2519, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %189) #9
  br label %2520

2520:                                             ; preds = %2516, %2512
  call void @llvm.lifetime.end.p0(i64 32, ptr %189) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %188) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %186) #9
  br label %2521

2521:                                             ; preds = %2520, %2511, %2465
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #9
  br label %2522

2522:                                             ; preds = %2521, %2442
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #9
  br label %2904

2523:                                             ; preds = %2
  %2524 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 1
  %2525 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %2524, i32 0, i32 0
  %2526 = load i32, ptr %2525, align 8, !tbaa !174
  %2527 = icmp ult i32 %2526, 50
  br i1 %2527, label %2533, label %2528

2528:                                             ; preds = %2523
  %2529 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %219)
  %2530 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %2529, i32 0, i32 10
  %2531 = load i32, ptr %2530, align 8, !tbaa !181
  %2532 = icmp ne i32 %2531, 4
  br i1 %2532, label %2533, label %2540

2533:                                             ; preds = %2528, %2523
  %2534 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2534, ptr noundef @.str.664)
          to label %2535 unwind label %2536

2535:                                             ; preds = %2533
  call void @__cxa_throw(ptr %2534, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2536:                                             ; preds = %2533
  %2537 = landingpad { ptr, i32 }
          cleanup
  %2538 = extractvalue { ptr, i32 } %2537, 0
  store ptr %2538, ptr %19, align 8
  %2539 = extractvalue { ptr, i32 } %2537, 1
  store i32 %2539, ptr %20, align 4
  call void @__cxa_free_exception(ptr %2534) #9
  br label %2904

2540:                                             ; preds = %2528
  %2541 = load ptr, ptr %5, align 8, !tbaa !5
  %2542 = getelementptr inbounds i32, ptr %2541, i64 0
  %2543 = load i32, ptr %2542, align 4, !tbaa !15
  %2544 = load ptr, ptr %5, align 8, !tbaa !5
  %2545 = getelementptr inbounds i32, ptr %2544, i64 1
  %2546 = load i32, ptr %2545, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %190) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %191) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %191) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %190, ptr noundef @.str.75, ptr noundef nonnull align 1 dereferenceable(1) %191)
          to label %2547 unwind label %2550

2547:                                             ; preds = %2540
  %2548 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2543, i32 noundef %2546, ptr noundef nonnull align 8 dereferenceable(32) %190, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2549 unwind label %2554

2549:                                             ; preds = %2547
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %191) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %191) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %190) #9
  br label %2903

2550:                                             ; preds = %2540
  %2551 = landingpad { ptr, i32 }
          cleanup
  %2552 = extractvalue { ptr, i32 } %2551, 0
  store ptr %2552, ptr %19, align 8
  %2553 = extractvalue { ptr, i32 } %2551, 1
  store i32 %2553, ptr %20, align 4
  br label %2558

2554:                                             ; preds = %2547
  %2555 = landingpad { ptr, i32 }
          cleanup
  %2556 = extractvalue { ptr, i32 } %2555, 0
  store ptr %2556, ptr %19, align 8
  %2557 = extractvalue { ptr, i32 } %2555, 1
  store i32 %2557, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #9
  br label %2558

2558:                                             ; preds = %2554, %2550
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %191) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %191) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %190) #9
  br label %2904

2559:                                             ; preds = %2, %2
  %2560 = getelementptr inbounds %"class.spirv_cross::CompilerHLSL", ptr %219, i32 0, i32 1
  %2561 = getelementptr inbounds %"struct.spirv_cross::CompilerHLSL::Options", ptr %2560, i32 0, i32 0
  %2562 = load i32, ptr %2561, align 8, !tbaa !174
  %2563 = icmp ult i32 %2562, 51
  br i1 %2563, label %2564, label %2571

2564:                                             ; preds = %2559
  %2565 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2565, ptr noundef @.str.665)
          to label %2566 unwind label %2567

2566:                                             ; preds = %2564
  call void @__cxa_throw(ptr %2565, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2567:                                             ; preds = %2564
  %2568 = landingpad { ptr, i32 }
          cleanup
  %2569 = extractvalue { ptr, i32 } %2568, 0
  store ptr %2569, ptr %19, align 8
  %2570 = extractvalue { ptr, i32 } %2568, 1
  store i32 %2570, ptr %20, align 4
  call void @__cxa_free_exception(ptr %2565) #9
  br label %2904

2571:                                             ; preds = %2559
  br label %2903

2572:                                             ; preds = %2
  %2573 = load ptr, ptr %5, align 8, !tbaa !5
  %2574 = getelementptr inbounds i32, ptr %2573, i64 0
  %2575 = load i32, ptr %2574, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2575)
  call void @llvm.lifetime.start.p0(i64 32, ptr %192) #9
  call void @_ZN11spirv_cross12CompilerHLSL21get_unique_identifierB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %192, ptr noundef nonnull align 8 dereferenceable(10528) %219)
  call void @llvm.lifetime.start.p0(i64 32, ptr %193) #9
  %2576 = load ptr, ptr %5, align 8, !tbaa !5
  %2577 = getelementptr inbounds i32, ptr %2576, i64 4
  %2578 = load i32, ptr %2577, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %193, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2578, i1 noundef zeroext true)
          to label %2579 unwind label %2610

2579:                                             ; preds = %2572
  call void @llvm.lifetime.start.p0(i64 32, ptr %194) #9
  %2580 = load ptr, ptr %5, align 8, !tbaa !5
  %2581 = getelementptr inbounds i32, ptr %2580, i64 5
  %2582 = load i32, ptr %2581, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %194, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2582, i1 noundef zeroext true)
          to label %2583 unwind label %2614

2583:                                             ; preds = %2579
  call void @llvm.lifetime.start.p0(i64 32, ptr %195) #9
  %2584 = load ptr, ptr %5, align 8, !tbaa !5
  %2585 = getelementptr inbounds i32, ptr %2584, i64 6
  %2586 = load i32, ptr %2585, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %195, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2586, i1 noundef zeroext true)
          to label %2587 unwind label %2618

2587:                                             ; preds = %2583
  call void @llvm.lifetime.start.p0(i64 32, ptr %196) #9
  %2588 = load ptr, ptr %5, align 8, !tbaa !5
  %2589 = getelementptr inbounds i32, ptr %2588, i64 7
  %2590 = load i32, ptr %2589, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %196, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2590, i1 noundef zeroext true)
          to label %2591 unwind label %2622

2591:                                             ; preds = %2587
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S2_SA_RA3_S2_SA_SF_SA_SF_SA_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(9) @.str.666, ptr noundef nonnull align 8 dereferenceable(32) %192, ptr noundef nonnull align 1 dereferenceable(5) @.str.667, ptr noundef nonnull align 8 dereferenceable(32) %193, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %194, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %195, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %196, ptr noundef nonnull align 1 dereferenceable(3) @.str.668)
          to label %2592 unwind label %2626

2592:                                             ; preds = %2591
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %196) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %196) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %195) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %194) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %193) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %197) #9
  %2593 = load ptr, ptr %5, align 8, !tbaa !5
  %2594 = getelementptr inbounds i32, ptr %2593, i64 0
  %2595 = load i32, ptr %2594, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %197, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2595, i1 noundef zeroext true)
          to label %2596 unwind label %2634

2596:                                             ; preds = %2592
  call void @llvm.lifetime.start.p0(i64 32, ptr %198) #9
  %2597 = load ptr, ptr %5, align 8, !tbaa !5
  %2598 = getelementptr inbounds i32, ptr %2597, i64 1
  %2599 = load i32, ptr %2598, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %198, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2599, i1 noundef zeroext true)
          to label %2600 unwind label %2638

2600:                                             ; preds = %2596
  call void @llvm.lifetime.start.p0(i64 32, ptr %199) #9
  %2601 = load ptr, ptr %5, align 8, !tbaa !5
  %2602 = getelementptr inbounds i32, ptr %2601, i64 2
  %2603 = load i32, ptr %2602, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %199, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2603, i1 noundef zeroext true)
          to label %2604 unwind label %2642

2604:                                             ; preds = %2600
  call void @llvm.lifetime.start.p0(i64 32, ptr %200) #9
  %2605 = load ptr, ptr %5, align 8, !tbaa !5
  %2606 = getelementptr inbounds i32, ptr %2605, i64 3
  %2607 = load i32, ptr %2606, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %200, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2607, i1 noundef zeroext true)
          to label %2608 unwind label %2646

2608:                                             ; preds = %2604
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcS7_RA3_S8_S7_SC_S7_SC_RS7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(32) %197, ptr noundef nonnull align 1 dereferenceable(17) @.str.669, ptr noundef nonnull align 8 dereferenceable(32) %198, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %199, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %200, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %192, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %2609 unwind label %2650

2609:                                             ; preds = %2608
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %200) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %200) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %199) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %198) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %197) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %197) #9
  store i32 2, ptr %165, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %192) #9
  br label %2903

2610:                                             ; preds = %2572
  %2611 = landingpad { ptr, i32 }
          cleanup
  %2612 = extractvalue { ptr, i32 } %2611, 0
  store ptr %2612, ptr %19, align 8
  %2613 = extractvalue { ptr, i32 } %2611, 1
  store i32 %2613, ptr %20, align 4
  br label %2633

2614:                                             ; preds = %2579
  %2615 = landingpad { ptr, i32 }
          cleanup
  %2616 = extractvalue { ptr, i32 } %2615, 0
  store ptr %2616, ptr %19, align 8
  %2617 = extractvalue { ptr, i32 } %2615, 1
  store i32 %2617, ptr %20, align 4
  br label %2632

2618:                                             ; preds = %2583
  %2619 = landingpad { ptr, i32 }
          cleanup
  %2620 = extractvalue { ptr, i32 } %2619, 0
  store ptr %2620, ptr %19, align 8
  %2621 = extractvalue { ptr, i32 } %2619, 1
  store i32 %2621, ptr %20, align 4
  br label %2631

2622:                                             ; preds = %2587
  %2623 = landingpad { ptr, i32 }
          cleanup
  %2624 = extractvalue { ptr, i32 } %2623, 0
  store ptr %2624, ptr %19, align 8
  %2625 = extractvalue { ptr, i32 } %2623, 1
  store i32 %2625, ptr %20, align 4
  br label %2630

2626:                                             ; preds = %2591
  %2627 = landingpad { ptr, i32 }
          cleanup
  %2628 = extractvalue { ptr, i32 } %2627, 0
  store ptr %2628, ptr %19, align 8
  %2629 = extractvalue { ptr, i32 } %2627, 1
  store i32 %2629, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %196) #9
  br label %2630

2630:                                             ; preds = %2626, %2622
  call void @llvm.lifetime.end.p0(i64 32, ptr %196) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #9
  br label %2631

2631:                                             ; preds = %2630, %2618
  call void @llvm.lifetime.end.p0(i64 32, ptr %195) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #9
  br label %2632

2632:                                             ; preds = %2631, %2614
  call void @llvm.lifetime.end.p0(i64 32, ptr %194) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #9
  br label %2633

2633:                                             ; preds = %2632, %2610
  call void @llvm.lifetime.end.p0(i64 32, ptr %193) #9
  br label %2658

2634:                                             ; preds = %2592
  %2635 = landingpad { ptr, i32 }
          cleanup
  %2636 = extractvalue { ptr, i32 } %2635, 0
  store ptr %2636, ptr %19, align 8
  %2637 = extractvalue { ptr, i32 } %2635, 1
  store i32 %2637, ptr %20, align 4
  br label %2657

2638:                                             ; preds = %2596
  %2639 = landingpad { ptr, i32 }
          cleanup
  %2640 = extractvalue { ptr, i32 } %2639, 0
  store ptr %2640, ptr %19, align 8
  %2641 = extractvalue { ptr, i32 } %2639, 1
  store i32 %2641, ptr %20, align 4
  br label %2656

2642:                                             ; preds = %2600
  %2643 = landingpad { ptr, i32 }
          cleanup
  %2644 = extractvalue { ptr, i32 } %2643, 0
  store ptr %2644, ptr %19, align 8
  %2645 = extractvalue { ptr, i32 } %2643, 1
  store i32 %2645, ptr %20, align 4
  br label %2655

2646:                                             ; preds = %2604
  %2647 = landingpad { ptr, i32 }
          cleanup
  %2648 = extractvalue { ptr, i32 } %2647, 0
  store ptr %2648, ptr %19, align 8
  %2649 = extractvalue { ptr, i32 } %2647, 1
  store i32 %2649, ptr %20, align 4
  br label %2654

2650:                                             ; preds = %2608
  %2651 = landingpad { ptr, i32 }
          cleanup
  %2652 = extractvalue { ptr, i32 } %2651, 0
  store ptr %2652, ptr %19, align 8
  %2653 = extractvalue { ptr, i32 } %2651, 1
  store i32 %2653, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %200) #9
  br label %2654

2654:                                             ; preds = %2650, %2646
  call void @llvm.lifetime.end.p0(i64 32, ptr %200) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #9
  br label %2655

2655:                                             ; preds = %2654, %2642
  call void @llvm.lifetime.end.p0(i64 32, ptr %199) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #9
  br label %2656

2656:                                             ; preds = %2655, %2638
  call void @llvm.lifetime.end.p0(i64 32, ptr %198) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %197) #9
  br label %2657

2657:                                             ; preds = %2656, %2634
  call void @llvm.lifetime.end.p0(i64 32, ptr %197) #9
  br label %2658

2658:                                             ; preds = %2657, %2633
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %192) #9
  br label %2904

2659:                                             ; preds = %2
  %2660 = load ptr, ptr %5, align 8, !tbaa !5
  %2661 = getelementptr inbounds i32, ptr %2660, i64 0
  %2662 = load i32, ptr %2661, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2662)
  %2663 = load ptr, ptr %5, align 8, !tbaa !5
  %2664 = getelementptr inbounds i32, ptr %2663, i64 0
  %2665 = load i32, ptr %2664, align 4, !tbaa !15
  %2666 = load ptr, ptr %5, align 8, !tbaa !5
  %2667 = getelementptr inbounds i32, ptr %2666, i64 1
  %2668 = load i32, ptr %2667, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %201) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %202) #9
  %2669 = load ptr, ptr %5, align 8, !tbaa !5
  %2670 = getelementptr inbounds i32, ptr %2669, i64 2
  %2671 = load i32, ptr %2670, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %202, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2671, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %201, ptr noundef nonnull align 8 dereferenceable(32) %202, ptr noundef nonnull align 1 dereferenceable(11) @.str.670)
          to label %2672 unwind label %2675

2672:                                             ; preds = %2659
  %2673 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2665, i32 noundef %2668, ptr noundef nonnull align 8 dereferenceable(32) %201, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2674 unwind label %2679

2674:                                             ; preds = %2672
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %202) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %201) #9
  br label %2903

2675:                                             ; preds = %2659
  %2676 = landingpad { ptr, i32 }
          cleanup
  %2677 = extractvalue { ptr, i32 } %2676, 0
  store ptr %2677, ptr %19, align 8
  %2678 = extractvalue { ptr, i32 } %2676, 1
  store i32 %2678, ptr %20, align 4
  br label %2683

2679:                                             ; preds = %2672
  %2680 = landingpad { ptr, i32 }
          cleanup
  %2681 = extractvalue { ptr, i32 } %2680, 0
  store ptr %2681, ptr %19, align 8
  %2682 = extractvalue { ptr, i32 } %2680, 1
  store i32 %2682, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #9
  br label %2683

2683:                                             ; preds = %2679, %2675
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %202) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %201) #9
  br label %2904

2684:                                             ; preds = %2
  %2685 = load ptr, ptr %5, align 8, !tbaa !5
  %2686 = getelementptr inbounds i32, ptr %2685, i64 0
  %2687 = load i32, ptr %2686, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2687)
  call void @llvm.lifetime.start.p0(i64 32, ptr %203) #9
  %2688 = load ptr, ptr %5, align 8, !tbaa !5
  %2689 = getelementptr inbounds i32, ptr %2688, i64 0
  %2690 = load i32, ptr %2689, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %203, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2690, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(32) %203, ptr noundef nonnull align 1 dereferenceable(10) @.str.671)
          to label %2691 unwind label %2692

2691:                                             ; preds = %2684
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %203) #9
  br label %2903

2692:                                             ; preds = %2684
  %2693 = landingpad { ptr, i32 }
          cleanup
  %2694 = extractvalue { ptr, i32 } %2693, 0
  store ptr %2694, ptr %19, align 8
  %2695 = extractvalue { ptr, i32 } %2693, 1
  store i32 %2695, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %203) #9
  br label %2904

2696:                                             ; preds = %2
  %2697 = load ptr, ptr %5, align 8, !tbaa !5
  %2698 = getelementptr inbounds i32, ptr %2697, i64 0
  %2699 = load i32, ptr %2698, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2699)
  call void @llvm.lifetime.start.p0(i64 32, ptr %204) #9
  %2700 = load ptr, ptr %5, align 8, !tbaa !5
  %2701 = getelementptr inbounds i32, ptr %2700, i64 0
  %2702 = load i32, ptr %2701, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %204, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2702, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %205) #9
  %2703 = load ptr, ptr %5, align 8, !tbaa !5
  %2704 = getelementptr inbounds i32, ptr %2703, i64 1
  %2705 = load i32, ptr %2704, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %205, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2705, i1 noundef zeroext true)
          to label %2706 unwind label %2708

2706:                                             ; preds = %2696
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA31_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(32) %204, ptr noundef nonnull align 1 dereferenceable(31) @.str.672, ptr noundef nonnull align 8 dereferenceable(32) %205, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %2707 unwind label %2712

2707:                                             ; preds = %2706
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %205) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %204) #9
  br label %2903

2708:                                             ; preds = %2696
  %2709 = landingpad { ptr, i32 }
          cleanup
  %2710 = extractvalue { ptr, i32 } %2709, 0
  store ptr %2710, ptr %19, align 8
  %2711 = extractvalue { ptr, i32 } %2709, 1
  store i32 %2711, ptr %20, align 4
  br label %2716

2712:                                             ; preds = %2706
  %2713 = landingpad { ptr, i32 }
          cleanup
  %2714 = extractvalue { ptr, i32 } %2713, 0
  store ptr %2714, ptr %19, align 8
  %2715 = extractvalue { ptr, i32 } %2713, 1
  store i32 %2715, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #9
  br label %2716

2716:                                             ; preds = %2712, %2708
  call void @llvm.lifetime.end.p0(i64 32, ptr %205) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %204) #9
  br label %2904

2717:                                             ; preds = %2
  %2718 = load ptr, ptr %5, align 8, !tbaa !5
  %2719 = getelementptr inbounds i32, ptr %2718, i64 0
  %2720 = load i32, ptr %2719, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2720)
  call void @llvm.lifetime.start.p0(i64 32, ptr %206) #9
  %2721 = load ptr, ptr %5, align 8, !tbaa !5
  %2722 = getelementptr inbounds i32, ptr %2721, i64 0
  %2723 = load i32, ptr %2722, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %206, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2723, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA31_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 8 dereferenceable(32) %206, ptr noundef nonnull align 1 dereferenceable(31) @.str.673)
          to label %2724 unwind label %2725

2724:                                             ; preds = %2717
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %206) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %206) #9
  br label %2903

2725:                                             ; preds = %2717
  %2726 = landingpad { ptr, i32 }
          cleanup
  %2727 = extractvalue { ptr, i32 } %2726, 0
  store ptr %2727, ptr %19, align 8
  %2728 = extractvalue { ptr, i32 } %2726, 1
  store i32 %2728, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %206) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %206) #9
  br label %2904

2729:                                             ; preds = %2
  %2730 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.674, ptr noundef @.str.675, ptr noundef %2730)
  br label %2903

2731:                                             ; preds = %2
  %2732 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.676, ptr noundef @.str.677, ptr noundef %2732)
  br label %2903

2733:                                             ; preds = %2
  %2734 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.678, ptr noundef @.str.679, ptr noundef %2734)
  br label %2903

2735:                                             ; preds = %2
  %2736 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.680, ptr noundef @.str.681, ptr noundef %2736)
  br label %2903

2737:                                             ; preds = %2
  %2738 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.682, ptr noundef @.str.683, ptr noundef %2738)
  br label %2903

2739:                                             ; preds = %2
  %2740 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.684, ptr noundef @.str.685, ptr noundef %2740)
  br label %2903

2741:                                             ; preds = %2
  %2742 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.686, ptr noundef @.str.687, ptr noundef %2742)
  br label %2903

2743:                                             ; preds = %2
  %2744 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.688, ptr noundef @.str.689, ptr noundef %2744)
  br label %2903

2745:                                             ; preds = %2
  %2746 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.690, ptr noundef @.str.691, ptr noundef %2746)
  br label %2903

2747:                                             ; preds = %2
  %2748 = load ptr, ptr %5, align 8, !tbaa !5
  %2749 = getelementptr inbounds i32, ptr %2748, i64 0
  %2750 = load i32, ptr %2749, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2750)
  %2751 = load ptr, ptr %5, align 8, !tbaa !5
  %2752 = getelementptr inbounds i32, ptr %2751, i64 0
  %2753 = load i32, ptr %2752, align 4, !tbaa !15
  %2754 = load ptr, ptr %5, align 8, !tbaa !5
  %2755 = getelementptr inbounds i32, ptr %2754, i64 1
  %2756 = load i32, ptr %2755, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %207) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %208) #9
  %2757 = load ptr, ptr %5, align 8, !tbaa !5
  %2758 = getelementptr inbounds i32, ptr %2757, i64 2
  %2759 = load i32, ptr %2758, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %208, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2759, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA41_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %207, ptr noundef nonnull align 8 dereferenceable(32) %208, ptr noundef nonnull align 1 dereferenceable(41) @.str.692)
          to label %2760 unwind label %2763

2760:                                             ; preds = %2747
  %2761 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2753, i32 noundef %2756, ptr noundef nonnull align 8 dereferenceable(32) %207, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2762 unwind label %2767

2762:                                             ; preds = %2760
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %207) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %208) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %207) #9
  br label %2903

2763:                                             ; preds = %2747
  %2764 = landingpad { ptr, i32 }
          cleanup
  %2765 = extractvalue { ptr, i32 } %2764, 0
  store ptr %2765, ptr %19, align 8
  %2766 = extractvalue { ptr, i32 } %2764, 1
  store i32 %2766, ptr %20, align 4
  br label %2771

2767:                                             ; preds = %2760
  %2768 = landingpad { ptr, i32 }
          cleanup
  %2769 = extractvalue { ptr, i32 } %2768, 0
  store ptr %2769, ptr %19, align 8
  %2770 = extractvalue { ptr, i32 } %2768, 1
  store i32 %2770, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %207) #9
  br label %2771

2771:                                             ; preds = %2767, %2763
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %208) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %207) #9
  br label %2904

2772:                                             ; preds = %2
  %2773 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.693, ptr noundef @.str.694, ptr noundef %2773)
  br label %2903

2774:                                             ; preds = %2
  %2775 = load ptr, ptr %5, align 8, !tbaa !5
  %2776 = getelementptr inbounds i32, ptr %2775, i64 0
  %2777 = load i32, ptr %2776, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2777)
  %2778 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.695, ptr noundef @.str.696, ptr noundef %2778)
  br label %2903

2779:                                             ; preds = %2
  %2780 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.697, ptr noundef @.str.698, ptr noundef %2780)
  br label %2903

2781:                                             ; preds = %2
  %2782 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %219, ptr noundef @.str.699, ptr noundef @.str.700, ptr noundef %2782)
  br label %2903

2783:                                             ; preds = %2
  %2784 = load ptr, ptr %5, align 8, !tbaa !5
  %2785 = getelementptr inbounds i32, ptr %2784, i64 0
  %2786 = load i32, ptr %2785, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2786)
  %2787 = load ptr, ptr %5, align 8, !tbaa !5
  %2788 = getelementptr inbounds i32, ptr %2787, i64 0
  %2789 = load i32, ptr %2788, align 4, !tbaa !15
  %2790 = load ptr, ptr %5, align 8, !tbaa !5
  %2791 = getelementptr inbounds i32, ptr %2790, i64 1
  %2792 = load i32, ptr %2791, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %209) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %210) #9
  %2793 = load ptr, ptr %5, align 8, !tbaa !5
  %2794 = getelementptr inbounds i32, ptr %2793, i64 2
  %2795 = load i32, ptr %2794, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %210, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2795, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %209, ptr noundef nonnull align 8 dereferenceable(32) %210, ptr noundef nonnull align 1 dereferenceable(12) @.str.701)
          to label %2796 unwind label %2799

2796:                                             ; preds = %2783
  %2797 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2789, i32 noundef %2792, ptr noundef nonnull align 8 dereferenceable(32) %209, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2798 unwind label %2803

2798:                                             ; preds = %2796
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %210) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %209) #9
  br label %2903

2799:                                             ; preds = %2783
  %2800 = landingpad { ptr, i32 }
          cleanup
  %2801 = extractvalue { ptr, i32 } %2800, 0
  store ptr %2801, ptr %19, align 8
  %2802 = extractvalue { ptr, i32 } %2800, 1
  store i32 %2802, ptr %20, align 4
  br label %2807

2803:                                             ; preds = %2796
  %2804 = landingpad { ptr, i32 }
          cleanup
  %2805 = extractvalue { ptr, i32 } %2804, 0
  store ptr %2805, ptr %19, align 8
  %2806 = extractvalue { ptr, i32 } %2804, 1
  store i32 %2806, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #9
  br label %2807

2807:                                             ; preds = %2803, %2799
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %210) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %209) #9
  br label %2904

2808:                                             ; preds = %2
  %2809 = load ptr, ptr %5, align 8, !tbaa !5
  %2810 = getelementptr inbounds i32, ptr %2809, i64 0
  %2811 = load i32, ptr %2810, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2811)
  %2812 = load ptr, ptr %5, align 8, !tbaa !5
  %2813 = getelementptr inbounds i32, ptr %2812, i64 0
  %2814 = load i32, ptr %2813, align 4, !tbaa !15
  %2815 = load ptr, ptr %5, align 8, !tbaa !5
  %2816 = getelementptr inbounds i32, ptr %2815, i64 1
  %2817 = load i32, ptr %2816, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %211) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %212) #9
  %2818 = load ptr, ptr %5, align 8, !tbaa !5
  %2819 = getelementptr inbounds i32, ptr %2818, i64 2
  %2820 = load i32, ptr %2819, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %212, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2820, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %211, ptr noundef nonnull align 8 dereferenceable(32) %212, ptr noundef nonnull align 1 dereferenceable(11) @.str.702)
          to label %2821 unwind label %2824

2821:                                             ; preds = %2808
  %2822 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2814, i32 noundef %2817, ptr noundef nonnull align 8 dereferenceable(32) %211, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2823 unwind label %2828

2823:                                             ; preds = %2821
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %211) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %212) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %212) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %211) #9
  br label %2903

2824:                                             ; preds = %2808
  %2825 = landingpad { ptr, i32 }
          cleanup
  %2826 = extractvalue { ptr, i32 } %2825, 0
  store ptr %2826, ptr %19, align 8
  %2827 = extractvalue { ptr, i32 } %2825, 1
  store i32 %2827, ptr %20, align 4
  br label %2832

2828:                                             ; preds = %2821
  %2829 = landingpad { ptr, i32 }
          cleanup
  %2830 = extractvalue { ptr, i32 } %2829, 0
  store ptr %2830, ptr %19, align 8
  %2831 = extractvalue { ptr, i32 } %2829, 1
  store i32 %2831, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %211) #9
  br label %2832

2832:                                             ; preds = %2828, %2824
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %212) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %212) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %211) #9
  br label %2904

2833:                                             ; preds = %2
  %2834 = load ptr, ptr %5, align 8, !tbaa !5
  %2835 = getelementptr inbounds i32, ptr %2834, i64 0
  %2836 = load i32, ptr %2835, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2836)
  %2837 = load ptr, ptr %5, align 8, !tbaa !5
  %2838 = getelementptr inbounds i32, ptr %2837, i64 0
  %2839 = load i32, ptr %2838, align 4, !tbaa !15
  %2840 = load ptr, ptr %5, align 8, !tbaa !5
  %2841 = getelementptr inbounds i32, ptr %2840, i64 1
  %2842 = load i32, ptr %2841, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %213) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %214) #9
  %2843 = load ptr, ptr %5, align 8, !tbaa !5
  %2844 = getelementptr inbounds i32, ptr %2843, i64 2
  %2845 = load i32, ptr %2844, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %214, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2845, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %213, ptr noundef nonnull align 8 dereferenceable(32) %214, ptr noundef nonnull align 1 dereferenceable(18) @.str.703)
          to label %2846 unwind label %2849

2846:                                             ; preds = %2833
  %2847 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2839, i32 noundef %2842, ptr noundef nonnull align 8 dereferenceable(32) %213, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2848 unwind label %2853

2848:                                             ; preds = %2846
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %213) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %214) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %213) #9
  br label %2903

2849:                                             ; preds = %2833
  %2850 = landingpad { ptr, i32 }
          cleanup
  %2851 = extractvalue { ptr, i32 } %2850, 0
  store ptr %2851, ptr %19, align 8
  %2852 = extractvalue { ptr, i32 } %2850, 1
  store i32 %2852, ptr %20, align 4
  br label %2857

2853:                                             ; preds = %2846
  %2854 = landingpad { ptr, i32 }
          cleanup
  %2855 = extractvalue { ptr, i32 } %2854, 0
  store ptr %2855, ptr %19, align 8
  %2856 = extractvalue { ptr, i32 } %2854, 1
  store i32 %2856, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %213) #9
  br label %2857

2857:                                             ; preds = %2853, %2849
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %214) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %213) #9
  br label %2904

2858:                                             ; preds = %2
  %2859 = load ptr, ptr %5, align 8, !tbaa !5
  %2860 = getelementptr inbounds i32, ptr %2859, i64 0
  %2861 = load i32, ptr %2860, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2861)
  %2862 = load ptr, ptr %5, align 8, !tbaa !5
  %2863 = getelementptr inbounds i32, ptr %2862, i64 0
  %2864 = load i32, ptr %2863, align 4, !tbaa !15
  %2865 = load ptr, ptr %5, align 8, !tbaa !5
  %2866 = getelementptr inbounds i32, ptr %2865, i64 1
  %2867 = load i32, ptr %2866, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %215) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %216) #9
  %2868 = load ptr, ptr %5, align 8, !tbaa !5
  %2869 = getelementptr inbounds i32, ptr %2868, i64 2
  %2870 = load i32, ptr %2869, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %216, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2870, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA21_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %215, ptr noundef nonnull align 8 dereferenceable(32) %216, ptr noundef nonnull align 1 dereferenceable(21) @.str.704)
          to label %2871 unwind label %2874

2871:                                             ; preds = %2858
  %2872 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2864, i32 noundef %2867, ptr noundef nonnull align 8 dereferenceable(32) %215, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %2873 unwind label %2878

2873:                                             ; preds = %2871
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %215) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %216) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %215) #9
  br label %2903

2874:                                             ; preds = %2858
  %2875 = landingpad { ptr, i32 }
          cleanup
  %2876 = extractvalue { ptr, i32 } %2875, 0
  store ptr %2876, ptr %19, align 8
  %2877 = extractvalue { ptr, i32 } %2875, 1
  store i32 %2877, ptr %20, align 4
  br label %2882

2878:                                             ; preds = %2871
  %2879 = landingpad { ptr, i32 }
          cleanup
  %2880 = extractvalue { ptr, i32 } %2879, 0
  store ptr %2880, ptr %19, align 8
  %2881 = extractvalue { ptr, i32 } %2879, 1
  store i32 %2881, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %215) #9
  br label %2882

2882:                                             ; preds = %2878, %2874
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %216) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %215) #9
  br label %2904

2883:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 32, ptr %217) #9
  %2884 = load ptr, ptr %5, align 8, !tbaa !5
  %2885 = getelementptr inbounds i32, ptr %2884, i64 0
  %2886 = load i32, ptr %2885, align 4, !tbaa !15
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %217, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2886, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %218) #9
  %2887 = load ptr, ptr %5, align 8, !tbaa !5
  %2888 = getelementptr inbounds i32, ptr %2887, i64 1
  %2889 = load i32, ptr %2888, align 4, !tbaa !15
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %218, ptr noundef nonnull align 8 dereferenceable(9848) %219, i32 noundef %2889, i1 noundef zeroext true)
          to label %2890 unwind label %2892

2890:                                             ; preds = %2883
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 1 dereferenceable(21) @.str.705, ptr noundef nonnull align 8 dereferenceable(32) %217, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %218, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %2891 unwind label %2896

2891:                                             ; preds = %2890
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %218) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %218) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %217) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %217) #9
  br label %2903

2892:                                             ; preds = %2883
  %2893 = landingpad { ptr, i32 }
          cleanup
  %2894 = extractvalue { ptr, i32 } %2893, 0
  store ptr %2894, ptr %19, align 8
  %2895 = extractvalue { ptr, i32 } %2893, 1
  store i32 %2895, ptr %20, align 4
  br label %2900

2896:                                             ; preds = %2890
  %2897 = landingpad { ptr, i32 }
          cleanup
  %2898 = extractvalue { ptr, i32 } %2897, 0
  store ptr %2898, ptr %19, align 8
  %2899 = extractvalue { ptr, i32 } %2897, 1
  store i32 %2899, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %218) #9
  br label %2900

2900:                                             ; preds = %2896, %2892
  call void @llvm.lifetime.end.p0(i64 32, ptr %218) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %217) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %217) #9
  br label %2904

2901:                                             ; preds = %2
  %2902 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %219, ptr noundef nonnull align 4 dereferenceable(12) %2902)
  br label %2903

2903:                                             ; preds = %2901, %2891, %2873, %2848, %2823, %2798, %2781, %2779, %2774, %2772, %2762, %2745, %2743, %2741, %2739, %2737, %2735, %2733, %2731, %2729, %2724, %2707, %2691, %2674, %2609, %2571, %2549, %2502, %2422, %2404, %2403, %2327, %2260, %2093, %2056, %2015, %1917, %1635, %1490, %1354, %1311, %1310, %1284, %1247, %1198, %1172, %1135, %1086, %1060, %1023, %974, %948, %911, %862, %825, %785, %748, %708, %666, %653, %640, %627, %614, %601, %588, %586, %512, %510, %502, %391, %378, %365, %363, %361, %360, %279, %235
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  ret void

2904:                                             ; preds = %2900, %2882, %2857, %2832, %2807, %2771, %2725, %2716, %2692, %2683, %2658, %2567, %2558, %2536, %2522, %2361, %2089, %2085, %2016, %1918, %1646, %1502, %1388, %587, %503, %357
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  br label %2905

2905:                                             ; preds = %2904
  %2906 = load ptr, ptr %19, align 8
  %2907 = load i32, ptr %20, align 4
  %2908 = insertvalue { ptr, i32 } poison, ptr %2906, 0
  %2909 = insertvalue { ptr, i32 } %2908, i32 %2907, 1
  resume { ptr, i32 } %2909

2910:                                             ; preds = %1705, %1677
  unreachable
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZSt4findIN9__gnu_cxx17__normal_iteratorIPN11spirv_cross7TypedIDILNS2_5TypesE1EEESt6vectorIS5_SaIS5_EEEES5_ET_SB_SB_RKT0_(ptr, ptr, ptr noundef nonnull align 4 dereferenceable(4)) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxeqIPN11spirv_cross7TypedIDILNS1_5TypesE1EEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #7

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(20), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), 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(3)) #6 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef) #7

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

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

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(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 @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(14), 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: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(7), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #1

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL26image_format_to_componentsN3spv11ImageFormatE(i32 noundef) #1

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

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

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

declare void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176)) #3

declare noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef) #3

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL29get_next_instruction_in_blockERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) #3

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

declare void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_S9_SB_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(19), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), 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_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) #6 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S2_SA_RA3_S2_SA_SF_SA_SF_SA_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(9), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(5), 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(3), 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(3)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcS7_RA3_S8_S7_SC_S7_SC_RS7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(17), 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(3), 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(3)) #6 align 2

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(21), 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(3)) #6 align 2

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

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

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


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

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

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.341 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.379 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.406 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.417 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.528 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.530 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.539 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.617 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.618 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.619 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.620 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.621 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.622 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.623 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.624 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.625 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.626 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.627 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.628 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.629 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.630 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.631 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.632 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.633 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.634 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.635 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.636 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.637 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.638 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.639 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.640 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.641 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.642 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.643 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.644 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.645 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.646 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerHLSL16emit_instructionERKNS_11InstructionE = external hidden unnamed_addr constant [78 x i8], align 1
@.str.647 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.648 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.649 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.650 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.651 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.652 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.653 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.654 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.655 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.656 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.657 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.658 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.659 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.660 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.661 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.662 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.663 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.664 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.665 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.666 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.667 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.668 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.669 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.670 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.671 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.672 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.673 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.674 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.675 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.676 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.677 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.678 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.679 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.680 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.681 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.682 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.683 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.684 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.685 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.686 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.687 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.688 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.689 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.690 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.691 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.692 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.693 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.694 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.695 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.696 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.697 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.698 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.699 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.700 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.701 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.702 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.703 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.704 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.705 = external hidden unnamed_addr constant [21 x i8], align 1

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress 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: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA35_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(35)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 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 i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #3

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

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_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

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

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 @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(20)) local_unnamed_addr #5 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

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

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

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: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #5 align 2

declare void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef) local_unnamed_addr #5

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

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

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_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
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #1

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #6

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

declare void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__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_cross12CompilerHLSL10emit_storeERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #1 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerHLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 4 dereferenceable(12) %1) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.spirv_cross::TypedID.328", align 4
  %4 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.spirv_cross::TypedID.324", align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.spirv_cross::TypedID.324", align 4
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 i8, align 1
  %42 = alloca i32, align 4
  %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 %"struct.std::__detail::_Node_iterator", align 8
  %54 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %55 = alloca %"class.spirv_cross::TypedID.324", align 4
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"struct.spirv_cross::SPIRType", 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::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca i8, align 1
  %66 = alloca %"class.spirv_cross::TypedID.324", align 4
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %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 %"class.std::allocator", align 1
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::__cxx11::basic_string", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca %"class.std::__cxx11::basic_string", align 8
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca %"class.std::__cxx11::basic_string", align 8
  %91 = alloca %"class.std::__cxx11::basic_string", align 8
  %92 = alloca %"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 %"class.std::__cxx11::basic_string", align 8
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca %"class.std::__cxx11::basic_string", align 8
  %101 = alloca %"class.std::__cxx11::basic_string", align 8
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca %"class.std::__cxx11::basic_string", align 8
  %104 = alloca %"class.std::__cxx11::basic_string", align 8
  %105 = alloca %"class.std::__cxx11::basic_string", align 8
  %106 = alloca %"class.std::__cxx11::basic_string", align 8
  %107 = alloca %"class.std::__cxx11::basic_string", align 8
  %108 = tail call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  %109 = load i16, ptr %1, align 4, !tbaa !5
  %110 = zext i16 %109 to i32
  %111 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL33get_integer_width_for_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  %112 = tail call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %111)
  %113 = tail call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %111)
  %114 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21get_remapped_spirv_opEN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %110)
  switch i32 %114, label %1584 [
    i32 65, label %115
    i32 66, label %115
    i32 124, label %116
    i32 169, label %136
    i32 62, label %182
    i32 61, label %183
    i32 145, label %184
    i32 144, label %192
    i32 146, label %200
    i32 147, label %208
    i32 141, label %263
    i32 140, label %269
    i32 100, label %277
    i32 207, label %309
    i32 208, label %316
    i32 210, label %323
    i32 211, label %330
    i32 213, label %337
    i32 214, label %344
    i32 209, label %351
    i32 215, label %351
    i32 212, label %351
    i32 168, label %358
    i32 170, label %374
    i32 164, label %395
    i32 180, label %395
    i32 181, label %395
    i32 171, label %415
    i32 165, label %436
    i32 182, label %436
    i32 183, label %436
    i32 172, label %456
    i32 173, label %456
    i32 186, label %479
    i32 187, label %499
    i32 174, label %514
    i32 175, label %514
    i32 190, label %537
    i32 191, label %557
    i32 176, label %572
    i32 177, label %572
    i32 184, label %595
    i32 185, label %615
    i32 178, label %630
    i32 179, label %630
    i32 188, label %653
    i32 189, label %673
    i32 105, label %688
    i32 103, label %692
    i32 104, label %737
    i32 107, label %803
    i32 106, label %803
    i32 98, label %891
    i32 99, label %1033
    i32 60, label %1093
    i32 6035, label %1131
    i32 5614, label %1131
    i32 5615, label %1131
    i32 230, label %1136
    i32 229, label %1136
    i32 235, label %1136
    i32 236, label %1136
    i32 237, label %1136
    i32 238, label %1136
    i32 239, label %1136
    i32 240, label %1136
    i32 241, label %1136
    i32 242, label %1136
    i32 234, label %1136
    i32 232, label %1136
    i32 233, label %1136
    i32 227, label %1136
    i32 228, label %1136
    i32 5295, label %1573
    i32 6029, label %1558
    i32 201, label %1208
    i32 202, label %1271
    i32 203, label %1271
    i32 205, label %1289
    i32 204, label %1299
    i32 68, label %1305
    i32 5381, label %1355
    i32 5364, label %1380
    i32 5365, label %1380
    i32 4473, label %1389
    i32 4477, label %1445
    i32 4474, label %1460
    i32 4475, label %1466
    i32 4476, label %1478
    i32 4479, label %1484
    i32 6018, label %1485
    i32 6019, label %1486
    i32 6020, label %1487
    i32 6021, label %1488
    i32 6022, label %1489
    i32 6023, label %1490
    i32 6024, label %1491
    i32 6025, label %1492
    i32 6026, label %1493
    i32 6027, label %1508
    i32 6028, label %1509
    i32 6031, label %1511
    i32 6032, label %1512
    i32 6017, label %1513
    i32 6016, label %1528
    i32 6030, label %1543
    i32 225, label %1139
    i32 224, label %.thread842
  ]

115:                                              ; preds = %2, %2
  tail call void @_ZN11spirv_cross12CompilerHLSL17emit_access_chainERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

116:                                              ; preds = %2
  %117 = load i32, ptr %108, align 4, !tbaa !11
  %118 = getelementptr inbounds i8, ptr %108, i64 8
  %119 = load i32, ptr %118, align 4, !tbaa !11
  %120 = tail call noundef i32 @_ZN11spirv_cross12CompilerHLSL16get_bitcast_typeEjj(ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %117, i32 noundef %119)
  %121 = icmp eq i32 %120, 0
  br i1 %121, label %122, label %123

122:                                              ; preds = %116
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

123:                                              ; preds = %116
  %124 = getelementptr inbounds i8, ptr %0, i64 9866
  %125 = load i8, ptr %124, align 2, !tbaa !12, !range !141, !noundef !142
  %126 = trunc nuw i8 %125 to i1
  br i1 %126, label %128, label %127

127:                                              ; preds = %123
  store i8 1, ptr %124, align 2, !tbaa !12
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %128

128:                                              ; preds = %127, %123
  %129 = icmp eq i32 %120, 1
  %130 = load i32, ptr %108, align 4, !tbaa !11
  %131 = getelementptr inbounds i8, ptr %108, i64 4
  %132 = load i32, ptr %131, align 4, !tbaa !11
  %133 = load i32, ptr %118, align 4, !tbaa !11
  br i1 %129, label %134, label %135

134:                                              ; preds = %128
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %130, i32 noundef %132, i32 noundef %133, ptr noundef nonnull @.str.617)
  br label %1585

135:                                              ; preds = %128
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %130, i32 noundef %132, i32 noundef %133, ptr noundef nonnull @.str.618)
  br label %1585

136:                                              ; preds = %2
  %137 = getelementptr inbounds i8, ptr %108, i64 12
  %138 = load i32, ptr %137, align 4, !tbaa !11
  %139 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %138)
  %140 = getelementptr inbounds i8, ptr %139, i64 16
  %141 = load i32, ptr %140, align 8, !tbaa !143
  %142 = icmp eq i32 %141, 15
  br i1 %142, label %145, label %143

143:                                              ; preds = %136
  %144 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %139)
  br i1 %144, label %145, label %181

145:                                              ; preds = %143, %136
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  %146 = load i32, ptr %137, align 4, !tbaa !11
  %147 = tail call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %146)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %3, i32 noundef %147)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  %148 = getelementptr inbounds i8, ptr %0, i64 10504
  %149 = call ptr @_ZNSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %148) #8
  %150 = call ptr @_ZNSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %148) #8
  %151 = call ptr @_ZSt4findIN9__gnu_cxx17__normal_iteratorIPN11spirv_cross7TypedIDILNS2_5TypesE1EEESt6vectorIS5_SaIS5_EEEES5_ET_SB_SB_RKT0_(ptr %149, ptr %150, ptr noundef nonnull align 4 dereferenceable(4) %3)
  store ptr %151, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  %152 = call ptr @_ZNSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %148) #8
  store ptr %152, ptr %5, align 8
  %153 = call noundef zeroext i1 @_ZN9__gnu_cxxeqIPN11spirv_cross7TypedIDILNS1_5TypesE1EEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  br i1 %153, label %154, label %155

154:                                              ; preds = %145
  call void @_ZNSt6vectorIN11spirv_cross7TypedIDILNS0_5TypesE1EEESaIS3_EE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %148, ptr noundef nonnull align 4 dereferenceable(4) %3)
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %155

155:                                              ; preds = %154, %145
  %156 = load i32, ptr %108, align 4, !tbaa !11
  %157 = getelementptr inbounds i8, ptr %108, i64 4
  %158 = load i32, ptr %157, align 4, !tbaa !11
  %159 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %156, i32 noundef %158)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #8
  %160 = load i32, ptr %157, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %160, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #8
  %161 = getelementptr inbounds i8, ptr %108, i64 8
  %162 = load i32, ptr %161, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %162, i1 noundef zeroext true)
          to label %163 unwind label %170

163:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #8
  %164 = load i32, ptr %137, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %164, i1 noundef zeroext true)
          to label %165 unwind label %172

165:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #8
  %166 = getelementptr inbounds i8, ptr %108, i64 16
  %167 = load i32, ptr %166, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %167, i1 noundef zeroext true)
          to label %168 unwind label %174

168:                                              ; preds = %165
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(20) @.str.619, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %169 unwind label %176

169:                                              ; preds = %168
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  br label %1585

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

172:                                              ; preds = %163
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %179

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

176:                                              ; preds = %168
  %177 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  br label %178

178:                                              ; preds = %176, %174
  %.pn817 = phi { ptr, i32 } [ %177, %176 ], [ %175, %174 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  br label %179

179:                                              ; preds = %178, %172
  %.pn817.pn = phi { ptr, i32 } [ %.pn817, %178 ], [ %173, %172 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  br label %180

180:                                              ; preds = %179, %170
  %.pn817.pn.pn = phi { ptr, i32 } [ %.pn817.pn, %179 ], [ %171, %170 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  br label %1586

181:                                              ; preds = %143
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

182:                                              ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL10emit_storeERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

183:                                              ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL9emit_loadERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

184:                                              ; preds = %2
  %185 = load i32, ptr %108, align 4, !tbaa !11
  %186 = getelementptr inbounds i8, ptr %108, i64 4
  %187 = load i32, ptr %186, align 4, !tbaa !11
  %188 = getelementptr inbounds i8, ptr %108, i64 12
  %189 = load i32, ptr %188, align 4, !tbaa !11
  %190 = getelementptr inbounds i8, ptr %108, i64 8
  %191 = load i32, ptr %190, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %185, i32 noundef %187, i32 noundef %189, i32 noundef %191, ptr noundef nonnull @.str.620)
  br label %1585

192:                                              ; preds = %2
  %193 = load i32, ptr %108, align 4, !tbaa !11
  %194 = getelementptr inbounds i8, ptr %108, i64 4
  %195 = load i32, ptr %194, align 4, !tbaa !11
  %196 = getelementptr inbounds i8, ptr %108, i64 12
  %197 = load i32, ptr %196, align 4, !tbaa !11
  %198 = getelementptr inbounds i8, ptr %108, i64 8
  %199 = load i32, ptr %198, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %193, i32 noundef %195, i32 noundef %197, i32 noundef %199, ptr noundef nonnull @.str.620)
  br label %1585

200:                                              ; preds = %2
  %201 = load i32, ptr %108, align 4, !tbaa !11
  %202 = getelementptr inbounds i8, ptr %108, i64 4
  %203 = load i32, ptr %202, align 4, !tbaa !11
  %204 = getelementptr inbounds i8, ptr %108, i64 12
  %205 = load i32, ptr %204, align 4, !tbaa !11
  %206 = getelementptr inbounds i8, ptr %108, i64 8
  %207 = load i32, ptr %206, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %201, i32 noundef %203, i32 noundef %205, i32 noundef %207, ptr noundef nonnull @.str.620)
  br label %1585

208:                                              ; preds = %2
  %209 = load i32, ptr %108, align 4, !tbaa !11
  %210 = getelementptr inbounds i8, ptr %108, i64 4
  %211 = load i32, ptr %210, align 4, !tbaa !11
  %212 = getelementptr inbounds i8, ptr %108, i64 8
  %213 = load i32, ptr %212, align 4, !tbaa !11
  %214 = getelementptr inbounds i8, ptr %108, i64 12
  %215 = load i32, ptr %214, align 4, !tbaa !11
  %216 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %209)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #8
  call void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %216)
  %217 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.406)
          to label %.preheader unwind label %221

.preheader:                                       ; preds = %208
  %218 = getelementptr inbounds i8, ptr %216, i64 28
  %219 = load i32, ptr %218, align 4, !tbaa !157
  %.not866 = icmp eq i32 %219, 0
  br i1 %.not866, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %248, %.preheader
  %220 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.78)
          to label %251 unwind label %221

221:                                              ; preds = %260, %259, %256, %254, %251, %._crit_edge, %208
  %222 = landingpad { ptr, i32 }
          cleanup
  br label %262

.lr.ph:                                           ; preds = %.preheader, %248
  %.0664865 = phi i32 [ %231, %248 ], [ 0, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %213, i1 noundef zeroext true)
          to label %223 unwind label %236

223:                                              ; preds = %.lr.ph
  %224 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %225 unwind label %238

225:                                              ; preds = %223
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  %226 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.528)
          to label %227 unwind label %241

227:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %215, i32 noundef %.0664865)
          to label %228 unwind label %243

228:                                              ; preds = %227
  %229 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %230 unwind label %245

230:                                              ; preds = %228
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  %231 = add nuw i32 %.0664865, 1
  %232 = load i32, ptr %218, align 4, !tbaa !157
  %233 = icmp ult i32 %231, %232
  br i1 %233, label %234, label %248

234:                                              ; preds = %230
  %235 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.341)
          to label %._crit_edge867 unwind label %241

._crit_edge867:                                   ; preds = %234
  %.pre868 = load i32, ptr %218, align 4, !tbaa !157
  br label %248

236:                                              ; preds = %.lr.ph
  %237 = landingpad { ptr, i32 }
          cleanup
  br label %240

238:                                              ; preds = %223
  %239 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  br label %240

240:                                              ; preds = %238, %236
  %.pn810 = phi { ptr, i32 } [ %239, %238 ], [ %237, %236 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  br label %262

241:                                              ; preds = %234, %225
  %242 = landingpad { ptr, i32 }
          cleanup
  br label %262

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

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

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

248:                                              ; preds = %._crit_edge867, %230
  %249 = phi i32 [ %.pre868, %._crit_edge867 ], [ %232, %230 ]
  %250 = icmp ult i32 %231, %249
  br i1 %250, label %.lr.ph, label %._crit_edge, !llvm.loop !158

251:                                              ; preds = %._crit_edge
  %252 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %213)
          to label %253 unwind label %221

253:                                              ; preds = %251
  br i1 %252, label %254, label %256

254:                                              ; preds = %253
  %255 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %215)
          to label %256 unwind label %221

256:                                              ; preds = %254, %253
  %257 = phi i1 [ false, %253 ], [ %255, %254 ]
  %258 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %209, i32 noundef %211, ptr noundef nonnull align 8 dereferenceable(32) %10, i1 noundef zeroext %257, i1 noundef zeroext false)
          to label %259 unwind label %221

259:                                              ; preds = %256
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %211, i32 noundef %213)
          to label %260 unwind label %221

260:                                              ; preds = %259
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %211, i32 noundef %215)
          to label %261 unwind label %221

261:                                              ; preds = %260
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %1585

262:                                              ; preds = %240, %241, %247, %221
  %.pn814.pn = phi { ptr, i32 } [ %222, %221 ], [ %242, %241 ], [ %.pn812, %247 ], [ %.pn810, %240 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %1586

263:                                              ; preds = %2
  %264 = getelementptr inbounds i8, ptr %0, i64 9864
  %265 = load i8, ptr %264, align 8, !tbaa !160, !range !141, !noundef !142
  %266 = trunc nuw i8 %265 to i1
  br i1 %266, label %268, label %267

267:                                              ; preds = %263
  store i8 1, ptr %264, align 8, !tbaa !160
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %268

268:                                              ; preds = %267, %263
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

269:                                              ; preds = %2
  %270 = load i32, ptr %108, align 4, !tbaa !11
  %271 = getelementptr inbounds i8, ptr %108, i64 4
  %272 = load i32, ptr %271, align 4, !tbaa !11
  %273 = getelementptr inbounds i8, ptr %108, i64 8
  %274 = load i32, ptr %273, align 4, !tbaa !11
  %275 = getelementptr inbounds i8, ptr %108, i64 12
  %276 = load i32, ptr %275, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %270, i32 noundef %272, i32 noundef %274, i32 noundef %276, ptr noundef nonnull @.str.621)
  br label %1585

277:                                              ; preds = %2
  %278 = load i32, ptr %108, align 4, !tbaa !11
  %279 = getelementptr inbounds i8, ptr %108, i64 4
  %280 = load i32, ptr %279, align 4, !tbaa !11
  %281 = getelementptr inbounds i8, ptr %108, i64 8
  %282 = load i32, ptr %281, align 4, !tbaa !11
  %283 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %282)
  %.not805 = icmp eq ptr %283, null
  br i1 %.not805, label %297, label %284

284:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #8
  %285 = getelementptr inbounds i8, ptr %283, i64 16
  %286 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %285)
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %286, i1 noundef zeroext true)
  %287 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %278, i32 noundef %280, ptr noundef nonnull align 8 dereferenceable(32) %13, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %288 unwind label %295

288:                                              ; preds = %284
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  %289 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %285)
  %290 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %289)
  %.not809 = icmp eq ptr %290, null
  br i1 %.not809, label %1585, label %291

291:                                              ; preds = %288
  %292 = getelementptr inbounds i8, ptr %290, i64 8
  %293 = getelementptr inbounds i8, ptr %287, i64 52
  %294 = load i32, ptr %292, align 8, !tbaa !11
  store i32 %294, ptr %293, align 4, !tbaa !11
  br label %1585

295:                                              ; preds = %284
  %296 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  br label %1586

297:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #8
  %298 = load i32, ptr %281, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %298, i1 noundef zeroext true)
  %299 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %278, i32 noundef %280, ptr noundef nonnull align 8 dereferenceable(32) %14, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %300 unwind label %307

300:                                              ; preds = %297
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  %301 = load i32, ptr %281, align 4, !tbaa !11
  %302 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %301)
  %.not806 = icmp eq ptr %302, null
  br i1 %.not806, label %1585, label %303

303:                                              ; preds = %300
  %304 = getelementptr inbounds i8, ptr %302, i64 8
  %305 = getelementptr inbounds i8, ptr %299, i64 52
  %306 = load i32, ptr %304, align 8, !tbaa !11
  store i32 %306, ptr %305, align 4, !tbaa !11
  br label %1585

307:                                              ; preds = %297
  %308 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  br label %1586

309:                                              ; preds = %2
  %310 = load i32, ptr %108, align 4, !tbaa !11
  %311 = getelementptr inbounds i8, ptr %108, i64 4
  %312 = load i32, ptr %311, align 4, !tbaa !11
  %313 = getelementptr inbounds i8, ptr %108, i64 8
  %314 = load i32, ptr %313, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %310, i32 noundef %312, i32 noundef %314, ptr noundef nonnull @.str.622)
  %315 = load i32, ptr %311, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %315)
  br label %1585

316:                                              ; preds = %2
  %317 = load i32, ptr %108, align 4, !tbaa !11
  %318 = getelementptr inbounds i8, ptr %108, i64 4
  %319 = load i32, ptr %318, align 4, !tbaa !11
  %320 = getelementptr inbounds i8, ptr %108, i64 8
  %321 = load i32, ptr %320, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %317, i32 noundef %319, i32 noundef %321, ptr noundef nonnull @.str.623)
  %322 = load i32, ptr %318, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %322)
  br label %1585

323:                                              ; preds = %2
  %324 = load i32, ptr %108, align 4, !tbaa !11
  %325 = getelementptr inbounds i8, ptr %108, i64 4
  %326 = load i32, ptr %325, align 4, !tbaa !11
  %327 = getelementptr inbounds i8, ptr %108, i64 8
  %328 = load i32, ptr %327, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %324, i32 noundef %326, i32 noundef %328, ptr noundef nonnull @.str.624)
  %329 = load i32, ptr %325, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %329)
  br label %1585

330:                                              ; preds = %2
  %331 = load i32, ptr %108, align 4, !tbaa !11
  %332 = getelementptr inbounds i8, ptr %108, i64 4
  %333 = load i32, ptr %332, align 4, !tbaa !11
  %334 = getelementptr inbounds i8, ptr %108, i64 8
  %335 = load i32, ptr %334, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %331, i32 noundef %333, i32 noundef %335, ptr noundef nonnull @.str.625)
  %336 = load i32, ptr %332, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %336)
  br label %1585

337:                                              ; preds = %2
  %338 = load i32, ptr %108, align 4, !tbaa !11
  %339 = getelementptr inbounds i8, ptr %108, i64 4
  %340 = load i32, ptr %339, align 4, !tbaa !11
  %341 = getelementptr inbounds i8, ptr %108, i64 8
  %342 = load i32, ptr %341, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %338, i32 noundef %340, i32 noundef %342, ptr noundef nonnull @.str.626)
  %343 = load i32, ptr %339, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %343)
  br label %1585

344:                                              ; preds = %2
  %345 = load i32, ptr %108, align 4, !tbaa !11
  %346 = getelementptr inbounds i8, ptr %108, i64 4
  %347 = load i32, ptr %346, align 4, !tbaa !11
  %348 = getelementptr inbounds i8, ptr %108, i64 8
  %349 = load i32, ptr %348, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %345, i32 noundef %347, i32 noundef %349, ptr noundef nonnull @.str.627)
  %350 = load i32, ptr %346, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %350)
  br label %1585

351:                                              ; preds = %2, %2, %2
  %352 = load i32, ptr %108, align 4, !tbaa !11
  %353 = getelementptr inbounds i8, ptr %108, i64 4
  %354 = load i32, ptr %353, align 4, !tbaa !11
  %355 = getelementptr inbounds i8, ptr %108, i64 8
  %356 = load i32, ptr %355, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %352, i32 noundef %354, i32 noundef %356, ptr noundef nonnull @.str.628)
  %357 = load i32, ptr %353, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %357)
  br label %1585

358:                                              ; preds = %2
  %359 = load i32, ptr %108, align 4, !tbaa !11
  %360 = getelementptr inbounds i8, ptr %108, i64 4
  %361 = load i32, ptr %360, align 4, !tbaa !11
  %362 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %359)
  %363 = getelementptr inbounds i8, ptr %362, i64 24
  %364 = load i32, ptr %363, align 8, !tbaa !161
  %365 = icmp ugt i32 %364, 1
  br i1 %365, label %366, label %369

366:                                              ; preds = %358
  %367 = getelementptr inbounds i8, ptr %108, i64 8
  %368 = load i32, ptr %367, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL22emit_unrolled_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %359, i32 noundef %361, i32 noundef %368, ptr noundef nonnull @.str.629)
  br label %1585

369:                                              ; preds = %358
  %370 = load i32, ptr %108, align 4, !tbaa !11
  %371 = load i32, ptr %360, align 4, !tbaa !11
  %372 = getelementptr inbounds i8, ptr %108, i64 8
  %373 = load i32, ptr %372, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %370, i32 noundef %371, i32 noundef %373, ptr noundef nonnull @.str.629)
  br label %1585

374:                                              ; preds = %2
  %375 = load i32, ptr %108, align 4, !tbaa !11
  %376 = getelementptr inbounds i8, ptr %108, i64 4
  %377 = load i32, ptr %376, align 4, !tbaa !11
  %378 = getelementptr inbounds i8, ptr %108, i64 8
  %379 = load i32, ptr %378, align 4, !tbaa !11
  %380 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %379)
  %381 = getelementptr inbounds i8, ptr %380, i64 24
  %382 = load i32, ptr %381, align 8, !tbaa !161
  %383 = icmp ugt i32 %382, 1
  br i1 %383, label %384, label %388

384:                                              ; preds = %374
  %385 = load i32, ptr %378, align 4, !tbaa !11
  %386 = getelementptr inbounds i8, ptr %108, i64 12
  %387 = load i32, ptr %386, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %375, i32 noundef %377, i32 noundef %385, i32 noundef %387, ptr noundef nonnull @.str.630, i1 noundef zeroext false, i32 noundef 0)
  br label %1585

388:                                              ; preds = %374
  %389 = load i32, ptr %108, align 4, !tbaa !11
  %390 = load i32, ptr %376, align 4, !tbaa !11
  %391 = load i32, ptr %378, align 4, !tbaa !11
  %392 = getelementptr inbounds i8, ptr %108, i64 12
  %393 = load i32, ptr %392, align 4, !tbaa !11
  %394 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 170)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %389, i32 noundef %390, i32 noundef %391, i32 noundef %393, ptr noundef nonnull @.str.630, i32 noundef %112, i1 noundef zeroext %394, i1 noundef zeroext false)
  br label %1585

395:                                              ; preds = %2, %2, %2
  %396 = load i32, ptr %108, align 4, !tbaa !11
  %397 = getelementptr inbounds i8, ptr %108, i64 4
  %398 = load i32, ptr %397, align 4, !tbaa !11
  %399 = getelementptr inbounds i8, ptr %108, i64 8
  %400 = load i32, ptr %399, align 4, !tbaa !11
  %401 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %400)
  %402 = getelementptr inbounds i8, ptr %401, i64 24
  %403 = load i32, ptr %402, align 8, !tbaa !161
  %404 = icmp ugt i32 %403, 1
  br i1 %404, label %405, label %409

405:                                              ; preds = %395
  %406 = load i32, ptr %399, align 4, !tbaa !11
  %407 = getelementptr inbounds i8, ptr %108, i64 12
  %408 = load i32, ptr %407, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %396, i32 noundef %398, i32 noundef %406, i32 noundef %408, ptr noundef nonnull @.str.630, i1 noundef zeroext false, i32 noundef 0)
  br label %1585

409:                                              ; preds = %395
  %410 = load i32, ptr %108, align 4, !tbaa !11
  %411 = load i32, ptr %397, align 4, !tbaa !11
  %412 = load i32, ptr %399, align 4, !tbaa !11
  %413 = getelementptr inbounds i8, ptr %108, i64 12
  %414 = load i32, ptr %413, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %410, i32 noundef %411, i32 noundef %412, i32 noundef %414, ptr noundef nonnull @.str.630)
  br label %1585

415:                                              ; preds = %2
  %416 = load i32, ptr %108, align 4, !tbaa !11
  %417 = getelementptr inbounds i8, ptr %108, i64 4
  %418 = load i32, ptr %417, align 4, !tbaa !11
  %419 = getelementptr inbounds i8, ptr %108, i64 8
  %420 = load i32, ptr %419, align 4, !tbaa !11
  %421 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %420)
  %422 = getelementptr inbounds i8, ptr %421, i64 24
  %423 = load i32, ptr %422, align 8, !tbaa !161
  %424 = icmp ugt i32 %423, 1
  br i1 %424, label %425, label %429

425:                                              ; preds = %415
  %426 = load i32, ptr %419, align 4, !tbaa !11
  %427 = getelementptr inbounds i8, ptr %108, i64 12
  %428 = load i32, ptr %427, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %416, i32 noundef %418, i32 noundef %426, i32 noundef %428, ptr noundef nonnull @.str.631, i1 noundef zeroext false, i32 noundef 0)
  br label %1585

429:                                              ; preds = %415
  %430 = load i32, ptr %108, align 4, !tbaa !11
  %431 = load i32, ptr %417, align 4, !tbaa !11
  %432 = load i32, ptr %419, align 4, !tbaa !11
  %433 = getelementptr inbounds i8, ptr %108, i64 12
  %434 = load i32, ptr %433, align 4, !tbaa !11
  %435 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 171)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %430, i32 noundef %431, i32 noundef %432, i32 noundef %434, ptr noundef nonnull @.str.631, i32 noundef %112, i1 noundef zeroext %435, i1 noundef zeroext false)
  br label %1585

436:                                              ; preds = %2, %2, %2
  %437 = load i32, ptr %108, align 4, !tbaa !11
  %438 = getelementptr inbounds i8, ptr %108, i64 4
  %439 = load i32, ptr %438, align 4, !tbaa !11
  %440 = getelementptr inbounds i8, ptr %108, i64 8
  %441 = load i32, ptr %440, align 4, !tbaa !11
  %442 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %441)
  %443 = getelementptr inbounds i8, ptr %442, i64 24
  %444 = load i32, ptr %443, align 8, !tbaa !161
  %445 = icmp ugt i32 %444, 1
  br i1 %445, label %446, label %450

446:                                              ; preds = %436
  %447 = load i32, ptr %440, align 4, !tbaa !11
  %448 = getelementptr inbounds i8, ptr %108, i64 12
  %449 = load i32, ptr %448, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %437, i32 noundef %439, i32 noundef %447, i32 noundef %449, ptr noundef nonnull @.str.631, i1 noundef zeroext false, i32 noundef 0)
  br label %1585

450:                                              ; preds = %436
  %451 = load i32, ptr %108, align 4, !tbaa !11
  %452 = load i32, ptr %438, align 4, !tbaa !11
  %453 = load i32, ptr %440, align 4, !tbaa !11
  %454 = getelementptr inbounds i8, ptr %108, i64 12
  %455 = load i32, ptr %454, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %451, i32 noundef %452, i32 noundef %453, i32 noundef %455, ptr noundef nonnull @.str.631)
  br label %1585

456:                                              ; preds = %2, %2
  %457 = load i32, ptr %108, align 4, !tbaa !11
  %458 = getelementptr inbounds i8, ptr %108, i64 4
  %459 = load i32, ptr %458, align 4, !tbaa !11
  %460 = icmp eq i32 %114, 172
  %461 = select i1 %460, i32 %113, i32 %112
  %462 = getelementptr inbounds i8, ptr %108, i64 8
  %463 = load i32, ptr %462, align 4, !tbaa !11
  %464 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %463)
  %465 = getelementptr inbounds i8, ptr %464, i64 24
  %466 = load i32, ptr %465, align 8, !tbaa !161
  %467 = icmp ugt i32 %466, 1
  br i1 %467, label %468, label %472

468:                                              ; preds = %456
  %469 = load i32, ptr %462, align 4, !tbaa !11
  %470 = getelementptr inbounds i8, ptr %108, i64 12
  %471 = load i32, ptr %470, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %457, i32 noundef %459, i32 noundef %469, i32 noundef %471, ptr noundef nonnull @.str.7, i1 noundef zeroext false, i32 noundef %461)
  br label %1585

472:                                              ; preds = %456
  %473 = load i32, ptr %108, align 4, !tbaa !11
  %474 = load i32, ptr %458, align 4, !tbaa !11
  %475 = load i32, ptr %462, align 4, !tbaa !11
  %476 = getelementptr inbounds i8, ptr %108, i64 12
  %477 = load i32, ptr %476, align 4, !tbaa !11
  %478 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %114)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %473, i32 noundef %474, i32 noundef %475, i32 noundef %477, ptr noundef nonnull @.str.7, i32 noundef %461, i1 noundef zeroext %478, i1 noundef zeroext false)
  br label %1585

479:                                              ; preds = %2
  %480 = load i32, ptr %108, align 4, !tbaa !11
  %481 = getelementptr inbounds i8, ptr %108, i64 4
  %482 = load i32, ptr %481, align 4, !tbaa !11
  %483 = getelementptr inbounds i8, ptr %108, i64 8
  %484 = load i32, ptr %483, align 4, !tbaa !11
  %485 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %484)
  %486 = getelementptr inbounds i8, ptr %485, i64 24
  %487 = load i32, ptr %486, align 8, !tbaa !161
  %488 = icmp ugt i32 %487, 1
  br i1 %488, label %489, label %493

489:                                              ; preds = %479
  %490 = load i32, ptr %483, align 4, !tbaa !11
  %491 = getelementptr inbounds i8, ptr %108, i64 12
  %492 = load i32, ptr %491, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %480, i32 noundef %482, i32 noundef %490, i32 noundef %492, ptr noundef nonnull @.str.7, i1 noundef zeroext false, i32 noundef 0)
  br label %1585

493:                                              ; preds = %479
  %494 = load i32, ptr %108, align 4, !tbaa !11
  %495 = load i32, ptr %481, align 4, !tbaa !11
  %496 = load i32, ptr %483, align 4, !tbaa !11
  %497 = getelementptr inbounds i8, ptr %108, i64 12
  %498 = load i32, ptr %497, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %494, i32 noundef %495, i32 noundef %496, i32 noundef %498, ptr noundef nonnull @.str.7)
  br label %1585

499:                                              ; preds = %2
  %500 = load i32, ptr %108, align 4, !tbaa !11
  %501 = getelementptr inbounds i8, ptr %108, i64 4
  %502 = load i32, ptr %501, align 4, !tbaa !11
  %503 = getelementptr inbounds i8, ptr %108, i64 8
  %504 = load i32, ptr %503, align 4, !tbaa !11
  %505 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %504)
  %506 = getelementptr inbounds i8, ptr %505, i64 24
  %507 = load i32, ptr %506, align 8, !tbaa !161
  %508 = icmp ugt i32 %507, 1
  br i1 %508, label %509, label %513

509:                                              ; preds = %499
  %510 = load i32, ptr %503, align 4, !tbaa !11
  %511 = getelementptr inbounds i8, ptr %108, i64 12
  %512 = load i32, ptr %511, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %500, i32 noundef %502, i32 noundef %510, i32 noundef %512, ptr noundef nonnull @.str.632, i1 noundef zeroext true, i32 noundef 0)
  br label %1585

513:                                              ; preds = %499
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

514:                                              ; preds = %2, %2
  %515 = load i32, ptr %108, align 4, !tbaa !11
  %516 = getelementptr inbounds i8, ptr %108, i64 4
  %517 = load i32, ptr %516, align 4, !tbaa !11
  %518 = icmp eq i32 %114, 174
  %519 = select i1 %518, i32 %113, i32 %112
  %520 = getelementptr inbounds i8, ptr %108, i64 8
  %521 = load i32, ptr %520, align 4, !tbaa !11
  %522 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %521)
  %523 = getelementptr inbounds i8, ptr %522, i64 24
  %524 = load i32, ptr %523, align 8, !tbaa !161
  %525 = icmp ugt i32 %524, 1
  br i1 %525, label %526, label %530

526:                                              ; preds = %514
  %527 = load i32, ptr %520, align 4, !tbaa !11
  %528 = getelementptr inbounds i8, ptr %108, i64 12
  %529 = load i32, ptr %528, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %515, i32 noundef %517, i32 noundef %527, i32 noundef %529, ptr noundef nonnull @.str.633, i1 noundef zeroext false, i32 noundef %519)
  br label %1585

530:                                              ; preds = %514
  %531 = load i32, ptr %108, align 4, !tbaa !11
  %532 = load i32, ptr %516, align 4, !tbaa !11
  %533 = load i32, ptr %520, align 4, !tbaa !11
  %534 = getelementptr inbounds i8, ptr %108, i64 12
  %535 = load i32, ptr %534, align 4, !tbaa !11
  %536 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %114)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %531, i32 noundef %532, i32 noundef %533, i32 noundef %535, ptr noundef nonnull @.str.633, i32 noundef %519, i1 noundef zeroext %536, i1 noundef zeroext false)
  br label %1585

537:                                              ; preds = %2
  %538 = load i32, ptr %108, align 4, !tbaa !11
  %539 = getelementptr inbounds i8, ptr %108, i64 4
  %540 = load i32, ptr %539, align 4, !tbaa !11
  %541 = getelementptr inbounds i8, ptr %108, i64 8
  %542 = load i32, ptr %541, align 4, !tbaa !11
  %543 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %542)
  %544 = getelementptr inbounds i8, ptr %543, i64 24
  %545 = load i32, ptr %544, align 8, !tbaa !161
  %546 = icmp ugt i32 %545, 1
  br i1 %546, label %547, label %551

547:                                              ; preds = %537
  %548 = load i32, ptr %541, align 4, !tbaa !11
  %549 = getelementptr inbounds i8, ptr %108, i64 12
  %550 = load i32, ptr %549, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %538, i32 noundef %540, i32 noundef %548, i32 noundef %550, ptr noundef nonnull @.str.633, i1 noundef zeroext false, i32 noundef 0)
  br label %1585

551:                                              ; preds = %537
  %552 = load i32, ptr %108, align 4, !tbaa !11
  %553 = load i32, ptr %539, align 4, !tbaa !11
  %554 = load i32, ptr %541, align 4, !tbaa !11
  %555 = getelementptr inbounds i8, ptr %108, i64 12
  %556 = load i32, ptr %555, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %552, i32 noundef %553, i32 noundef %554, i32 noundef %556, ptr noundef nonnull @.str.633)
  br label %1585

557:                                              ; preds = %2
  %558 = load i32, ptr %108, align 4, !tbaa !11
  %559 = getelementptr inbounds i8, ptr %108, i64 4
  %560 = load i32, ptr %559, align 4, !tbaa !11
  %561 = getelementptr inbounds i8, ptr %108, i64 8
  %562 = load i32, ptr %561, align 4, !tbaa !11
  %563 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %562)
  %564 = getelementptr inbounds i8, ptr %563, i64 24
  %565 = load i32, ptr %564, align 8, !tbaa !161
  %566 = icmp ugt i32 %565, 1
  br i1 %566, label %567, label %571

567:                                              ; preds = %557
  %568 = load i32, ptr %561, align 4, !tbaa !11
  %569 = getelementptr inbounds i8, ptr %108, i64 12
  %570 = load i32, ptr %569, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %558, i32 noundef %560, i32 noundef %568, i32 noundef %570, ptr noundef nonnull @.str.17, i1 noundef zeroext true, i32 noundef 0)
  br label %1585

571:                                              ; preds = %557
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

572:                                              ; preds = %2, %2
  %573 = load i32, ptr %108, align 4, !tbaa !11
  %574 = getelementptr inbounds i8, ptr %108, i64 4
  %575 = load i32, ptr %574, align 4, !tbaa !11
  %576 = icmp eq i32 %114, 176
  %577 = select i1 %576, i32 %113, i32 %112
  %578 = getelementptr inbounds i8, ptr %108, i64 8
  %579 = load i32, ptr %578, align 4, !tbaa !11
  %580 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %579)
  %581 = getelementptr inbounds i8, ptr %580, i64 24
  %582 = load i32, ptr %581, align 8, !tbaa !161
  %583 = icmp ugt i32 %582, 1
  br i1 %583, label %584, label %588

584:                                              ; preds = %572
  %585 = load i32, ptr %578, align 4, !tbaa !11
  %586 = getelementptr inbounds i8, ptr %108, i64 12
  %587 = load i32, ptr %586, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %573, i32 noundef %575, i32 noundef %585, i32 noundef %587, ptr noundef nonnull @.str.17, i1 noundef zeroext false, i32 noundef %577)
  br label %1585

588:                                              ; preds = %572
  %589 = load i32, ptr %108, align 4, !tbaa !11
  %590 = load i32, ptr %574, align 4, !tbaa !11
  %591 = load i32, ptr %578, align 4, !tbaa !11
  %592 = getelementptr inbounds i8, ptr %108, i64 12
  %593 = load i32, ptr %592, align 4, !tbaa !11
  %594 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %114)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %589, i32 noundef %590, i32 noundef %591, i32 noundef %593, ptr noundef nonnull @.str.17, i32 noundef %577, i1 noundef zeroext %594, i1 noundef zeroext false)
  br label %1585

595:                                              ; preds = %2
  %596 = load i32, ptr %108, align 4, !tbaa !11
  %597 = getelementptr inbounds i8, ptr %108, i64 4
  %598 = load i32, ptr %597, align 4, !tbaa !11
  %599 = getelementptr inbounds i8, ptr %108, i64 8
  %600 = load i32, ptr %599, align 4, !tbaa !11
  %601 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %600)
  %602 = getelementptr inbounds i8, ptr %601, i64 24
  %603 = load i32, ptr %602, align 8, !tbaa !161
  %604 = icmp ugt i32 %603, 1
  br i1 %604, label %605, label %609

605:                                              ; preds = %595
  %606 = load i32, ptr %599, align 4, !tbaa !11
  %607 = getelementptr inbounds i8, ptr %108, i64 12
  %608 = load i32, ptr %607, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %596, i32 noundef %598, i32 noundef %606, i32 noundef %608, ptr noundef nonnull @.str.17, i1 noundef zeroext false, i32 noundef 0)
  br label %1585

609:                                              ; preds = %595
  %610 = load i32, ptr %108, align 4, !tbaa !11
  %611 = load i32, ptr %597, align 4, !tbaa !11
  %612 = load i32, ptr %599, align 4, !tbaa !11
  %613 = getelementptr inbounds i8, ptr %108, i64 12
  %614 = load i32, ptr %613, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %610, i32 noundef %611, i32 noundef %612, i32 noundef %614, ptr noundef nonnull @.str.17)
  br label %1585

615:                                              ; preds = %2
  %616 = load i32, ptr %108, align 4, !tbaa !11
  %617 = getelementptr inbounds i8, ptr %108, i64 4
  %618 = load i32, ptr %617, align 4, !tbaa !11
  %619 = getelementptr inbounds i8, ptr %108, i64 8
  %620 = load i32, ptr %619, align 4, !tbaa !11
  %621 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %620)
  %622 = getelementptr inbounds i8, ptr %621, i64 24
  %623 = load i32, ptr %622, align 8, !tbaa !161
  %624 = icmp ugt i32 %623, 1
  br i1 %624, label %625, label %629

625:                                              ; preds = %615
  %626 = load i32, ptr %619, align 4, !tbaa !11
  %627 = getelementptr inbounds i8, ptr %108, i64 12
  %628 = load i32, ptr %627, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %616, i32 noundef %618, i32 noundef %626, i32 noundef %628, ptr noundef nonnull @.str.633, i1 noundef zeroext true, i32 noundef 0)
  br label %1585

629:                                              ; preds = %615
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

630:                                              ; preds = %2, %2
  %631 = load i32, ptr %108, align 4, !tbaa !11
  %632 = getelementptr inbounds i8, ptr %108, i64 4
  %633 = load i32, ptr %632, align 4, !tbaa !11
  %634 = icmp eq i32 %114, 178
  %635 = select i1 %634, i32 %113, i32 %112
  %636 = getelementptr inbounds i8, ptr %108, i64 8
  %637 = load i32, ptr %636, align 4, !tbaa !11
  %638 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %637)
  %639 = getelementptr inbounds i8, ptr %638, i64 24
  %640 = load i32, ptr %639, align 8, !tbaa !161
  %641 = icmp ugt i32 %640, 1
  br i1 %641, label %642, label %646

642:                                              ; preds = %630
  %643 = load i32, ptr %636, align 4, !tbaa !11
  %644 = getelementptr inbounds i8, ptr %108, i64 12
  %645 = load i32, ptr %644, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %631, i32 noundef %633, i32 noundef %643, i32 noundef %645, ptr noundef nonnull @.str.632, i1 noundef zeroext false, i32 noundef %635)
  br label %1585

646:                                              ; preds = %630
  %647 = load i32, ptr %108, align 4, !tbaa !11
  %648 = load i32, ptr %632, align 4, !tbaa !11
  %649 = load i32, ptr %636, align 4, !tbaa !11
  %650 = getelementptr inbounds i8, ptr %108, i64 12
  %651 = load i32, ptr %650, align 4, !tbaa !11
  %652 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %114)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %647, i32 noundef %648, i32 noundef %649, i32 noundef %651, ptr noundef nonnull @.str.632, i32 noundef %635, i1 noundef zeroext %652, i1 noundef zeroext false)
  br label %1585

653:                                              ; preds = %2
  %654 = load i32, ptr %108, align 4, !tbaa !11
  %655 = getelementptr inbounds i8, ptr %108, i64 4
  %656 = load i32, ptr %655, align 4, !tbaa !11
  %657 = getelementptr inbounds i8, ptr %108, i64 8
  %658 = load i32, ptr %657, align 4, !tbaa !11
  %659 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %658)
  %660 = getelementptr inbounds i8, ptr %659, i64 24
  %661 = load i32, ptr %660, align 8, !tbaa !161
  %662 = icmp ugt i32 %661, 1
  br i1 %662, label %663, label %667

663:                                              ; preds = %653
  %664 = load i32, ptr %657, align 4, !tbaa !11
  %665 = getelementptr inbounds i8, ptr %108, i64 12
  %666 = load i32, ptr %665, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %654, i32 noundef %656, i32 noundef %664, i32 noundef %666, ptr noundef nonnull @.str.632, i1 noundef zeroext false, i32 noundef 0)
  br label %1585

667:                                              ; preds = %653
  %668 = load i32, ptr %108, align 4, !tbaa !11
  %669 = load i32, ptr %655, align 4, !tbaa !11
  %670 = load i32, ptr %657, align 4, !tbaa !11
  %671 = getelementptr inbounds i8, ptr %108, i64 12
  %672 = load i32, ptr %671, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %668, i32 noundef %669, i32 noundef %670, i32 noundef %672, ptr noundef nonnull @.str.632)
  br label %1585

673:                                              ; preds = %2
  %674 = load i32, ptr %108, align 4, !tbaa !11
  %675 = getelementptr inbounds i8, ptr %108, i64 4
  %676 = load i32, ptr %675, align 4, !tbaa !11
  %677 = getelementptr inbounds i8, ptr %108, i64 8
  %678 = load i32, ptr %677, align 4, !tbaa !11
  %679 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %678)
  %680 = getelementptr inbounds i8, ptr %679, i64 24
  %681 = load i32, ptr %680, align 8, !tbaa !161
  %682 = icmp ugt i32 %681, 1
  br i1 %682, label %683, label %687

683:                                              ; preds = %673
  %684 = load i32, ptr %677, align 4, !tbaa !11
  %685 = getelementptr inbounds i8, ptr %108, i64 12
  %686 = load i32, ptr %685, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %674, i32 noundef %676, i32 noundef %684, i32 noundef %686, ptr noundef nonnull @.str.7, i1 noundef zeroext true, i32 noundef 0)
  br label %1585

687:                                              ; preds = %673
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

688:                                              ; preds = %2
  %689 = load ptr, ptr %0, align 8, !tbaa !162
  %690 = getelementptr inbounds i8, ptr %689, i64 128
  %691 = load ptr, ptr %690, align 8
  tail call void %691(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull align 4 dereferenceable(12) %1, i1 noundef zeroext false)
  br label %1585

692:                                              ; preds = %2
  %693 = load i32, ptr %108, align 4, !tbaa !11
  %694 = getelementptr inbounds i8, ptr %108, i64 4
  %695 = load i32, ptr %694, align 4, !tbaa !11
  %696 = getelementptr inbounds i8, ptr %108, i64 8
  %697 = load i32, ptr %696, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerHLSL29require_texture_query_variantEj(ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %697)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef %695)
  %698 = load i32, ptr %17, align 4
  %699 = load ptr, ptr %0, align 8, !tbaa !162
  %700 = getelementptr inbounds i8, ptr %699, i64 24
  %701 = load ptr, ptr %700, align 8
  call void %701(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %698)
  invoke void @_ZN11spirv_cross4joinIJKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(17) @.str.634)
          to label %702 unwind label %717

702:                                              ; preds = %692
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.635, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %703 unwind label %719

703:                                              ; preds = %702
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #8
  %704 = load i32, ptr %696, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %704)
          to label %705 unwind label %721

705:                                              ; preds = %703
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #8
  %706 = getelementptr inbounds i8, ptr %108, i64 12
  %707 = load i32, ptr %706, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 8, i32 noundef %707)
          to label %708 unwind label %723

708:                                              ; preds = %705
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 1 dereferenceable(16) @.str.636, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %709 unwind label %725

709:                                              ; preds = %708
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  %710 = load i32, ptr %108, align 4, !tbaa !11
  %711 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %710)
          to label %712 unwind label %729

712:                                              ; preds = %709
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %711, i32 noundef 8, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %713 unwind label %731

713:                                              ; preds = %712
  %714 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  %715 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %693, i32 noundef %695, ptr noundef nonnull align 8 dereferenceable(32) %18, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %716 unwind label %729

716:                                              ; preds = %713
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #8
  br label %1585

717:                                              ; preds = %692
  %718 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #8
  br label %736

719:                                              ; preds = %702
  %720 = landingpad { ptr, i32 }
          cleanup
  br label %735

721:                                              ; preds = %703
  %722 = landingpad { ptr, i32 }
          cleanup
  br label %728

723:                                              ; preds = %705
  %724 = landingpad { ptr, i32 }
          cleanup
  br label %727

725:                                              ; preds = %708
  %726 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  br label %727

727:                                              ; preds = %725, %723
  %.pn797 = phi { ptr, i32 } [ %726, %725 ], [ %724, %723 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  br label %728

728:                                              ; preds = %727, %721
  %.pn797.pn = phi { ptr, i32 } [ %.pn797, %727 ], [ %722, %721 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  br label %734

729:                                              ; preds = %713, %709
  %730 = landingpad { ptr, i32 }
          cleanup
  br label %733

731:                                              ; preds = %712
  %732 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  br label %733

733:                                              ; preds = %731, %729
  %.pn800 = phi { ptr, i32 } [ %730, %729 ], [ %732, %731 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  br label %734

734:                                              ; preds = %733, %728
  %.pn800.pn = phi { ptr, i32 } [ %.pn800, %733 ], [ %.pn797.pn, %728 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  br label %735

735:                                              ; preds = %734, %719
  %.pn800.pn.pn = phi { ptr, i32 } [ %.pn800.pn, %734 ], [ %720, %719 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  br label %736

736:                                              ; preds = %735, %717
  %.pn800.pn.pn.pn = phi { ptr, i32 } [ %.pn800.pn.pn, %735 ], [ %718, %717 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #8
  br label %1586

737:                                              ; preds = %2
  %738 = load i32, ptr %108, align 4, !tbaa !11
  %739 = getelementptr inbounds i8, ptr %108, i64 4
  %740 = load i32, ptr %739, align 4, !tbaa !11
  %741 = getelementptr inbounds i8, ptr %108, i64 8
  %742 = load i32, ptr %741, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerHLSL29require_texture_query_variantEj(ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %742)
  %743 = load i32, ptr %741, align 4, !tbaa !11
  %744 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %743)
  %745 = getelementptr inbounds i8, ptr %744, i64 260
  %746 = load i32, ptr %745, align 4, !tbaa !164
  %747 = icmp eq i32 %746, 2
  %748 = load i32, ptr %741, align 4, !tbaa !11
  %749 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %748)
  %.not787 = icmp eq ptr %749, null
  br i1 %.not787, label %757, label %750

750:                                              ; preds = %737
  %751 = getelementptr inbounds i8, ptr %0, i64 9856
  %752 = load i8, ptr %751, align 8, !tbaa !165, !range !141, !noundef !142
  %753 = trunc nuw i8 %752 to i1
  br i1 %753, label %754, label %757

754:                                              ; preds = %750
  %755 = getelementptr inbounds i8, ptr %749, i64 8
  %.sroa.098.0.copyload = load i32, ptr %755, align 8, !tbaa !11
  %756 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.098.0.copyload, i32 noundef 24)
  %not.864 = xor i1 %756, true
  %spec.select = select i1 %not.864, i1 %747, i1 false
  br label %757

757:                                              ; preds = %754, %750, %737
  %.0665.shrunk = phi i1 [ %747, %750 ], [ %747, %737 ], [ %spec.select, %754 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %24, i32 noundef %740)
  %758 = load i32, ptr %24, align 4
  %759 = load ptr, ptr %0, align 8, !tbaa !162
  %760 = getelementptr inbounds i8, ptr %759, i64 24
  %761 = load ptr, ptr %760, align 8
  call void %761(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %758)
  invoke void @_ZN11spirv_cross4joinIJKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 1 dereferenceable(17) @.str.634)
          to label %762 unwind label %769

762:                                              ; preds = %757
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.635, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %763 unwind label %771

763:                                              ; preds = %762
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  br i1 %.0665.shrunk, label %764, label %778

764:                                              ; preds = %763
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #8
  %765 = load i32, ptr %741, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %765)
          to label %766 unwind label %773

766:                                              ; preds = %764
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 1 dereferenceable(14) @.str.637, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %767 unwind label %775

767:                                              ; preds = %766
  %768 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  br label %788

769:                                              ; preds = %757
  %770 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  br label %802

771:                                              ; preds = %762
  %772 = landingpad { ptr, i32 }
          cleanup
  br label %801

773:                                              ; preds = %764
  %774 = landingpad { ptr, i32 }
          cleanup
  br label %777

775:                                              ; preds = %766
  %776 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  br label %777

777:                                              ; preds = %775, %773
  %.pn790 = phi { ptr, i32 } [ %776, %775 ], [ %774, %773 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  br label %800

778:                                              ; preds = %763
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #8
  %779 = load i32, ptr %741, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(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 %779)
          to label %780 unwind label %783

780:                                              ; preds = %778
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 1 dereferenceable(16) @.str.636, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(7) @.str.638, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %781 unwind label %785

781:                                              ; preds = %780
  %782 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  br label %788

783:                                              ; preds = %778
  %784 = landingpad { ptr, i32 }
          cleanup
  br label %787

785:                                              ; preds = %780
  %786 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %787

787:                                              ; preds = %785, %783
  %.pn788 = phi { ptr, i32 } [ %786, %785 ], [ %784, %783 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  br label %800

788:                                              ; preds = %781, %767
  %789 = load i32, ptr %108, align 4, !tbaa !11
  %790 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %789)
          to label %791 unwind label %796

791:                                              ; preds = %788
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %790, i32 noundef 8, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %792 unwind label %798

792:                                              ; preds = %791
  %793 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  %794 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %738, i32 noundef %740, ptr noundef nonnull align 8 dereferenceable(32) %25, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %795 unwind label %796

795:                                              ; preds = %792
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  br label %1585

796:                                              ; preds = %792, %788
  %797 = landingpad { ptr, i32 }
          cleanup
  br label %800

798:                                              ; preds = %791
  %799 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  br label %800

800:                                              ; preds = %796, %798, %787, %777
  %.pn792.pn = phi { ptr, i32 } [ %.pn790, %777 ], [ %.pn788, %787 ], [ %797, %796 ], [ %799, %798 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  br label %801

801:                                              ; preds = %800, %771
  %.pn792.pn.pn = phi { ptr, i32 } [ %.pn792.pn, %800 ], [ %772, %771 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %802

802:                                              ; preds = %801, %769
  %.pn792.pn.pn.pn = phi { ptr, i32 } [ %.pn792.pn.pn, %801 ], [ %770, %769 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  br label %1586

803:                                              ; preds = %2, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #8
  %804 = load i32, ptr %108, align 4, !tbaa !11
  store i32 %804, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #8
  %805 = getelementptr inbounds i8, ptr %108, i64 4
  %806 = load i32, ptr %805, align 4, !tbaa !11
  store i32 %806, ptr %32, align 4, !tbaa !11
  %807 = getelementptr inbounds i8, ptr %108, i64 8
  %808 = load i32, ptr %807, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerHLSL29require_texture_query_variantEj(ptr noundef nonnull align 8 dereferenceable(10528) %0, i32 noundef %808)
  %809 = load i32, ptr %807, align 4, !tbaa !11
  %810 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %809)
  %811 = getelementptr inbounds i8, ptr %810, i64 260
  %812 = load i32, ptr %811, align 4, !tbaa !164
  %813 = icmp eq i32 %812, 2
  %814 = icmp eq i32 %114, 106
  %brmerge.not = select i1 %814, i1 %813, i1 false
  br i1 %brmerge.not, label %815, label %820

815:                                              ; preds = %803
  %816 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %816, ptr noundef nonnull @.str.639)
          to label %817 unwind label %818

817:                                              ; preds = %815
  tail call void @__cxa_throw(ptr nonnull %816, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

818:                                              ; preds = %815
  %819 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %816) #8
  br label %890

820:                                              ; preds = %803
  %821 = load i32, ptr %807, align 4, !tbaa !11
  %822 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %821)
  %.not775 = icmp eq ptr %822, null
  br i1 %.not775, label %830, label %823

823:                                              ; preds = %820
  %824 = getelementptr inbounds i8, ptr %0, i64 9856
  %825 = load i8, ptr %824, align 8, !tbaa !165, !range !141, !noundef !142
  %826 = trunc nuw i8 %825 to i1
  br i1 %826, label %827, label %830

827:                                              ; preds = %823
  %828 = getelementptr inbounds i8, ptr %822, i64 8
  %.sroa.092.0.copyload = load i32, ptr %828, align 8, !tbaa !11
  %829 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.092.0.copyload, i32 noundef 24)
  %not. = xor i1 %829, true
  %spec.select824 = select i1 %not., i1 %813, i1 false
  br label %830

830:                                              ; preds = %827, %823, %820
  %.0666.shrunk = phi i1 [ %813, %823 ], [ %813, %820 ], [ %spec.select824, %827 ]
  %831 = getelementptr inbounds i8, ptr %0, i64 2400
  %832 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %831, ptr noundef nonnull align 4 dereferenceable(4) %32)
  %833 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %804)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #8
  %834 = load i32, ptr %32, align 4, !tbaa !11
  %835 = load ptr, ptr %0, align 8, !tbaa !162
  %836 = getelementptr inbounds i8, ptr %835, i64 48
  %837 = load ptr, ptr %836, align 8
  call void %837(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %834, i1 noundef zeroext true)
  %838 = load ptr, ptr %0, align 8, !tbaa !162
  %839 = getelementptr inbounds i8, ptr %838, i64 216
  %840 = load ptr, ptr %839, align 8
  invoke void %840(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %833, ptr noundef nonnull align 8 dereferenceable(32) %34, i32 noundef 0)
          to label %841 unwind label %851

841:                                              ; preds = %830
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %842 unwind label %853

842:                                              ; preds = %841
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  br i1 %.0666.shrunk, label %843, label %861

843:                                              ; preds = %842
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #8
  %844 = load i32, ptr %807, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %844)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #8
  %845 = load i32, ptr %32, align 4, !tbaa !11
  %846 = load ptr, ptr %0, align 8, !tbaa !162
  %847 = getelementptr inbounds i8, ptr %846, i64 48
  %848 = load ptr, ptr %847, align 8
  invoke void %848(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %845, i1 noundef zeroext true)
          to label %849 unwind label %856

849:                                              ; preds = %843
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(14) @.str.637, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %850 unwind label %858

850:                                              ; preds = %849
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  br label %874

851:                                              ; preds = %830
  %852 = landingpad { ptr, i32 }
          cleanup
  br label %855

853:                                              ; preds = %841
  %854 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  br label %855

855:                                              ; preds = %853, %851
  %.pn776 = phi { ptr, i32 } [ %854, %853 ], [ %852, %851 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  br label %890

856:                                              ; preds = %843
  %857 = landingpad { ptr, i32 }
          cleanup
  br label %860

858:                                              ; preds = %849
  %859 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %860

860:                                              ; preds = %858, %856
  %.pn780 = phi { ptr, i32 } [ %859, %858 ], [ %857, %856 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  br label %890

861:                                              ; preds = %842
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #8
  %862 = load i32, ptr %807, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(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 %862)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #8
  %863 = load i32, ptr %32, align 4, !tbaa !11
  %864 = load ptr, ptr %0, align 8, !tbaa !162
  %865 = getelementptr inbounds i8, ptr %864, i64 48
  %866 = load ptr, ptr %865, align 8
  invoke void %866(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %863, i1 noundef zeroext true)
          to label %867 unwind label %869

867:                                              ; preds = %861
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_S2_SA_RA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(16) @.str.636, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(7) @.str.638, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %868 unwind label %871

868:                                              ; preds = %867
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  br label %874

869:                                              ; preds = %861
  %870 = landingpad { ptr, i32 }
          cleanup
  br label %873

871:                                              ; preds = %867
  %872 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %873

873:                                              ; preds = %871, %869
  %.pn778 = phi { ptr, i32 } [ %872, %871 ], [ %870, %869 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  br label %890

874:                                              ; preds = %868, %850
  %875 = load i32, ptr %108, align 4, !tbaa !11
  %876 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %875)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #8
  %877 = load i32, ptr %32, align 4, !tbaa !11
  %878 = load ptr, ptr %0, align 8, !tbaa !162
  %879 = getelementptr inbounds i8, ptr %878, i64 48
  %880 = load ptr, ptr %879, align 8
  call void %880(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %877, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %876, i32 noundef 8, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %881 unwind label %885

881:                                              ; preds = %874
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  %882 = load i32, ptr %32, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %41) #8
  store i8 1, ptr %41, align 1, !tbaa !166
  %883 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %882, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 4 dereferenceable(4) %31, ptr noundef nonnull align 1 dereferenceable(1) %41)
          to label %884 unwind label %887

884:                                              ; preds = %881
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #8
  br label %1585

885:                                              ; preds = %874
  %886 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  br label %889

887:                                              ; preds = %881
  %888 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %889

889:                                              ; preds = %887, %885
  %.pn782 = phi { ptr, i32 } [ %888, %887 ], [ %886, %885 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  br label %890

890:                                              ; preds = %855, %860, %873, %889, %818
  %.pn785 = phi { ptr, i32 } [ %819, %818 ], [ %.pn782, %889 ], [ %.pn780, %860 ], [ %.pn778, %873 ], [ %.pn776, %855 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #8
  br label %1586

891:                                              ; preds = %2
  %892 = load i32, ptr %108, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #8
  %893 = getelementptr inbounds i8, ptr %108, i64 4
  %894 = load i32, ptr %893, align 4, !tbaa !11
  store i32 %894, ptr %42, align 4, !tbaa !11
  %895 = getelementptr inbounds i8, ptr %108, i64 8
  %896 = load i32, ptr %895, align 4, !tbaa !11
  %897 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %896)
  %898 = load i32, ptr %895, align 4, !tbaa !11
  %899 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %898)
  %900 = getelementptr inbounds i8, ptr %899, i64 252
  %901 = load i32, ptr %900, align 4, !tbaa !167
  %902 = icmp eq i32 %901, 6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  br i1 %902, label %903, label %956

903:                                              ; preds = %891
  %904 = getelementptr inbounds i8, ptr %0, i64 9848
  %905 = load i32, ptr %904, align 8, !tbaa !168
  %906 = icmp ult i32 %905, 40
  br i1 %906, label %907, label %914

907:                                              ; preds = %903
  %908 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %908, ptr noundef nonnull @.str.640)
          to label %909 unwind label %910

909:                                              ; preds = %907
  invoke void @__cxa_throw(ptr nonnull %908, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %1587 unwind label %912

910:                                              ; preds = %907
  %911 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %908) #8
  br label %1032

912:                                              ; preds = %1027, %1020, %1018, %909
  %913 = landingpad { ptr, i32 }
          cleanup
  br label %1032

914:                                              ; preds = %903
  %915 = getelementptr inbounds i8, ptr %899, i64 258
  %916 = load i8, ptr %915, align 2, !tbaa !169, !range !141, !noundef !142
  %917 = trunc nuw i8 %916 to i1
  br i1 %917, label %918, label %946

918:                                              ; preds = %914
  %919 = getelementptr inbounds i8, ptr %108, i64 16
  %920 = load i32, ptr %919, align 4, !tbaa !11
  %.not763 = icmp eq i32 %920, 64
  %921 = getelementptr inbounds i8, ptr %1, i64 8
  %922 = load i32, ptr %921, align 4
  %.not764 = icmp eq i32 %922, 6
  %or.cond826 = select i1 %.not763, i1 %.not764, i1 false
  br i1 %or.cond826, label %930, label %923

923:                                              ; preds = %918
  %924 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %924, ptr noundef nonnull @.str.641)
          to label %925 unwind label %926

925:                                              ; preds = %923
  invoke void @__cxa_throw(ptr nonnull %924, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %1587 unwind label %928

926:                                              ; preds = %923
  %927 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %924) #8
  br label %1032

928:                                              ; preds = %925
  %929 = landingpad { ptr, i32 }
          cleanup
  br label %1032

930:                                              ; preds = %918
  %931 = getelementptr inbounds i8, ptr %108, i64 20
  %932 = load i32, ptr %931, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #8
  %933 = load i32, ptr %895, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %933)
          to label %934 unwind label %938

934:                                              ; preds = %930
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %932, i1 noundef zeroext true)
          to label %935 unwind label %940

935:                                              ; preds = %934
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcS6_RA2_S7_EEES6_DpOT_(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 1 dereferenceable(30) @.str.642, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %936 unwind label %942

936:                                              ; preds = %935
  %937 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  br label %997

938:                                              ; preds = %930
  %939 = landingpad { ptr, i32 }
          cleanup
  br label %945

940:                                              ; preds = %934
  %941 = landingpad { ptr, i32 }
          cleanup
  br label %944

942:                                              ; preds = %935
  %943 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  br label %944

944:                                              ; preds = %942, %940
  %.pn765 = phi { ptr, i32 } [ %943, %942 ], [ %941, %940 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %945

945:                                              ; preds = %944, %938
  %.pn765.pn = phi { ptr, i32 } [ %.pn765, %944 ], [ %939, %938 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  br label %1032

946:                                              ; preds = %914
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #8
  %947 = load i32, ptr %895, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %947)
          to label %948 unwind label %951

948:                                              ; preds = %946
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA38_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(38) @.str.643)
          to label %949 unwind label %953

949:                                              ; preds = %948
  %950 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #8
  br label %997

951:                                              ; preds = %946
  %952 = landingpad { ptr, i32 }
          cleanup
  br label %955

953:                                              ; preds = %948
  %954 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %955

955:                                              ; preds = %953, %951
  %.pn761 = phi { ptr, i32 } [ %954, %953 ], [ %952, %951 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #8
  br label %1032

956:                                              ; preds = %891
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #8
  %957 = load i32, ptr %895, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %957)
          to label %958 unwind label %985

958:                                              ; preds = %956
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #8
  %959 = getelementptr inbounds i8, ptr %108, i64 12
  %960 = load i32, ptr %959, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %960, i1 noundef zeroext true)
          to label %961 unwind label %987

961:                                              ; preds = %958
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S9_EEES6_DpOT_(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 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(2) @.str.417)
          to label %962 unwind label %989

962:                                              ; preds = %961
  %963 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  %964 = getelementptr inbounds i8, ptr %0, i64 9856
  %965 = load i8, ptr %964, align 8, !tbaa !165, !range !141, !noundef !142
  %966 = trunc nuw i8 %965 to i1
  %967 = icmp ne ptr %897, null
  %or.cond = and i1 %967, %966
  br i1 %or.cond, label %968, label %971

968:                                              ; preds = %962
  %969 = getelementptr inbounds i8, ptr %897, i64 8
  %.sroa.068.0.copyload = load i32, ptr %969, align 8, !tbaa !11
  %970 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.068.0.copyload, i32 noundef 24)
          to label %971 unwind label %993

971:                                              ; preds = %968, %962
  %972 = phi i1 [ false, %962 ], [ %970, %968 ]
  %.not827 = xor i1 %967, true
  %brmerge828 = or i1 %972, %.not827
  br i1 %brmerge828, label %997, label %973

973:                                              ; preds = %971
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #8
  %974 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %892)
          to label %975 unwind label %995

975:                                              ; preds = %973
  %976 = getelementptr inbounds i8, ptr %897, i64 12
  %977 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %976)
  %978 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %977)
          to label %979 unwind label %995

979:                                              ; preds = %975
  %980 = getelementptr inbounds i8, ptr %978, i64 264
  %981 = load i32, ptr %980, align 8, !tbaa !170
  %982 = invoke noundef i32 @_ZL26image_format_to_componentsN3spv11ImageFormatE(i32 noundef %981)
          to label %983 unwind label %995

983:                                              ; preds = %979
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %974, i32 noundef %982, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %.thread unwind label %995

.thread:                                          ; preds = %983
  %984 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #8
  br label %998

985:                                              ; preds = %956
  %986 = landingpad { ptr, i32 }
          cleanup
  br label %992

987:                                              ; preds = %958
  %988 = landingpad { ptr, i32 }
          cleanup
  br label %991

989:                                              ; preds = %961
  %990 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  br label %991

991:                                              ; preds = %989, %987
  %.pn756 = phi { ptr, i32 } [ %990, %989 ], [ %988, %987 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br label %992

992:                                              ; preds = %991, %985
  %.pn756.pn = phi { ptr, i32 } [ %.pn756, %991 ], [ %986, %985 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  br label %1032

993:                                              ; preds = %968
  %994 = landingpad { ptr, i32 }
          cleanup
  br label %1032

995:                                              ; preds = %983, %979, %975, %973
  %996 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #8
  br label %1032

997:                                              ; preds = %971, %936, %949
  %.0667 = phi i1 [ true, %949 ], [ true, %936 ], [ %972, %971 ]
  %.not768 = icmp eq ptr %897, null
  br i1 %.not768, label %1018, label %998

998:                                              ; preds = %.thread, %997
  %.0667841 = phi i1 [ false, %.thread ], [ %.0667, %997 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #8
  %999 = getelementptr inbounds i8, ptr %0, i64 2400
  %1000 = invoke ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %999, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %1001 unwind label %1014

1001:                                             ; preds = %998
  store ptr %1000, ptr %53, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #8
  %1002 = call ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %999)
  store ptr %1002, ptr %54, align 8
  %1003 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  %1004 = load i32, ptr %42, align 4, !tbaa !11
  %1005 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %892, i32 noundef %1004, ptr noundef nonnull align 8 dereferenceable(32) %43, i1 noundef zeroext %1003, i1 noundef zeroext false)
          to label %1006 unwind label %1016

1006:                                             ; preds = %1001
  br i1 %.0667841, label %1020, label %1007

1007:                                             ; preds = %1006
  %1008 = getelementptr inbounds i8, ptr %897, i64 8
  %1009 = getelementptr inbounds i8, ptr %1005, i64 52
  %1010 = load i32, ptr %1008, align 8, !tbaa !11
  store i32 %1010, ptr %1009, align 4, !tbaa !11
  br i1 %1003, label %1011, label %1020

1011:                                             ; preds = %1007
  %1012 = getelementptr inbounds i8, ptr %897, i64 96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %55) #8
  %1013 = load i32, ptr %42, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %55, i32 noundef %1013)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1012, ptr noundef nonnull align 4 dereferenceable(4) %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %55) #8
  br label %1020

1014:                                             ; preds = %998
  %1015 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  br label %1032

1016:                                             ; preds = %1001
  %1017 = landingpad { ptr, i32 }
          cleanup
  br label %1032

1018:                                             ; preds = %997
  %1019 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %892, i32 noundef %894, ptr noundef nonnull align 8 dereferenceable(32) %43, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1020 unwind label %912

1020:                                             ; preds = %1006, %1011, %1007, %1018
  %1021 = load i32, ptr %42, align 4, !tbaa !11
  %1022 = load i32, ptr %895, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1021, i32 noundef %1022)
          to label %1023 unwind label %912

1023:                                             ; preds = %1020
  %1024 = getelementptr inbounds i8, ptr %899, i64 258
  %1025 = load i8, ptr %1024, align 2, !tbaa !169, !range !141, !noundef !142
  %1026 = trunc nuw i8 %1025 to i1
  br i1 %1026, label %1027, label %1031

1027:                                             ; preds = %1023
  %1028 = load i32, ptr %42, align 4, !tbaa !11
  %1029 = getelementptr inbounds i8, ptr %108, i64 20
  %1030 = load i32, ptr %1029, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1028, i32 noundef %1030)
          to label %1031 unwind label %912

1031:                                             ; preds = %1027, %1023
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #8
  br label %1585

1032:                                             ; preds = %1014, %1016, %993, %995, %926, %928, %945, %992, %955, %912, %910
  %.pn773 = phi { ptr, i32 } [ %913, %912 ], [ %911, %910 ], [ %.pn761, %955 ], [ %.pn756.pn, %992 ], [ %929, %928 ], [ %927, %926 ], [ %.pn765.pn, %945 ], [ %996, %995 ], [ %994, %993 ], [ %1017, %1016 ], [ %1015, %1014 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #8
  br label %1586

1033:                                             ; preds = %2
  %1034 = load i32, ptr %108, align 4, !tbaa !11
  %1035 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1034)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #8
  %1036 = getelementptr inbounds i8, ptr %108, i64 8
  %1037 = load i32, ptr %1036, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1037, i1 noundef zeroext true)
  %.not746 = icmp eq ptr %1035, null
  br i1 %.not746, label %1070, label %1038

1038:                                             ; preds = %1033
  %1039 = getelementptr inbounds i8, ptr %1035, i64 12
  %1040 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1039)
  %1041 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1040)
          to label %1042 unwind label %1060

1042:                                             ; preds = %1038
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %57) #8
  %1043 = getelementptr inbounds i8, ptr %1041, i64 248
  %1044 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1043)
  %1045 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1044)
          to label %1046 unwind label %1062

1046:                                             ; preds = %1042
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %57, ptr noundef nonnull align 8 dereferenceable(336) %1045)
          to label %1047 unwind label %1062

1047:                                             ; preds = %1046
  %1048 = getelementptr inbounds i8, ptr %1041, i64 264
  %1049 = load i32, ptr %1048, align 8, !tbaa !170
  %1050 = invoke noundef i32 @_ZL26image_format_to_componentsN3spv11ImageFormatE(i32 noundef %1049)
          to label %1051 unwind label %1064

1051:                                             ; preds = %1047
  %1052 = getelementptr inbounds i8, ptr %57, i64 24
  store i32 %1050, ptr %1052, align 8, !tbaa !161
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #8
  %1053 = load i32, ptr %1036, align 4, !tbaa !11
  %1054 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1053)
          to label %1055 unwind label %1066

1055:                                             ; preds = %1051
  %1056 = getelementptr inbounds i8, ptr %1054, i64 24
  %1057 = load i32, ptr %1056, align 8, !tbaa !161
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %57, i32 noundef %1057, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %1058 unwind label %1066

1058:                                             ; preds = %1055
  %1059 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %57) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %57) #8
  br label %1070

1060:                                             ; preds = %1038
  %1061 = landingpad { ptr, i32 }
          cleanup
  br label %1092

1062:                                             ; preds = %1046, %1042
  %1063 = landingpad { ptr, i32 }
          cleanup
  br label %1069

1064:                                             ; preds = %1047
  %1065 = landingpad { ptr, i32 }
          cleanup
  br label %1068

1066:                                             ; preds = %1055, %1051
  %1067 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #8
  br label %1068

1068:                                             ; preds = %1066, %1064
  %.pn747 = phi { ptr, i32 } [ %1067, %1066 ], [ %1065, %1064 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %57) #8
  br label %1069

1069:                                             ; preds = %1068, %1062
  %.pn747.pn = phi { ptr, i32 } [ %.pn747, %1068 ], [ %1063, %1062 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %57) #8
  br label %1092

1070:                                             ; preds = %1058, %1033
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #8
  %1071 = load i32, ptr %108, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1071)
          to label %1072 unwind label %1081

1072:                                             ; preds = %1070
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #8
  %1073 = getelementptr inbounds i8, ptr %108, i64 4
  %1074 = load i32, ptr %1073, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1074, i1 noundef zeroext true)
          to label %1075 unwind label %1083

1075:                                             ; preds = %1072
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA5_S8_RS7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 1 dereferenceable(5) @.str.644, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1076 unwind label %1085

1076:                                             ; preds = %1075
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  br i1 %.not746, label %1091, label %1077

1077:                                             ; preds = %1076
  %1078 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler27variable_storage_is_aliasedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %1035)
          to label %1079 unwind label %1089

1079:                                             ; preds = %1077
  br i1 %1078, label %1080, label %1091

1080:                                             ; preds = %1079
  invoke void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %1091 unwind label %1089

1081:                                             ; preds = %1070
  %1082 = landingpad { ptr, i32 }
          cleanup
  br label %1088

1083:                                             ; preds = %1072
  %1084 = landingpad { ptr, i32 }
          cleanup
  br label %1087

1085:                                             ; preds = %1075
  %1086 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %1087

1087:                                             ; preds = %1085, %1083
  %.pn751 = phi { ptr, i32 } [ %1086, %1085 ], [ %1084, %1083 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %1088

1088:                                             ; preds = %1087, %1081
  %.pn751.pn = phi { ptr, i32 } [ %.pn751, %1087 ], [ %1082, %1081 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  br label %1092

1089:                                             ; preds = %1080, %1077
  %1090 = landingpad { ptr, i32 }
          cleanup
  br label %1092

1091:                                             ; preds = %1080, %1079, %1076
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  br label %1585

1092:                                             ; preds = %1060, %1069, %1089, %1088
  %.pn754 = phi { ptr, i32 } [ %1090, %1089 ], [ %.pn751.pn, %1088 ], [ %.pn747.pn, %1069 ], [ %1061, %1060 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  br label %1586

1093:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %61) #8
  %1094 = load i32, ptr %108, align 4, !tbaa !11
  store i32 %1094, ptr %61, align 4, !tbaa !11
  %1095 = getelementptr inbounds i8, ptr %108, i64 4
  %1096 = load i32, ptr %1095, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #8
  %1097 = getelementptr inbounds i8, ptr %108, i64 8
  %1098 = load i32, ptr %1097, align 4, !tbaa !11
  call 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 %1098, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #8
  %1099 = getelementptr inbounds i8, ptr %108, i64 12
  %1100 = load i32, ptr %1099, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1100, i1 noundef zeroext true)
          to label %1101 unwind label %1118

1101:                                             ; preds = %1093
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 1 dereferenceable(2) @.str.530, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 1 dereferenceable(2) @.str.417)
          to label %1102 unwind label %1120

1102:                                             ; preds = %1101
  %1103 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %1104 unwind label %1122

1104:                                             ; preds = %1102
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %65) #8
  store i8 1, ptr %65, align 1, !tbaa !166
  %1105 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1096, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 4 dereferenceable(4) %61, ptr noundef nonnull align 1 dereferenceable(1) %65)
          to label %1106 unwind label %1126

1106:                                             ; preds = %1104
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %65) #8
  %1107 = load i32, ptr %1097, align 4, !tbaa !11
  %1108 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1107)
          to label %1109 unwind label %1128

1109:                                             ; preds = %1106
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %66) #8
  %.not742 = icmp eq ptr %1108, null
  br i1 %.not742, label %1112, label %1110

1110:                                             ; preds = %1109
  %1111 = getelementptr inbounds i8, ptr %1108, i64 8
  br label %1113

1112:                                             ; preds = %1109
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %66, i32 noundef 0)
  br label %1113

1113:                                             ; preds = %1112, %1110
  %.in = phi ptr [ %66, %1112 ], [ %1111, %1110 ]
  %1114 = load i32, ptr %.in, align 4, !tbaa !11
  %1115 = getelementptr inbounds i8, ptr %1105, i64 52
  store i32 %1114, ptr %1115, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %66) #8
  %1116 = load i32, ptr %1099, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1096, i32 noundef %1116)
          to label %1117 unwind label %1128

1117:                                             ; preds = %1113
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #8
  br label %1585

1118:                                             ; preds = %1093
  %1119 = landingpad { ptr, i32 }
          cleanup
  br label %1125

1120:                                             ; preds = %1101
  %1121 = landingpad { ptr, i32 }
          cleanup
  br label %1124

1122:                                             ; preds = %1102
  %1123 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  br label %1124

1124:                                             ; preds = %1122, %1120
  %.pn739 = phi { ptr, i32 } [ %1123, %1122 ], [ %1121, %1120 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  br label %1125

1125:                                             ; preds = %1124, %1118
  %.pn739.pn = phi { ptr, i32 } [ %.pn739, %1124 ], [ %1119, %1118 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #8
  br label %1130

1126:                                             ; preds = %1104
  %1127 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %65) #8
  br label %1130

1128:                                             ; preds = %1113, %1106
  %1129 = landingpad { ptr, i32 }
          cleanup
  br label %1130

1130:                                             ; preds = %1126, %1128, %1125
  %.pn743.pn = phi { ptr, i32 } [ %.pn739.pn, %1125 ], [ %1129, %1128 ], [ %1127, %1126 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #8
  br label %1586

1131:                                             ; preds = %2, %2, %2
  %1132 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1132, ptr noundef nonnull @.str.645)
          to label %1133 unwind label %1134

1133:                                             ; preds = %1131
  tail call void @__cxa_throw(ptr nonnull %1132, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1134:                                             ; preds = %1131
  %1135 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1132) #8
  br label %1586

1136:                                             ; preds = %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2, %2
  %1137 = getelementptr inbounds i8, ptr %1, i64 8
  %1138 = load i32, ptr %1137, align 4, !tbaa !171
  tail call void @_ZN11spirv_cross12CompilerHLSL11emit_atomicEPKjjN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef %108, i32 noundef %1138, i32 noundef %114)
  br label %1585

1139:                                             ; preds = %2
  %1140 = load i32, ptr %108, align 4, !tbaa !11
  %1141 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1140)
  %1142 = getelementptr inbounds i8, ptr %108, i64 4
  %1143 = load i32, ptr %1142, align 4, !tbaa !11
  %1144 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1143)
  %1145 = icmp eq i32 %1141, 3
  br i1 %1145, label %1585, label %1153

.thread842:                                       ; preds = %2
  %1146 = getelementptr inbounds i8, ptr %108, i64 4
  %1147 = load i32, ptr %1146, align 4, !tbaa !11
  %1148 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1147)
  %1149 = getelementptr inbounds i8, ptr %108, i64 8
  %1150 = load i32, ptr %1149, align 4, !tbaa !11
  %1151 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1150)
  %1152 = icmp eq i32 %1148, 3
  br i1 %1152, label %1585, label %.thread858

1153:                                             ; preds = %1139
  %1154 = tail call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %1144)
  %1155 = tail call noundef ptr @_ZN11spirv_cross12CompilerGLSL29get_next_instruction_in_blockERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  %.not737 = icmp eq ptr %1155, null
  br i1 %.not737, label %1184, label %1156

1156:                                             ; preds = %1153
  %1157 = load i16, ptr %1155, align 4, !tbaa !5
  %1158 = icmp eq i16 %1157, 224
  br i1 %1158, label %1159, label %1184

1159:                                             ; preds = %1156
  %1160 = tail call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(12) %1155)
  %1161 = getelementptr inbounds i8, ptr %1160, i64 4
  %1162 = load i32, ptr %1161, align 4, !tbaa !11
  %1163 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1162)
  %1164 = getelementptr inbounds i8, ptr %1160, i64 8
  %1165 = load i32, ptr %1164, align 4, !tbaa !11
  %1166 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1165)
  %1167 = tail call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %1166)
  %1168 = icmp eq i32 %1167, 0
  %spec.store.select = select i1 %1168, i32 256, i32 %1167
  %1169 = icmp eq i32 %1163, %1141
  br i1 %1169, label %.critedge, label %1170

1170:                                             ; preds = %1159
  %1171 = icmp eq i32 %spec.store.select, 256
  br i1 %1171, label %1172, label %1177

1172:                                             ; preds = %1170
  %1173 = add i32 %1163, -1
  %1174 = add i32 %1141, -1
  %1175 = or i32 %1173, %1174
  %or.cond829 = icmp ult i32 %1175, 2
  %1176 = and i32 %1154, -257
  %.old833 = icmp eq i32 %1176, 0
  %or.cond838 = and i1 %.old833, %or.cond829
  br i1 %or.cond838, label %1585, label %1184

1177:                                             ; preds = %1170
  %1178 = icmp eq i32 %1141, 2
  %1179 = icmp eq i32 %1163, 1
  %or.cond8 = and i1 %1178, %1179
  %1180 = and i32 %spec.store.select, %1154
  %1181 = icmp eq i32 %1180, %1154
  %or.cond834 = and i1 %or.cond8, %1181
  br i1 %or.cond834, label %1585, label %1184

.critedge:                                        ; preds = %1159
  %.old.old = and i32 %spec.store.select, %1154
  %.old833.old = icmp eq i32 %.old.old, %1154
  br i1 %.old833.old, label %1585, label %1184

.thread858:                                       ; preds = %.thread842
  %1182 = tail call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %1151)
  %1183 = icmp ne i32 %1182, 0
  br label %1185

1184:                                             ; preds = %1172, %.critedge, %1177, %1156, %1153
  %.not869 = icmp eq i32 %1154, 0
  br i1 %.not869, label %.thread862.thread, label %1185

1185:                                             ; preds = %.thread858, %1184
  %1186 = phi i1 [ true, %.thread858 ], [ false, %1184 ]
  %1187 = phi i1 [ %1183, %.thread858 ], [ true, %1184 ]
  %1188 = phi i32 [ %1182, %.thread858 ], [ %1154, %1184 ]
  %1189 = getelementptr inbounds i8, ptr %0, i64 3176
  %1190 = load ptr, ptr %1189, align 8, !tbaa !172
  %.not738 = icmp eq ptr %1190, null
  br i1 %.not738, label %1191, label %1192

1191:                                             ; preds = %1185
  tail call void @__assert_fail(ptr noundef nonnull @.str.646, ptr noundef nonnull @.str.539, i32 noundef 6345, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerHLSL16emit_instructionERKNS_11InstructionE) #10
  unreachable

1192:                                             ; preds = %1185
  %1193 = getelementptr inbounds i8, ptr %1190, i64 8
  %1194 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1193)
  tail call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1194)
  tail call void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br i1 %1186, label %1195, label %1202

1195:                                             ; preds = %1192
  %1196 = and i32 %1188, -257
  %or.cond12 = icmp eq i32 %1196, 0
  br i1 %or.cond12, label %.thread860, label %1197

.thread860:                                       ; preds = %1195
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA35_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(35) @.str.647)
  br label %1585

1197:                                             ; preds = %1195
  %1198 = and i32 %1188, 256
  %1199 = icmp eq i32 %1198, 0
  br i1 %1199, label %1200, label %1201

1200:                                             ; preds = %1197
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA36_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(36) @.str.648)
  br label %1585

1201:                                             ; preds = %1197
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA33_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(33) @.str.649)
  br label %1585

1202:                                             ; preds = %1192
  %1203 = icmp eq i32 %1188, 256
  br i1 %1203, label %1204, label %.thread862

1204:                                             ; preds = %1202
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(22) @.str.650)
  br label %1585

.thread862:                                       ; preds = %1202
  %1205 = and i32 %1188, 256
  %1206 = icmp eq i32 %1205, 0
  %or.cond837 = and i1 %1187, %1206
  br i1 %or.cond837, label %1207, label %.thread862.thread

1207:                                             ; preds = %.thread862
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(23) @.str.651)
  br label %1585

.thread862.thread:                                ; preds = %1184, %.thread862
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(20) @.str.652)
  br label %1585

1208:                                             ; preds = %2
  %1209 = getelementptr inbounds i8, ptr %0, i64 9872
  %1210 = load i8, ptr %1209, align 8, !tbaa !173, !range !141, !noundef !142
  %1211 = trunc nuw i8 %1210 to i1
  br i1 %1211, label %1213, label %1212

1212:                                             ; preds = %1208
  store i8 1, ptr %1209, align 8, !tbaa !173
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %1213

1213:                                             ; preds = %1212, %1208
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #8
  %1214 = getelementptr inbounds i8, ptr %108, i64 8
  %1215 = load i32, ptr %1214, align 4, !tbaa !11
  call 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 %1215, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #8
  %1216 = getelementptr inbounds i8, ptr %108, i64 12
  %1217 = load i32, ptr %1216, align 4, !tbaa !11
  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 %1217, i1 noundef zeroext true)
          to label %1218 unwind label %1252

1218:                                             ; preds = %1213
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #8
  %1219 = getelementptr inbounds i8, ptr %108, i64 16
  %1220 = load i32, ptr %1219, align 4, !tbaa !11
  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 %1220, i1 noundef zeroext true)
          to label %1221 unwind label %1254

1221:                                             ; preds = %1218
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #8
  %1222 = getelementptr inbounds i8, ptr %108, i64 20
  %1223 = load i32, ptr %1222, align 4, !tbaa !11
  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 %1223, i1 noundef zeroext true)
          to label %1224 unwind label %1256

1224:                                             ; preds = %1221
  invoke void @_ZN11spirv_cross4joinIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_S9_SB_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 1 dereferenceable(19) @.str.653, ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef nonnull align 1 dereferenceable(2) @.str.78)
          to label %1225 unwind label %1258

1225:                                             ; preds = %1224
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  %1226 = load i32, ptr %1214, align 4, !tbaa !11
  %1227 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1226)
          to label %1228 unwind label %1263

1228:                                             ; preds = %1225
  br i1 %1227, label %1229, label %1240

1229:                                             ; preds = %1228
  %1230 = load i32, ptr %1216, align 4, !tbaa !11
  %1231 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1230)
          to label %1232 unwind label %1263

1232:                                             ; preds = %1229
  br i1 %1231, label %1233, label %1240

1233:                                             ; preds = %1232
  %1234 = load i32, ptr %1219, align 4, !tbaa !11
  %1235 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1234)
          to label %1236 unwind label %1263

1236:                                             ; preds = %1233
  br i1 %1235, label %1237, label %1240

1237:                                             ; preds = %1236
  %1238 = load i32, ptr %1222, align 4, !tbaa !11
  %1239 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1238)
          to label %1240 unwind label %1263

1240:                                             ; preds = %1237, %1236, %1232, %1228
  %1241 = phi i1 [ false, %1236 ], [ false, %1232 ], [ false, %1228 ], [ %1239, %1237 ]
  %1242 = load i32, ptr %108, align 4, !tbaa !11
  %1243 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1242)
          to label %1244 unwind label %1265

1244:                                             ; preds = %1240
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1243, i32 noundef 8, ptr noundef nonnull align 8 dereferenceable(32) %67)
          to label %1245 unwind label %1267

1245:                                             ; preds = %1244
  %1246 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  %1247 = load i32, ptr %108, align 4, !tbaa !11
  %1248 = getelementptr inbounds i8, ptr %108, i64 4
  %1249 = load i32, ptr %1248, align 4, !tbaa !11
  %1250 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1247, i32 noundef %1249, ptr noundef nonnull align 8 dereferenceable(32) %67, i1 noundef zeroext %1241, i1 noundef zeroext false)
          to label %1251 unwind label %1265

1251:                                             ; preds = %1245
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #8
  br label %1585

1252:                                             ; preds = %1213
  %1253 = landingpad { ptr, i32 }
          cleanup
  br label %1262

1254:                                             ; preds = %1218
  %1255 = landingpad { ptr, i32 }
          cleanup
  br label %1261

1256:                                             ; preds = %1221
  %1257 = landingpad { ptr, i32 }
          cleanup
  br label %1260

1258:                                             ; preds = %1224
  %1259 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  br label %1260

1260:                                             ; preds = %1258, %1256
  %.pn729 = phi { ptr, i32 } [ %1259, %1258 ], [ %1257, %1256 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  br label %1261

1261:                                             ; preds = %1260, %1254
  %.pn729.pn = phi { ptr, i32 } [ %.pn729, %1260 ], [ %1255, %1254 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  br label %1262

1262:                                             ; preds = %1261, %1252
  %.pn729.pn.pn = phi { ptr, i32 } [ %.pn729.pn, %1261 ], [ %1253, %1252 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  br label %1270

1263:                                             ; preds = %1237, %1233, %1229, %1225
  %1264 = landingpad { ptr, i32 }
          cleanup
  br label %1269

1265:                                             ; preds = %1245, %1240
  %1266 = landingpad { ptr, i32 }
          cleanup
  br label %1269

1267:                                             ; preds = %1244
  %1268 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  br label %1269

1269:                                             ; preds = %1265, %1267, %1263
  %.pn733.pn = phi { ptr, i32 } [ %1264, %1263 ], [ %1266, %1265 ], [ %1268, %1267 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  br label %1270

1270:                                             ; preds = %1269, %1262
  %.pn733.pn.pn = phi { ptr, i32 } [ %.pn733.pn, %1269 ], [ %.pn729.pn.pn, %1262 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #8
  br label %1586

1271:                                             ; preds = %2, %2
  %1272 = getelementptr inbounds i8, ptr %0, i64 9873
  %1273 = load i8, ptr %1272, align 1, !tbaa !174, !range !141, !noundef !142
  %1274 = trunc nuw i8 %1273 to i1
  br i1 %1274, label %1276, label %1275

1275:                                             ; preds = %1271
  store i8 1, ptr %1272, align 1, !tbaa !174
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %1276

1276:                                             ; preds = %1275, %1271
  %1277 = icmp eq i32 %114, 202
  %1278 = load i32, ptr %108, align 4, !tbaa !11
  %1279 = getelementptr inbounds i8, ptr %108, i64 4
  %1280 = load i32, ptr %1279, align 4, !tbaa !11
  %1281 = getelementptr inbounds i8, ptr %108, i64 8
  %1282 = load i32, ptr %1281, align 4, !tbaa !11
  %1283 = getelementptr inbounds i8, ptr %108, i64 12
  %1284 = load i32, ptr %1283, align 4, !tbaa !11
  %1285 = getelementptr inbounds i8, ptr %108, i64 16
  %1286 = load i32, ptr %1285, align 4, !tbaa !11
  br i1 %1277, label %1287, label %1288

1287:                                             ; preds = %1276
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1278, i32 noundef %1280, i32 noundef %1282, i32 noundef %1284, i32 noundef %1286, ptr noundef nonnull @.str.654)
  br label %1585

1288:                                             ; preds = %1276
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1278, i32 noundef %1280, i32 noundef %1282, i32 noundef %1284, i32 noundef %1286, ptr noundef nonnull @.str.655)
  br label %1585

1289:                                             ; preds = %2
  %1290 = getelementptr inbounds i8, ptr %108, i64 8
  %1291 = load i32, ptr %1290, align 4, !tbaa !11
  %1292 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1291)
  %1293 = getelementptr inbounds i8, ptr %1292, i64 16
  %1294 = load i32, ptr %1293, align 8, !tbaa !143
  %1295 = load i32, ptr %108, align 4, !tbaa !11
  %1296 = getelementptr inbounds i8, ptr %108, i64 4
  %1297 = load i32, ptr %1296, align 4, !tbaa !11
  %1298 = load i32, ptr %1290, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1295, i32 noundef %1297, i32 noundef %1298, ptr noundef nonnull @.str.656, i32 noundef %1294, i32 noundef %1294)
  br label %1585

1299:                                             ; preds = %2
  %1300 = load i32, ptr %108, align 4, !tbaa !11
  %1301 = getelementptr inbounds i8, ptr %108, i64 4
  %1302 = load i32, ptr %1301, align 4, !tbaa !11
  %1303 = getelementptr inbounds i8, ptr %108, i64 8
  %1304 = load i32, ptr %1303, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1300, i32 noundef %1302, i32 noundef %1304, ptr noundef nonnull @.str.657)
  br label %1585

1305:                                             ; preds = %2
  %1306 = getelementptr inbounds i8, ptr %108, i64 8
  %1307 = load i32, ptr %1306, align 4, !tbaa !11
  %1308 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1307)
  %.not722 = icmp eq ptr %1308, null
  br i1 %.not722, label %1309, label %1314

1309:                                             ; preds = %1305
  %1310 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1310, ptr noundef nonnull @.str.658)
          to label %1311 unwind label %1312

1311:                                             ; preds = %1309
  tail call void @__cxa_throw(ptr nonnull %1310, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1312:                                             ; preds = %1309
  %1313 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1310) #8
  br label %1586

1314:                                             ; preds = %1305
  %1315 = getelementptr inbounds i8, ptr %1308, i64 12
  %1316 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1315)
  %1317 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1316)
  %1318 = getelementptr inbounds i8, ptr %1317, i64 8
  %.sroa.013.0.copyload = load i32, ptr %1318, align 8, !tbaa !11
  %1319 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.013.0.copyload, i32 noundef 2)
  br i1 %1319, label %1327, label %1320

1320:                                             ; preds = %1314
  %.sroa.0.0.copyload = load i32, ptr %1318, align 8, !tbaa !11
  %1321 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0.0.copyload, i32 noundef 3)
  br i1 %1321, label %1327, label %1322

1322:                                             ; preds = %1320
  %1323 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1323, ptr noundef nonnull @.str.659)
          to label %1324 unwind label %1325

1324:                                             ; preds = %1322
  tail call void @__cxa_throw(ptr nonnull %1323, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1325:                                             ; preds = %1322
  %1326 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1323) #8
  br label %1586

1327:                                             ; preds = %1320, %1314
  %1328 = load i32, ptr %108, align 4, !tbaa !11
  %1329 = getelementptr inbounds i8, ptr %108, i64 4
  %1330 = load i32, ptr %1329, align 4, !tbaa !11
  %1331 = tail call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1328, i32 noundef %1330)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #8
  %1332 = load i32, ptr %1306, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(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 %1332)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %74) #8
  %1333 = load i32, ptr %1329, align 4, !tbaa !11
  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 %1333, i1 noundef zeroext true)
          to label %1334 unwind label %1345

1334:                                             ; preds = %1327
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 1 dereferenceable(16) @.str.660, ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %1335 unwind label %1347

1335:                                             ; preds = %1334
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %75) #8
  %1336 = getelementptr inbounds i8, ptr %108, i64 12
  %1337 = load i32, ptr %1336, align 4, !tbaa !11
  %1338 = call noundef i32 @_ZNK11spirv_cross8Compiler25type_struct_member_offsetERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %1317, i32 noundef %1337)
  store i32 %1338, ptr %75, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %76) #8
  %1339 = load i32, ptr %1336, align 4, !tbaa !11
  %1340 = call noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %1317, i32 noundef %1339)
  store i32 %1340, ptr %76, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %77) #8
  %1341 = load i32, ptr %1329, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1341, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %78) #8
  %1342 = load i32, ptr %1329, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1342, i1 noundef zeroext true)
          to label %1343 unwind label %1350

1343:                                             ; preds = %1335
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcS7_RA4_S8_RjSA_SD_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull align 1 dereferenceable(5) @.str.661, ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull align 1 dereferenceable(4) @.str.662, ptr noundef nonnull align 4 dereferenceable(4) %75, ptr noundef nonnull align 1 dereferenceable(5) @.str.663, ptr noundef nonnull align 4 dereferenceable(4) %76, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %1344 unwind label %1352

1344:                                             ; preds = %1343
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %75) #8
  br label %1585

1345:                                             ; preds = %1327
  %1346 = landingpad { ptr, i32 }
          cleanup
  br label %1349

1347:                                             ; preds = %1334
  %1348 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  br label %1349

1349:                                             ; preds = %1347, %1345
  %.pn723 = phi { ptr, i32 } [ %1348, %1347 ], [ %1346, %1345 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #8
  br label %1586

1350:                                             ; preds = %1335
  %1351 = landingpad { ptr, i32 }
          cleanup
  br label %1354

1352:                                             ; preds = %1343
  %1353 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  br label %1354

1354:                                             ; preds = %1352, %1350
  %.pn725 = phi { ptr, i32 } [ %1353, %1352 ], [ %1351, %1350 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %75) #8
  br label %1586

1355:                                             ; preds = %2
  %1356 = getelementptr inbounds i8, ptr %0, i64 9848
  %1357 = load i32, ptr %1356, align 8, !tbaa !168
  %1358 = icmp ult i32 %1357, 50
  br i1 %1358, label %1363, label %1359

1359:                                             ; preds = %1355
  %1360 = tail call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %1361 = getelementptr inbounds i8, ptr %1360, i64 232
  %1362 = load i32, ptr %1361, align 8, !tbaa !175
  %.not = icmp eq i32 %1362, 4
  br i1 %.not, label %1368, label %1363

1363:                                             ; preds = %1359, %1355
  %1364 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1364, ptr noundef nonnull @.str.664)
          to label %1365 unwind label %1366

1365:                                             ; preds = %1363
  tail call void @__cxa_throw(ptr nonnull %1364, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1366:                                             ; preds = %1363
  %1367 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1364) #8
  br label %1586

1368:                                             ; preds = %1359
  %1369 = load i32, ptr %108, align 4, !tbaa !11
  %1370 = getelementptr inbounds i8, ptr %108, i64 4
  %1371 = load i32, ptr %1370, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %79) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %80) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %79, ptr noundef nonnull @.str.75, ptr noundef nonnull align 1 dereferenceable(1) %80)
          to label %1372 unwind label %1375

1372:                                             ; preds = %1368
  %1373 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1369, i32 noundef %1371, ptr noundef nonnull align 8 dereferenceable(32) %79, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1374 unwind label %1377

1374:                                             ; preds = %1372
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #8
  br label %1585

1375:                                             ; preds = %1368
  %1376 = landingpad { ptr, i32 }
          cleanup
  br label %1379

1377:                                             ; preds = %1372
  %1378 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  br label %1379

1379:                                             ; preds = %1377, %1375
  %.pn720 = phi { ptr, i32 } [ %1378, %1377 ], [ %1376, %1375 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #8
  br label %1586

1380:                                             ; preds = %2, %2
  %1381 = getelementptr inbounds i8, ptr %0, i64 9848
  %1382 = load i32, ptr %1381, align 8, !tbaa !168
  %1383 = icmp ult i32 %1382, 51
  br i1 %1383, label %1384, label %1585

1384:                                             ; preds = %1380
  %1385 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1385, ptr noundef nonnull @.str.665)
          to label %1386 unwind label %1387

1386:                                             ; preds = %1384
  tail call void @__cxa_throw(ptr nonnull %1385, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1387:                                             ; preds = %1384
  %1388 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1385) #8
  br label %1586

1389:                                             ; preds = %2
  %1390 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1390)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %81) #8
  call void @_ZN11spirv_cross12CompilerHLSL21get_unique_identifierB5cxx11Ev(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 8 dereferenceable(10528) %0)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %82) #8
  %1391 = getelementptr inbounds i8, ptr %108, i64 16
  %1392 = load i32, ptr %1391, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1392, i1 noundef zeroext true)
          to label %1393 unwind label %1416

1393:                                             ; preds = %1389
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %83) #8
  %1394 = getelementptr inbounds i8, ptr %108, i64 20
  %1395 = load i32, ptr %1394, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1395, i1 noundef zeroext true)
          to label %1396 unwind label %1418

1396:                                             ; preds = %1393
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %84) #8
  %1397 = getelementptr inbounds i8, ptr %108, i64 24
  %1398 = load i32, ptr %1397, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1398, i1 noundef zeroext true)
          to label %1399 unwind label %1420

1399:                                             ; preds = %1396
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %85) #8
  %1400 = getelementptr inbounds i8, ptr %108, i64 28
  %1401 = load i32, ptr %1400, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1401, i1 noundef zeroext true)
          to label %1402 unwind label %1422

1402:                                             ; preds = %1399
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S2_SA_RA3_S2_SA_SF_SA_SF_SA_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.666, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef nonnull align 1 dereferenceable(5) @.str.667, ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %83, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull align 1 dereferenceable(3) @.str.668)
          to label %1403 unwind label %1424

1403:                                             ; preds = %1402
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %85) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %83) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %82) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %86) #8
  %1404 = load i32, ptr %108, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1404, i1 noundef zeroext true)
          to label %1405 unwind label %1430

1405:                                             ; preds = %1403
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %87) #8
  %1406 = getelementptr inbounds i8, ptr %108, i64 4
  %1407 = load i32, ptr %1406, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1407, i1 noundef zeroext true)
          to label %1408 unwind label %1432

1408:                                             ; preds = %1405
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %88) #8
  %1409 = getelementptr inbounds i8, ptr %108, i64 8
  %1410 = load i32, ptr %1409, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %88, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1410, i1 noundef zeroext true)
          to label %1411 unwind label %1434

1411:                                             ; preds = %1408
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %89) #8
  %1412 = getelementptr inbounds i8, ptr %108, i64 12
  %1413 = load i32, ptr %1412, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1413, i1 noundef zeroext true)
          to label %1414 unwind label %1436

1414:                                             ; preds = %1411
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcS7_RA3_S8_S7_SC_S7_SC_RS7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef nonnull align 1 dereferenceable(17) @.str.669, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %88, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %89, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %1415 unwind label %1438

1415:                                             ; preds = %1414
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %89) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %88) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #8
  br label %1585

1416:                                             ; preds = %1389
  %1417 = landingpad { ptr, i32 }
          cleanup
  br label %1429

1418:                                             ; preds = %1393
  %1419 = landingpad { ptr, i32 }
          cleanup
  br label %1428

1420:                                             ; preds = %1396
  %1421 = landingpad { ptr, i32 }
          cleanup
  br label %1427

1422:                                             ; preds = %1399
  %1423 = landingpad { ptr, i32 }
          cleanup
  br label %1426

1424:                                             ; preds = %1402
  %1425 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  br label %1426

1426:                                             ; preds = %1424, %1422
  %.pn709 = phi { ptr, i32 } [ %1425, %1424 ], [ %1423, %1422 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %85) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  br label %1427

1427:                                             ; preds = %1426, %1420
  %.pn709.pn = phi { ptr, i32 } [ %.pn709, %1426 ], [ %1421, %1420 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  br label %1428

1428:                                             ; preds = %1427, %1418
  %.pn709.pn.pn = phi { ptr, i32 } [ %.pn709.pn, %1427 ], [ %1419, %1418 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %83) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  br label %1429

1429:                                             ; preds = %1428, %1416
  %.pn709.pn.pn.pn = phi { ptr, i32 } [ %.pn709.pn.pn, %1428 ], [ %1417, %1416 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %82) #8
  br label %1444

1430:                                             ; preds = %1403
  %1431 = landingpad { ptr, i32 }
          cleanup
  br label %1443

1432:                                             ; preds = %1405
  %1433 = landingpad { ptr, i32 }
          cleanup
  br label %1442

1434:                                             ; preds = %1408
  %1435 = landingpad { ptr, i32 }
          cleanup
  br label %1441

1436:                                             ; preds = %1411
  %1437 = landingpad { ptr, i32 }
          cleanup
  br label %1440

1438:                                             ; preds = %1414
  %1439 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #8
  br label %1440

1440:                                             ; preds = %1438, %1436
  %.pn714 = phi { ptr, i32 } [ %1439, %1438 ], [ %1437, %1436 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %89) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  br label %1441

1441:                                             ; preds = %1440, %1434
  %.pn714.pn = phi { ptr, i32 } [ %.pn714, %1440 ], [ %1435, %1434 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %88) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  br label %1442

1442:                                             ; preds = %1441, %1432
  %.pn714.pn.pn = phi { ptr, i32 } [ %.pn714.pn, %1441 ], [ %1433, %1432 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  br label %1443

1443:                                             ; preds = %1442, %1430
  %.pn714.pn.pn.pn = phi { ptr, i32 } [ %.pn714.pn.pn, %1442 ], [ %1431, %1430 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #8
  br label %1444

1444:                                             ; preds = %1443, %1429
  %.pn714.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn714.pn.pn.pn, %1443 ], [ %.pn709.pn.pn.pn, %1429 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #8
  br label %1586

1445:                                             ; preds = %2
  %1446 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1446)
  %1447 = load i32, ptr %108, align 4, !tbaa !11
  %1448 = getelementptr inbounds i8, ptr %108, i64 4
  %1449 = load i32, ptr %1448, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %90) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %91) #8
  %1450 = getelementptr inbounds i8, ptr %108, i64 8
  %1451 = load i32, ptr %1450, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1451, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 8 dereferenceable(32) %91, ptr noundef nonnull align 1 dereferenceable(11) @.str.670)
          to label %1452 unwind label %1455

1452:                                             ; preds = %1445
  %1453 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1447, i32 noundef %1449, ptr noundef nonnull align 8 dereferenceable(32) %90, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1454 unwind label %1457

1454:                                             ; preds = %1452
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #8
  br label %1585

1455:                                             ; preds = %1445
  %1456 = landingpad { ptr, i32 }
          cleanup
  br label %1459

1457:                                             ; preds = %1452
  %1458 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  br label %1459

1459:                                             ; preds = %1457, %1455
  %.pn707 = phi { ptr, i32 } [ %1458, %1457 ], [ %1456, %1455 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #8
  br label %1586

1460:                                             ; preds = %2
  %1461 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1461)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %92) #8
  %1462 = load i32, ptr %108, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %92, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1462, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull align 1 dereferenceable(10) @.str.671)
          to label %1463 unwind label %1464

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

1464:                                             ; preds = %1460
  %1465 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #8
  br label %1586

1466:                                             ; preds = %2
  %1467 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1467)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %93) #8
  %1468 = load i32, ptr %108, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1468, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %94) #8
  %1469 = getelementptr inbounds i8, ptr %108, i64 4
  %1470 = load i32, ptr %1469, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1470, i1 noundef zeroext true)
          to label %1471 unwind label %1473

1471:                                             ; preds = %1466
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA31_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %93, ptr noundef nonnull align 1 dereferenceable(31) @.str.672, ptr noundef nonnull align 8 dereferenceable(32) %94, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %1472 unwind label %1475

1472:                                             ; preds = %1471
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %94) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %93) #8
  br label %1585

1473:                                             ; preds = %1466
  %1474 = landingpad { ptr, i32 }
          cleanup
  br label %1477

1475:                                             ; preds = %1471
  %1476 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  br label %1477

1477:                                             ; preds = %1475, %1473
  %.pn705 = phi { ptr, i32 } [ %1476, %1475 ], [ %1474, %1473 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %94) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %93) #8
  br label %1586

1478:                                             ; preds = %2
  %1479 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1479)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %95) #8
  %1480 = load i32, ptr %108, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1480, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA31_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull align 1 dereferenceable(31) @.str.673)
          to label %1481 unwind label %1482

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

1482:                                             ; preds = %1478
  %1483 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %95) #8
  br label %1586

1484:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.674, ptr noundef nonnull @.str.675, ptr noundef %108)
  br label %1585

1485:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.676, ptr noundef nonnull @.str.677, ptr noundef %108)
  br label %1585

1486:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.678, ptr noundef nonnull @.str.679, ptr noundef %108)
  br label %1585

1487:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.680, ptr noundef nonnull @.str.681, ptr noundef %108)
  br label %1585

1488:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.682, ptr noundef nonnull @.str.683, ptr noundef %108)
  br label %1585

1489:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.684, ptr noundef nonnull @.str.685, ptr noundef %108)
  br label %1585

1490:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.686, ptr noundef nonnull @.str.687, ptr noundef %108)
  br label %1585

1491:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.688, ptr noundef nonnull @.str.689, ptr noundef %108)
  br label %1585

1492:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.690, ptr noundef nonnull @.str.691, ptr noundef %108)
  br label %1585

1493:                                             ; preds = %2
  %1494 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1494)
  %1495 = load i32, ptr %108, align 4, !tbaa !11
  %1496 = getelementptr inbounds i8, ptr %108, i64 4
  %1497 = load i32, ptr %1496, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %96) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %97) #8
  %1498 = getelementptr inbounds i8, ptr %108, i64 8
  %1499 = load i32, ptr %1498, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %97, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1499, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA41_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef nonnull align 1 dereferenceable(41) @.str.692)
          to label %1500 unwind label %1503

1500:                                             ; preds = %1493
  %1501 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1495, i32 noundef %1497, ptr noundef nonnull align 8 dereferenceable(32) %96, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1502 unwind label %1505

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

1503:                                             ; preds = %1493
  %1504 = landingpad { ptr, i32 }
          cleanup
  br label %1507

1505:                                             ; preds = %1500
  %1506 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #8
  br label %1507

1507:                                             ; preds = %1505, %1503
  %.pn703 = phi { ptr, i32 } [ %1506, %1505 ], [ %1504, %1503 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %97) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %97) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %96) #8
  br label %1586

1508:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.693, ptr noundef nonnull @.str.694, ptr noundef %108)
  br label %1585

1509:                                             ; preds = %2
  %1510 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1510)
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.695, ptr noundef nonnull @.str.696, ptr noundef nonnull %108)
  br label %1585

1511:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.697, ptr noundef nonnull @.str.698, ptr noundef %108)
  br label %1585

1512:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerHLSL22emit_rayquery_functionEPKcS2_PKj(ptr noundef nonnull align 8 dereferenceable(10528) %0, ptr noundef nonnull @.str.699, ptr noundef nonnull @.str.700, ptr noundef %108)
  br label %1585

1513:                                             ; preds = %2
  %1514 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1514)
  %1515 = load i32, ptr %108, align 4, !tbaa !11
  %1516 = getelementptr inbounds i8, ptr %108, i64 4
  %1517 = load i32, ptr %1516, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %98) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %99) #8
  %1518 = getelementptr inbounds i8, ptr %108, i64 8
  %1519 = load i32, ptr %1518, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1519, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %98, ptr noundef nonnull align 8 dereferenceable(32) %99, ptr noundef nonnull align 1 dereferenceable(12) @.str.701)
          to label %1520 unwind label %1523

1520:                                             ; preds = %1513
  %1521 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1515, i32 noundef %1517, ptr noundef nonnull align 8 dereferenceable(32) %98, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1522 unwind label %1525

1522:                                             ; preds = %1520
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %99) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %98) #8
  br label %1585

1523:                                             ; preds = %1513
  %1524 = landingpad { ptr, i32 }
          cleanup
  br label %1527

1525:                                             ; preds = %1520
  %1526 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #8
  br label %1527

1527:                                             ; preds = %1525, %1523
  %.pn701 = phi { ptr, i32 } [ %1526, %1525 ], [ %1524, %1523 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %99) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %98) #8
  br label %1586

1528:                                             ; preds = %2
  %1529 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1529)
  %1530 = load i32, ptr %108, align 4, !tbaa !11
  %1531 = getelementptr inbounds i8, ptr %108, i64 4
  %1532 = load i32, ptr %1531, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %100) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %101) #8
  %1533 = getelementptr inbounds i8, ptr %108, i64 8
  %1534 = load i32, ptr %1533, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %101, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1534, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(32) %101, ptr noundef nonnull align 1 dereferenceable(11) @.str.702)
          to label %1535 unwind label %1538

1535:                                             ; preds = %1528
  %1536 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1530, i32 noundef %1532, ptr noundef nonnull align 8 dereferenceable(32) %100, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1537 unwind label %1540

1537:                                             ; preds = %1535
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %101) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %100) #8
  br label %1585

1538:                                             ; preds = %1528
  %1539 = landingpad { ptr, i32 }
          cleanup
  br label %1542

1540:                                             ; preds = %1535
  %1541 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #8
  br label %1542

1542:                                             ; preds = %1540, %1538
  %.pn699 = phi { ptr, i32 } [ %1541, %1540 ], [ %1539, %1538 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %101) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %100) #8
  br label %1586

1543:                                             ; preds = %2
  %1544 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1544)
  %1545 = load i32, ptr %108, align 4, !tbaa !11
  %1546 = getelementptr inbounds i8, ptr %108, i64 4
  %1547 = load i32, ptr %1546, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %102) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %103) #8
  %1548 = getelementptr inbounds i8, ptr %108, i64 8
  %1549 = load i32, ptr %1548, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1549, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(32) %103, ptr noundef nonnull align 1 dereferenceable(18) @.str.703)
          to label %1550 unwind label %1553

1550:                                             ; preds = %1543
  %1551 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1545, i32 noundef %1547, ptr noundef nonnull align 8 dereferenceable(32) %102, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1552 unwind label %1555

1552:                                             ; preds = %1550
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %103) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %102) #8
  br label %1585

1553:                                             ; preds = %1543
  %1554 = landingpad { ptr, i32 }
          cleanup
  br label %1557

1555:                                             ; preds = %1550
  %1556 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #8
  br label %1557

1557:                                             ; preds = %1555, %1553
  %.pn697 = phi { ptr, i32 } [ %1556, %1555 ], [ %1554, %1553 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %103) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %102) #8
  br label %1586

1558:                                             ; preds = %2
  %1559 = load i32, ptr %108, align 4, !tbaa !11
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1559)
  %1560 = load i32, ptr %108, align 4, !tbaa !11
  %1561 = getelementptr inbounds i8, ptr %108, i64 4
  %1562 = load i32, ptr %1561, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %104) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %105) #8
  %1563 = getelementptr inbounds i8, ptr %108, i64 8
  %1564 = load i32, ptr %1563, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %105, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1564, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA21_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef nonnull align 8 dereferenceable(32) %105, ptr noundef nonnull align 1 dereferenceable(21) @.str.704)
          to label %1565 unwind label %1568

1565:                                             ; preds = %1558
  %1566 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1560, i32 noundef %1562, ptr noundef nonnull align 8 dereferenceable(32) %104, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1567 unwind label %1570

1567:                                             ; preds = %1565
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %104) #8
  br label %1585

1568:                                             ; preds = %1558
  %1569 = landingpad { ptr, i32 }
          cleanup
  br label %1572

1570:                                             ; preds = %1565
  %1571 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #8
  br label %1572

1572:                                             ; preds = %1570, %1568
  %.pn695 = phi { ptr, i32 } [ %1571, %1570 ], [ %1569, %1568 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %104) #8
  br label %1586

1573:                                             ; preds = %2
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %106) #8
  %1574 = load i32, ptr %108, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %106, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1574, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %107) #8
  %1575 = getelementptr inbounds i8, ptr %108, i64 4
  %1576 = load i32, ptr %1575, align 4, !tbaa !11
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %107, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1576, i1 noundef zeroext true)
          to label %1577 unwind label %1579

1577:                                             ; preds = %1573
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(21) @.str.705, ptr noundef nonnull align 8 dereferenceable(32) %106, ptr noundef nonnull align 1 dereferenceable(3) @.str.341, ptr noundef nonnull align 8 dereferenceable(32) %107, ptr noundef nonnull align 1 dereferenceable(3) @.str.379)
          to label %1578 unwind label %1581

1578:                                             ; preds = %1577
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %107) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %106) #8
  br label %1585

1579:                                             ; preds = %1573
  %1580 = landingpad { ptr, i32 }
          cleanup
  br label %1583

1581:                                             ; preds = %1577
  %1582 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #8
  br label %1583

1583:                                             ; preds = %1581, %1579
  %.pn = phi { ptr, i32 } [ %1582, %1581 ], [ %1580, %1579 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %107) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %106) #8
  br label %1586

1584:                                             ; preds = %2
  tail call void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %1585

1585:                                             ; preds = %1172, %.critedge, %1177, %.thread842, %1139, %1204, %.thread862.thread, %1207, %.thread860, %1201, %1200, %683, %687, %663, %667, %642, %646, %625, %629, %605, %609, %584, %588, %567, %571, %547, %551, %526, %530, %509, %513, %489, %493, %468, %472, %446, %450, %425, %429, %405, %409, %384, %388, %366, %369, %291, %288, %303, %300, %169, %181, %122, %135, %134, %1380, %1287, %1288, %1584, %1578, %1567, %1552, %1537, %1522, %1512, %1511, %1509, %1508, %1502, %1492, %1491, %1490, %1489, %1488, %1487, %1486, %1485, %1484, %1481, %1472, %1463, %1454, %1415, %1374, %1344, %1299, %1289, %1251, %1136, %1117, %1091, %1031, %884, %795, %716, %688, %351, %344, %337, %330, %323, %316, %309, %269, %268, %261, %200, %192, %184, %183, %182, %115
  ret void

1586:                                             ; preds = %1312, %1354, %1349, %1325, %295, %307, %1583, %1572, %1557, %1542, %1527, %1507, %1482, %1477, %1464, %1459, %1444, %1387, %1379, %1366, %1270, %1134, %1130, %1092, %1032, %890, %802, %736, %262, %180
  %.pn.pn = phi { ptr, i32 } [ %.pn, %1583 ], [ %.pn695, %1572 ], [ %.pn697, %1557 ], [ %.pn699, %1542 ], [ %.pn701, %1527 ], [ %.pn703, %1507 ], [ %1483, %1482 ], [ %.pn705, %1477 ], [ %1465, %1464 ], [ %.pn707, %1459 ], [ %.pn714.pn.pn.pn.pn, %1444 ], [ %1388, %1387 ], [ %1367, %1366 ], [ %.pn720, %1379 ], [ %.pn733.pn.pn, %1270 ], [ %1135, %1134 ], [ %.pn743.pn, %1130 ], [ %.pn754, %1092 ], [ %.pn773, %1032 ], [ %.pn785, %890 ], [ %.pn792.pn.pn.pn, %802 ], [ %.pn800.pn.pn.pn, %736 ], [ %.pn814.pn, %262 ], [ %.pn817.pn.pn, %180 ], [ %296, %295 ], [ %308, %307 ], [ %1313, %1312 ], [ %.pn725, %1354 ], [ %.pn723, %1349 ], [ %1326, %1325 ]
  resume { ptr, i32 } %.pn.pn

1587:                                             ; preds = %925, %909
  unreachable
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZSt4findIN9__gnu_cxx17__normal_iteratorIPN11spirv_cross7TypedIDILNS2_5TypesE1EEESt6vectorIS5_SaIS5_EEEES5_ET_SB_SB_RKT0_(ptr, ptr, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxeqIPN11spirv_cross7TypedIDILNS1_5TypesE1EEESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(20), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), 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(3)) local_unnamed_addr #5 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef) local_unnamed_addr #6

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

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

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

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

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

declare void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(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 @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(14), 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: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(7), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #1

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL26image_format_to_componentsN3spv11ImageFormatE(i32 noundef) local_unnamed_addr #1

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

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

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

declare void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #3

declare noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef) local_unnamed_addr #3

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL29get_next_instruction_in_blockERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #3

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

declare void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_SB_S9_SB_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(19), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), 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_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S2_SA_RA3_S2_SA_SF_SA_SF_SA_SF_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(9), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(5), 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(3), 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(3)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcS7_RA3_S8_S7_SC_S7_SC_RS7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(17), 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(3), 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(3)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA21_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(21), 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(3)) local_unnamed_addr #5 align 2

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

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

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


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