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

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

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

@.str.9 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.176 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.202 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.203 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.204 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.205 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.207 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.209 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.210 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.211 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.259 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.260 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.261 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.262 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.263 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.264 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.265 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.266 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.267 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.268 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.269 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.270 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.271 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.272 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.273 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.274 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.275 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.276 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.277 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.278 = external hidden unnamed_addr constant [11 x i8], align 1

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

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

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) #4 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK11spirv_cross8Compiler30combined_decoration_for_memberERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.spirv_cross::Bitset") align 8, ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #5

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL19layout_for_variableB5cxx11ERKNS_12SPIRVariableE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(176) %2) #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::allocator.71", align 1
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::allocator.71", align 1
  %11 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca %"class.spirv_cross::TypedID.280", align 4
  %15 = alloca ptr, align 8
  %16 = alloca %"class.spirv_cross::TypedID.280", align 4
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::allocator.71", align 1
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::allocator.71", align 1
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::allocator.71", align 1
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::allocator.71", align 1
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator.71", align 1
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca i32, align 4
  %29 = alloca %"class.spirv_cross::TypedID.280", align 4
  %30 = alloca i8, align 1
  %31 = alloca %"class.spirv_cross::TypedID.280", align 4
  %32 = alloca %"class.spirv_cross::Bitset", align 8
  %33 = alloca i32, align 4
  %34 = alloca %"class.spirv_cross::Bitset", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca i32, align 4
  %37 = alloca %"class.spirv_cross::TypedID.280", align 4
  %38 = alloca %"class.spirv_cross::TypedID.280", align 4
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::allocator.71", align 1
  %41 = alloca i8, align 1
  %42 = alloca i32, align 4
  %43 = alloca i8, align 1
  %44 = alloca i8, align 1
  %45 = alloca i8, align 1
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca %"class.spirv_cross::TypedID.280", align 4
  %50 = alloca %"class.spirv_cross::TypedID.280", align 4
  %51 = alloca %"class.spirv_cross::TypedID.280", align 4
  %52 = alloca i32, align 4
  %53 = alloca %"class.spirv_cross::TypedID.281", align 4
  %54 = alloca i32, align 4
  %55 = alloca %"class.spirv_cross::TypedID.281", align 4
  %56 = alloca %"class.spirv_cross::TypedID.281", align 4
  %57 = alloca %"class.spirv_cross::TypedID.281", align 4
  %58 = alloca i32, align 4
  %59 = alloca %"class.spirv_cross::TypedID.281", align 4
  %60 = alloca %"class.spirv_cross::TypedID.281", align 4
  %61 = alloca i32, align 4
  %62 = alloca %"class.spirv_cross::TypedID.281", align 4
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::allocator.71", align 1
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca i32, align 4
  %69 = alloca %"class.spirv_cross::TypedID.280", align 4
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca i32, align 4
  %72 = alloca %"class.spirv_cross::TypedID.280", align 4
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca i32, align 4
  %75 = alloca %"class.spirv_cross::TypedID.280", align 4
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca i32, align 4
  %78 = alloca %"class.spirv_cross::TypedID.280", align 4
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::allocator.71", align 1
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca i32, align 4
  %83 = alloca %"class.spirv_cross::TypedID.280", align 4
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca i32, align 4
  %86 = alloca %"class.spirv_cross::TypedID.280", align 4
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca %"class.std::allocator.71", align 1
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca %"class.std::allocator.71", align 1
  %91 = alloca %"class.std::__cxx11::basic_string", align 8
  %92 = alloca i32, align 4
  %93 = alloca %"class.spirv_cross::TypedID.280", align 4
  %94 = alloca %"class.std::__cxx11::basic_string", align 8
  %95 = alloca i32, align 4
  %96 = alloca %"class.spirv_cross::TypedID.280", align 4
  %97 = alloca i8, align 1
  %98 = alloca i8, align 1
  %99 = alloca i8, align 1
  %100 = alloca i8, align 1
  %101 = alloca i8, align 1
  %102 = alloca i8, align 1
  %103 = alloca %"class.std::__cxx11::basic_string", align 8
  %104 = alloca i32, align 4
  %105 = alloca %"class.spirv_cross::TypedID.280", align 4
  %106 = alloca %"class.std::__cxx11::basic_string", align 8
  %107 = alloca i32, align 4
  %108 = alloca %"class.spirv_cross::TypedID.280", align 4
  %109 = alloca %"class.std::__cxx11::basic_string", align 8
  %110 = alloca %"class.std::__cxx11::basic_string", align 8
  %111 = alloca ptr, align 8
  %112 = alloca %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"class.std::allocator.71", align 1
  %114 = alloca %"class.std::allocator.71", align 1
  %115 = alloca i32, align 4
  %116 = alloca i1, align 1
  %117 = alloca %"class.std::allocator.71", align 1
  %118 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %119 = load ptr, ptr %5, align 8
  %120 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %119)
  br i1 %120, label %121, label %127

121:                                              ; preds = %3
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %122 unwind label %123

122:                                              ; preds = %121
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #8
  br label %1190

123:                                              ; preds = %121
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %8, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #8
  br label %1191

127:                                              ; preds = %3
  %128 = load ptr, ptr %6, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %128, i32 0, i32 1
  %130 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %129)
  %131 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL34subpass_input_is_framebuffer_fetchEj(ptr noundef nonnull align 8 dereferenceable(9848) %119, i32 noundef %130)
  br i1 %131, label %132, label %138

132:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %133 unwind label %134

133:                                              ; preds = %132
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #8
  br label %1190

134:                                              ; preds = %132
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %8, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #8
  br label %1191

138:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 280, ptr %11) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %139, i32 0, i32 1
  %141 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %140)
          to label %142 unwind label %162

142:                                              ; preds = %138
  %143 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 noundef %141)
          to label %144 unwind label %162

144:                                              ; preds = %142
  store ptr %143, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %145 = load ptr, ptr %6, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %145, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %14, ptr align 8 %146, i64 4, i1 false), !tbaa.struct !9
  %147 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %14, i32 0, i32 0
  %148 = load i32, ptr %147, align 4
  %149 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %148)
          to label %150 unwind label %166

150:                                              ; preds = %144
  store ptr %149, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %151 = load ptr, ptr %12, align 8, !tbaa !5
  %152 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %151, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 8 %152, i64 4, i1 false), !tbaa.struct !9
  %153 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %16, i32 0, i32 0
  %154 = load i32, ptr %153, align 4
  %155 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %154)
          to label %156 unwind label %170

156:                                              ; preds = %150
  store ptr %155, ptr %15, align 8, !tbaa !5
  %157 = load ptr, ptr %13, align 8, !tbaa !5
  %158 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %157, i32 noundef 5250)
          to label %159 unwind label %170

159:                                              ; preds = %156
  br i1 %158, label %160, label %178

160:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.202, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %161 unwind label %174

161:                                              ; preds = %160
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  br label %178

162:                                              ; preds = %142, %138
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %8, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %9, align 4
  br label %1189

166:                                              ; preds = %144
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %8, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %9, align 4
  br label %1188

170:                                              ; preds = %236, %221, %211, %156, %150
  %171 = landingpad { ptr, i32 }
          cleanup
  %172 = extractvalue { ptr, i32 } %171, 0
  store ptr %172, ptr %8, align 8
  %173 = extractvalue { ptr, i32 } %171, 1
  store i32 %173, ptr %9, align 4
  br label %1187

174:                                              ; preds = %160
  %175 = landingpad { ptr, i32 }
          cleanup
  %176 = extractvalue { ptr, i32 } %175, 0
  store ptr %176, ptr %8, align 8
  %177 = extractvalue { ptr, i32 } %175, 1
  store i32 %177, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  br label %1187

178:                                              ; preds = %161, %159
  %179 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %180 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %179, i32 0, i32 4
  %181 = load i8, ptr %180, align 4, !tbaa !12, !range !121, !noundef !122
  %182 = trunc i8 %181 to i1
  br i1 %182, label %183, label %194

183:                                              ; preds = %178
  %184 = load ptr, ptr %6, align 8, !tbaa !5
  %185 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %184, i32 0, i32 2
  %186 = load i32, ptr %185, align 8, !tbaa !123
  %187 = icmp eq i32 %186, 9
  br i1 %187, label %188, label %194

188:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef @.str.259, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %189 unwind label %190

189:                                              ; preds = %188
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  br label %211

190:                                              ; preds = %188
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %8, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  br label %1187

194:                                              ; preds = %183, %178
  %195 = load ptr, ptr %6, align 8, !tbaa !5
  %196 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %195, i32 0, i32 2
  %197 = load i32, ptr %196, align 8, !tbaa !123
  %198 = icmp eq i32 %197, 5343
  br i1 %198, label %199, label %210

199:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #8
  %200 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 36
  %201 = load i8, ptr %200, align 4, !tbaa !131, !range !121, !noundef !122
  %202 = trunc i8 %201 to i1
  %203 = zext i1 %202 to i64
  %204 = select i1 %202, ptr @.str.260, ptr @.str.261
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef %204, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %205 unwind label %206

205:                                              ; preds = %199
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, 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 @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  br label %210

206:                                              ; preds = %199
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %8, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  br label %1187

210:                                              ; preds = %205, %194
  br label %211

211:                                              ; preds = %210, %189
  %212 = load ptr, ptr %13, align 8, !tbaa !5
  %213 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %212, i32 noundef 4)
          to label %214 unwind label %170

214:                                              ; preds = %211
  br i1 %213, label %215, label %221

215:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef @.str.203, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %216 unwind label %217

216:                                              ; preds = %215
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #8
  br label %221

217:                                              ; preds = %215
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %8, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #8
  br label %1187

221:                                              ; preds = %216, %214
  %222 = load ptr, ptr %13, align 8, !tbaa !5
  %223 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %222, i32 noundef 5)
          to label %224 unwind label %170

224:                                              ; preds = %221
  br i1 %223, label %225, label %231

225:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.262, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %226 unwind label %227

226:                                              ; preds = %225
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  br label %231

227:                                              ; preds = %225
  %228 = landingpad { ptr, i32 }
          cleanup
  %229 = extractvalue { ptr, i32 } %228, 0
  store ptr %229, ptr %8, align 8
  %230 = extractvalue { ptr, i32 } %228, 1
  store i32 %230, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #8
  br label %1187

231:                                              ; preds = %226, %224
  %232 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %233 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %232, i32 0, i32 4
  %234 = load i8, ptr %233, align 4, !tbaa !12, !range !121, !noundef !122
  %235 = trunc i8 %234 to i1
  br i1 %235, label %236, label %253

236:                                              ; preds = %231
  %237 = load ptr, ptr %13, align 8, !tbaa !5
  %238 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %237, i32 noundef 43)
          to label %239 unwind label %170

239:                                              ; preds = %236
  br i1 %238, label %240, label %252

240:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %241, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 8 %242, i64 4, i1 false), !tbaa.struct !9
  %243 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %29, i32 0, i32 0
  %244 = load i32, ptr %243, align 4
  %245 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %244, i32 noundef 43)
          to label %246 unwind label %248

246:                                              ; preds = %240
  store i32 %245, ptr %28, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA26_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 1 dereferenceable(26) @.str.263, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %247 unwind label %248

247:                                              ; preds = %246
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  br label %252

248:                                              ; preds = %246, %240
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %8, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  br label %1187

252:                                              ; preds = %247, %239
  br label %253

253:                                              ; preds = %252, %231
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #8
  %254 = load ptr, ptr %12, align 8, !tbaa !5
  %255 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %254, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 8 %255, i64 4, i1 false), !tbaa.struct !9
  %256 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %31, i32 0, i32 0
  %257 = load i32, ptr %256, align 4
  %258 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %257, i32 noundef 2)
          to label %259 unwind label %286

259:                                              ; preds = %253
  %260 = zext i1 %258 to i8
  store i8 %260, ptr %30, align 1, !tbaa !132
  %261 = load ptr, ptr %13, align 8, !tbaa !5
  %262 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %261, i32 noundef 30)
          to label %263 unwind label %286

263:                                              ; preds = %259
  br i1 %262, label %264, label %333

264:                                              ; preds = %263
  %265 = load ptr, ptr %6, align 8, !tbaa !5
  %266 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %265, i32 0, i32 2
  %267 = load i32, ptr %266, align 8, !tbaa !123
  %268 = load i8, ptr %30, align 1, !tbaa !132, !range !121, !noundef !122
  %269 = trunc i8 %268 to i1
  %270 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL19can_use_io_locationEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(9848) %119, i32 noundef %267, i1 noundef zeroext %269)
          to label %271 unwind label %286

271:                                              ; preds = %264
  br i1 %270, label %272, label %333

272:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 64, ptr %32) #8
  call void @_ZN11spirv_cross6BitsetC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %32) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !10
  br label %273

273:                                              ; preds = %299, %272
  %274 = load i32, ptr %33, align 4, !tbaa !10
  %275 = zext i32 %274 to i64
  %276 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %119, i32 0, i32 1
  %277 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %276, i32 0, i32 3
  %278 = load ptr, ptr %12, align 8, !tbaa !5
  %279 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %278, i32 0, i32 1
  %280 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %277, ptr noundef nonnull align 4 dereferenceable(4) %279)
          to label %281 unwind label %290

281:                                              ; preds = %273
  %282 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %280, i32 0, i32 1
  %283 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_4Meta10DecorationEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %282) #8
  %284 = icmp ult i64 %275, %283
  br i1 %284, label %294, label %285

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

286:                                              ; preds = %348, %342, %333, %264, %259, %253
  %287 = landingpad { ptr, i32 }
          cleanup
  %288 = extractvalue { ptr, i32 } %287, 0
  store ptr %288, ptr %8, align 8
  %289 = extractvalue { ptr, i32 } %287, 1
  store i32 %289, ptr %9, align 4
  br label %1186

290:                                              ; preds = %273
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %8, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %9, align 4
  br label %311

294:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 64, ptr %34) #8
  %295 = load ptr, ptr %12, align 8, !tbaa !5
  %296 = load i32, ptr %33, align 4, !tbaa !10
  invoke void @_ZNK11spirv_cross8Compiler30combined_decoration_for_memberERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.spirv_cross::Bitset") align 8 %34, ptr noundef nonnull align 8 dereferenceable(3176) %119, ptr noundef nonnull align 8 dereferenceable(336) %295, i32 noundef %296)
          to label %297 unwind label %302

297:                                              ; preds = %294
  invoke void @_ZN11spirv_cross6Bitset8merge_orERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %32, ptr noundef nonnull align 8 dereferenceable(64) %34)
          to label %298 unwind label %306

298:                                              ; preds = %297
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %34) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %34) #8
  br label %299

299:                                              ; preds = %298
  %300 = load i32, ptr %33, align 4, !tbaa !10
  %301 = add i32 %300, 1
  store i32 %301, ptr %33, align 4, !tbaa !10
  br label %273, !llvm.loop !133

302:                                              ; preds = %294
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %8, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %9, align 4
  br label %310

306:                                              ; preds = %297
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %8, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %9, align 4
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %34) #8
  br label %310

310:                                              ; preds = %306, %302
  call void @llvm.lifetime.end.p0(i64 64, ptr %34) #8
  br label %311

311:                                              ; preds = %310, %290
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %332

312:                                              ; preds = %285
  %313 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %32, i32 noundef 30)
          to label %314 unwind label %323

314:                                              ; preds = %312
  br i1 %313, label %331, label %315

315:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %316 = load ptr, ptr %6, align 8, !tbaa !5
  %317 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %316, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 8 %317, i64 4, i1 false), !tbaa.struct !9
  %318 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %37, i32 0, i32 0
  %319 = load i32, ptr %318, align 4
  %320 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %319, i32 noundef 30)
          to label %321 unwind label %327

321:                                              ; preds = %315
  store i32 %320, ptr %36, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA12_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 1 dereferenceable(12) @.str.204, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %322 unwind label %327

322:                                              ; preds = %321
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  br label %331

323:                                              ; preds = %312
  %324 = landingpad { ptr, i32 }
          cleanup
  %325 = extractvalue { ptr, i32 } %324, 0
  store ptr %325, ptr %8, align 8
  %326 = extractvalue { ptr, i32 } %324, 1
  store i32 %326, ptr %9, align 4
  br label %332

327:                                              ; preds = %321, %315
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %8, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  br label %332

331:                                              ; preds = %322, %314
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %32) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %32) #8
  br label %333

332:                                              ; preds = %327, %323, %311
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %32) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %32) #8
  br label %1186

333:                                              ; preds = %331, %271, %263
  %334 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %119)
          to label %335 unwind label %286

335:                                              ; preds = %333
  %336 = icmp eq i32 %334, 4
  br i1 %336, label %337, label %357

337:                                              ; preds = %335
  %338 = load ptr, ptr %6, align 8, !tbaa !5
  %339 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %338, i32 0, i32 2
  %340 = load i32, ptr %339, align 8, !tbaa !123
  %341 = icmp eq i32 %340, 3
  br i1 %341, label %342, label %357

342:                                              ; preds = %337
  %343 = load ptr, ptr %6, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %343, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %38, ptr align 8 %344, i64 4, i1 false), !tbaa.struct !9
  %345 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %38, i32 0, i32 0
  %346 = load i32, ptr %345, align 4
  %347 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %346, i32 noundef 30)
          to label %348 unwind label %286

348:                                              ; preds = %342
  %349 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL42location_is_non_coherent_framebuffer_fetchEj(ptr noundef nonnull align 8 dereferenceable(9848) %119, i32 noundef %347)
          to label %350 unwind label %286

350:                                              ; preds = %348
  br i1 %349, label %351, label %357

351:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef @.str.264, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %352 unwind label %353

352:                                              ; preds = %351
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  br label %357

353:                                              ; preds = %351
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %8, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  br label %1186

357:                                              ; preds = %352, %350, %337, %335
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #8
  store i8 0, ptr %41, align 1, !tbaa !132
  %358 = load i8, ptr %30, align 1, !tbaa !132, !range !121, !noundef !122
  %359 = trunc i8 %358 to i1
  br i1 %359, label %360, label %632

360:                                              ; preds = %357
  %361 = load ptr, ptr %6, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %361, i32 0, i32 2
  %363 = load i32, ptr %362, align 8, !tbaa !123
  %364 = icmp eq i32 %363, 3
  br i1 %364, label %365, label %632

365:                                              ; preds = %360
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %366, i32 0, i32 12
  %368 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %367) #8
  %369 = trunc i64 %368 to i32
  store i32 %369, ptr %42, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #8
  store i8 0, ptr %43, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #8
  store i8 0, ptr %44, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #8
  store i8 0, ptr %45, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  store i32 0, ptr %46, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  store i32 0, ptr %47, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  store i32 0, ptr %48, align 4, !tbaa !10
  %370 = load ptr, ptr %13, align 8, !tbaa !5
  %371 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %370, i32 noundef 36)
          to label %372 unwind label %390

372:                                              ; preds = %365
  br i1 %371, label %373, label %394

373:                                              ; preds = %372
  %374 = load ptr, ptr %13, align 8, !tbaa !5
  %375 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %374, i32 noundef 37)
          to label %376 unwind label %390

376:                                              ; preds = %373
  br i1 %375, label %377, label %394

377:                                              ; preds = %376
  store i8 1, ptr %43, align 1, !tbaa !132
  %378 = load ptr, ptr %6, align 8, !tbaa !5
  %379 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %378, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 8 %379, i64 4, i1 false), !tbaa.struct !9
  %380 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %49, i32 0, i32 0
  %381 = load i32, ptr %380, align 4
  %382 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %381, i32 noundef 36)
          to label %383 unwind label %390

383:                                              ; preds = %377
  store i32 %382, ptr %47, align 4, !tbaa !10
  %384 = load ptr, ptr %6, align 8, !tbaa !5
  %385 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %384, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 8 %385, i64 4, i1 false), !tbaa.struct !9
  %386 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %50, i32 0, i32 0
  %387 = load i32, ptr %386, align 4
  %388 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %387, i32 noundef 37)
          to label %389 unwind label %390

389:                                              ; preds = %383
  store i32 %388, ptr %46, align 4, !tbaa !10
  br label %394

390:                                              ; preds = %596, %584, %578, %398, %394, %383, %377, %373, %365
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %8, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %9, align 4
  br label %631

394:                                              ; preds = %389, %376, %372
  %395 = load ptr, ptr %13, align 8, !tbaa !5
  %396 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %395, i32 noundef 29)
          to label %397 unwind label %390

397:                                              ; preds = %394
  br i1 %396, label %398, label %405

398:                                              ; preds = %397
  store i8 1, ptr %45, align 1, !tbaa !132
  %399 = load ptr, ptr %6, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %399, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %51, ptr align 8 %400, i64 4, i1 false), !tbaa.struct !9
  %401 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %51, i32 0, i32 0
  %402 = load i32, ptr %401, align 4
  %403 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %402, i32 noundef 29)
          to label %404 unwind label %390

404:                                              ; preds = %398
  store i32 %403, ptr %48, align 4, !tbaa !10
  br label %405

405:                                              ; preds = %404, %397
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store i32 0, ptr %52, align 4, !tbaa !10
  br label %406

406:                                              ; preds = %554, %405
  %407 = load i32, ptr %52, align 4, !tbaa !10
  %408 = load i32, ptr %42, align 4, !tbaa !10
  %409 = icmp ult i32 %407, %408
  br i1 %409, label %411, label %410

410:                                              ; preds = %406
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %558

411:                                              ; preds = %406
  %412 = load ptr, ptr %12, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %412, i32 0, i32 1
  %414 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %413)
          to label %415 unwind label %442

415:                                              ; preds = %411
  %416 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %53, i32 0, i32 0
  store i32 %414, ptr %416, align 4
  %417 = load i32, ptr %52, align 4, !tbaa !10
  %418 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %53, i32 0, i32 0
  %419 = load i32, ptr %418, align 4
  %420 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %419, i32 noundef %417, i32 noundef 29)
          to label %421 unwind label %442

421:                                              ; preds = %415
  br i1 %420, label %422, label %457

422:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  %423 = load ptr, ptr %12, align 8, !tbaa !5
  %424 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %423, i32 0, i32 1
  %425 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %424)
          to label %426 unwind label %446

426:                                              ; preds = %422
  %427 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %55, i32 0, i32 0
  store i32 %425, ptr %427, align 4
  %428 = load i32, ptr %52, align 4, !tbaa !10
  %429 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %55, i32 0, i32 0
  %430 = load i32, ptr %429, align 4
  %431 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %430, i32 noundef %428, i32 noundef 29)
          to label %432 unwind label %446

432:                                              ; preds = %426
  store i32 %431, ptr %54, align 4, !tbaa !10
  %433 = load i8, ptr %45, align 1, !tbaa !132, !range !121, !noundef !122
  %434 = trunc i8 %433 to i1
  br i1 %434, label %435, label %454

435:                                              ; preds = %432
  %436 = load i32, ptr %54, align 4, !tbaa !10
  %437 = load i32, ptr %48, align 4, !tbaa !10
  %438 = icmp ne i32 %436, %437
  br i1 %438, label %439, label %454

439:                                              ; preds = %435
  %440 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %440, ptr noundef @.str.265)
          to label %441 unwind label %450

441:                                              ; preds = %439
  invoke void @__cxa_throw(ptr %440, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %446

442:                                              ; preds = %515, %511, %473, %469, %461, %457, %415, %411
  %443 = landingpad { ptr, i32 }
          cleanup
  %444 = extractvalue { ptr, i32 } %443, 0
  store ptr %444, ptr %8, align 8
  %445 = extractvalue { ptr, i32 } %443, 1
  store i32 %445, ptr %9, align 4
  br label %557

446:                                              ; preds = %441, %426, %422
  %447 = landingpad { ptr, i32 }
          cleanup
  %448 = extractvalue { ptr, i32 } %447, 0
  store ptr %448, ptr %8, align 8
  %449 = extractvalue { ptr, i32 } %447, 1
  store i32 %449, ptr %9, align 4
  br label %456

450:                                              ; preds = %439
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %8, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %9, align 4
  call void @__cxa_free_exception(ptr %440) #8
  br label %456

454:                                              ; preds = %435, %432
  store i8 1, ptr %45, align 1, !tbaa !132
  %455 = load i32, ptr %54, align 4, !tbaa !10
  store i32 %455, ptr %48, align 4, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  br label %457

456:                                              ; preds = %450, %446
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  br label %557

457:                                              ; preds = %454, %421
  %458 = load ptr, ptr %12, align 8, !tbaa !5
  %459 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %458, i32 0, i32 1
  %460 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %459)
          to label %461 unwind label %442

461:                                              ; preds = %457
  %462 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %56, i32 0, i32 0
  store i32 %460, ptr %462, align 4
  %463 = load i32, ptr %52, align 4, !tbaa !10
  %464 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %56, i32 0, i32 0
  %465 = load i32, ptr %464, align 4
  %466 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %465, i32 noundef %463, i32 noundef 35)
          to label %467 unwind label %442

467:                                              ; preds = %461
  br i1 %466, label %469, label %468

468:                                              ; preds = %467
  br label %554

469:                                              ; preds = %467
  store i8 1, ptr %44, align 1, !tbaa !132
  %470 = load ptr, ptr %12, align 8, !tbaa !5
  %471 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %470, i32 0, i32 1
  %472 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %471)
          to label %473 unwind label %442

473:                                              ; preds = %469
  %474 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %57, i32 0, i32 0
  store i32 %472, ptr %474, align 4
  %475 = load i32, ptr %52, align 4, !tbaa !10
  %476 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %57, i32 0, i32 0
  %477 = load i32, ptr %476, align 4
  %478 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %477, i32 noundef %475, i32 noundef 36)
          to label %479 unwind label %442

479:                                              ; preds = %473
  br i1 %478, label %480, label %511

480:                                              ; preds = %479
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %481 = load ptr, ptr %12, align 8, !tbaa !5
  %482 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %481, i32 0, i32 1
  %483 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %482)
          to label %484 unwind label %500

484:                                              ; preds = %480
  %485 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %59, i32 0, i32 0
  store i32 %483, ptr %485, align 4
  %486 = load i32, ptr %52, align 4, !tbaa !10
  %487 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %59, i32 0, i32 0
  %488 = load i32, ptr %487, align 4
  %489 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %488, i32 noundef %486, i32 noundef 36)
          to label %490 unwind label %500

490:                                              ; preds = %484
  store i32 %489, ptr %58, align 4, !tbaa !10
  %491 = load i8, ptr %43, align 1, !tbaa !132, !range !121, !noundef !122
  %492 = trunc i8 %491 to i1
  br i1 %492, label %493, label %508

493:                                              ; preds = %490
  %494 = load i32, ptr %58, align 4, !tbaa !10
  %495 = load i32, ptr %47, align 4, !tbaa !10
  %496 = icmp ne i32 %494, %495
  br i1 %496, label %497, label %508

497:                                              ; preds = %493
  %498 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %498, ptr noundef @.str.266)
          to label %499 unwind label %504

499:                                              ; preds = %497
  invoke void @__cxa_throw(ptr %498, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %500

500:                                              ; preds = %499, %484, %480
  %501 = landingpad { ptr, i32 }
          cleanup
  %502 = extractvalue { ptr, i32 } %501, 0
  store ptr %502, ptr %8, align 8
  %503 = extractvalue { ptr, i32 } %501, 1
  store i32 %503, ptr %9, align 4
  br label %510

504:                                              ; preds = %497
  %505 = landingpad { ptr, i32 }
          cleanup
  %506 = extractvalue { ptr, i32 } %505, 0
  store ptr %506, ptr %8, align 8
  %507 = extractvalue { ptr, i32 } %505, 1
  store i32 %507, ptr %9, align 4
  call void @__cxa_free_exception(ptr %498) #8
  br label %510

508:                                              ; preds = %493, %490
  store i8 1, ptr %43, align 1, !tbaa !132
  %509 = load i32, ptr %58, align 4, !tbaa !10
  store i32 %509, ptr %47, align 4, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %511

510:                                              ; preds = %504, %500
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %557

511:                                              ; preds = %508, %479
  %512 = load ptr, ptr %12, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %512, i32 0, i32 1
  %514 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %513)
          to label %515 unwind label %442

515:                                              ; preds = %511
  %516 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %60, i32 0, i32 0
  store i32 %514, ptr %516, align 4
  %517 = load i32, ptr %52, align 4, !tbaa !10
  %518 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %60, i32 0, i32 0
  %519 = load i32, ptr %518, align 4
  %520 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %519, i32 noundef %517, i32 noundef 37)
          to label %521 unwind label %442

521:                                              ; preds = %515
  br i1 %520, label %522, label %553

522:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #8
  %523 = load ptr, ptr %12, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %523, i32 0, i32 1
  %525 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %524)
          to label %526 unwind label %542

526:                                              ; preds = %522
  %527 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %62, i32 0, i32 0
  store i32 %525, ptr %527, align 4
  %528 = load i32, ptr %52, align 4, !tbaa !10
  %529 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %62, i32 0, i32 0
  %530 = load i32, ptr %529, align 4
  %531 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %530, i32 noundef %528, i32 noundef 37)
          to label %532 unwind label %542

532:                                              ; preds = %526
  store i32 %531, ptr %61, align 4, !tbaa !10
  %533 = load i8, ptr %43, align 1, !tbaa !132, !range !121, !noundef !122
  %534 = trunc i8 %533 to i1
  br i1 %534, label %535, label %550

535:                                              ; preds = %532
  %536 = load i32, ptr %61, align 4, !tbaa !10
  %537 = load i32, ptr %46, align 4, !tbaa !10
  %538 = icmp ne i32 %536, %537
  br i1 %538, label %539, label %550

539:                                              ; preds = %535
  %540 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %540, ptr noundef @.str.267)
          to label %541 unwind label %546

541:                                              ; preds = %539
  invoke void @__cxa_throw(ptr %540, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %542

542:                                              ; preds = %541, %526, %522
  %543 = landingpad { ptr, i32 }
          cleanup
  %544 = extractvalue { ptr, i32 } %543, 0
  store ptr %544, ptr %8, align 8
  %545 = extractvalue { ptr, i32 } %543, 1
  store i32 %545, ptr %9, align 4
  br label %552

546:                                              ; preds = %539
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %8, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %9, align 4
  call void @__cxa_free_exception(ptr %540) #8
  br label %552

550:                                              ; preds = %535, %532
  store i8 1, ptr %43, align 1, !tbaa !132
  %551 = load i32, ptr %61, align 4, !tbaa !10
  store i32 %551, ptr %46, align 4, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  br label %553

552:                                              ; preds = %546, %542
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  br label %557

553:                                              ; preds = %550, %521
  br label %554

554:                                              ; preds = %553, %468
  %555 = load i32, ptr %52, align 4, !tbaa !10
  %556 = add i32 %555, 1
  store i32 %556, ptr %52, align 4, !tbaa !10
  br label %406, !llvm.loop !135

557:                                              ; preds = %552, %510, %456, %442
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %631

558:                                              ; preds = %410
  %559 = load i8, ptr %43, align 1, !tbaa !132, !range !121, !noundef !122
  %560 = trunc i8 %559 to i1
  br i1 %560, label %561, label %575

561:                                              ; preds = %558
  %562 = load i8, ptr %44, align 1, !tbaa !132, !range !121, !noundef !122
  %563 = trunc i8 %562 to i1
  br i1 %563, label %564, label %575

564:                                              ; preds = %561
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #8
  invoke void @_ZN11spirv_cross4joinIJRA14_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 1 dereferenceable(14) @.str.268, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %565 unwind label %567

565:                                              ; preds = %564
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #8
  invoke void @_ZN11spirv_cross4joinIJRA14_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 1 dereferenceable(14) @.str.269, ptr noundef nonnull align 4 dereferenceable(4) %46)
          to label %566 unwind label %571

566:                                              ; preds = %565
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %64) #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 %64) #8
  store i8 1, ptr %41, align 1, !tbaa !132
  br label %575

567:                                              ; preds = %564
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %8, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  br label %631

571:                                              ; preds = %565
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %8, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  br label %631

575:                                              ; preds = %566, %561, %558
  %576 = load i8, ptr %45, align 1, !tbaa !132, !range !121, !noundef !122
  %577 = trunc i8 %576 to i1
  br i1 %577, label %578, label %630

578:                                              ; preds = %575
  %579 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %119)
          to label %580 unwind label %390

580:                                              ; preds = %578
  %581 = icmp ne i32 %579, 3
  br i1 %581, label %582, label %589

582:                                              ; preds = %580
  %583 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %583, ptr noundef @.str.270)
          to label %584 unwind label %585

584:                                              ; preds = %582
  invoke void @__cxa_throw(ptr %583, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %390

585:                                              ; preds = %582
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %8, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %9, align 4
  call void @__cxa_free_exception(ptr %583) #8
  br label %631

589:                                              ; preds = %580
  %590 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %591 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %590, i32 0, i32 1
  %592 = load i8, ptr %591, align 4, !tbaa !136, !range !121, !noundef !122
  %593 = trunc i8 %592 to i1
  br i1 %593, label %594, label %601

594:                                              ; preds = %589
  %595 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %595, ptr noundef @.str.271)
          to label %596 unwind label %597

596:                                              ; preds = %594
  invoke void @__cxa_throw(ptr %595, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %390

597:                                              ; preds = %594
  %598 = landingpad { ptr, i32 }
          cleanup
  %599 = extractvalue { ptr, i32 } %598, 0
  store ptr %599, ptr %8, align 8
  %600 = extractvalue { ptr, i32 } %598, 1
  store i32 %600, ptr %9, align 4
  call void @__cxa_free_exception(ptr %595) #8
  br label %631

601:                                              ; preds = %589
  %602 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %603 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %602, i32 0, i32 0
  %604 = load i32, ptr %603, align 4, !tbaa !137
  %605 = icmp ult i32 %604, 400
  br i1 %605, label %606, label %618

606:                                              ; preds = %601
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef @.str.272, ptr noundef nonnull align 1 dereferenceable(1) %66)
          to label %607 unwind label %609

607:                                              ; preds = %606
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %119, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %608 unwind label %613

608:                                              ; preds = %607
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  br label %618

609:                                              ; preds = %606
  %610 = landingpad { ptr, i32 }
          cleanup
  %611 = extractvalue { ptr, i32 } %610, 0
  store ptr %611, ptr %8, align 8
  %612 = extractvalue { ptr, i32 } %610, 1
  store i32 %612, ptr %9, align 4
  br label %617

613:                                              ; preds = %607
  %614 = landingpad { ptr, i32 }
          cleanup
  %615 = extractvalue { ptr, i32 } %614, 0
  store ptr %615, ptr %8, align 8
  %616 = extractvalue { ptr, i32 } %614, 1
  store i32 %616, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %617

617:                                              ; preds = %613, %609
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  br label %631

618:                                              ; preds = %608, %601
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %619 = load ptr, ptr %6, align 8, !tbaa !5
  %620 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %619, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %69, ptr align 8 %620, i64 4, i1 false), !tbaa.struct !9
  %621 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %69, i32 0, i32 0
  %622 = load i32, ptr %621, align 4
  %623 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %622, i32 noundef 29)
          to label %624 unwind label %626

624:                                              ; preds = %618
  store i32 %623, ptr %68, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA10_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 1 dereferenceable(10) @.str.273, ptr noundef nonnull align 4 dereferenceable(4) %68)
          to label %625 unwind label %626

625:                                              ; preds = %624
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #8
  br label %630

626:                                              ; preds = %624, %618
  %627 = landingpad { ptr, i32 }
          cleanup
  %628 = extractvalue { ptr, i32 } %627, 0
  store ptr %628, ptr %8, align 8
  %629 = extractvalue { ptr, i32 } %627, 1
  store i32 %629, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #8
  br label %631

630:                                              ; preds = %625, %575
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %745

631:                                              ; preds = %626, %617, %597, %585, %571, %567, %557, %390
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %1185

632:                                              ; preds = %360, %357
  %633 = load ptr, ptr %6, align 8, !tbaa !5
  %634 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %633, i32 0, i32 2
  %635 = load i32, ptr %634, align 8, !tbaa !123
  %636 = icmp eq i32 %635, 3
  br i1 %636, label %637, label %744

637:                                              ; preds = %632
  %638 = load ptr, ptr %13, align 8, !tbaa !5
  %639 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %638, i32 noundef 36)
          to label %640 unwind label %671

640:                                              ; preds = %637
  br i1 %639, label %641, label %687

641:                                              ; preds = %640
  %642 = load ptr, ptr %13, align 8, !tbaa !5
  %643 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %642, i32 noundef 37)
          to label %644 unwind label %671

644:                                              ; preds = %641
  br i1 %643, label %645, label %687

645:                                              ; preds = %644
  %646 = load ptr, ptr %13, align 8, !tbaa !5
  %647 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %646, i32 noundef 35)
          to label %648 unwind label %671

648:                                              ; preds = %645
  br i1 %647, label %649, label %687

649:                                              ; preds = %648
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #8
  %650 = load ptr, ptr %6, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %650, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %72, ptr align 8 %651, i64 4, i1 false), !tbaa.struct !9
  %652 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %72, i32 0, i32 0
  %653 = load i32, ptr %652, align 4
  %654 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %653, i32 noundef 36)
          to label %655 unwind label %675

655:                                              ; preds = %649
  store i32 %654, ptr %71, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA14_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 1 dereferenceable(14) @.str.268, ptr noundef nonnull align 4 dereferenceable(4) %71)
          to label %656 unwind label %675

656:                                              ; preds = %655
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #8
  %657 = load ptr, ptr %6, align 8, !tbaa !5
  %658 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %657, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %75, ptr align 8 %658, i64 4, i1 false), !tbaa.struct !9
  %659 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %75, i32 0, i32 0
  %660 = load i32, ptr %659, align 4
  %661 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %660, i32 noundef 37)
          to label %662 unwind label %679

662:                                              ; preds = %656
  store i32 %661, ptr %74, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA14_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 1 dereferenceable(14) @.str.269, ptr noundef nonnull align 4 dereferenceable(4) %74)
          to label %663 unwind label %679

663:                                              ; preds = %662
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %664 = load ptr, ptr %6, align 8, !tbaa !5
  %665 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %664, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %78, ptr align 8 %665, i64 4, i1 false), !tbaa.struct !9
  %666 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %78, i32 0, i32 0
  %667 = load i32, ptr %666, align 4
  %668 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %667, i32 noundef 35)
          to label %669 unwind label %683

669:                                              ; preds = %663
  store i32 %668, ptr %77, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA14_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 1 dereferenceable(14) @.str.210, ptr noundef nonnull align 4 dereferenceable(4) %77)
          to label %670 unwind label %683

670:                                              ; preds = %669
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #8
  store i8 1, ptr %41, align 1, !tbaa !132
  br label %687

671:                                              ; preds = %875, %849, %842, %806, %749, %745, %709, %697, %691, %687, %645, %641, %637
  %672 = landingpad { ptr, i32 }
          cleanup
  %673 = extractvalue { ptr, i32 } %672, 0
  store ptr %673, ptr %8, align 8
  %674 = extractvalue { ptr, i32 } %672, 1
  store i32 %674, ptr %9, align 4
  br label %1185

675:                                              ; preds = %655, %649
  %676 = landingpad { ptr, i32 }
          cleanup
  %677 = extractvalue { ptr, i32 } %676, 0
  store ptr %677, ptr %8, align 8
  %678 = extractvalue { ptr, i32 } %676, 1
  store i32 %678, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  br label %1185

679:                                              ; preds = %662, %656
  %680 = landingpad { ptr, i32 }
          cleanup
  %681 = extractvalue { ptr, i32 } %680, 0
  store ptr %681, ptr %8, align 8
  %682 = extractvalue { ptr, i32 } %680, 1
  store i32 %682, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #8
  br label %1185

683:                                              ; preds = %669, %663
  %684 = landingpad { ptr, i32 }
          cleanup
  %685 = extractvalue { ptr, i32 } %684, 0
  store ptr %685, ptr %8, align 8
  %686 = extractvalue { ptr, i32 } %684, 1
  store i32 %686, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #8
  br label %1185

687:                                              ; preds = %670, %648, %644, %640
  %688 = load ptr, ptr %13, align 8, !tbaa !5
  %689 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %688, i32 noundef 29)
          to label %690 unwind label %671

690:                                              ; preds = %687
  br i1 %689, label %691, label %743

691:                                              ; preds = %690
  %692 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %119)
          to label %693 unwind label %671

693:                                              ; preds = %691
  %694 = icmp ne i32 %692, 3
  br i1 %694, label %695, label %702

695:                                              ; preds = %693
  %696 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %696, ptr noundef @.str.270)
          to label %697 unwind label %698

697:                                              ; preds = %695
  invoke void @__cxa_throw(ptr %696, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %671

698:                                              ; preds = %695
  %699 = landingpad { ptr, i32 }
          cleanup
  %700 = extractvalue { ptr, i32 } %699, 0
  store ptr %700, ptr %8, align 8
  %701 = extractvalue { ptr, i32 } %699, 1
  store i32 %701, ptr %9, align 4
  call void @__cxa_free_exception(ptr %696) #8
  br label %1185

702:                                              ; preds = %693
  %703 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %704 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %703, i32 0, i32 1
  %705 = load i8, ptr %704, align 4, !tbaa !136, !range !121, !noundef !122
  %706 = trunc i8 %705 to i1
  br i1 %706, label %707, label %714

707:                                              ; preds = %702
  %708 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %708, ptr noundef @.str.271)
          to label %709 unwind label %710

709:                                              ; preds = %707
  invoke void @__cxa_throw(ptr %708, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %671

710:                                              ; preds = %707
  %711 = landingpad { ptr, i32 }
          cleanup
  %712 = extractvalue { ptr, i32 } %711, 0
  store ptr %712, ptr %8, align 8
  %713 = extractvalue { ptr, i32 } %711, 1
  store i32 %713, ptr %9, align 4
  call void @__cxa_free_exception(ptr %708) #8
  br label %1185

714:                                              ; preds = %702
  %715 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %716 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %715, i32 0, i32 0
  %717 = load i32, ptr %716, align 4, !tbaa !137
  %718 = icmp ult i32 %717, 400
  br i1 %718, label %719, label %731

719:                                              ; preds = %714
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %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 @.str.272, ptr noundef nonnull align 1 dereferenceable(1) %80)
          to label %720 unwind label %722

720:                                              ; preds = %719
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %119, ptr noundef nonnull align 8 dereferenceable(32) %79)
          to label %721 unwind label %726

721:                                              ; preds = %720
  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 %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  br label %731

722:                                              ; preds = %719
  %723 = landingpad { ptr, i32 }
          cleanup
  %724 = extractvalue { ptr, i32 } %723, 0
  store ptr %724, ptr %8, align 8
  %725 = extractvalue { ptr, i32 } %723, 1
  store i32 %725, ptr %9, align 4
  br label %730

726:                                              ; preds = %720
  %727 = landingpad { ptr, i32 }
          cleanup
  %728 = extractvalue { ptr, i32 } %727, 0
  store ptr %728, ptr %8, align 8
  %729 = extractvalue { ptr, i32 } %727, 1
  store i32 %729, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  br label %730

730:                                              ; preds = %726, %722
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  br label %1185

731:                                              ; preds = %721, %714
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #8
  %732 = load ptr, ptr %6, align 8, !tbaa !5
  %733 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %732, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %83, ptr align 8 %733, i64 4, i1 false), !tbaa.struct !9
  %734 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %83, i32 0, i32 0
  %735 = load i32, ptr %734, align 4
  %736 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %735, i32 noundef 29)
          to label %737 unwind label %739

737:                                              ; preds = %731
  store i32 %736, ptr %82, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA10_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 1 dereferenceable(10) @.str.273, ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %738 unwind label %739

738:                                              ; preds = %737
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  br label %743

739:                                              ; preds = %737, %731
  %740 = landingpad { ptr, i32 }
          cleanup
  %741 = extractvalue { ptr, i32 } %740, 0
  store ptr %741, ptr %8, align 8
  %742 = extractvalue { ptr, i32 } %740, 1
  store i32 %742, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  br label %1185

743:                                              ; preds = %738, %690
  br label %744

744:                                              ; preds = %743, %632
  br label %745

745:                                              ; preds = %744, %630
  %746 = load ptr, ptr %13, align 8, !tbaa !5
  %747 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %746, i32 noundef 31)
          to label %748 unwind label %671

748:                                              ; preds = %745
  br i1 %747, label %749, label %769

749:                                              ; preds = %748
  %750 = load ptr, ptr %6, align 8, !tbaa !5
  %751 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %750, i32 0, i32 2
  %752 = load i32, ptr %751, align 8, !tbaa !123
  %753 = load i8, ptr %30, align 1, !tbaa !132, !range !121, !noundef !122
  %754 = trunc i8 %753 to i1
  %755 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL19can_use_io_locationEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(9848) %119, i32 noundef %752, i1 noundef zeroext %754)
          to label %756 unwind label %671

756:                                              ; preds = %749
  br i1 %755, label %757, label %769

757:                                              ; preds = %756
  store i8 1, ptr %41, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  %758 = load ptr, ptr %6, align 8, !tbaa !5
  %759 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %758, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 8 %759, i64 4, i1 false), !tbaa.struct !9
  %760 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %86, i32 0, i32 0
  %761 = load i32, ptr %760, align 4
  %762 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %761, i32 noundef 31)
          to label %763 unwind label %765

763:                                              ; preds = %757
  store i32 %762, ptr %85, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA13_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 1 dereferenceable(13) @.str.207, ptr noundef nonnull align 4 dereferenceable(4) %85)
          to label %764 unwind label %765

764:                                              ; preds = %763
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #8
  br label %769

765:                                              ; preds = %763, %757
  %766 = landingpad { ptr, i32 }
          cleanup
  %767 = extractvalue { ptr, i32 } %766, 0
  store ptr %767, ptr %8, align 8
  %768 = extractvalue { ptr, i32 } %766, 1
  store i32 %768, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #8
  br label %1185

769:                                              ; preds = %764, %756, %748
  %770 = load i8, ptr %41, align 1, !tbaa !132, !range !121, !noundef !122
  %771 = trunc i8 %770 to i1
  br i1 %771, label %772, label %849

772:                                              ; preds = %769
  %773 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %774 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %773, i32 0, i32 1
  %775 = load i8, ptr %774, align 4, !tbaa !136, !range !121, !noundef !122
  %776 = trunc i8 %775 to i1
  br i1 %776, label %835, label %777

777:                                              ; preds = %772
  %778 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %779 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %778, i32 0, i32 0
  %780 = load i32, ptr %779, align 4, !tbaa !137
  %781 = icmp ult i32 %780, 440
  br i1 %781, label %782, label %799

782:                                              ; preds = %777
  %783 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %784 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %783, i32 0, i32 0
  %785 = load i32, ptr %784, align 4, !tbaa !137
  %786 = icmp uge i32 %785, 140
  br i1 %786, label %787, label %799

787:                                              ; preds = %782
  call void @llvm.lifetime.start.p0(i64 32, ptr %87) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %88) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %88) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef @.str.205, ptr noundef nonnull align 1 dereferenceable(1) %88)
          to label %788 unwind label %790

788:                                              ; preds = %787
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %119, ptr noundef nonnull align 8 dereferenceable(32) %87)
          to label %789 unwind label %794

789:                                              ; preds = %788
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %88) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #8
  br label %812

790:                                              ; preds = %787
  %791 = landingpad { ptr, i32 }
          cleanup
  %792 = extractvalue { ptr, i32 } %791, 0
  store ptr %792, ptr %8, align 8
  %793 = extractvalue { ptr, i32 } %791, 1
  store i32 %793, ptr %9, align 4
  br label %798

794:                                              ; preds = %788
  %795 = landingpad { ptr, i32 }
          cleanup
  %796 = extractvalue { ptr, i32 } %795, 0
  store ptr %796, ptr %8, align 8
  %797 = extractvalue { ptr, i32 } %795, 1
  store i32 %797, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  br label %798

798:                                              ; preds = %794, %790
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %88) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %87) #8
  br label %1185

799:                                              ; preds = %782, %777
  %800 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %801 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %800, i32 0, i32 0
  %802 = load i32, ptr %801, align 4, !tbaa !137
  %803 = icmp ult i32 %802, 140
  br i1 %803, label %804, label %811

804:                                              ; preds = %799
  %805 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %805, ptr noundef @.str.274)
          to label %806 unwind label %807

806:                                              ; preds = %804
  invoke void @__cxa_throw(ptr %805, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %671

807:                                              ; preds = %804
  %808 = landingpad { ptr, i32 }
          cleanup
  %809 = extractvalue { ptr, i32 } %808, 0
  store ptr %809, ptr %8, align 8
  %810 = extractvalue { ptr, i32 } %808, 1
  store i32 %810, ptr %9, align 4
  call void @__cxa_free_exception(ptr %805) #8
  br label %1185

811:                                              ; preds = %799
  br label %812

812:                                              ; preds = %811, %789
  %813 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %814 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %813, i32 0, i32 1
  %815 = load i8, ptr %814, align 4, !tbaa !136, !range !121, !noundef !122
  %816 = trunc i8 %815 to i1
  br i1 %816, label %834, label %817

817:                                              ; preds = %812
  %818 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %819 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %818, i32 0, i32 0
  %820 = load i32, ptr %819, align 4, !tbaa !137
  %821 = icmp ult i32 %820, 440
  br i1 %821, label %822, label %834

822:                                              ; preds = %817
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %90) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %90) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %89, ptr noundef @.str.205, ptr noundef nonnull align 1 dereferenceable(1) %90)
          to label %823 unwind label %825

823:                                              ; preds = %822
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %119, ptr noundef nonnull align 8 dereferenceable(32) %89)
          to label %824 unwind label %829

824:                                              ; preds = %823
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %90) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #8
  br label %834

825:                                              ; preds = %822
  %826 = landingpad { ptr, i32 }
          cleanup
  %827 = extractvalue { ptr, i32 } %826, 0
  store ptr %827, ptr %8, align 8
  %828 = extractvalue { ptr, i32 } %826, 1
  store i32 %828, ptr %9, align 4
  br label %833

829:                                              ; preds = %823
  %830 = landingpad { ptr, i32 }
          cleanup
  %831 = extractvalue { ptr, i32 } %830, 0
  store ptr %831, ptr %8, align 8
  %832 = extractvalue { ptr, i32 } %830, 1
  store i32 %832, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #8
  br label %833

833:                                              ; preds = %829, %825
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %90) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #8
  br label %1185

834:                                              ; preds = %824, %817, %812
  br label %848

835:                                              ; preds = %772
  %836 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %837 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %836, i32 0, i32 1
  %838 = load i8, ptr %837, align 4, !tbaa !136, !range !121, !noundef !122
  %839 = trunc i8 %838 to i1
  br i1 %839, label %840, label %847

840:                                              ; preds = %835
  %841 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %841, ptr noundef @.str.275)
          to label %842 unwind label %843

842:                                              ; preds = %840
  invoke void @__cxa_throw(ptr %841, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1196 unwind label %671

843:                                              ; preds = %840
  %844 = landingpad { ptr, i32 }
          cleanup
  %845 = extractvalue { ptr, i32 } %844, 0
  store ptr %845, ptr %8, align 8
  %846 = extractvalue { ptr, i32 } %844, 1
  store i32 %846, ptr %9, align 4
  call void @__cxa_free_exception(ptr %841) #8
  br label %1185

847:                                              ; preds = %835
  br label %848

848:                                              ; preds = %847, %834
  br label %849

849:                                              ; preds = %848, %769
  %850 = load ptr, ptr %13, align 8, !tbaa !5
  %851 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %850, i32 noundef 32)
          to label %852 unwind label %671

852:                                              ; preds = %849
  br i1 %851, label %853, label %865

853:                                              ; preds = %852
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #8
  %854 = load ptr, ptr %6, align 8, !tbaa !5
  %855 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %854, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %93, ptr align 8 %855, i64 4, i1 false), !tbaa.struct !9
  %856 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %93, i32 0, i32 0
  %857 = load i32, ptr %856, align 4
  %858 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %857, i32 noundef 32)
          to label %859 unwind label %861

859:                                              ; preds = %853
  store i32 %858, ptr %92, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA9_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef nonnull align 1 dereferenceable(9) @.str.276, ptr noundef nonnull align 4 dereferenceable(4) %92)
          to label %860 unwind label %861

860:                                              ; preds = %859
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #8
  br label %865

861:                                              ; preds = %859, %853
  %862 = landingpad { ptr, i32 }
          cleanup
  %863 = extractvalue { ptr, i32 } %862, 0
  store ptr %863, ptr %8, align 8
  %864 = extractvalue { ptr, i32 } %862, 1
  store i32 %864, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #8
  br label %1185

865:                                              ; preds = %860, %852
  %866 = load ptr, ptr %6, align 8, !tbaa !5
  %867 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %866, i32 0, i32 2
  %868 = load i32, ptr %867, align 8, !tbaa !123
  %869 = icmp ne i32 %868, 9
  br i1 %869, label %870, label %897

870:                                              ; preds = %865
  %871 = load ptr, ptr %6, align 8, !tbaa !5
  %872 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %871, i32 0, i32 2
  %873 = load i32, ptr %872, align 8, !tbaa !123
  %874 = icmp ne i32 %873, 5343
  br i1 %874, label %875, label %897

875:                                              ; preds = %870
  %876 = load ptr, ptr %13, align 8, !tbaa !5
  %877 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %876, i32 noundef 34)
          to label %878 unwind label %671

878:                                              ; preds = %875
  br i1 %877, label %879, label %896

879:                                              ; preds = %878
  %880 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %881 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %880, i32 0, i32 4
  %882 = load i8, ptr %881, align 4, !tbaa !12, !range !121, !noundef !122
  %883 = trunc i8 %882 to i1
  br i1 %883, label %884, label %896

884:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 32, ptr %94) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #8
  %885 = load ptr, ptr %6, align 8, !tbaa !5
  %886 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %885, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %96, ptr align 8 %886, i64 4, i1 false), !tbaa.struct !9
  %887 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %96, i32 0, i32 0
  %888 = load i32, ptr %887, align 4
  %889 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %888, i32 noundef 34)
          to label %890 unwind label %892

890:                                              ; preds = %884
  store i32 %889, ptr %95, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA7_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 1 dereferenceable(7) @.str.277, ptr noundef nonnull align 4 dereferenceable(4) %95)
          to label %891 unwind label %892

891:                                              ; preds = %890
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #8
  br label %896

892:                                              ; preds = %890, %884
  %893 = landingpad { ptr, i32 }
          cleanup
  %894 = extractvalue { ptr, i32 } %893, 0
  store ptr %894, ptr %8, align 8
  %895 = extractvalue { ptr, i32 } %893, 1
  store i32 %895, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #8
  br label %1185

896:                                              ; preds = %891, %879, %878
  br label %897

897:                                              ; preds = %896, %870, %865
  call void @llvm.lifetime.start.p0(i64 1, ptr %97) #8
  %898 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %899 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %898, i32 0, i32 4
  %900 = load i8, ptr %899, align 4, !tbaa !12, !range !121, !noundef !122
  %901 = trunc i8 %900 to i1
  br i1 %901, label %902, label %907

902:                                              ; preds = %897
  %903 = load ptr, ptr %6, align 8, !tbaa !5
  %904 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %903, i32 0, i32 2
  %905 = load i32, ptr %904, align 8, !tbaa !123
  %906 = icmp eq i32 %905, 9
  br label %907

907:                                              ; preds = %902, %897
  %908 = phi i1 [ false, %897 ], [ %906, %902 ]
  %909 = zext i1 %908 to i8
  store i8 %909, ptr %97, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 1, ptr %98) #8
  %910 = load ptr, ptr %6, align 8, !tbaa !5
  %911 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %910, i32 0, i32 2
  %912 = load i32, ptr %911, align 8, !tbaa !123
  %913 = icmp eq i32 %912, 12
  br i1 %913, label %930, label %914

914:                                              ; preds = %907
  %915 = load ptr, ptr %6, align 8, !tbaa !5
  %916 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %915, i32 0, i32 2
  %917 = load i32, ptr %916, align 8, !tbaa !123
  %918 = icmp eq i32 %917, 5343
  br i1 %918, label %930, label %919

919:                                              ; preds = %914
  %920 = load ptr, ptr %6, align 8, !tbaa !5
  %921 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %920, i32 0, i32 2
  %922 = load i32, ptr %921, align 8, !tbaa !123
  %923 = icmp eq i32 %922, 2
  br i1 %923, label %924, label %928

924:                                              ; preds = %919
  %925 = load ptr, ptr %15, align 8, !tbaa !5
  %926 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %925, i32 noundef 3)
          to label %927 unwind label %988

927:                                              ; preds = %924
  br label %928

928:                                              ; preds = %927, %919
  %929 = phi i1 [ false, %919 ], [ %926, %927 ]
  br label %930

930:                                              ; preds = %928, %914, %907
  %931 = phi i1 [ true, %914 ], [ true, %907 ], [ %929, %928 ]
  %932 = zext i1 %931 to i8
  store i8 %932, ptr %98, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 1, ptr %99) #8
  %933 = load ptr, ptr %6, align 8, !tbaa !5
  %934 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %933, i32 0, i32 2
  %935 = load i32, ptr %934, align 8, !tbaa !123
  %936 = icmp eq i32 %935, 9
  br i1 %936, label %937, label %942

937:                                              ; preds = %930
  %938 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %939 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %938, i32 0, i32 8
  %940 = load i8, ptr %939, align 4, !tbaa !138, !range !121, !noundef !122
  %941 = trunc i8 %940 to i1
  br label %942

942:                                              ; preds = %937, %930
  %943 = phi i1 [ false, %930 ], [ %941, %937 ]
  %944 = zext i1 %943 to i8
  store i8 %944, ptr %99, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 1, ptr %100) #8
  %945 = load ptr, ptr %6, align 8, !tbaa !5
  %946 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %945, i32 0, i32 2
  %947 = load i32, ptr %946, align 8, !tbaa !123
  %948 = icmp eq i32 %947, 2
  br i1 %948, label %949, label %953

949:                                              ; preds = %942
  %950 = load ptr, ptr %15, align 8, !tbaa !5
  %951 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %950, i32 noundef 2)
          to label %952 unwind label %992

952:                                              ; preds = %949
  br label %953

953:                                              ; preds = %952, %942
  %954 = phi i1 [ false, %942 ], [ %951, %952 ]
  %955 = zext i1 %954 to i8
  store i8 %955, ptr %100, align 1, !tbaa !132
  call void @llvm.lifetime.start.p0(i64 1, ptr %101) #8
  %956 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %957 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %956, i32 0, i32 1
  %958 = load i8, ptr %957, align 4, !tbaa !136, !range !121, !noundef !122
  %959 = trunc i8 %958 to i1
  br i1 %959, label %960, label %965

960:                                              ; preds = %953
  %961 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %962 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %961, i32 0, i32 0
  %963 = load i32, ptr %962, align 4, !tbaa !137
  %964 = icmp uge i32 %963, 300
  br i1 %964, label %977, label %965

965:                                              ; preds = %960, %953
  %966 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %967 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %966, i32 0, i32 1
  %968 = load i8, ptr %967, align 4, !tbaa !136, !range !121, !noundef !122
  %969 = trunc i8 %968 to i1
  br i1 %969, label %975, label %970

970:                                              ; preds = %965
  %971 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %972 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %971, i32 0, i32 0
  %973 = load i32, ptr %972, align 4, !tbaa !137
  %974 = icmp uge i32 %973, 140
  br label %975

975:                                              ; preds = %970, %965
  %976 = phi i1 [ false, %965 ], [ %974, %970 ]
  br label %977

977:                                              ; preds = %975, %960
  %978 = phi i1 [ true, %960 ], [ %976, %975 ]
  %979 = zext i1 %978 to i8
  store i8 %979, ptr %101, align 1, !tbaa !132
  %980 = load i8, ptr %100, align 1, !tbaa !132, !range !121, !noundef !122
  %981 = trunc i8 %980 to i1
  br i1 %981, label %982, label %996

982:                                              ; preds = %977
  %983 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %984 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %983, i32 0, i32 9
  %985 = load i8, ptr %984, align 1, !tbaa !139, !range !121, !noundef !122
  %986 = trunc i8 %985 to i1
  br i1 %986, label %987, label %996

987:                                              ; preds = %982
  store i8 0, ptr %101, align 1, !tbaa !132
  br label %996

988:                                              ; preds = %924
  %989 = landingpad { ptr, i32 }
          cleanup
  %990 = extractvalue { ptr, i32 } %989, 0
  store ptr %990, ptr %8, align 8
  %991 = extractvalue { ptr, i32 } %989, 1
  store i32 %991, ptr %9, align 4
  br label %1184

992:                                              ; preds = %949
  %993 = landingpad { ptr, i32 }
          cleanup
  %994 = extractvalue { ptr, i32 } %993, 0
  store ptr %994, ptr %8, align 8
  %995 = extractvalue { ptr, i32 } %993, 1
  store i32 %995, ptr %9, align 4
  br label %1183

996:                                              ; preds = %987, %982, %977
  call void @llvm.lifetime.start.p0(i64 1, ptr %102) #8
  %997 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %998 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %997, i32 0, i32 1
  %999 = load i8, ptr %998, align 4, !tbaa !136, !range !121, !noundef !122
  %1000 = trunc i8 %999 to i1
  br i1 %1000, label %1001, label %1007

1001:                                             ; preds = %996
  %1002 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %1003 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1002, i32 0, i32 0
  %1004 = load i32, ptr %1003, align 4, !tbaa !137
  %1005 = icmp uge i32 %1004, 310
  %1006 = zext i1 %1005 to i8
  store i8 %1006, ptr %102, align 1, !tbaa !132
  br label %1020

1007:                                             ; preds = %996
  %1008 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %1009 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1008, i32 0, i32 7
  %1010 = load i8, ptr %1009, align 1, !tbaa !140, !range !121, !noundef !122
  %1011 = trunc i8 %1010 to i1
  br i1 %1011, label %1017, label %1012

1012:                                             ; preds = %1007
  %1013 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %119, i32 0, i32 9
  %1014 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1013, i32 0, i32 0
  %1015 = load i32, ptr %1014, align 4, !tbaa !137
  %1016 = icmp uge i32 %1015, 420
  br label %1017

1017:                                             ; preds = %1012, %1007
  %1018 = phi i1 [ true, %1007 ], [ %1016, %1012 ]
  %1019 = zext i1 %1018 to i8
  store i8 %1019, ptr %102, align 1, !tbaa !132
  br label %1020

1020:                                             ; preds = %1017, %1001
  %1021 = load i8, ptr %101, align 1, !tbaa !132, !range !121, !noundef !122
  %1022 = trunc i8 %1021 to i1
  br i1 %1022, label %1029, label %1023

1023:                                             ; preds = %1020
  %1024 = load ptr, ptr %6, align 8, !tbaa !5
  %1025 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1024, i32 0, i32 2
  %1026 = load i32, ptr %1025, align 8, !tbaa !123
  %1027 = icmp eq i32 %1026, 2
  br i1 %1027, label %1028, label %1029

1028:                                             ; preds = %1023
  store i8 0, ptr %102, align 1, !tbaa !132
  br label %1029

1029:                                             ; preds = %1028, %1023, %1020
  %1030 = load ptr, ptr %6, align 8, !tbaa !5
  %1031 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1030, i32 0, i32 2
  %1032 = load i32, ptr %1031, align 8, !tbaa !123
  %1033 = icmp eq i32 %1032, 5343
  br i1 %1033, label %1034, label %1035

1034:                                             ; preds = %1029
  store i8 0, ptr %102, align 1, !tbaa !132
  br label %1035

1035:                                             ; preds = %1034, %1029
  %1036 = load i8, ptr %102, align 1, !tbaa !132, !range !121, !noundef !122
  %1037 = trunc i8 %1036 to i1
  br i1 %1037, label %1038, label %1058

1038:                                             ; preds = %1035
  %1039 = load ptr, ptr %13, align 8, !tbaa !5
  %1040 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %1039, i32 noundef 33)
          to label %1041 unwind label %1050

1041:                                             ; preds = %1038
  br i1 %1040, label %1042, label %1058

1042:                                             ; preds = %1041
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #8
  %1043 = load ptr, ptr %6, align 8, !tbaa !5
  %1044 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1043, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %105, ptr align 8 %1044, i64 4, i1 false), !tbaa.struct !9
  %1045 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %105, i32 0, i32 0
  %1046 = load i32, ptr %1045, align 4
  %1047 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %1046, i32 noundef 33)
          to label %1048 unwind label %1054

1048:                                             ; preds = %1042
  store i32 %1047, ptr %104, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA11_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 1 dereferenceable(11) @.str.278, ptr noundef nonnull align 4 dereferenceable(4) %104)
          to label %1049 unwind label %1054

1049:                                             ; preds = %1048
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #8
  br label %1058

1050:                                             ; preds = %1063, %1038
  %1051 = landingpad { ptr, i32 }
          cleanup
  %1052 = extractvalue { ptr, i32 } %1051, 0
  store ptr %1052, ptr %8, align 8
  %1053 = extractvalue { ptr, i32 } %1051, 1
  store i32 %1053, ptr %9, align 4
  br label %1182

1054:                                             ; preds = %1048, %1042
  %1055 = landingpad { ptr, i32 }
          cleanup
  %1056 = extractvalue { ptr, i32 } %1055, 0
  store ptr %1056, ptr %8, align 8
  %1057 = extractvalue { ptr, i32 } %1055, 1
  store i32 %1057, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #8
  br label %1182

1058:                                             ; preds = %1049, %1041, %1035
  %1059 = load ptr, ptr %6, align 8, !tbaa !5
  %1060 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1059, i32 0, i32 2
  %1061 = load i32, ptr %1060, align 8, !tbaa !123
  %1062 = icmp ne i32 %1061, 3
  br i1 %1062, label %1063, label %1079

1063:                                             ; preds = %1058
  %1064 = load ptr, ptr %13, align 8, !tbaa !5
  %1065 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %1064, i32 noundef 35)
          to label %1066 unwind label %1050

1066:                                             ; preds = %1063
  br i1 %1065, label %1067, label %1079

1067:                                             ; preds = %1066
  call void @llvm.lifetime.start.p0(i64 32, ptr %106) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #8
  %1068 = load ptr, ptr %6, align 8, !tbaa !5
  %1069 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1068, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %108, ptr align 8 %1069, i64 4, i1 false), !tbaa.struct !9
  %1070 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %108, i32 0, i32 0
  %1071 = load i32, ptr %1070, align 4
  %1072 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %119, i32 %1071, i32 noundef 35)
          to label %1073 unwind label %1075

1073:                                             ; preds = %1067
  store i32 %1072, ptr %107, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross4joinIJRA10_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %106, ptr noundef nonnull align 1 dereferenceable(10) @.str.209, ptr noundef nonnull align 4 dereferenceable(4) %107)
          to label %1074 unwind label %1075

1074:                                             ; preds = %1073
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %106) #8
  br label %1079

1075:                                             ; preds = %1073, %1067
  %1076 = landingpad { ptr, i32 }
          cleanup
  %1077 = extractvalue { ptr, i32 } %1076, 0
  store ptr %1077, ptr %8, align 8
  %1078 = extractvalue { ptr, i32 } %1076, 1
  store i32 %1078, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %106) #8
  br label %1182

1079:                                             ; preds = %1074, %1066, %1058
  %1080 = load i8, ptr %101, align 1, !tbaa !132, !range !121, !noundef !122
  %1081 = trunc i8 %1080 to i1
  br i1 %1081, label %1082, label %1095

1082:                                             ; preds = %1079
  %1083 = load i8, ptr %100, align 1, !tbaa !132, !range !121, !noundef !122
  %1084 = trunc i8 %1083 to i1
  br i1 %1084, label %1088, label %1085

1085:                                             ; preds = %1082
  %1086 = load i8, ptr %99, align 1, !tbaa !132, !range !121, !noundef !122
  %1087 = trunc i8 %1086 to i1
  br i1 %1087, label %1088, label %1095

1088:                                             ; preds = %1085, %1082
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #8
  %1089 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL26buffer_to_packing_standardB5cxx11ERKNS_8SPIRTypeEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef nonnull align 8 dereferenceable(9848) %119, ptr noundef nonnull align 8 dereferenceable(336) %1089, i1 noundef zeroext false, i1 noundef zeroext true)
          to label %1090 unwind label %1091

1090:                                             ; preds = %1088
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  br label %1112

1091:                                             ; preds = %1088
  %1092 = landingpad { ptr, i32 }
          cleanup
  %1093 = extractvalue { ptr, i32 } %1092, 0
  store ptr %1093, ptr %8, align 8
  %1094 = extractvalue { ptr, i32 } %1092, 1
  store i32 %1094, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  br label %1182

1095:                                             ; preds = %1085, %1079
  %1096 = load i8, ptr %101, align 1, !tbaa !132, !range !121, !noundef !122
  %1097 = trunc i8 %1096 to i1
  br i1 %1097, label %1098, label %1111

1098:                                             ; preds = %1095
  %1099 = load i8, ptr %97, align 1, !tbaa !132, !range !121, !noundef !122
  %1100 = trunc i8 %1099 to i1
  br i1 %1100, label %1104, label %1101

1101:                                             ; preds = %1098
  %1102 = load i8, ptr %98, align 1, !tbaa !132, !range !121, !noundef !122
  %1103 = trunc i8 %1102 to i1
  br i1 %1103, label %1104, label %1111

1104:                                             ; preds = %1101, %1098
  call void @llvm.lifetime.start.p0(i64 32, ptr %110) #8
  %1105 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL26buffer_to_packing_standardB5cxx11ERKNS_8SPIRTypeEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %110, ptr noundef nonnull align 8 dereferenceable(9848) %119, ptr noundef nonnull align 8 dereferenceable(336) %1105, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %1106 unwind label %1107

1106:                                             ; preds = %1104
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  br label %1111

1107:                                             ; preds = %1104
  %1108 = landingpad { ptr, i32 }
          cleanup
  %1109 = extractvalue { ptr, i32 } %1108, 0
  store ptr %1109, ptr %8, align 8
  %1110 = extractvalue { ptr, i32 } %1108, 1
  store i32 %1110, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  br label %1182

1111:                                             ; preds = %1106, %1101, %1095
  br label %1112

1112:                                             ; preds = %1111, %1090
  %1113 = load ptr, ptr %12, align 8, !tbaa !5
  %1114 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1113, i32 0, i32 2
  %1115 = load i32, ptr %1114, align 8, !tbaa !141
  %1116 = icmp eq i32 %1115, 16
  br i1 %1116, label %1117, label %1145

1117:                                             ; preds = %1112
  %1118 = load ptr, ptr %12, align 8, !tbaa !5
  %1119 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1118, i32 0, i32 14
  %1120 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1119, i32 0, i32 5
  %1121 = load i32, ptr %1120, align 4, !tbaa !151
  %1122 = icmp eq i32 %1121, 2
  br i1 %1122, label %1123, label %1145

1123:                                             ; preds = %1117
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #8
  %1124 = load ptr, ptr %12, align 8, !tbaa !5
  %1125 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1124, i32 0, i32 14
  %1126 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1125, i32 0, i32 6
  %1127 = load i32, ptr %1126, align 8, !tbaa !152
  %1128 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14format_to_glslEN3spv11ImageFormatE(ptr noundef nonnull align 8 dereferenceable(9848) %119, i32 noundef %1127)
          to label %1129 unwind label %1135

1129:                                             ; preds = %1123
  store ptr %1128, ptr %111, align 8, !tbaa !5
  %1130 = load ptr, ptr %111, align 8, !tbaa !5
  %1131 = icmp ne ptr %1130, null
  br i1 %1131, label %1132, label %1143

1132:                                             ; preds = %1129
  call void @llvm.lifetime.start.p0(i64 32, ptr %112) #8
  %1133 = load ptr, ptr %111, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %113) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef %1133, ptr noundef nonnull align 1 dereferenceable(1) %113)
          to label %1134 unwind label %1139

1134:                                             ; preds = %1132
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef nonnull align 8 dereferenceable(32) %112) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #8
  br label %1143

1135:                                             ; preds = %1123
  %1136 = landingpad { ptr, i32 }
          cleanup
  %1137 = extractvalue { ptr, i32 } %1136, 0
  store ptr %1137, ptr %8, align 8
  %1138 = extractvalue { ptr, i32 } %1136, 1
  store i32 %1138, ptr %9, align 4
  br label %1144

1139:                                             ; preds = %1132
  %1140 = landingpad { ptr, i32 }
          cleanup
  %1141 = extractvalue { ptr, i32 } %1140, 0
  store ptr %1141, ptr %8, align 8
  %1142 = extractvalue { ptr, i32 } %1140, 1
  store i32 %1142, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #8
  br label %1144

1143:                                             ; preds = %1134, %1129
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  br label %1145

1144:                                             ; preds = %1139, %1135
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  br label %1182

1145:                                             ; preds = %1143, %1117, %1112
  %1146 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %11) #8
  br i1 %1146, label %1147, label %1153

1147:                                             ; preds = %1145
  call void @llvm.lifetime.start.p0(i64 1, ptr %114) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %114) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %114)
          to label %1148 unwind label %1149

1148:                                             ; preds = %1147
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %114) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #8
  store i32 1, ptr %115, align 4
  br label %1181

1149:                                             ; preds = %1147
  %1150 = landingpad { ptr, i32 }
          cleanup
  %1151 = extractvalue { ptr, i32 } %1150, 0
  store ptr %1151, ptr %8, align 8
  %1152 = extractvalue { ptr, i32 } %1150, 1
  store i32 %1152, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %114) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #8
  br label %1182

1153:                                             ; preds = %1145
  store i1 false, ptr %116, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %117) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.176, ptr noundef nonnull align 1 dereferenceable(1) %117)
          to label %1154 unwind label %1161

1154:                                             ; preds = %1153
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %118) #8
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %118, ptr noundef nonnull align 8 dereferenceable(280) %11, ptr noundef @.str.177)
          to label %1155 unwind label %1165

1155:                                             ; preds = %1154
  %1156 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %118)
          to label %1157 unwind label %1169

1157:                                             ; preds = %1155
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #8
  %1158 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.211)
          to label %1159 unwind label %1174

1159:                                             ; preds = %1157
  store i1 true, ptr %116, align 1
  store i32 1, ptr %115, align 4
  %1160 = load i1, ptr %116, align 1
  br i1 %1160, label %1179, label %1178

1161:                                             ; preds = %1153
  %1162 = landingpad { ptr, i32 }
          cleanup
  %1163 = extractvalue { ptr, i32 } %1162, 0
  store ptr %1163, ptr %8, align 8
  %1164 = extractvalue { ptr, i32 } %1162, 1
  store i32 %1164, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #8
  br label %1182

1165:                                             ; preds = %1154
  %1166 = landingpad { ptr, i32 }
          cleanup
  %1167 = extractvalue { ptr, i32 } %1166, 0
  store ptr %1167, ptr %8, align 8
  %1168 = extractvalue { ptr, i32 } %1166, 1
  store i32 %1168, ptr %9, align 4
  br label %1173

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

1173:                                             ; preds = %1169, %1165
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #8
  br label %1180

1174:                                             ; preds = %1157
  %1175 = landingpad { ptr, i32 }
          cleanup
  %1176 = extractvalue { ptr, i32 } %1175, 0
  store ptr %1176, ptr %8, align 8
  %1177 = extractvalue { ptr, i32 } %1175, 1
  store i32 %1177, ptr %9, align 4
  br label %1180

1178:                                             ; preds = %1159
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br label %1179

1179:                                             ; preds = %1178, %1159
  br label %1181

1180:                                             ; preds = %1174, %1173
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br label %1182

1181:                                             ; preds = %1179, %1148
  call void @llvm.lifetime.end.p0(i64 1, ptr %102) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %99) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %11) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr %11) #8
  br label %1190

1182:                                             ; preds = %1180, %1161, %1149, %1144, %1107, %1091, %1075, %1054, %1050
  call void @llvm.lifetime.end.p0(i64 1, ptr %102) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %101) #8
  br label %1183

1183:                                             ; preds = %1182, %992
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %99) #8
  br label %1184

1184:                                             ; preds = %1183, %988
  call void @llvm.lifetime.end.p0(i64 1, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #8
  br label %1185

1185:                                             ; preds = %1184, %892, %861, %843, %833, %807, %798, %765, %739, %730, %710, %698, %683, %679, %675, %671, %631
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #8
  br label %1186

1186:                                             ; preds = %1185, %353, %332, %286
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #8
  br label %1187

1187:                                             ; preds = %1186, %248, %227, %217, %206, %190, %174, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %1188

1188:                                             ; preds = %1187, %166
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %1189

1189:                                             ; preds = %1188, %162
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %11) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr %11) #8
  br label %1191

1190:                                             ; preds = %1181, %133, %122
  ret void

1191:                                             ; preds = %1189, %134, %123
  %1192 = load ptr, ptr %8, align 8
  %1193 = load i32, ptr %9, align 4
  %1194 = insertvalue { ptr, i32 } poison, ptr %1192, 0
  %1195 = insertvalue { ptr, i32 } %1194, i32 %1193, 1
  resume { ptr, i32 } %1195

1196:                                             ; preds = %842, %806, %709, %697, %596, %584, %541, %499, %441
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


; 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::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::allocator.71" = type { i8 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }

@.str.9 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.176 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.202 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.203 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.204 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.205 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.207 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.209 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.210 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.211 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.259 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.260 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.261 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.262 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.263 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.264 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.265 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.266 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.267 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.268 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.269 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.270 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.271 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.272 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.273 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.274 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.275 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.276 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.277 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.278 = external hidden unnamed_addr constant [11 x i8], align 1

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #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 #3 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK11spirv_cross8Compiler30combined_decoration_for_memberERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.spirv_cross::Bitset") align 8, ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #5

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA14_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(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 4 dereferenceable(4)) local_unnamed_addr #1

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL19layout_for_variableB5cxx11ERKNS_12SPIRVariableE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(176) %2) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::allocator.71", align 1
  %5 = alloca %"class.std::allocator.71", align 1
  %6 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::allocator.71", align 1
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator.71", align 1
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::allocator.71", align 1
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::allocator.71", align 1
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::allocator.71", align 1
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.spirv_cross::Bitset", align 8
  %20 = alloca %"class.spirv_cross::Bitset", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca i32, align 4
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::allocator.71", align 1
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %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::allocator.71", align 1
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca i32, align 4
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca i32, align 4
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca i32, align 4
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca i32, align 4
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::allocator.71", align 1
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca i32, align 4
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca i32, align 4
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::allocator.71", align 1
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::allocator.71", align 1
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca i32, align 4
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca i32, align 4
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca i32, align 4
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca i32, align 4
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::allocator.71", align 1
  %61 = alloca %"class.std::allocator.71", align 1
  %62 = alloca %"class.std::allocator.71", align 1
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %1)
  br i1 %64, label %65, label %69

65:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %4)
          to label %66 unwind label %67

66:                                               ; preds = %65
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #7
  br label %602

67:                                               ; preds = %65
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #7
  br label %603

69:                                               ; preds = %3
  %70 = getelementptr inbounds i8, ptr %2, i64 8
  %71 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %70)
  %72 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL34subpass_input_is_framebuffer_fetchEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %71)
  br i1 %72, label %73, label %77

73:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %74 unwind label %75

74:                                               ; preds = %73
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  br label %602

75:                                               ; preds = %73
  %76 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  br label %603

77:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 280, ptr nonnull %6) #7
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %6) #7
  %78 = getelementptr inbounds i8, ptr %2, i64 12
  %79 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %78)
  %80 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %79)
          to label %81 unwind label %91

81:                                               ; preds = %77
  %.sroa.067.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %82 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.067.0.copyload)
          to label %83 unwind label %93

83:                                               ; preds = %81
  %84 = getelementptr inbounds i8, ptr %80, i64 8
  %.sroa.064.0.copyload = load i32, ptr %84, align 8, !tbaa !5
  %85 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.064.0.copyload)
          to label %86 unwind label %95

86:                                               ; preds = %83
  %87 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 5250)
          to label %88 unwind label %95

88:                                               ; preds = %86
  br i1 %87, label %89, label %99

89:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.202, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %90 unwind label %97

90:                                               ; preds = %89
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %99

91:                                               ; preds = %77
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %601

93:                                               ; preds = %81
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %601

95:                                               ; preds = %138, %128, %121, %86, %83
  %96 = landingpad { ptr, i32 }
          cleanup
  br label %601

97:                                               ; preds = %89
  %98 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %601

99:                                               ; preds = %90, %88
  %100 = getelementptr inbounds i8, ptr %1, i64 7636
  %101 = getelementptr inbounds i8, ptr %1, i64 7648
  %102 = load i8, ptr %101, align 8, !tbaa !9, !range !119, !noundef !120
  %103 = trunc nuw i8 %102 to i1
  %104 = getelementptr inbounds i8, ptr %2, i64 16
  %105 = load i32, ptr %104, align 8
  %106 = icmp eq i32 %105, 9
  %or.cond = select i1 %103, i1 %106, i1 false
  br i1 %or.cond, label %107, label %111

107:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.259, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %108 unwind label %109

108:                                              ; preds = %107
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %121

109:                                              ; preds = %107
  %110 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %601

111:                                              ; preds = %99
  %112 = icmp eq i32 %105, 5343
  br i1 %112, label %113, label %121

113:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #7
  %114 = getelementptr inbounds i8, ptr %1, i64 9396
  %115 = load i8, ptr %114, align 4, !tbaa !121, !range !119, !noundef !120
  %116 = trunc nuw i8 %115 to i1
  %117 = select i1 %116, ptr @.str.260, ptr @.str.261
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull %117, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %118 unwind label %119

118:                                              ; preds = %113
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  br label %121

119:                                              ; preds = %113
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  br label %601

121:                                              ; preds = %111, %118, %108
  %122 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 4)
          to label %123 unwind label %95

123:                                              ; preds = %121
  br i1 %122, label %124, label %128

124:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.203, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %125 unwind label %126

125:                                              ; preds = %124
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %128

126:                                              ; preds = %124
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %601

128:                                              ; preds = %125, %123
  %129 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 5)
          to label %130 unwind label %95

130:                                              ; preds = %128
  br i1 %129, label %131, label %135

131:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull @.str.262, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %132 unwind label %133

132:                                              ; preds = %131
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %135

133:                                              ; preds = %131
  %134 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %601

135:                                              ; preds = %132, %130
  %136 = load i8, ptr %101, align 8, !tbaa !9, !range !119, !noundef !120
  %137 = trunc nuw i8 %136 to i1
  br i1 %137, label %138, label %147

138:                                              ; preds = %135
  %139 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 43)
          to label %140 unwind label %95

140:                                              ; preds = %138
  br i1 %139, label %141, label %147

141:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #7
  %.sroa.063.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %142 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.063.0.copyload, i32 noundef 43)
          to label %143 unwind label %145

143:                                              ; preds = %141
  store i32 %142, ptr %18, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA26_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 1 dereferenceable(26) @.str.263, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %144 unwind label %145

144:                                              ; preds = %143
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %147

145:                                              ; preds = %143, %141
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %601

147:                                              ; preds = %140, %144, %135
  %.sroa.059.0.copyload = load i32, ptr %84, align 8, !tbaa !5
  %148 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.059.0.copyload, i32 noundef 2)
          to label %149 unwind label %167

149:                                              ; preds = %147
  %150 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 30)
          to label %151 unwind label %167

151:                                              ; preds = %149
  br i1 %150, label %152, label %191

152:                                              ; preds = %151
  %153 = load i32, ptr %104, align 8, !tbaa !122
  %154 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL19can_use_io_locationEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %153, i1 noundef zeroext %148)
          to label %155 unwind label %167

155:                                              ; preds = %152
  br i1 %154, label %156, label %191

156:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %19) #7
  call void @_ZN11spirv_cross6BitsetC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %19) #7
  %157 = getelementptr inbounds i8, ptr %1, i64 256
  br label %158

158:                                              ; preds = %173, %156
  %.0166 = phi i32 [ 0, %156 ], [ %174, %173 ]
  %159 = invoke noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %157, ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %160 unwind label %169

160:                                              ; preds = %158
  %161 = zext i32 %.0166 to i64
  %162 = getelementptr inbounds i8, ptr %159, i64 392
  %163 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_4Meta10DecorationEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %162) #7
  %164 = icmp ugt i64 %163, %161
  br i1 %164, label %171, label %165

165:                                              ; preds = %160
  %166 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %19, i32 noundef 30)
          to label %180 unwind label %185

167:                                              ; preds = %199, %197, %191, %152, %149, %147
  %168 = landingpad { ptr, i32 }
          cleanup
  br label %601

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

171:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %20) #7
  invoke void @_ZNK11spirv_cross8Compiler30combined_decoration_for_memberERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::Bitset") align 8 %20, ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %80, i32 noundef %.0166)
          to label %172 unwind label %175

172:                                              ; preds = %171
  invoke void @_ZN11spirv_cross6Bitset8merge_orERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %19, ptr noundef nonnull align 8 dereferenceable(64) %20)
          to label %173 unwind label %177

173:                                              ; preds = %172
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %20) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #7
  %174 = add i32 %.0166, 1
  br label %158, !llvm.loop !130

175:                                              ; preds = %171
  %176 = landingpad { ptr, i32 }
          cleanup
  br label %179

177:                                              ; preds = %172
  %178 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %20) #7
  br label %179

179:                                              ; preds = %177, %175
  %.pn226 = phi { ptr, i32 } [ %178, %177 ], [ %176, %175 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #7
  br label %190

180:                                              ; preds = %165
  br i1 %166, label %189, label %181

181:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #7
  %.sroa.055.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %182 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.055.0.copyload, i32 noundef 30)
          to label %183 unwind label %187

183:                                              ; preds = %181
  store i32 %182, ptr %22, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA12_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 1 dereferenceable(12) @.str.204, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %184 unwind label %187

184:                                              ; preds = %183
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  br label %189

185:                                              ; preds = %165
  %186 = landingpad { ptr, i32 }
          cleanup
  br label %190

187:                                              ; preds = %183, %181
  %188 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  br label %190

189:                                              ; preds = %184, %180
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %19) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %19) #7
  br label %191

190:                                              ; preds = %169, %179, %187, %185
  %.pn226.pn.pn = phi { ptr, i32 } [ %188, %187 ], [ %186, %185 ], [ %.pn226, %179 ], [ %170, %169 ]
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %19) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %19) #7
  br label %601

191:                                              ; preds = %189, %155, %151
  %192 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %1)
          to label %193 unwind label %167

193:                                              ; preds = %191
  %194 = icmp eq i32 %192, 4
  %195 = load i32, ptr %104, align 8
  %196 = icmp eq i32 %195, 3
  %or.cond240 = select i1 %194, i1 %196, i1 false
  br i1 %or.cond240, label %197, label %206

197:                                              ; preds = %193
  %.sroa.054.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %198 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.054.0.copyload, i32 noundef 30)
          to label %199 unwind label %167

199:                                              ; preds = %197
  %200 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL42location_is_non_coherent_framebuffer_fetchEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %198)
          to label %201 unwind label %167

201:                                              ; preds = %199
  br i1 %200, label %202, label %thread-pre-split

202:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull @.str.264, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %203 unwind label %204

203:                                              ; preds = %202
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  br label %thread-pre-split

204:                                              ; preds = %202
  %205 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  br label %601

thread-pre-split:                                 ; preds = %201, %203
  %.pr = load i32, ptr %104, align 8
  br label %206

206:                                              ; preds = %thread-pre-split, %193
  %207 = phi i32 [ %.pr, %thread-pre-split ], [ %195, %193 ]
  %208 = icmp eq i32 %207, 3
  %or.cond243 = select i1 %148, i1 %208, i1 false
  br i1 %or.cond243, label %209, label %337

209:                                              ; preds = %206
  %210 = getelementptr inbounds i8, ptr %80, i64 136
  %211 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %210) #7
  %212 = trunc i64 %211 to i32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #7
  store i32 0, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #7
  store i32 0, ptr %26, align 4, !tbaa !5
  %213 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 36)
          to label %214 unwind label %223

214:                                              ; preds = %209
  br i1 %213, label %215, label %225

215:                                              ; preds = %214
  %216 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 37)
          to label %217 unwind label %223

217:                                              ; preds = %215
  br i1 %216, label %218, label %225

218:                                              ; preds = %217
  %.sroa.044.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %219 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.044.0.copyload, i32 noundef 36)
          to label %220 unwind label %223

220:                                              ; preds = %218
  store i32 %219, ptr %26, align 4, !tbaa !5
  %.sroa.043.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %221 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.043.0.copyload, i32 noundef 37)
          to label %222 unwind label %223

222:                                              ; preds = %220
  store i32 %221, ptr %25, align 4, !tbaa !5
  br label %225

223:                                              ; preds = %.invoke, %302, %228, %225, %220, %218, %215, %209
  %224 = landingpad { ptr, i32 }
          cleanup
  br label %336

225:                                              ; preds = %222, %217, %214
  %.0175 = phi i8 [ 1, %222 ], [ 0, %217 ], [ 0, %214 ]
  %226 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 29)
          to label %227 unwind label %223

227:                                              ; preds = %225
  br i1 %226, label %228, label %230

228:                                              ; preds = %227
  %.sroa.042.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %229 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.042.0.copyload, i32 noundef 29)
          to label %230 unwind label %223

230:                                              ; preds = %228, %227
  %.0184 = phi i32 [ 0, %227 ], [ %229, %228 ]
  %.0181 = phi i8 [ 0, %227 ], [ 1, %228 ]
  %.not313 = icmp eq i32 %212, 0
  br i1 %.not313, label %._crit_edge.thread, label %.lr.ph

._crit_edge:                                      ; preds = %291
  %231 = trunc nuw i8 %.3178 to i1
  %232 = select i1 %231, i1 %.1180, i1 false
  br i1 %232, label %293, label %._crit_edge.thread

.lr.ph:                                           ; preds = %230, %291
  %.1176310 = phi i8 [ %.3178, %291 ], [ %.0175, %230 ]
  %.0179309 = phi i1 [ %.1180, %291 ], [ false, %230 ]
  %.1182308 = phi i8 [ %.2183, %291 ], [ %.0181, %230 ]
  %.1185307 = phi i32 [ %.2186, %291 ], [ %.0184, %230 ]
  %.0187306 = phi i32 [ %292, %291 ], [ 0, %230 ]
  %233 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %234 unwind label %246

234:                                              ; preds = %.lr.ph
  %235 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %233, i32 noundef %.0187306, i32 noundef 29)
          to label %236 unwind label %246

236:                                              ; preds = %234
  br i1 %235, label %237, label %250

237:                                              ; preds = %236
  %238 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %239 unwind label %.loopexit

239:                                              ; preds = %237
  %240 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %238, i32 noundef %.0187306, i32 noundef 29)
          to label %241 unwind label %.loopexit

241:                                              ; preds = %239
  %242 = trunc nuw i8 %.1182308 to i1
  %.not214 = icmp ne i32 %240, %.1185307
  %or.cond245.not = select i1 %242, i1 %.not214, i1 false
  br i1 %or.cond245.not, label %243, label %250

243:                                              ; preds = %241
  %244 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %244, ptr noundef nonnull @.str.265)
          to label %245 unwind label %248

245:                                              ; preds = %243
  invoke void @__cxa_throw(ptr nonnull %244, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %604 unwind label %.loopexit.split-lp

246:                                              ; preds = %275, %273, %257, %255, %252, %250, %234, %.lr.ph
  %247 = landingpad { ptr, i32 }
          cleanup
  br label %336

.loopexit:                                        ; preds = %237, %239
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %336

.loopexit.split-lp:                               ; preds = %245
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %336

248:                                              ; preds = %243
  %249 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %244) #7
  br label %336

250:                                              ; preds = %241, %236
  %.2186 = phi i32 [ %.1185307, %236 ], [ %240, %241 ]
  %.2183 = phi i8 [ %.1182308, %236 ], [ 1, %241 ]
  %251 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %252 unwind label %246

252:                                              ; preds = %250
  %253 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %251, i32 noundef %.0187306, i32 noundef 35)
          to label %254 unwind label %246

254:                                              ; preds = %252
  br i1 %253, label %255, label %291

255:                                              ; preds = %254
  %256 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %257 unwind label %246

257:                                              ; preds = %255
  %258 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %256, i32 noundef %.0187306, i32 noundef 36)
          to label %259 unwind label %246

259:                                              ; preds = %257
  br i1 %258, label %260, label %273

260:                                              ; preds = %259
  %261 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %262 unwind label %.loopexit275

262:                                              ; preds = %260
  %263 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %261, i32 noundef %.0187306, i32 noundef 36)
          to label %264 unwind label %.loopexit275

264:                                              ; preds = %262
  %265 = trunc nuw i8 %.1176310 to i1
  %266 = load i32, ptr %26, align 4
  %.not215 = icmp ne i32 %263, %266
  %or.cond247.not = select i1 %265, i1 %.not215, i1 false
  br i1 %or.cond247.not, label %267, label %272

267:                                              ; preds = %264
  %268 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %268, ptr noundef nonnull @.str.266)
          to label %269 unwind label %270

269:                                              ; preds = %267
  invoke void @__cxa_throw(ptr nonnull %268, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %604 unwind label %.loopexit.split-lp276

.loopexit275:                                     ; preds = %260, %262
  %lpad.loopexit277 = landingpad { ptr, i32 }
          cleanup
  br label %336

.loopexit.split-lp276:                            ; preds = %269
  %lpad.loopexit.split-lp278 = landingpad { ptr, i32 }
          cleanup
  br label %336

270:                                              ; preds = %267
  %271 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %268) #7
  br label %336

272:                                              ; preds = %264
  store i32 %263, ptr %26, align 4, !tbaa !5
  br label %273

273:                                              ; preds = %272, %259
  %.2177 = phi i8 [ 1, %272 ], [ %.1176310, %259 ]
  %274 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %275 unwind label %246

275:                                              ; preds = %273
  %276 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %274, i32 noundef %.0187306, i32 noundef 37)
          to label %277 unwind label %246

277:                                              ; preds = %275
  br i1 %276, label %278, label %291

278:                                              ; preds = %277
  %279 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %280 unwind label %.loopexit280

280:                                              ; preds = %278
  %281 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %279, i32 noundef %.0187306, i32 noundef 37)
          to label %282 unwind label %.loopexit280

282:                                              ; preds = %280
  %283 = trunc nuw i8 %.2177 to i1
  %284 = load i32, ptr %25, align 4
  %.not216 = icmp ne i32 %281, %284
  %or.cond249.not = select i1 %283, i1 %.not216, i1 false
  br i1 %or.cond249.not, label %285, label %290

285:                                              ; preds = %282
  %286 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %286, ptr noundef nonnull @.str.267)
          to label %287 unwind label %288

287:                                              ; preds = %285
  invoke void @__cxa_throw(ptr nonnull %286, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %604 unwind label %.loopexit.split-lp281

.loopexit280:                                     ; preds = %278, %280
  %lpad.loopexit282 = landingpad { ptr, i32 }
          cleanup
  br label %336

.loopexit.split-lp281:                            ; preds = %287
  %lpad.loopexit.split-lp283 = landingpad { ptr, i32 }
          cleanup
  br label %336

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

290:                                              ; preds = %282
  store i32 %281, ptr %25, align 4, !tbaa !5
  br label %291

291:                                              ; preds = %277, %290, %254
  %.1180 = phi i1 [ true, %290 ], [ true, %277 ], [ %.0179309, %254 ]
  %.3178 = phi i8 [ 1, %290 ], [ %.2177, %277 ], [ %.1176310, %254 ]
  %292 = add nuw i32 %.0187306, 1
  %exitcond.not = icmp eq i32 %292, %212
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !132

293:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  invoke void @_ZN11spirv_cross4joinIJRA14_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 1 dereferenceable(14) @.str.268, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %294 unwind label %296

294:                                              ; preds = %293
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #7
  invoke void @_ZN11spirv_cross4joinIJRA14_KcRjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 1 dereferenceable(14) @.str.269, ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %295 unwind label %298

295:                                              ; preds = %294
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %._crit_edge.thread

296:                                              ; preds = %293
  %297 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  br label %336

298:                                              ; preds = %294
  %299 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %336

._crit_edge.thread:                               ; preds = %230, %._crit_edge, %295
  %300 = phi i1 [ false, %._crit_edge ], [ true, %295 ], [ false, %230 ]
  %.1182.lcssa324 = phi i8 [ %.2183, %._crit_edge ], [ %.2183, %295 ], [ %.0181, %230 ]
  %301 = trunc nuw i8 %.1182.lcssa324 to i1
  br i1 %301, label %302, label %335

302:                                              ; preds = %._crit_edge.thread
  %303 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %1)
          to label %304 unwind label %223

304:                                              ; preds = %302
  %.not193 = icmp eq i32 %303, 3
  br i1 %.not193, label %309, label %305

305:                                              ; preds = %304
  %306 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %306, ptr noundef nonnull @.str.270)
          to label %.invoke unwind label %307

307:                                              ; preds = %305
  %308 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %306) #7
  br label %336

309:                                              ; preds = %304
  %310 = getelementptr inbounds i8, ptr %1, i64 7640
  %311 = load i8, ptr %310, align 8, !tbaa !133, !range !119, !noundef !120
  %312 = trunc nuw i8 %311 to i1
  br i1 %312, label %313, label %318

313:                                              ; preds = %309
  %314 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %314, ptr noundef nonnull @.str.271)
          to label %.invoke unwind label %316

.invoke:                                          ; preds = %313, %305
  %315 = phi ptr [ %306, %305 ], [ %314, %313 ]
  invoke void @__cxa_throw(ptr nonnull %315, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont unwind label %223

.cont:                                            ; preds = %.invoke
  unreachable

316:                                              ; preds = %313
  %317 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %314) #7
  br label %336

318:                                              ; preds = %309
  %319 = load i32, ptr %100, align 4, !tbaa !134
  %320 = icmp ult i32 %319, 400
  br i1 %320, label %321, label %329

321:                                              ; preds = %318
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull @.str.272, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %322 unwind label %324

322:                                              ; preds = %321
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %323 unwind label %326

323:                                              ; preds = %322
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  br label %329

324:                                              ; preds = %321
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %328

326:                                              ; preds = %322
  %327 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  br label %328

328:                                              ; preds = %326, %324
  %.pn194 = phi { ptr, i32 } [ %327, %326 ], [ %325, %324 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  br label %336

329:                                              ; preds = %323, %318
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #7
  %.sroa.019.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %330 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.019.0.copyload, i32 noundef 29)
          to label %331 unwind label %333

331:                                              ; preds = %329
  store i32 %330, ptr %32, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA10_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 1 dereferenceable(10) @.str.273, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %332 unwind label %333

332:                                              ; preds = %331
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #7
  br label %335

333:                                              ; preds = %331, %329
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #7
  br label %336

335:                                              ; preds = %332, %._crit_edge.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  br label %400

336:                                              ; preds = %.loopexit280, %.loopexit.split-lp281, %.loopexit275, %.loopexit.split-lp276, %.loopexit, %.loopexit.split-lp, %246, %248, %270, %288, %333, %328, %316, %307, %298, %296, %223
  %.pn221.pn.pn = phi { ptr, i32 } [ %224, %223 ], [ %308, %307 ], [ %317, %316 ], [ %334, %333 ], [ %.pn194, %328 ], [ %299, %298 ], [ %297, %296 ], [ %247, %246 ], [ %249, %248 ], [ %271, %270 ], [ %289, %288 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit277, %.loopexit275 ], [ %lpad.loopexit.split-lp278, %.loopexit.split-lp276 ], [ %lpad.loopexit282, %.loopexit280 ], [ %lpad.loopexit.split-lp283, %.loopexit.split-lp281 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  br label %601

337:                                              ; preds = %206
  br i1 %208, label %338, label %400

338:                                              ; preds = %337
  %339 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 36)
          to label %340 unwind label %357

340:                                              ; preds = %338
  br i1 %339, label %341, label %365

341:                                              ; preds = %340
  %342 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 37)
          to label %343 unwind label %357

343:                                              ; preds = %341
  br i1 %342, label %344, label %365

344:                                              ; preds = %343
  %345 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 35)
          to label %346 unwind label %357

346:                                              ; preds = %344
  br i1 %345, label %347, label %365

347:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #7
  %.sroa.018.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %348 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.018.0.copyload, i32 noundef 36)
          to label %349 unwind label %359

349:                                              ; preds = %347
  store i32 %348, ptr %34, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA14_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 1 dereferenceable(14) @.str.268, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %350 unwind label %359

350:                                              ; preds = %349
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #7
  %.sroa.017.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %351 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.017.0.copyload, i32 noundef 37)
          to label %352 unwind label %361

352:                                              ; preds = %350
  store i32 %351, ptr %36, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA14_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 1 dereferenceable(14) @.str.269, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %353 unwind label %361

353:                                              ; preds = %352
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #7
  %.sroa.016.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %354 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.016.0.copyload, i32 noundef 35)
          to label %355 unwind label %363

355:                                              ; preds = %353
  store i32 %354, ptr %38, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA14_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 1 dereferenceable(14) @.str.210, ptr noundef nonnull align 4 dereferenceable(4) %38)
          to label %356 unwind label %363

356:                                              ; preds = %355
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  br label %365

357:                                              ; preds = %.invoke332, %459, %.thread325, %403, %400, %368, %365, %344, %341, %338
  %358 = landingpad { ptr, i32 }
          cleanup
  br label %601

359:                                              ; preds = %349, %347
  %360 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  br label %601

361:                                              ; preds = %352, %350
  %362 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  br label %601

363:                                              ; preds = %355, %353
  %364 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  br label %601

365:                                              ; preds = %356, %346, %343, %340
  %.1172 = phi i1 [ true, %356 ], [ false, %346 ], [ false, %343 ], [ false, %340 ]
  %366 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 29)
          to label %367 unwind label %357

367:                                              ; preds = %365
  br i1 %366, label %368, label %400

368:                                              ; preds = %367
  %369 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %1)
          to label %370 unwind label %357

370:                                              ; preds = %368
  %.not = icmp eq i32 %369, 3
  br i1 %.not, label %375, label %371

371:                                              ; preds = %370
  %372 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %372, ptr noundef nonnull @.str.270)
          to label %.invoke332 unwind label %373

373:                                              ; preds = %371
  %374 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %372) #7
  br label %601

375:                                              ; preds = %370
  %376 = getelementptr inbounds i8, ptr %1, i64 7640
  %377 = load i8, ptr %376, align 8, !tbaa !133, !range !119, !noundef !120
  %378 = trunc nuw i8 %377 to i1
  br i1 %378, label %379, label %383

379:                                              ; preds = %375
  %380 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %380, ptr noundef nonnull @.str.271)
          to label %.invoke332 unwind label %381

381:                                              ; preds = %379
  %382 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %380) #7
  br label %601

383:                                              ; preds = %375
  %384 = load i32, ptr %100, align 4, !tbaa !134
  %385 = icmp ult i32 %384, 400
  br i1 %385, label %386, label %394

386:                                              ; preds = %383
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %40) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull @.str.272, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %387 unwind label %389

387:                                              ; preds = %386
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %388 unwind label %391

388:                                              ; preds = %387
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %394

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

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

393:                                              ; preds = %391, %389
  %.pn = phi { ptr, i32 } [ %392, %391 ], [ %390, %389 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %601

394:                                              ; preds = %388, %383
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #7
  %.sroa.015.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %395 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.015.0.copyload, i32 noundef 29)
          to label %396 unwind label %398

396:                                              ; preds = %394
  store i32 %395, ptr %42, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA10_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 1 dereferenceable(10) @.str.273, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %397 unwind label %398

397:                                              ; preds = %396
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #7
  br label %400

398:                                              ; preds = %396, %394
  %399 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #7
  br label %601

400:                                              ; preds = %337, %397, %367, %335
  %.2173 = phi i1 [ %300, %335 ], [ %.1172, %397 ], [ %.1172, %367 ], [ false, %337 ]
  %401 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 31)
          to label %402 unwind label %357

402:                                              ; preds = %400
  br i1 %401, label %403, label %412

403:                                              ; preds = %402
  %404 = load i32, ptr %104, align 8, !tbaa !122
  %405 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL19can_use_io_locationEN3spv12StorageClassEb(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %404, i1 noundef zeroext %148)
          to label %406 unwind label %357

406:                                              ; preds = %403
  br i1 %405, label %407, label %412

407:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #7
  %.sroa.014.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %408 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.014.0.copyload, i32 noundef 31)
          to label %409 unwind label %410

409:                                              ; preds = %407
  store i32 %408, ptr %44, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA13_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 1 dereferenceable(13) @.str.207, ptr noundef nonnull align 4 dereferenceable(4) %44)
          to label %.thread unwind label %410

.thread:                                          ; preds = %409
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %413

410:                                              ; preds = %409, %407
  %411 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %601

412:                                              ; preds = %406, %402
  br i1 %.2173, label %413, label %.thread325

413:                                              ; preds = %.thread, %412
  %414 = getelementptr inbounds i8, ptr %1, i64 7640
  %415 = load i8, ptr %414, align 8, !tbaa !133, !range !119, !noundef !120
  %416 = trunc nuw i8 %415 to i1
  br i1 %416, label %444, label %417

417:                                              ; preds = %413
  %418 = load i32, ptr %100, align 4
  %419 = add i32 %418, -140
  %or.cond250 = icmp ult i32 %419, 300
  br i1 %or.cond250, label %420, label %427

420:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %46) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull @.str.205, ptr noundef nonnull align 1 dereferenceable(1) %46)
          to label %421 unwind label %422

421:                                              ; preds = %420
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %433 unwind label %424

422:                                              ; preds = %420
  %423 = landingpad { ptr, i32 }
          cleanup
  br label %426

424:                                              ; preds = %421
  %425 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  br label %426

426:                                              ; preds = %424, %422
  %.pn196 = phi { ptr, i32 } [ %425, %424 ], [ %423, %422 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  br label %601

427:                                              ; preds = %417
  %428 = icmp ult i32 %418, 140
  br i1 %428, label %429, label %.thread325

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

431:                                              ; preds = %429
  %432 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %430) #7
  br label %601

433:                                              ; preds = %421
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  %.pre = load i8, ptr %414, align 8, !tbaa !133, !range !119
  %.pre318 = load i32, ptr %100, align 4
  %434 = trunc nuw i8 %.pre to i1
  %435 = icmp ugt i32 %.pre318, 439
  %or.cond253.not = select i1 %434, i1 true, i1 %435
  br i1 %or.cond253.not, label %.thread325, label %436

436:                                              ; preds = %433
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %48) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull @.str.205, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %437 unwind label %439

437:                                              ; preds = %436
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %438 unwind label %441

438:                                              ; preds = %437
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  br label %.thread325

439:                                              ; preds = %436
  %440 = landingpad { ptr, i32 }
          cleanup
  br label %443

441:                                              ; preds = %437
  %442 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  br label %443

443:                                              ; preds = %441, %439
  %.pn198 = phi { ptr, i32 } [ %442, %441 ], [ %440, %439 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  br label %601

444:                                              ; preds = %413
  %445 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %445, ptr noundef nonnull @.str.275)
          to label %.invoke332 unwind label %447

.invoke332:                                       ; preds = %444, %429, %379, %371
  %446 = phi ptr [ %372, %371 ], [ %380, %379 ], [ %430, %429 ], [ %445, %444 ]
  invoke void @__cxa_throw(ptr nonnull %446, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont333 unwind label %357

.cont333:                                         ; preds = %.invoke332
  unreachable

447:                                              ; preds = %444
  %448 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %445) #7
  br label %601

.thread325:                                       ; preds = %427, %438, %433, %412
  %449 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 32)
          to label %450 unwind label %357

450:                                              ; preds = %.thread325
  br i1 %449, label %451, label %457

451:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %50) #7
  %.sroa.013.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %452 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.013.0.copyload, i32 noundef 32)
          to label %453 unwind label %455

453:                                              ; preds = %451
  store i32 %452, ptr %50, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA9_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 1 dereferenceable(9) @.str.276, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %454 unwind label %455

454:                                              ; preds = %453
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #7
  br label %457

455:                                              ; preds = %453, %451
  %456 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #7
  br label %601

457:                                              ; preds = %454, %450
  %458 = load i32, ptr %104, align 8
  switch i32 %458, label %459 [
    i32 9, label %471
    i32 5343, label %471
  ]

459:                                              ; preds = %457
  %460 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 34)
          to label %461 unwind label %357

461:                                              ; preds = %459
  br i1 %460, label %462, label %thread-pre-split266

462:                                              ; preds = %461
  %463 = load i8, ptr %101, align 8, !tbaa !9, !range !119, !noundef !120
  %464 = trunc nuw i8 %463 to i1
  br i1 %464, label %465, label %thread-pre-split266

465:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %52) #7
  %.sroa.012.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %466 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.012.0.copyload, i32 noundef 34)
          to label %467 unwind label %469

467:                                              ; preds = %465
  store i32 %466, ptr %52, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA7_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 1 dereferenceable(7) @.str.277, ptr noundef nonnull align 4 dereferenceable(4) %52)
          to label %468 unwind label %469

468:                                              ; preds = %467
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %52) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  br label %thread-pre-split266

469:                                              ; preds = %467, %465
  %470 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %52) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  br label %601

thread-pre-split266:                              ; preds = %468, %462, %461
  %.pr267 = load i32, ptr %104, align 8
  br label %471

471:                                              ; preds = %thread-pre-split266, %457, %457
  %472 = phi i32 [ %.pr267, %thread-pre-split266 ], [ %458, %457 ], [ %458, %457 ]
  %473 = load i8, ptr %101, align 8, !tbaa !9, !range !119, !noundef !120
  %474 = trunc nuw i8 %473 to i1
  %475 = icmp eq i32 %472, 9
  %476 = and i1 %475, %474
  switch i32 %472, label %.fold.split [
    i32 12, label %.thread327
    i32 5343, label %.thread327
    i32 2, label %477
  ]

477:                                              ; preds = %471
  %478 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %85, i32 noundef 3)
          to label %484 unwind label %510

.fold.split:                                      ; preds = %471
  br label %.thread327

.thread327:                                       ; preds = %471, %471, %.fold.split
  %.ph = phi i1 [ false, %.fold.split ], [ true, %471 ], [ true, %471 ]
  %479 = icmp eq i32 %472, 9
  %480 = getelementptr inbounds i8, ptr %1, i64 7652
  %481 = load i8, ptr %480, align 4, !range !119
  %482 = trunc nuw i8 %481 to i1
  %483 = select i1 %479, i1 %482, i1 false
  br label %493

484:                                              ; preds = %477
  %.pre320 = load i32, ptr %104, align 8, !tbaa !122
  %485 = icmp eq i32 %.pre320, 9
  %486 = getelementptr inbounds i8, ptr %1, i64 7652
  %487 = load i8, ptr %486, align 4, !range !119
  %488 = trunc nuw i8 %487 to i1
  %489 = select i1 %485, i1 %488, i1 false
  %490 = icmp eq i32 %.pre320, 2
  br i1 %490, label %491, label %493

491:                                              ; preds = %484
  %492 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %85, i32 noundef 2)
          to label %493 unwind label %512

493:                                              ; preds = %.thread327, %491, %484
  %494 = phi i1 [ %489, %484 ], [ %489, %491 ], [ %483, %.thread327 ]
  %495 = phi i1 [ %478, %484 ], [ %478, %491 ], [ %.ph, %.thread327 ]
  %496 = phi i1 [ false, %484 ], [ %492, %491 ], [ false, %.thread327 ]
  %497 = getelementptr inbounds i8, ptr %1, i64 7640
  %498 = load i8, ptr %497, align 8, !tbaa !133, !range !119, !noundef !120
  %499 = trunc nuw i8 %498 to i1
  %500 = load i32, ptr %100, align 4
  %501 = icmp ugt i32 %500, 299
  %or.cond255 = select i1 %499, i1 %501, i1 false
  br i1 %or.cond255, label %504, label %502

502:                                              ; preds = %493
  %503 = icmp ugt i32 %500, 139
  %not. = xor i1 %499, true
  %spec.select268 = select i1 %not., i1 %503, i1 false
  br label %504

504:                                              ; preds = %502, %493
  %505 = phi i1 [ true, %493 ], [ %spec.select268, %502 ]
  br i1 %496, label %506, label %514

506:                                              ; preds = %504
  %507 = getelementptr inbounds i8, ptr %1, i64 7653
  %508 = load i8, ptr %507, align 1, !tbaa !135, !range !119, !noundef !120
  %509 = trunc nuw i8 %508 to i1
  %not.270 = xor i1 %509, true
  %spec.select = select i1 %not.270, i1 %505, i1 false
  br label %514

510:                                              ; preds = %477
  %511 = landingpad { ptr, i32 }
          cleanup
  br label %601

512:                                              ; preds = %491
  %513 = landingpad { ptr, i32 }
          cleanup
  br label %601

514:                                              ; preds = %506, %504
  %.0170.shrunk = phi i1 [ %505, %504 ], [ %spec.select, %506 ]
  br i1 %499, label %515, label %517

515:                                              ; preds = %514
  %516 = icmp ugt i32 %500, 309
  br label %523

517:                                              ; preds = %514
  %518 = getelementptr inbounds i8, ptr %1, i64 7651
  %519 = load i8, ptr %518, align 1, !tbaa !136, !range !119, !noundef !120
  %520 = trunc nuw i8 %519 to i1
  %521 = icmp ugt i32 %500, 419
  %522 = select i1 %520, i1 true, i1 %521
  br label %523

523:                                              ; preds = %517, %515
  %.0167.in = phi i1 [ %516, %515 ], [ %522, %517 ]
  %524 = load i32, ptr %104, align 8
  %525 = icmp ne i32 %524, 2
  %or.cond257.not = or i1 %.0170.shrunk, %525
  %526 = icmp ne i32 %524, 5343
  %527 = select i1 %526, i1 %or.cond257.not, i1 false
  %spec.select258 = select i1 %527, i1 %.0167.in, i1 false
  br i1 %spec.select258, label %528, label %539

528:                                              ; preds = %523
  %529 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 33)
          to label %530 unwind label %535

530:                                              ; preds = %528
  br i1 %529, label %531, label %539

531:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %54) #7
  %.sroa.03.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %532 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.03.0.copyload, i32 noundef 33)
          to label %533 unwind label %537

533:                                              ; preds = %531
  store i32 %532, ptr %54, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA11_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 1 dereferenceable(11) @.str.278, ptr noundef nonnull align 4 dereferenceable(4) %54)
          to label %534 unwind label %537

534:                                              ; preds = %533
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #7
  br label %539

535:                                              ; preds = %541, %528
  %536 = landingpad { ptr, i32 }
          cleanup
  br label %601

537:                                              ; preds = %533, %531
  %538 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #7
  br label %601

539:                                              ; preds = %534, %530, %523
  %540 = load i32, ptr %104, align 8, !tbaa !122
  %.not202 = icmp eq i32 %540, 3
  br i1 %.not202, label %550, label %541

541:                                              ; preds = %539
  %542 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %82, i32 noundef 35)
          to label %543 unwind label %535

543:                                              ; preds = %541
  br i1 %542, label %544, label %550

544:                                              ; preds = %543
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %56) #7
  %.sroa.0.0.copyload = load i32, ptr %70, align 8, !tbaa !5
  %545 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.0.0.copyload, i32 noundef 35)
          to label %546 unwind label %548

546:                                              ; preds = %544
  store i32 %545, ptr %56, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross4joinIJRA10_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 1 dereferenceable(10) @.str.209, ptr noundef nonnull align 4 dereferenceable(4) %56)
          to label %547 unwind label %548

547:                                              ; preds = %546
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #7
  br label %550

548:                                              ; preds = %546, %544
  %549 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #7
  br label %601

550:                                              ; preds = %547, %543, %539
  br i1 %.0170.shrunk, label %551, label %.critedge

551:                                              ; preds = %550
  %brmerge = select i1 %496, i1 true, i1 %494
  br i1 %brmerge, label %552, label %556

552:                                              ; preds = %551
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL26buffer_to_packing_standardB5cxx11ERKNS_8SPIRTypeEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %80, i1 noundef zeroext false, i1 noundef zeroext true)
          to label %553 unwind label %554

553:                                              ; preds = %552
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #7
  br label %.critedge

554:                                              ; preds = %552
  %555 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #7
  br label %601

556:                                              ; preds = %551
  %brmerge259 = or i1 %476, %495
  br i1 %brmerge259, label %557, label %.critedge

557:                                              ; preds = %556
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL26buffer_to_packing_standardB5cxx11ERKNS_8SPIRTypeEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %80, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %558 unwind label %559

558:                                              ; preds = %557
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #7
  br label %.critedge

559:                                              ; preds = %557
  %560 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #7
  br label %601

.critedge:                                        ; preds = %550, %556, %558, %553
  %561 = getelementptr inbounds i8, ptr %80, i64 16
  %562 = load i32, ptr %561, align 8, !tbaa !137
  %563 = icmp eq i32 %562, 16
  %564 = getelementptr inbounds i8, ptr %80, i64 260
  %565 = load i32, ptr %564, align 4
  %566 = icmp eq i32 %565, 2
  %or.cond262 = select i1 %563, i1 %566, i1 false
  br i1 %or.cond262, label %567, label %578

567:                                              ; preds = %.critedge
  %568 = getelementptr inbounds i8, ptr %80, i64 264
  %569 = load i32, ptr %568, align 8, !tbaa !147
  %570 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14format_to_glslEN3spv11ImageFormatE(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %569)
          to label %571 unwind label %574

571:                                              ; preds = %567
  %.not203 = icmp eq ptr %570, null
  br i1 %.not203, label %578, label %572

572:                                              ; preds = %571
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %60) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull %570, ptr noundef nonnull align 1 dereferenceable(1) %60)
          to label %573 unwind label %576

573:                                              ; preds = %572
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #7
  br label %578

574:                                              ; preds = %567
  %575 = landingpad { ptr, i32 }
          cleanup
  br label %601

576:                                              ; preds = %572
  %577 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #7
  br label %601

578:                                              ; preds = %571, %573, %.critedge
  %579 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %6) #7
  br i1 %579, label %580, label %584

580:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %61) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %61)
          to label %581 unwind label %582

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

582:                                              ; preds = %580
  %583 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %61) #7
  br label %601

584:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %62) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.176, ptr noundef nonnull align 1 dereferenceable(1) %62)
          to label %585 unwind label %590

585:                                              ; preds = %584
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %62) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #7
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(280) %6, ptr noundef nonnull @.str.177)
          to label %586 unwind label %592

586:                                              ; preds = %585
  %587 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %588 unwind label %594

588:                                              ; preds = %586
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #7
  %589 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.211)
          to label %600 unwind label %597

590:                                              ; preds = %584
  %591 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %62) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %62) #7
  br label %601

592:                                              ; preds = %585
  %593 = landingpad { ptr, i32 }
          cleanup
  br label %596

594:                                              ; preds = %586
  %595 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  br label %596

596:                                              ; preds = %594, %592
  %.pn206 = phi { ptr, i32 } [ %595, %594 ], [ %593, %592 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #7
  br label %599

597:                                              ; preds = %588
  %598 = landingpad { ptr, i32 }
          cleanup
  br label %599

599:                                              ; preds = %597, %596
  %.pn208 = phi { ptr, i32 } [ %598, %597 ], [ %.pn206, %596 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  br label %601

600:                                              ; preds = %588, %581
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %6) #7
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %6) #7
  br label %602

601:                                              ; preds = %93, %167, %190, %204, %510, %535, %537, %548, %554, %559, %582, %590, %599, %576, %574, %512, %469, %455, %447, %443, %431, %426, %410, %398, %393, %381, %373, %363, %361, %359, %357, %336, %145, %133, %126, %119, %109, %97, %95, %91
  %.pn226.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %92, %91 ], [ %94, %93 ], [ %146, %145 ], [ %96, %95 ], [ %134, %133 ], [ %127, %126 ], [ %110, %109 ], [ %120, %119 ], [ %98, %97 ], [ %.pn226.pn.pn, %190 ], [ %205, %204 ], [ %168, %167 ], [ %.pn221.pn.pn, %336 ], [ %358, %357 ], [ %448, %447 ], [ %470, %469 ], [ %456, %455 ], [ %.pn198, %443 ], [ %.pn196, %426 ], [ %432, %431 ], [ %411, %410 ], [ %374, %373 ], [ %382, %381 ], [ %399, %398 ], [ %.pn, %393 ], [ %364, %363 ], [ %362, %361 ], [ %360, %359 ], [ %511, %510 ], [ %513, %512 ], [ %583, %582 ], [ %.pn208, %599 ], [ %591, %590 ], [ %555, %554 ], [ %560, %559 ], [ %549, %548 ], [ %536, %535 ], [ %538, %537 ], [ %577, %576 ], [ %575, %574 ]
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %6) #7
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %6) #7
  br label %603

602:                                              ; preds = %600, %74, %66
  ret void

603:                                              ; preds = %601, %75, %67
  %.pn234 = phi { ptr, i32 } [ %68, %67 ], [ %76, %75 ], [ %.pn226.pn.pn.pn.pn.pn.pn, %601 ]
  resume { ptr, i32 } %.pn234

604:                                              ; preds = %287, %269, %245
  unreachable
}

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA14_KcjEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(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 4 dereferenceable(4)) local_unnamed_addr #1

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

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

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

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

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

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

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

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


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