; 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::SmallVector.310" = type { %"class.spirv_cross::VectorView.311", i64, %"class.spirv_cross::AlignedBuffer.312" }
%"class.spirv_cross::VectorView.311" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.312" = type { [32 x i8] }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.310", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::TypedID.309" = type { i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.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] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.spirv_cross::SPIRConstantOp" = type <{ %"struct.spirv_cross::IVariant.base", i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::TypedID.281", [4 x i8] }>
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 x i8] }>
%"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.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.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.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::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"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::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_map.213" = type { %"class.std::_Hashtable.214" }
%"class.std::_Hashtable.214" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set.245" = type { %"class.std::_Hashtable.246" }
%"class.std::_Hashtable.246" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.263" = type { %"class.std::_Hashtable.264" }
%"class.std::_Hashtable.264" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }

@.str.11 = external hidden unnamed_addr constant [90 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.307 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.719 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.954 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.955 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.956 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.957 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.958 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.959 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.961 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.962 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.963 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.964 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.965 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.966 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.967 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.969 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.970 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.971 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.972 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.973 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.974 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.975 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.977 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.978 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.979 = external hidden unnamed_addr constant [26 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL22constant_op_expressionB5cxx11ERKNS_14SPIRConstantOpE = external hidden unnamed_addr constant [89 x i8], align 1
@.str.980 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.981 = external hidden unnamed_addr constant [32 x i8], align 1

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) #5 align 2

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

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) #7

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(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(360), i1 noundef zeroext, i1 noundef zeroext) #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(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)) #2 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL26get_composite_constant_idsENS_7TypedIDILNS_5TypesE3EEE(ptr dead_on_unwind noalias writable sret(%"class.spirv_cross::SmallVector.310") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32) #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL22constant_op_expressionB5cxx11ERKNS_14SPIRConstantOpE(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(76) %2) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca i32, align 4
  %21 = alloca i1, align 1
  %22 = alloca i32, align 4
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %"struct.spirv_cross::SPIRConstant", align 8
  %28 = alloca %"class.spirv_cross::TypedID.280", align 4
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca i1, align 1
  %35 = alloca %"class.spirv_cross::SmallVector.310", align 8
  %36 = alloca %"class.spirv_cross::TypedID.309", align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca %"class.spirv_cross::TypedID.309", align 4
  %43 = alloca %"class.spirv_cross::TypedID.309", align 4
  %44 = alloca %"class.spirv_cross::TypedID.281", align 4
  %45 = alloca %"class.spirv_cross::SmallVector.310", align 8
  %46 = alloca %"class.spirv_cross::TypedID.309", align 4
  %47 = alloca %"class.spirv_cross::TypedID.281", align 4
  %48 = alloca %"class.spirv_cross::TypedID.281", align 4
  %49 = alloca %"class.spirv_cross::TypedID.309", align 4
  %50 = alloca %"class.spirv_cross::TypedID.309", align 4
  %51 = alloca %"class.spirv_cross::TypedID.281", align 4
  %52 = alloca %"struct.spirv_cross::SPIRConstant", align 8
  %53 = alloca %"class.spirv_cross::TypedID.281", align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i8, align 1
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"struct.spirv_cross::SPIRType", align 8
  %61 = alloca i1, align 1
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca ptr, align 8
  %65 = alloca %"struct.spirv_cross::SPIRType", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  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
  %69 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %70, i32 0, i32 3
  %72 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %71)
  %73 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %69, i32 noundef %72)
  store ptr %73, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #9
  store i8 0, ptr %8, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #9
  store i8 0, ptr %9, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %10) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #9
  %74 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %69)
          to label %75 unwind label %85

75:                                               ; preds = %3
  br i1 %74, label %76, label %93

76:                                               ; preds = %75
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %77, i32 0, i32 1
  %79 = load i32, ptr %78, align 4, !tbaa !11
  %80 = invoke noundef zeroext i1 @_ZL18is_unsigned_opcodeN3spv2OpE(i32 noundef %79)
          to label %81 unwind label %85

81:                                               ; preds = %76
  br i1 %80, label %82, label %93

82:                                               ; preds = %81
  %83 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %83, ptr noundef @.str.954)
          to label %84 unwind label %89

84:                                               ; preds = %82
  invoke void @__cxa_throw(ptr %83, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %972 unwind label %85

85:                                               ; preds = %667, %469, %282, %266, %249, %244, %192, %189, %186, %183, %180, %177, %174, %171, %168, %165, %162, %159, %156, %153, %150, %147, %144, %141, %138, %135, %132, %129, %126, %123, %120, %117, %114, %111, %108, %105, %84, %76, %3
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %11, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %12, align 4
  br label %966

89:                                               ; preds = %82
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %11, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %12, align 4
  call void @__cxa_free_exception(ptr %83) #9
  br label %966

93:                                               ; preds = %81, %75
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %94, i32 0, i32 1
  %96 = load i32, ptr %95, align 4, !tbaa !11
  switch i32 %96, label %665 [
    i32 114, label %97
    i32 113, label %97
    i32 115, label %97
    i32 126, label %105
    i32 200, label %108
    i32 128, label %111
    i32 130, label %114
    i32 132, label %117
    i32 135, label %120
    i32 134, label %123
    i32 137, label %126
    i32 139, label %129
    i32 194, label %132
    i32 195, label %135
    i32 196, label %138
    i32 197, label %141
    i32 198, label %144
    i32 199, label %147
    i32 166, label %150
    i32 167, label %153
    i32 168, label %156
    i32 164, label %159
    i32 165, label %162
    i32 170, label %165
    i32 171, label %168
    i32 176, label %171
    i32 177, label %174
    i32 178, label %177
    i32 179, label %180
    i32 172, label %183
    i32 173, label %186
    i32 174, label %189
    i32 175, label %192
    i32 138, label %195
    i32 169, label %237
    i32 79, label %282
    i32 81, label %469
    i32 82, label %486
  ]

97:                                               ; preds = %93, %93, %93
  call void @llvm.lifetime.start.p0(i64 32, ptr %13) #9
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(336) %98)
          to label %99 unwind label %101

99:                                               ; preds = %97
  %100 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %13) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #9
  br label %672

101:                                              ; preds = %97
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %11, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #9
  br label %966

105:                                              ; preds = %93
  store i8 1, ptr %9, align 1, !tbaa !9
  %106 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.955)
          to label %107 unwind label %85

107:                                              ; preds = %105
  br label %672

108:                                              ; preds = %93
  store i8 1, ptr %9, align 1, !tbaa !9
  %109 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.956)
          to label %110 unwind label %85

110:                                              ; preds = %108
  br label %672

111:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %112 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.957)
          to label %113 unwind label %85

113:                                              ; preds = %111
  br label %672

114:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %115 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.955)
          to label %116 unwind label %85

116:                                              ; preds = %114
  br label %672

117:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %118 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.958)
          to label %119 unwind label %85

119:                                              ; preds = %117
  br label %672

120:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %121 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.959)
          to label %122 unwind label %85

122:                                              ; preds = %120
  br label %672

123:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %124 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.959)
          to label %125 unwind label %85

125:                                              ; preds = %123
  br label %672

126:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %127 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.960)
          to label %128 unwind label %85

128:                                              ; preds = %126
  br label %672

129:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %130 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.960)
          to label %131 unwind label %85

131:                                              ; preds = %129
  br label %672

132:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %133 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.961)
          to label %134 unwind label %85

134:                                              ; preds = %132
  br label %672

135:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %136 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.961)
          to label %137 unwind label %85

137:                                              ; preds = %135
  br label %672

138:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %139 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.962)
          to label %140 unwind label %85

140:                                              ; preds = %138
  br label %672

141:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %142 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.963)
          to label %143 unwind label %85

143:                                              ; preds = %141
  br label %672

144:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %145 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.964)
          to label %146 unwind label %85

146:                                              ; preds = %144
  br label %672

147:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %148 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.965)
          to label %149 unwind label %85

149:                                              ; preds = %147
  br label %672

150:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %151 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.966)
          to label %152 unwind label %85

152:                                              ; preds = %150
  br label %672

153:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %154 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.967)
          to label %155 unwind label %85

155:                                              ; preds = %153
  br label %672

156:                                              ; preds = %93
  store i8 1, ptr %9, align 1, !tbaa !9
  %157 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.968)
          to label %158 unwind label %85

158:                                              ; preds = %156
  br label %672

159:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %160 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.969)
          to label %161 unwind label %85

161:                                              ; preds = %159
  br label %672

162:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %163 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.970)
          to label %164 unwind label %85

164:                                              ; preds = %162
  br label %672

165:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %166 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.969)
          to label %167 unwind label %85

167:                                              ; preds = %165
  br label %672

168:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %169 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.970)
          to label %170 unwind label %85

170:                                              ; preds = %168
  br label %672

171:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %172 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.971)
          to label %173 unwind label %85

173:                                              ; preds = %171
  br label %672

174:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %175 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.971)
          to label %176 unwind label %85

176:                                              ; preds = %174
  br label %672

177:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %178 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.972)
          to label %179 unwind label %85

179:                                              ; preds = %177
  br label %672

180:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %181 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.972)
          to label %182 unwind label %85

182:                                              ; preds = %180
  br label %672

183:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %184 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.973)
          to label %185 unwind label %85

185:                                              ; preds = %183
  br label %672

186:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %187 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.973)
          to label %188 unwind label %85

188:                                              ; preds = %186
  br label %672

189:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %190 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.974)
          to label %191 unwind label %85

191:                                              ; preds = %189
  br label %672

192:                                              ; preds = %93
  store i8 1, ptr %8, align 1, !tbaa !9
  %193 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.974)
          to label %194 unwind label %85

194:                                              ; preds = %192
  br label %672

195:                                              ; preds = %93
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %196, i32 0, i32 2
  %198 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %197, i64 noundef 0) #9
  %199 = load i32, ptr %198, align 4, !tbaa !22
  store i32 %199, ptr %14, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %200, i32 0, i32 2
  %202 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %201, i64 noundef 1) #9
  %203 = load i32, ptr %202, align 4, !tbaa !22
  store i32 %203, ptr %15, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #9
  %204 = load i32, ptr %14, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %204, i1 noundef zeroext true)
          to label %205 unwind label %213

205:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #9
  %206 = load i32, ptr %15, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %206, i1 noundef zeroext true)
          to label %207 unwind label %217

207:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #9
  %208 = load i32, ptr %14, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %208, i1 noundef zeroext true)
          to label %209 unwind label %221

209:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #9
  %210 = load i32, ptr %15, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %210, i1 noundef zeroext true)
          to label %211 unwind label %225

211:                                              ; preds = %209
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_RA2_S7_S6_S9_S6_SB_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(4) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %212 unwind label %229

212:                                              ; preds = %211
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  store i32 1, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %965

213:                                              ; preds = %195
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %11, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %12, align 4
  br label %236

217:                                              ; preds = %205
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %11, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %12, align 4
  br label %235

221:                                              ; preds = %207
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %11, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %12, align 4
  br label %234

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

229:                                              ; preds = %211
  %230 = landingpad { ptr, i32 }
          cleanup
  %231 = extractvalue { ptr, i32 } %230, 0
  store ptr %231, ptr %11, align 8
  %232 = extractvalue { ptr, i32 } %230, 1
  store i32 %232, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #9
  br label %233

233:                                              ; preds = %229, %225
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #9
  br label %234

234:                                              ; preds = %233, %221
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  br label %235

235:                                              ; preds = %234, %217
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #9
  br label %236

236:                                              ; preds = %235, %213
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %966

237:                                              ; preds = %93
  %238 = load ptr, ptr %6, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %238, i32 0, i32 2
  %240 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %239) #9
  %241 = icmp ult i64 %240, 3
  br i1 %241, label %242, label %249

242:                                              ; preds = %237
  %243 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %243, ptr noundef @.str.978)
          to label %244 unwind label %245

244:                                              ; preds = %242
  invoke void @__cxa_throw(ptr %243, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %972 unwind label %85

245:                                              ; preds = %242
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %11, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %12, align 4
  call void @__cxa_free_exception(ptr %243) #9
  br label %966

249:                                              ; preds = %237
  %250 = load ptr, ptr %7, align 8, !tbaa !5
  %251 = load ptr, ptr %6, align 8, !tbaa !5
  %252 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %251, i32 0, i32 2
  %253 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %252, i64 noundef 2) #9
  %254 = load i32, ptr %253, align 4, !tbaa !22
  %255 = load ptr, ptr %6, align 8, !tbaa !5
  %256 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %255, i32 0, i32 2
  %257 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %256, i64 noundef 1) #9
  %258 = load i32, ptr %257, align 4, !tbaa !22
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %259, i32 0, i32 2
  %261 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %260, i64 noundef 0) #9
  %262 = load i32, ptr %261, align 4, !tbaa !22
  %263 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL17to_trivial_mix_opERKNS_8SPIRTypeERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjjj(ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(336) %250, ptr noundef nonnull align 8 dereferenceable(32) %10, i32 noundef %254, i32 noundef %258, i32 noundef %262)
          to label %264 unwind label %85

264:                                              ; preds = %249
  br i1 %263, label %265, label %266

265:                                              ; preds = %264
  br label %281

266:                                              ; preds = %264
  %267 = load ptr, ptr %7, align 8, !tbaa !5
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %268, i32 0, i32 2
  %270 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %269, i64 noundef 0) #9
  %271 = load i32, ptr %270, align 4, !tbaa !22
  %272 = load ptr, ptr %6, align 8, !tbaa !5
  %273 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %272, i32 0, i32 2
  %274 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %273, i64 noundef 1) #9
  %275 = load i32, ptr %274, align 4, !tbaa !22
  %276 = load ptr, ptr %6, align 8, !tbaa !5
  %277 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %276, i32 0, i32 2
  %278 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %277, i64 noundef 2) #9
  %279 = load i32, ptr %278, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL21to_ternary_expressionB5cxx11ERKNS_8SPIRTypeEjjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(336) %267, i32 noundef %271, i32 noundef %275, i32 noundef %279)
          to label %280 unwind label %85

280:                                              ; preds = %266
  store i32 1, ptr %20, align 4
  br label %965

281:                                              ; preds = %265
  br label %672

282:                                              ; preds = %93
  store i1 false, ptr %21, align 1
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(336) %283)
          to label %284 unwind label %85

284:                                              ; preds = %282
  %285 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.718)
          to label %286 unwind label %313

286:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %287, i32 0, i32 2
  %289 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %288, i64 noundef 0) #9
  %290 = load i32, ptr %289, align 4, !tbaa !22
  %291 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %69, i32 noundef %290)
          to label %292 unwind label %317

292:                                              ; preds = %286
  %293 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %291, i32 0, i32 4
  %294 = load i32, ptr %293, align 8, !tbaa !23
  store i32 %294, ptr %22, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #9
  %295 = load ptr, ptr %6, align 8, !tbaa !5
  %296 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %295, i32 0, i32 2
  %297 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %296, i64 noundef 0) #9
  %298 = load i32, ptr %297, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %298, i1 noundef zeroext true)
          to label %299 unwind label %321

299:                                              ; preds = %292
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #9
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %300, i32 0, i32 2
  %302 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %301, i64 noundef 1) #9
  %303 = load i32, ptr %302, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %303, i1 noundef zeroext true)
          to label %304 unwind label %325

304:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 2, ptr %25, align 4, !tbaa !22
  br label %305

305:                                              ; preds = %450, %304
  %306 = load i32, ptr %25, align 4, !tbaa !22
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %307, i32 0, i32 2
  %309 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %308) #9
  %310 = trunc i64 %309 to i32
  %311 = icmp ult i32 %306, %310
  br i1 %311, label %329, label %312

312:                                              ; preds = %305
  store i32 3, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %454

313:                                              ; preds = %284
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %11, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %12, align 4
  br label %468

317:                                              ; preds = %286
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %11, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %12, align 4
  br label %465

321:                                              ; preds = %292
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %11, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %12, align 4
  br label %464

325:                                              ; preds = %299
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %11, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %12, align 4
  br label %463

329:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  %330 = load ptr, ptr %6, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %330, i32 0, i32 2
  %332 = load i32, ptr %25, align 4, !tbaa !22
  %333 = zext i32 %332 to i64
  %334 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %331, i64 noundef %333) #9
  %335 = load i32, ptr %334, align 4, !tbaa !22
  store i32 %335, ptr %26, align 4, !tbaa !22
  %336 = load i32, ptr %26, align 4, !tbaa !22
  %337 = icmp eq i32 %336, -1
  br i1 %337, label %338, label %381

338:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 360, ptr %27) #9
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %27)
          to label %339 unwind label %353

339:                                              ; preds = %338
  %340 = load ptr, ptr %7, align 8, !tbaa !5
  %341 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %340, i32 0, i32 16
  %342 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %27, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %342, ptr align 4 %341, i64 4, i1 false), !tbaa.struct !42
  %343 = load ptr, ptr %7, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %343, i32 0, i32 16
  %345 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %344)
          to label %346 unwind label %357

346:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef 0)
          to label %347 unwind label %361

347:                                              ; preds = %346
  %348 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %349 unwind label %361

349:                                              ; preds = %347
  %350 = icmp ne i32 %345, %348
  br i1 %350, label %351, label %352

351:                                              ; preds = %349
  br label %366

352:                                              ; preds = %349
  call void @__assert_fail(ptr noundef @.str.979, ptr noundef @.str.11, i32 noundef 5735, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL22constant_op_expressionB5cxx11ERKNS_14SPIRConstantOpE) #11
  unreachable

353:                                              ; preds = %338
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %11, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %12, align 4
  br label %380

357:                                              ; preds = %339
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %11, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %12, align 4
  br label %379

361:                                              ; preds = %347, %346
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %11, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %379

365:                                              ; No predecessors!
  br label %366

366:                                              ; preds = %365, %351
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(360) %27, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %367 unwind label %370

367:                                              ; preds = %366
  %368 = 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) %29)
          to label %369 unwind label %374

369:                                              ; preds = %367
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %27) #9
  call void @llvm.lifetime.end.p0(i64 360, ptr %27) #9
  br label %434

370:                                              ; preds = %366
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %11, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %12, align 4
  br label %378

374:                                              ; preds = %367
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %11, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  br label %378

378:                                              ; preds = %374, %370
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  br label %379

379:                                              ; preds = %378, %361, %357
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %27) #9
  br label %380

380:                                              ; preds = %379, %353
  call void @llvm.lifetime.end.p0(i64 360, ptr %27) #9
  br label %453

381:                                              ; preds = %329
  %382 = load i32, ptr %26, align 4, !tbaa !22
  %383 = load i32, ptr %22, align 4, !tbaa !22
  %384 = icmp uge i32 %382, %383
  br i1 %384, label %385, label %410

385:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.719)
          to label %386 unwind label %396

386:                                              ; preds = %385
  %387 = load i32, ptr %26, align 4, !tbaa !22
  %388 = load i32, ptr %22, align 4, !tbaa !22
  %389 = sub i32 %387, %388
  %390 = zext i32 %389 to i64
  %391 = getelementptr inbounds [5 x i8], ptr @.str.980, i64 0, i64 %390
  %392 = load i8, ptr %391, align 1, !tbaa !43
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(32) %31, i8 noundef signext %392)
          to label %393 unwind label %400

393:                                              ; preds = %386
  %394 = 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) %30)
          to label %395 unwind label %404

395:                                              ; preds = %393
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %433

396:                                              ; preds = %385
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %11, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %12, align 4
  br label %409

400:                                              ; preds = %386
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %11, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %12, align 4
  br label %408

404:                                              ; preds = %393
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %11, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  br label %408

408:                                              ; preds = %404, %400
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  br label %409

409:                                              ; preds = %408, %396
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %453

410:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #9
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef @.str.719)
          to label %411 unwind label %419

411:                                              ; preds = %410
  %412 = load i32, ptr %26, align 4, !tbaa !22
  %413 = zext i32 %412 to i64
  %414 = getelementptr inbounds [5 x i8], ptr @.str.980, i64 0, i64 %413
  %415 = load i8, ptr %414, align 1, !tbaa !43
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(32) %33, i8 noundef signext %415)
          to label %416 unwind label %423

416:                                              ; preds = %411
  %417 = 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) %32)
          to label %418 unwind label %427

418:                                              ; preds = %416
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #9
  br label %433

419:                                              ; preds = %410
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %11, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %12, align 4
  br label %432

423:                                              ; preds = %411
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %11, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %12, align 4
  br label %431

427:                                              ; preds = %416
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %11, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #9
  br label %431

431:                                              ; preds = %427, %423
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #9
  br label %432

432:                                              ; preds = %431, %419
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #9
  br label %453

433:                                              ; preds = %418, %395
  br label %434

434:                                              ; preds = %433, %369
  %435 = load i32, ptr %25, align 4, !tbaa !22
  %436 = add i32 %435, 1
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %437, i32 0, i32 2
  %439 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %438) #9
  %440 = trunc i64 %439 to i32
  %441 = icmp ult i32 %436, %440
  br i1 %441, label %442, label %449

442:                                              ; preds = %434
  %443 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %444 unwind label %445

444:                                              ; preds = %442
  br label %449

445:                                              ; preds = %442
  %446 = landingpad { ptr, i32 }
          cleanup
  %447 = extractvalue { ptr, i32 } %446, 0
  store ptr %447, ptr %11, align 8
  %448 = extractvalue { ptr, i32 } %446, 1
  store i32 %448, ptr %12, align 4
  br label %453

449:                                              ; preds = %444, %434
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %450

450:                                              ; preds = %449
  %451 = load i32, ptr %25, align 4, !tbaa !22
  %452 = add i32 %451, 1
  store i32 %452, ptr %25, align 4, !tbaa !22
  br label %305, !llvm.loop !44

453:                                              ; preds = %445, %432, %409, %380
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %462

454:                                              ; preds = %312
  %455 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.135)
          to label %456 unwind label %458

456:                                              ; preds = %454
  store i1 true, ptr %21, align 1
  store i32 1, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  %457 = load i1, ptr %21, align 1
  br i1 %457, label %467, label %466

458:                                              ; preds = %454
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %11, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %12, align 4
  br label %462

462:                                              ; preds = %458, %453
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #9
  br label %463

463:                                              ; preds = %462, %325
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #9
  br label %464

464:                                              ; preds = %463, %321
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #9
  br label %465

465:                                              ; preds = %464, %317
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %468

466:                                              ; preds = %456
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  br label %467

467:                                              ; preds = %466, %456
  br label %965

468:                                              ; preds = %465, %313
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  br label %966

469:                                              ; preds = %93
  store i1 false, ptr %34, align 1
  %470 = load ptr, ptr %6, align 8, !tbaa !5
  %471 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %470, i32 0, i32 2
  %472 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %471, i64 noundef 0) #9
  %473 = load i32, ptr %472, align 4, !tbaa !22
  %474 = load ptr, ptr %6, align 8, !tbaa !5
  %475 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %474, i32 0, i32 2
  %476 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %475, i64 noundef 1) #9
  %477 = load ptr, ptr %6, align 8, !tbaa !5
  %478 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %477, i32 0, i32 2
  %479 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %478) #9
  %480 = sub i64 %479, 1
  %481 = trunc i64 %480 to i32
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %473, ptr noundef %476, i32 noundef %481, i32 noundef 1, ptr noundef null)
          to label %482 unwind label %85

482:                                              ; preds = %469
  store i1 true, ptr %34, align 1
  store i32 1, ptr %20, align 4
  %483 = load i1, ptr %34, align 1
  br i1 %483, label %485, label %484

484:                                              ; preds = %482
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  br label %485

485:                                              ; preds = %484, %482
  br label %965

486:                                              ; preds = %93
  call void @llvm.lifetime.start.p0(i64 56, ptr %35) #9
  %487 = load ptr, ptr %6, align 8, !tbaa !5
  %488 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %487, i32 0, i32 2
  %489 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %488, i64 noundef 1) #9
  %490 = load i32, ptr %489, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %36, i32 noundef %490)
          to label %491 unwind label %569

491:                                              ; preds = %486
  %492 = getelementptr inbounds %"class.spirv_cross::TypedID.309", ptr %36, i32 0, i32 0
  %493 = load i32, ptr %492, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL26get_composite_constant_idsENS_7TypedIDILNS_5TypesE3EEE(ptr dead_on_unwind writable sret(%"class.spirv_cross::SmallVector.310") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 %493)
          to label %494 unwind label %569

494:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  %495 = load ptr, ptr %6, align 8, !tbaa !5
  %496 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %495, i32 0, i32 1
  %497 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %496)
          to label %498 unwind label %573

498:                                              ; preds = %494
  store i32 %497, ptr %38, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  %499 = load ptr, ptr %6, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %499, i32 0, i32 3
  %501 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %500)
          to label %502 unwind label %577

502:                                              ; preds = %498
  store i32 %501, ptr %39, align 4, !tbaa !22
  store i32 2, ptr %37, align 4, !tbaa !22
  br label %503

503:                                              ; preds = %566, %502
  %504 = load i32, ptr %37, align 4, !tbaa !22
  %505 = zext i32 %504 to i64
  %506 = load ptr, ptr %6, align 8, !tbaa !5
  %507 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %506, i32 0, i32 2
  %508 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %507) #9
  %509 = sub i64 %508, 1
  %510 = icmp ult i64 %505, %509
  br i1 %510, label %511, label %603

511:                                              ; preds = %503
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %512 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %69, i32 0, i32 1
  %513 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %512, i32 noundef 1)
          to label %514 unwind label %581

514:                                              ; preds = %511
  store i32 %513, ptr %40, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  %515 = load ptr, ptr %6, align 8, !tbaa !5
  %516 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %515, i32 0, i32 2
  %517 = load i32, ptr %37, align 4, !tbaa !22
  %518 = zext i32 %517 to i64
  %519 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %516, i64 noundef %518) #9
  %520 = load i32, ptr %519, align 4, !tbaa !22
  %521 = zext i32 %520 to i64
  %522 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %35, i64 noundef %521) #9
  %523 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %522)
          to label %524 unwind label %585

524:                                              ; preds = %514
  store i32 %523, ptr %41, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  %525 = load i32, ptr %40, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef %525)
          to label %526 unwind label %589

526:                                              ; preds = %524
  %527 = load ptr, ptr %6, align 8, !tbaa !5
  %528 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %527, i32 0, i32 2
  %529 = load i32, ptr %37, align 4, !tbaa !22
  %530 = zext i32 %529 to i64
  %531 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %528, i64 noundef %530) #9
  %532 = load i32, ptr %531, align 4, !tbaa !22
  %533 = zext i32 %532 to i64
  %534 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %35, i64 noundef %533) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %534, ptr align 4 %42, i64 4, i1 false), !tbaa.struct !42
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  %535 = load i32, ptr %38, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef %535)
          to label %536 unwind label %585

536:                                              ; preds = %526
  %537 = load i32, ptr %39, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %44, i32 noundef %537)
          to label %538 unwind label %585

538:                                              ; preds = %536
  %539 = getelementptr inbounds %"class.spirv_cross::TypedID.309", ptr %43, i32 0, i32 0
  %540 = load i32, ptr %539, align 4
  %541 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %44, i32 0, i32 0
  %542 = load i32, ptr %541, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL22set_composite_constantENS_7TypedIDILNS_5TypesE3EEENS1_ILS2_1EEERKNS_11SmallVectorIS3_Lm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 %540, i32 %542, ptr noundef nonnull align 8 dereferenceable(56) %35)
          to label %543 unwind label %585

543:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 56, ptr %45) #9
  %544 = load i32, ptr %41, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %46, i32 noundef %544)
          to label %545 unwind label %593

545:                                              ; preds = %543
  %546 = getelementptr inbounds %"class.spirv_cross::TypedID.309", ptr %46, i32 0, i32 0
  %547 = load i32, ptr %546, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL26get_composite_constant_idsENS_7TypedIDILNS_5TypesE3EEE(ptr dead_on_unwind writable sret(%"class.spirv_cross::SmallVector.310") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 %547)
          to label %548 unwind label %593

548:                                              ; preds = %545
  %549 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(56) %35, ptr noundef nonnull align 8 dereferenceable(56) %45) #9
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %45) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %45) #9
  %550 = load i32, ptr %40, align 4, !tbaa !22
  store i32 %550, ptr %38, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %551 = load i32, ptr %39, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %48, i32 noundef %551)
          to label %552 unwind label %597

552:                                              ; preds = %548
  %553 = load ptr, ptr %6, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %553, i32 0, i32 2
  %555 = load i32, ptr %37, align 4, !tbaa !22
  %556 = zext i32 %555 to i64
  %557 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %554, i64 noundef %556) #9
  %558 = load i32, ptr %557, align 4, !tbaa !22
  %559 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %48, i32 0, i32 0
  %560 = load i32, ptr %559, align 4
  %561 = invoke i32 @_ZN11spirv_cross12CompilerGLSL25get_composite_member_typeENS_7TypedIDILNS_5TypesE1EEEj(ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 %560, i32 noundef %558)
          to label %562 unwind label %597

562:                                              ; preds = %552
  %563 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %47, i32 0, i32 0
  store i32 %561, ptr %563, align 4
  %564 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %565 unwind label %597

565:                                              ; preds = %562
  store i32 %564, ptr %39, align 4, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %566

566:                                              ; preds = %565
  %567 = load i32, ptr %37, align 4, !tbaa !22
  %568 = add i32 %567, 1
  store i32 %568, ptr %37, align 4, !tbaa !22
  br label %503, !llvm.loop !46

569:                                              ; preds = %491, %486
  %570 = landingpad { ptr, i32 }
          cleanup
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %11, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %12, align 4
  br label %664

573:                                              ; preds = %494
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %11, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %12, align 4
  br label %663

577:                                              ; preds = %620, %618, %608, %498
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %11, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %12, align 4
  br label %662

581:                                              ; preds = %511
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %11, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %12, align 4
  br label %602

585:                                              ; preds = %538, %536, %526, %514
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %11, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %12, align 4
  br label %601

589:                                              ; preds = %524
  %590 = landingpad { ptr, i32 }
          cleanup
  %591 = extractvalue { ptr, i32 } %590, 0
  store ptr %591, ptr %11, align 8
  %592 = extractvalue { ptr, i32 } %590, 1
  store i32 %592, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %601

593:                                              ; preds = %545, %543
  %594 = landingpad { ptr, i32 }
          cleanup
  %595 = extractvalue { ptr, i32 } %594, 0
  store ptr %595, ptr %11, align 8
  %596 = extractvalue { ptr, i32 } %594, 1
  store i32 %596, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 56, ptr %45) #9
  br label %601

597:                                              ; preds = %562, %552, %548
  %598 = landingpad { ptr, i32 }
          cleanup
  %599 = extractvalue { ptr, i32 } %598, 0
  store ptr %599, ptr %11, align 8
  %600 = extractvalue { ptr, i32 } %598, 1
  store i32 %600, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  br label %601

601:                                              ; preds = %597, %593, %589, %585
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  br label %602

602:                                              ; preds = %601, %581
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %662

603:                                              ; preds = %503
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %604 = load ptr, ptr %6, align 8, !tbaa !5
  %605 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %604, i32 0, i32 2
  %606 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %605, i64 noundef 0) #9
  %607 = load i32, ptr %606, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %49, i32 noundef %607)
          to label %608 unwind label %644

608:                                              ; preds = %603
  %609 = load ptr, ptr %6, align 8, !tbaa !5
  %610 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %609, i32 0, i32 2
  %611 = load i32, ptr %37, align 4, !tbaa !22
  %612 = zext i32 %611 to i64
  %613 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %610, i64 noundef %612) #9
  %614 = load i32, ptr %613, align 4, !tbaa !22
  %615 = zext i32 %614 to i64
  %616 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %35, i64 noundef %615) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %616, ptr align 4 %49, i64 4, i1 false), !tbaa.struct !42
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  %617 = load i32, ptr %38, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %617)
          to label %618 unwind label %577

618:                                              ; preds = %608
  %619 = load i32, ptr %39, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %51, i32 noundef %619)
          to label %620 unwind label %577

620:                                              ; preds = %618
  %621 = getelementptr inbounds %"class.spirv_cross::TypedID.309", ptr %50, i32 0, i32 0
  %622 = load i32, ptr %621, align 4
  %623 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %51, i32 0, i32 0
  %624 = load i32, ptr %623, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL22set_composite_constantENS_7TypedIDILNS_5TypesE3EEENS1_ILS2_1EEERKNS_11SmallVectorIS3_Lm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 %622, i32 %624, ptr noundef nonnull align 8 dereferenceable(56) %35)
          to label %625 unwind label %577

625:                                              ; preds = %620
  call void @llvm.lifetime.start.p0(i64 360, ptr %52) #9
  %626 = load ptr, ptr %6, align 8, !tbaa !5
  %627 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %626, i32 0, i32 3
  %628 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %627)
          to label %629 unwind label %648

629:                                              ; preds = %625
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ej(ptr noundef nonnull align 8 dereferenceable(360) %52, i32 noundef %628)
          to label %630 unwind label %648

630:                                              ; preds = %629
  %631 = load ptr, ptr %6, align 8, !tbaa !5
  %632 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %631, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %53, ptr align 8 %632, i64 4, i1 false), !tbaa.struct !42
  %633 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %69, i32 0, i32 49
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  %634 = load ptr, ptr %6, align 8, !tbaa !5
  %635 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %634, i32 0, i32 1
  %636 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %635)
          to label %637 unwind label %652

637:                                              ; preds = %630
  store i32 %636, ptr %54, align 4, !tbaa !22
  %638 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %633, ptr noundef nonnull align 4 dereferenceable(4) %54)
          to label %639 unwind label %652

639:                                              ; preds = %637
  %640 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %53, i32 0, i32 0
  %641 = load i32, ptr %640, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL23fill_composite_constantERNS_12SPIRConstantENS_7TypedIDILNS_5TypesE1EEERKNS_11SmallVectorINS3_ILS4_3EEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(360) %52, i32 %641, ptr noundef nonnull align 8 dereferenceable(56) %638)
          to label %642 unwind label %652

642:                                              ; preds = %639
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(360) %52, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %643 unwind label %656

643:                                              ; preds = %642
  store i32 1, ptr %20, align 4
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %52) #9
  call void @llvm.lifetime.end.p0(i64 360, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %35) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %35) #9
  br label %965

644:                                              ; preds = %603
  %645 = landingpad { ptr, i32 }
          cleanup
  %646 = extractvalue { ptr, i32 } %645, 0
  store ptr %646, ptr %11, align 8
  %647 = extractvalue { ptr, i32 } %645, 1
  store i32 %647, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %662

648:                                              ; preds = %629, %625
  %649 = landingpad { ptr, i32 }
          cleanup
  %650 = extractvalue { ptr, i32 } %649, 0
  store ptr %650, ptr %11, align 8
  %651 = extractvalue { ptr, i32 } %649, 1
  store i32 %651, ptr %12, align 4
  br label %661

652:                                              ; preds = %639, %637, %630
  %653 = landingpad { ptr, i32 }
          cleanup
  %654 = extractvalue { ptr, i32 } %653, 0
  store ptr %654, ptr %11, align 8
  %655 = extractvalue { ptr, i32 } %653, 1
  store i32 %655, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  br label %660

656:                                              ; preds = %642
  %657 = landingpad { ptr, i32 }
          cleanup
  %658 = extractvalue { ptr, i32 } %657, 0
  store ptr %658, ptr %11, align 8
  %659 = extractvalue { ptr, i32 } %657, 1
  store i32 %659, ptr %12, align 4
  br label %660

660:                                              ; preds = %656, %652
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %52) #9
  br label %661

661:                                              ; preds = %660, %648
  call void @llvm.lifetime.end.p0(i64 360, ptr %52) #9
  br label %662

662:                                              ; preds = %661, %644, %602, %577
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  br label %663

663:                                              ; preds = %662, %573
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %35) #9
  br label %664

664:                                              ; preds = %663, %569
  call void @llvm.lifetime.end.p0(i64 56, ptr %35) #9
  br label %966

665:                                              ; preds = %93
  %666 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %666, ptr noundef @.str.981)
          to label %667 unwind label %668

667:                                              ; preds = %665
  invoke void @__cxa_throw(ptr %666, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %972 unwind label %85

668:                                              ; preds = %665
  %669 = landingpad { ptr, i32 }
          cleanup
  %670 = extractvalue { ptr, i32 } %669, 0
  store ptr %670, ptr %11, align 8
  %671 = extractvalue { ptr, i32 } %669, 1
  store i32 %671, ptr %12, align 4
  call void @__cxa_free_exception(ptr %666) #9
  br label %966

672:                                              ; preds = %281, %194, %191, %188, %185, %182, %179, %176, %173, %170, %167, %164, %161, %158, %155, %152, %149, %146, %143, %140, %137, %134, %131, %128, %125, %122, %119, %116, %113, %110, %107, %99
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  store i32 0, ptr %55, align 4, !tbaa !22
  %673 = load i8, ptr %9, align 1, !tbaa !9, !range !47, !noundef !48
  %674 = trunc i8 %673 to i1
  br i1 %674, label %688, label %675

675:                                              ; preds = %672
  %676 = load i8, ptr %8, align 1, !tbaa !9, !range !47, !noundef !48
  %677 = trunc i8 %676 to i1
  br i1 %677, label %688, label %678

678:                                              ; preds = %675
  %679 = load ptr, ptr %6, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %679, i32 0, i32 1
  %681 = load i32, ptr %680, align 4, !tbaa !11
  %682 = icmp eq i32 %681, 114
  br i1 %682, label %688, label %683

683:                                              ; preds = %678
  %684 = load ptr, ptr %6, align 8, !tbaa !5
  %685 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %684, i32 0, i32 1
  %686 = load i32, ptr %685, align 4, !tbaa !11
  %687 = icmp eq i32 %686, 113
  br i1 %687, label %688, label %701

688:                                              ; preds = %683, %678, %675, %672
  %689 = load ptr, ptr %6, align 8, !tbaa !5
  %690 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %689, i32 0, i32 2
  %691 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %690, i64 noundef 0) #9
  %692 = load i32, ptr %691, align 4, !tbaa !22
  %693 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %69, i32 noundef %692)
          to label %694 unwind label %697

694:                                              ; preds = %688
  %695 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %693, i32 0, i32 3
  %696 = load i32, ptr %695, align 4, !tbaa !49
  store i32 %696, ptr %55, align 4, !tbaa !22
  br label %701

697:                                              ; preds = %688
  %698 = landingpad { ptr, i32 }
          cleanup
  %699 = extractvalue { ptr, i32 } %698, 0
  store ptr %699, ptr %11, align 8
  %700 = extractvalue { ptr, i32 } %698, 1
  store i32 %700, ptr %12, align 4
  br label %964

701:                                              ; preds = %694, %683
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #9
  %702 = load ptr, ptr %6, align 8, !tbaa !5
  %703 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %702, i32 0, i32 1
  %704 = load i32, ptr %703, align 4, !tbaa !11
  %705 = invoke noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %704)
          to label %706 unwind label %711

706:                                              ; preds = %701
  %707 = zext i1 %705 to i8
  store i8 %707, ptr %57, align 1, !tbaa !9
  %708 = load ptr, ptr %6, align 8, !tbaa !5
  %709 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %708, i32 0, i32 1
  %710 = load i32, ptr %709, align 4, !tbaa !11
  switch i32 %710, label %727 [
    i32 170, label %715
    i32 171, label %715
    i32 177, label %719
    i32 179, label %719
    i32 173, label %719
    i32 175, label %719
    i32 139, label %719
    i32 135, label %719
    i32 195, label %719
    i32 114, label %719
    i32 126, label %719
    i32 176, label %723
    i32 178, label %723
    i32 172, label %723
    i32 174, label %723
    i32 137, label %723
    i32 134, label %723
    i32 194, label %723
    i32 113, label %723
  ]

711:                                              ; preds = %941, %862, %823, %741, %723, %719, %715, %701
  %712 = landingpad { ptr, i32 }
          cleanup
  %713 = extractvalue { ptr, i32 } %712, 0
  store ptr %713, ptr %11, align 8
  %714 = extractvalue { ptr, i32 } %712, 1
  store i32 %714, ptr %12, align 4
  br label %963

715:                                              ; preds = %706, %706
  %716 = load i32, ptr %55, align 4, !tbaa !22
  %717 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %716)
          to label %718 unwind label %711

718:                                              ; preds = %715
  store i32 %717, ptr %56, align 4, !tbaa !50
  br label %731

719:                                              ; preds = %706, %706, %706, %706, %706, %706, %706, %706, %706
  %720 = load i32, ptr %55, align 4, !tbaa !22
  %721 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %720)
          to label %722 unwind label %711

722:                                              ; preds = %719
  store i32 %721, ptr %56, align 4, !tbaa !50
  br label %731

723:                                              ; preds = %706, %706, %706, %706, %706, %706, %706, %706
  %724 = load i32, ptr %55, align 4, !tbaa !22
  %725 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %724)
          to label %726 unwind label %711

726:                                              ; preds = %723
  store i32 %725, ptr %56, align 4, !tbaa !50
  br label %731

727:                                              ; preds = %706
  %728 = load ptr, ptr %7, align 8, !tbaa !5
  %729 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %728, i32 0, i32 2
  %730 = load i32, ptr %729, align 8, !tbaa !51
  store i32 %730, ptr %56, align 4, !tbaa !50
  br label %731

731:                                              ; preds = %727, %726, %722, %718
  %732 = load i8, ptr %8, align 1, !tbaa !9, !range !47, !noundef !48
  %733 = trunc i8 %732 to i1
  br i1 %733, label %734, label %813

734:                                              ; preds = %731
  %735 = load ptr, ptr %6, align 8, !tbaa !5
  %736 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %735, i32 0, i32 2
  %737 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %736) #9
  %738 = icmp ult i64 %737, 2
  br i1 %738, label %739, label %746

739:                                              ; preds = %734
  %740 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %740, ptr noundef @.str.978)
          to label %741 unwind label %742

741:                                              ; preds = %739
  invoke void @__cxa_throw(ptr %740, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %972 unwind label %711

742:                                              ; preds = %739
  %743 = landingpad { ptr, i32 }
          cleanup
  %744 = extractvalue { ptr, i32 } %743, 0
  store ptr %744, ptr %11, align 8
  %745 = extractvalue { ptr, i32 } %743, 1
  store i32 %745, ptr %12, align 4
  call void @__cxa_free_exception(ptr %740) #9
  br label %963

746:                                              ; preds = %734
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  call void @llvm.lifetime.start.p0(i64 336, ptr %60) #9
  %747 = load ptr, ptr %6, align 8, !tbaa !5
  %748 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %747, i32 0, i32 2
  %749 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %748, i64 noundef 0) #9
  %750 = load i32, ptr %749, align 4, !tbaa !22
  %751 = load ptr, ptr %6, align 8, !tbaa !5
  %752 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %751, i32 0, i32 2
  %753 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %752, i64 noundef 1) #9
  %754 = load i32, ptr %753, align 4, !tbaa !22
  %755 = load i8, ptr %57, align 1, !tbaa !9, !range !47, !noundef !48
  %756 = trunc i8 %755 to i1
  invoke void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind writable sret(%"struct.spirv_cross::SPIRType") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 4 dereferenceable(4) %56, i32 noundef %750, i32 noundef %754, i1 noundef zeroext %756)
          to label %757 unwind label %784

757:                                              ; preds = %746
  %758 = load ptr, ptr %7, align 8, !tbaa !5
  %759 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %758, i32 0, i32 2
  %760 = load i32, ptr %759, align 8, !tbaa !51
  %761 = load i32, ptr %56, align 4, !tbaa !50
  %762 = icmp ne i32 %760, %761
  br i1 %762, label %763, label %808

763:                                              ; preds = %757
  %764 = load ptr, ptr %7, align 8, !tbaa !5
  %765 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %764, i32 0, i32 2
  %766 = load i32, ptr %765, align 8, !tbaa !51
  %767 = icmp ne i32 %766, 2
  br i1 %767, label %768, label %808

768:                                              ; preds = %763
  %769 = load i32, ptr %56, align 4, !tbaa !50
  %770 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %60, i32 0, i32 2
  store i32 %769, ptr %770, align 8, !tbaa !51
  store i1 false, ptr %61, align 1
  %771 = load ptr, ptr %7, align 8, !tbaa !5
  %772 = load ptr, ptr %69, align 8, !tbaa !52
  %773 = getelementptr inbounds ptr, ptr %772, i64 59
  %774 = load ptr, ptr %773, align 8
  invoke void %774(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(336) %771, ptr noundef nonnull align 8 dereferenceable(336) %60)
          to label %775 unwind label %788

775:                                              ; preds = %768
  %776 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 40)
          to label %777 unwind label %792

777:                                              ; preds = %775
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #9
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %778 unwind label %796

778:                                              ; preds = %777
  %779 = 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) %62)
          to label %780 unwind label %800

780:                                              ; preds = %778
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #9
  %781 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 41)
          to label %782 unwind label %792

782:                                              ; preds = %780
  store i1 true, ptr %61, align 1
  store i32 1, ptr %20, align 4
  %783 = load i1, ptr %61, align 1
  br i1 %783, label %806, label %805

784:                                              ; preds = %746
  %785 = landingpad { ptr, i32 }
          cleanup
  %786 = extractvalue { ptr, i32 } %785, 0
  store ptr %786, ptr %11, align 8
  %787 = extractvalue { ptr, i32 } %785, 1
  store i32 %787, ptr %12, align 4
  br label %812

788:                                              ; preds = %808, %768
  %789 = landingpad { ptr, i32 }
          cleanup
  %790 = extractvalue { ptr, i32 } %789, 0
  store ptr %790, ptr %11, align 8
  %791 = extractvalue { ptr, i32 } %789, 1
  store i32 %791, ptr %12, align 4
  br label %811

792:                                              ; preds = %780, %775
  %793 = landingpad { ptr, i32 }
          cleanup
  %794 = extractvalue { ptr, i32 } %793, 0
  store ptr %794, ptr %11, align 8
  %795 = extractvalue { ptr, i32 } %793, 1
  store i32 %795, ptr %12, align 4
  br label %807

796:                                              ; preds = %777
  %797 = landingpad { ptr, i32 }
          cleanup
  %798 = extractvalue { ptr, i32 } %797, 0
  store ptr %798, ptr %11, align 8
  %799 = extractvalue { ptr, i32 } %797, 1
  store i32 %799, ptr %12, align 4
  br label %804

800:                                              ; preds = %778
  %801 = landingpad { ptr, i32 }
          cleanup
  %802 = extractvalue { ptr, i32 } %801, 0
  store ptr %802, ptr %11, align 8
  %803 = extractvalue { ptr, i32 } %801, 1
  store i32 %803, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  br label %804

804:                                              ; preds = %800, %796
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #9
  br label %807

805:                                              ; preds = %782
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  br label %806

806:                                              ; preds = %805, %782
  br label %810

807:                                              ; preds = %804, %792
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #9
  br label %811

808:                                              ; preds = %763, %757
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_SA_S3_SA_S3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %809 unwind label %788

809:                                              ; preds = %808
  store i32 1, ptr %20, align 4
  br label %810

810:                                              ; preds = %809, %806
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %60) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %60) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #9
  br label %962

811:                                              ; preds = %807, %788
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %60) #9
  br label %812

812:                                              ; preds = %811, %784
  call void @llvm.lifetime.end.p0(i64 336, ptr %60) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #9
  br label %963

813:                                              ; preds = %731
  %814 = load i8, ptr %9, align 1, !tbaa !9, !range !47, !noundef !48
  %815 = trunc i8 %814 to i1
  br i1 %815, label %816, label %845

816:                                              ; preds = %813
  %817 = load ptr, ptr %6, align 8, !tbaa !5
  %818 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %817, i32 0, i32 2
  %819 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %818) #9
  %820 = icmp ult i64 %819, 1
  br i1 %820, label %821, label %828

821:                                              ; preds = %816
  %822 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %822, ptr noundef @.str.978)
          to label %823 unwind label %824

823:                                              ; preds = %821
  invoke void @__cxa_throw(ptr %822, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %972 unwind label %711

824:                                              ; preds = %821
  %825 = landingpad { ptr, i32 }
          cleanup
  %826 = extractvalue { ptr, i32 } %825, 0
  store ptr %826, ptr %11, align 8
  %827 = extractvalue { ptr, i32 } %825, 1
  store i32 %827, ptr %12, align 4
  call void @__cxa_free_exception(ptr %822) #9
  br label %963

828:                                              ; preds = %816
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #9
  %829 = load ptr, ptr %7, align 8, !tbaa !5
  %830 = load ptr, ptr %6, align 8, !tbaa !5
  %831 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %830, i32 0, i32 2
  %832 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %831, i64 noundef 0) #9
  %833 = load i32, ptr %832, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL12bitcast_glslB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(336) %829, i32 noundef %833)
          to label %834 unwind label %836

834:                                              ; preds = %828
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_S3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %835 unwind label %840

835:                                              ; preds = %834
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #9
  store i32 1, ptr %20, align 4
  br label %962

836:                                              ; preds = %828
  %837 = landingpad { ptr, i32 }
          cleanup
  %838 = extractvalue { ptr, i32 } %837, 0
  store ptr %838, ptr %11, align 8
  %839 = extractvalue { ptr, i32 } %837, 1
  store i32 %839, ptr %12, align 4
  br label %844

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

844:                                              ; preds = %840, %836
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #9
  br label %963

845:                                              ; preds = %813
  %846 = load ptr, ptr %6, align 8, !tbaa !5
  %847 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %846, i32 0, i32 1
  %848 = load i32, ptr %847, align 4, !tbaa !11
  %849 = icmp eq i32 %848, 114
  br i1 %849, label %855, label %850

850:                                              ; preds = %845
  %851 = load ptr, ptr %6, align 8, !tbaa !5
  %852 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %851, i32 0, i32 1
  %853 = load i32, ptr %852, align 4, !tbaa !11
  %854 = icmp eq i32 %853, 113
  br i1 %854, label %855, label %934

855:                                              ; preds = %850, %845
  %856 = load ptr, ptr %6, align 8, !tbaa !5
  %857 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %856, i32 0, i32 2
  %858 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %857) #9
  %859 = icmp ult i64 %858, 1
  br i1 %859, label %860, label %867

860:                                              ; preds = %855
  %861 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %861, ptr noundef @.str.978)
          to label %862 unwind label %863

862:                                              ; preds = %860
  invoke void @__cxa_throw(ptr %861, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %972 unwind label %711

863:                                              ; preds = %860
  %864 = landingpad { ptr, i32 }
          cleanup
  %865 = extractvalue { ptr, i32 } %864, 0
  store ptr %865, ptr %11, align 8
  %866 = extractvalue { ptr, i32 } %864, 1
  store i32 %866, ptr %12, align 4
  call void @__cxa_free_exception(ptr %861) #9
  br label %963

867:                                              ; preds = %855
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %868 = load ptr, ptr %6, align 8, !tbaa !5
  %869 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %868, i32 0, i32 2
  %870 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %869, i64 noundef 0) #9
  %871 = load i32, ptr %870, align 4, !tbaa !22
  %872 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %69, i32 noundef %871)
          to label %873 unwind label %898

873:                                              ; preds = %867
  store ptr %872, ptr %64, align 8, !tbaa !5
  %874 = load ptr, ptr %64, align 8, !tbaa !5
  %875 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %874, i32 0, i32 3
  %876 = load i32, ptr %875, align 4, !tbaa !49
  %877 = load ptr, ptr %7, align 8, !tbaa !5
  %878 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %877, i32 0, i32 3
  %879 = load i32, ptr %878, align 4, !tbaa !49
  %880 = icmp ult i32 %876, %879
  br i1 %880, label %881, label %916

881:                                              ; preds = %873
  %882 = load i32, ptr %56, align 4, !tbaa !50
  %883 = load ptr, ptr %64, align 8, !tbaa !5
  %884 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %883, i32 0, i32 2
  %885 = load i32, ptr %884, align 8, !tbaa !51
  %886 = icmp ne i32 %882, %885
  br i1 %886, label %887, label %916

887:                                              ; preds = %881
  call void @llvm.lifetime.start.p0(i64 336, ptr %65) #9
  %888 = load ptr, ptr %64, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %65, ptr noundef nonnull align 8 dereferenceable(336) %888)
          to label %889 unwind label %902

889:                                              ; preds = %887
  %890 = load i32, ptr %56, align 4, !tbaa !50
  %891 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %65, i32 0, i32 2
  store i32 %890, ptr %891, align 8, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #9
  %892 = load ptr, ptr %6, align 8, !tbaa !5
  %893 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %892, i32 0, i32 2
  %894 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %893, i64 noundef 0) #9
  %895 = load i32, ptr %894, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL12bitcast_glslB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %69, ptr noundef nonnull align 8 dereferenceable(336) %65, i32 noundef %895)
          to label %896 unwind label %906

896:                                              ; preds = %889
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %897 unwind label %910

897:                                              ; preds = %896
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #9
  store i32 1, ptr %20, align 4
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %65) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %65) #9
  br label %932

898:                                              ; preds = %867
  %899 = landingpad { ptr, i32 }
          cleanup
  %900 = extractvalue { ptr, i32 } %899, 0
  store ptr %900, ptr %11, align 8
  %901 = extractvalue { ptr, i32 } %899, 1
  store i32 %901, ptr %12, align 4
  br label %933

902:                                              ; preds = %887
  %903 = landingpad { ptr, i32 }
          cleanup
  %904 = extractvalue { ptr, i32 } %903, 0
  store ptr %904, ptr %11, align 8
  %905 = extractvalue { ptr, i32 } %903, 1
  store i32 %905, ptr %12, align 4
  br label %915

906:                                              ; preds = %889
  %907 = landingpad { ptr, i32 }
          cleanup
  %908 = extractvalue { ptr, i32 } %907, 0
  store ptr %908, ptr %11, align 8
  %909 = extractvalue { ptr, i32 } %907, 1
  store i32 %909, ptr %12, align 4
  br label %914

910:                                              ; preds = %896
  %911 = landingpad { ptr, i32 }
          cleanup
  %912 = extractvalue { ptr, i32 } %911, 0
  store ptr %912, ptr %11, align 8
  %913 = extractvalue { ptr, i32 } %911, 1
  store i32 %913, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #9
  br label %914

914:                                              ; preds = %910, %906
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %65) #9
  br label %915

915:                                              ; preds = %914, %902
  call void @llvm.lifetime.end.p0(i64 336, ptr %65) #9
  br label %933

916:                                              ; preds = %881, %873
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #9
  %917 = load ptr, ptr %6, align 8, !tbaa !5
  %918 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %917, i32 0, i32 2
  %919 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %918, i64 noundef 0) #9
  %920 = load i32, ptr %919, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %920, i1 noundef zeroext true)
          to label %921 unwind label %923

921:                                              ; preds = %916
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %922 unwind label %927

922:                                              ; preds = %921
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #9
  store i32 1, ptr %20, align 4
  br label %932

923:                                              ; preds = %916
  %924 = landingpad { ptr, i32 }
          cleanup
  %925 = extractvalue { ptr, i32 } %924, 0
  store ptr %925, ptr %11, align 8
  %926 = extractvalue { ptr, i32 } %924, 1
  store i32 %926, ptr %12, align 4
  br label %931

927:                                              ; preds = %921
  %928 = landingpad { ptr, i32 }
          cleanup
  %929 = extractvalue { ptr, i32 } %928, 0
  store ptr %929, ptr %11, align 8
  %930 = extractvalue { ptr, i32 } %928, 1
  store i32 %930, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #9
  br label %931

931:                                              ; preds = %927, %923
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #9
  br label %933

932:                                              ; preds = %922, %897
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  br label %962

933:                                              ; preds = %931, %915, %898
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  br label %963

934:                                              ; preds = %850
  %935 = load ptr, ptr %6, align 8, !tbaa !5
  %936 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %935, i32 0, i32 2
  %937 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %936) #9
  %938 = icmp ult i64 %937, 1
  br i1 %938, label %939, label %946

939:                                              ; preds = %934
  %940 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %940, ptr noundef @.str.978)
          to label %941 unwind label %942

941:                                              ; preds = %939
  invoke void @__cxa_throw(ptr %940, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %972 unwind label %711

942:                                              ; preds = %939
  %943 = landingpad { ptr, i32 }
          cleanup
  %944 = extractvalue { ptr, i32 } %943, 0
  store ptr %944, ptr %11, align 8
  %945 = extractvalue { ptr, i32 } %943, 1
  store i32 %945, ptr %12, align 4
  call void @__cxa_free_exception(ptr %940) #9
  br label %963

946:                                              ; preds = %934
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #9
  %947 = load ptr, ptr %6, align 8, !tbaa !5
  %948 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %947, i32 0, i32 2
  %949 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %948, i64 noundef 0) #9
  %950 = load i32, ptr %949, align 4, !tbaa !22
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(9848) %69, i32 noundef %950, i1 noundef zeroext true)
          to label %951 unwind label %953

951:                                              ; preds = %946
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %952 unwind label %957

952:                                              ; preds = %951
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #9
  store i32 1, ptr %20, align 4
  br label %962

953:                                              ; preds = %946
  %954 = landingpad { ptr, i32 }
          cleanup
  %955 = extractvalue { ptr, i32 } %954, 0
  store ptr %955, ptr %11, align 8
  %956 = extractvalue { ptr, i32 } %954, 1
  store i32 %956, ptr %12, align 4
  br label %961

957:                                              ; preds = %951
  %958 = landingpad { ptr, i32 }
          cleanup
  %959 = extractvalue { ptr, i32 } %958, 0
  store ptr %959, ptr %11, align 8
  %960 = extractvalue { ptr, i32 } %958, 1
  store i32 %960, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #9
  br label %961

961:                                              ; preds = %957, %953
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #9
  br label %963

962:                                              ; preds = %952, %932, %835, %810
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %965

963:                                              ; preds = %961, %942, %933, %863, %844, %824, %812, %742, %711
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %964

964:                                              ; preds = %963, %697
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %966

965:                                              ; preds = %962, %643, %485, %467, %280, %212
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  ret void

966:                                              ; preds = %964, %668, %664, %468, %245, %236, %101, %89, %85
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  br label %967

967:                                              ; preds = %966
  %968 = load ptr, ptr %11, align 8
  %969 = load i32, ptr %12, align 4
  %970 = insertvalue { ptr, i32 } poison, ptr %968, 0
  %971 = insertvalue { ptr, i32 } %970, i32 %969, 1
  resume { ptr, i32 } %971

972:                                              ; preds = %941, %862, %823, %741, %667, %244, %84
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL18is_unsigned_opcodeN3spv2OpE(i32 noundef) #4

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind noalias writable sret(%"struct.spirv_cross::SPIRType") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef, i1 noundef zeroext) #2 align 2

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !16, i64 12}
!12 = !{!"_ZTSN11spirv_cross14SPIRConstantOpE", !13, i64 0, !16, i64 12, !17, i64 16, !21, i64 72}
!13 = !{!"_ZTSN11spirv_cross8IVariantE", !14, i64 8}
!14 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!17 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !18, i64 0, !19, i64 16, !20, i64 24}
!18 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !19, i64 8}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!21 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !15, i64 0}
!22 = !{!15, !15, i64 0}
!23 = !{!24, !15, i64 24}
!24 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !13, i64 0, !16, i64 12, !25, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !17, i64 32, !26, i64 88, !15, i64 120, !10, i64 124, !10, i64 125, !29, i64 128, !30, i64 136, !17, i64 192, !33, i64 248, !21, i64 272, !21, i64 276, !37, i64 280}
!25 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !27, i64 0, !19, i64 16, !28, i64 24}
!27 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !19, i64 8}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!29 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!30 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !31, i64 0, !19, i64 16, !32, i64 24}
!31 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !19, i64 8}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !21, i64 0, !34, i64 4, !10, i64 8, !10, i64 9, !10, i64 10, !15, i64 12, !35, i64 16, !36, i64 20}
!34 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!35 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!36 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!37 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !38, i64 0}
!38 = !{!"_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, !19, i64 8, !39, i64 16, !19, i64 24, !40, i64 32, !6, i64 48}
!39 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!40 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !41, i64 0, !19, i64 8}
!41 = !{!"float", !7, i64 0}
!42 = !{i64 0, i64 4, !22}
!43 = !{!7, !7, i64 0}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}
!46 = distinct !{!46, !45}
!47 = !{i8 0, i8 2}
!48 = !{}
!49 = !{!24, !15, i64 20}
!50 = !{!25, !25, i64 0}
!51 = !{!24, !25, i64 16}
!52 = !{!53, !53, i64 0}
!53 = !{!"vtable pointer", !8, i64 0}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::SmallVector.310" = type { %"class.spirv_cross::VectorView.311", i64, %"class.spirv_cross::AlignedBuffer.312" }
%"class.spirv_cross::VectorView.311" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.312" = type { [32 x i8] }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.310", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::TypedID.309" = type { i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.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] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

@.str.11 = external hidden unnamed_addr constant [90 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.307 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.719 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.954 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.955 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.956 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.957 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.958 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.959 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.961 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.962 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.963 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.964 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.965 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.966 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.967 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.969 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.970 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.971 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.972 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.973 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.974 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.975 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.977 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.978 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.979 = external hidden unnamed_addr constant [26 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL22constant_op_expressionB5cxx11ERKNS_14SPIRConstantOpE = external hidden unnamed_addr constant [89 x i8], align 1
@.str.980 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.981 = external hidden unnamed_addr constant [32 x i8], align 1

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) local_unnamed_addr #6

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(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(360), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(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)) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL26get_composite_constant_idsENS_7TypedIDILNS_5TypesE3EEE(ptr dead_on_unwind noalias writable sret(%"class.spirv_cross::SmallVector.310") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL23fill_composite_constantERNS_12SPIRConstantENS_7TypedIDILNS_5TypesE1EEERKNS_11SmallVectorINS3_ILS4_3EEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(360), i32, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL22constant_op_expressionB5cxx11ERKNS_14SPIRConstantOpE(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(76) %2) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"struct.spirv_cross::SPIRConstant", align 8
  %13 = alloca %"class.spirv_cross::TypedID.280", align 4
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.spirv_cross::SmallVector.310", align 8
  %20 = alloca %"class.spirv_cross::TypedID.309", align 4
  %21 = alloca %"class.spirv_cross::TypedID.309", align 4
  %22 = alloca %"class.spirv_cross::TypedID.309", align 4
  %23 = alloca %"class.spirv_cross::TypedID.281", align 4
  %24 = alloca %"class.spirv_cross::SmallVector.310", align 8
  %25 = alloca %"class.spirv_cross::TypedID.309", align 4
  %26 = alloca %"class.spirv_cross::TypedID.281", align 4
  %27 = alloca %"class.spirv_cross::TypedID.281", align 4
  %28 = alloca %"class.spirv_cross::TypedID.309", align 4
  %29 = alloca %"class.spirv_cross::TypedID.309", align 4
  %30 = alloca %"class.spirv_cross::TypedID.281", align 4
  %31 = alloca %"struct.spirv_cross::SPIRConstant", align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"struct.spirv_cross::SPIRType", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"struct.spirv_cross::SPIRType", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = getelementptr inbounds i8, ptr %2, i64 72
  %44 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %43)
  %45 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %44)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #8
  %46 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %1)
  br i1 %46, label %47, label %57

47:                                               ; preds = %3
  %48 = getelementptr inbounds i8, ptr %2, i64 12
  %49 = load i32, ptr %48, align 4, !tbaa !5
  %50 = call noundef zeroext i1 @_ZL18is_unsigned_opcodeN3spv2OpE(i32 noundef %49)
  br i1 %50, label %51, label %57

51:                                               ; preds = %47
  %52 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %52, ptr noundef nonnull @.str.954)
          to label %.invoke unwind label %55

53:                                               ; preds = %.invoke253, %.invoke252, %.invoke, %251, %146, %139, %130
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %511

55:                                               ; preds = %51
  %56 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %52) #8
  br label %511

57:                                               ; preds = %47, %3
  %58 = getelementptr inbounds i8, ptr %2, i64 12
  %59 = load i32, ptr %58, align 4, !tbaa !5
  switch i32 %59, label %343 [
    i32 114, label %60
    i32 113, label %60
    i32 115, label %60
    i32 126, label %.invoke253
    i32 200, label %65
    i32 128, label %.invoke252
    i32 130, label %66
    i32 132, label %67
    i32 135, label %68
    i32 134, label %69
    i32 137, label %70
    i32 139, label %71
    i32 194, label %72
    i32 195, label %73
    i32 196, label %74
    i32 197, label %75
    i32 198, label %76
    i32 199, label %77
    i32 166, label %78
    i32 167, label %79
    i32 168, label %80
    i32 164, label %83
    i32 165, label %84
    i32 170, label %85
    i32 171, label %86
    i32 176, label %87
    i32 177, label %88
    i32 178, label %89
    i32 179, label %90
    i32 172, label %91
    i32 173, label %92
    i32 174, label %93
    i32 175, label %94
    i32 138, label %97
    i32 169, label %122
    i32 79, label %146
    i32 81, label %251
    i32 82, label %259
  ]

60:                                               ; preds = %57, %57, %57
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %5, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %61 unwind label %63

61:                                               ; preds = %60
  %62 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #8
  br label %348

63:                                               ; preds = %60
  %64 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #8
  br label %511

65:                                               ; preds = %57
  br label %.invoke253

66:                                               ; preds = %57
  br label %.invoke252

67:                                               ; preds = %57
  br label %.invoke252

68:                                               ; preds = %57
  br label %.invoke252

69:                                               ; preds = %57
  br label %.invoke252

70:                                               ; preds = %57
  br label %.invoke252

71:                                               ; preds = %57
  br label %.invoke252

72:                                               ; preds = %57
  br label %.invoke252

73:                                               ; preds = %57
  br label %.invoke252

74:                                               ; preds = %57
  br label %.invoke252

75:                                               ; preds = %57
  br label %.invoke252

76:                                               ; preds = %57
  br label %.invoke252

77:                                               ; preds = %57
  br label %.invoke252

78:                                               ; preds = %57
  br label %.invoke252

79:                                               ; preds = %57
  br label %.invoke252

80:                                               ; preds = %57
  br label %.invoke253

.invoke253:                                       ; preds = %57, %65, %80
  %81 = phi ptr [ @.str.968, %80 ], [ @.str.956, %65 ], [ @.str.955, %57 ]
  %82 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull %81)
          to label %.thread unwind label %53

83:                                               ; preds = %57
  br label %.invoke252

84:                                               ; preds = %57
  br label %.invoke252

85:                                               ; preds = %57
  br label %.invoke252

86:                                               ; preds = %57
  br label %.invoke252

87:                                               ; preds = %57
  br label %.invoke252

88:                                               ; preds = %57
  br label %.invoke252

89:                                               ; preds = %57
  br label %.invoke252

90:                                               ; preds = %57
  br label %.invoke252

91:                                               ; preds = %57
  br label %.invoke252

92:                                               ; preds = %57
  br label %.invoke252

93:                                               ; preds = %57
  br label %.invoke252

94:                                               ; preds = %57
  br label %.invoke252

.invoke252:                                       ; preds = %57, %66, %67, %68, %69, %70, %71, %72, %73, %74, %75, %76, %77, %78, %79, %83, %84, %85, %86, %87, %88, %89, %90, %91, %92, %93, %94
  %95 = phi ptr [ @.str.974, %94 ], [ @.str.974, %93 ], [ @.str.973, %92 ], [ @.str.973, %91 ], [ @.str.972, %90 ], [ @.str.972, %89 ], [ @.str.971, %88 ], [ @.str.971, %87 ], [ @.str.970, %86 ], [ @.str.969, %85 ], [ @.str.970, %84 ], [ @.str.969, %83 ], [ @.str.967, %79 ], [ @.str.966, %78 ], [ @.str.965, %77 ], [ @.str.964, %76 ], [ @.str.963, %75 ], [ @.str.962, %74 ], [ @.str.961, %73 ], [ @.str.961, %72 ], [ @.str.960, %71 ], [ @.str.960, %70 ], [ @.str.959, %69 ], [ @.str.959, %68 ], [ @.str.958, %67 ], [ @.str.955, %66 ], [ @.str.957, %57 ]
  %96 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull %95)
          to label %.thread unwind label %53

97:                                               ; preds = %57
  %98 = getelementptr inbounds i8, ptr %2, i64 16
  %99 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %98, i64 noundef 0) #8
  %100 = load i32, ptr %99, align 4, !tbaa !19
  %101 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %98, i64 noundef 1) #8
  %102 = load i32, ptr %101, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %100, i1 noundef zeroext true)
          to label %103 unwind label %108

103:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %102, i1 noundef zeroext true)
          to label %104 unwind label %110

104:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %100, i1 noundef zeroext true)
          to label %105 unwind label %112

105:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %102, i1 noundef zeroext true)
          to label %106 unwind label %114

106:                                              ; preds = %105
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_RA2_S7_S6_S9_S6_SB_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(4) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %107 unwind label %116

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

108:                                              ; preds = %97
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %121

110:                                              ; preds = %103
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %120

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

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

116:                                              ; preds = %106
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  br label %118

118:                                              ; preds = %116, %114
  %.pn181 = phi { ptr, i32 } [ %117, %116 ], [ %115, %114 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  br label %119

119:                                              ; preds = %118, %112
  %.pn181.pn = phi { ptr, i32 } [ %.pn181, %118 ], [ %113, %112 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  br label %120

120:                                              ; preds = %119, %110
  %.pn181.pn.pn = phi { ptr, i32 } [ %.pn181.pn, %119 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  br label %121

121:                                              ; preds = %120, %108
  %.pn181.pn.pn.pn = phi { ptr, i32 } [ %.pn181.pn.pn, %120 ], [ %109, %108 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  br label %511

122:                                              ; preds = %57
  %123 = getelementptr inbounds i8, ptr %2, i64 16
  %124 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %123) #8
  %125 = icmp ult i64 %124, 3
  br i1 %125, label %126, label %130

126:                                              ; preds = %122
  %127 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %127, ptr noundef nonnull @.str.978)
          to label %.invoke unwind label %128

128:                                              ; preds = %126
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %127) #8
  br label %511

130:                                              ; preds = %122
  %131 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %123, i64 noundef 2) #8
  %132 = load i32, ptr %131, align 4, !tbaa !19
  %133 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %123, i64 noundef 1) #8
  %134 = load i32, ptr %133, align 4, !tbaa !19
  %135 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %123, i64 noundef 0) #8
  %136 = load i32, ptr %135, align 4, !tbaa !19
  %137 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL17to_trivial_mix_opERKNS_8SPIRTypeERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjjj(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %45, ptr noundef nonnull align 8 dereferenceable(32) %4, i32 noundef %132, i32 noundef %134, i32 noundef %136)
          to label %138 unwind label %53

138:                                              ; preds = %130
  br i1 %137, label %348, label %139

139:                                              ; preds = %138
  %140 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %123, i64 noundef 0) #8
  %141 = load i32, ptr %140, align 4, !tbaa !19
  %142 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %123, i64 noundef 1) #8
  %143 = load i32, ptr %142, align 4, !tbaa !19
  %144 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %123, i64 noundef 2) #8
  %145 = load i32, ptr %144, align 4, !tbaa !19
  invoke void @_ZN11spirv_cross12CompilerGLSL21to_ternary_expressionB5cxx11ERKNS_8SPIRTypeEjjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %45, i32 noundef %141, i32 noundef %143, i32 noundef %145)
          to label %510 unwind label %53

146:                                              ; preds = %57
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %147 unwind label %53

147:                                              ; preds = %146
  %148 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.718)
          to label %149 unwind label %168

149:                                              ; preds = %147
  %150 = getelementptr inbounds i8, ptr %2, i64 16
  %151 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %150, i64 noundef 0) #8
  %152 = load i32, ptr %151, align 4, !tbaa !19
  %153 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %152)
          to label %154 unwind label %170

154:                                              ; preds = %149
  %155 = getelementptr inbounds i8, ptr %153, i64 24
  %156 = load i32, ptr %155, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #8
  %157 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %150, i64 noundef 0) #8
  %158 = load i32, ptr %157, align 4, !tbaa !19
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %158, i1 noundef zeroext true)
          to label %159 unwind label %172

159:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #8
  %160 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %150, i64 noundef 1) #8
  %161 = load i32, ptr %160, align 4, !tbaa !19
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %161, i1 noundef zeroext true)
          to label %.preheader unwind label %174

.preheader:                                       ; preds = %159
  %162 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %150) #8
  %163 = trunc i64 %162 to i32
  %164 = icmp ugt i32 %163, 2
  br i1 %164, label %.lr.ph237, label %._crit_edge238

.lr.ph237:                                        ; preds = %.preheader
  %165 = getelementptr inbounds i8, ptr %45, i64 276
  %166 = getelementptr inbounds i8, ptr %12, i64 12
  br label %176

._crit_edge238:                                   ; preds = %240, %.preheader
  %167 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.135)
          to label %244 unwind label %245

168:                                              ; preds = %147
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %250

170:                                              ; preds = %149
  %171 = landingpad { ptr, i32 }
          cleanup
  br label %250

172:                                              ; preds = %154
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %249

174:                                              ; preds = %159
  %175 = landingpad { ptr, i32 }
          cleanup
  br label %248

176:                                              ; preds = %.lr.ph237, %240
  %indvars.iv = phi i64 [ 2, %.lr.ph237 ], [ %indvars.iv.next, %240 ]
  %177 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %150, i64 noundef %indvars.iv) #8
  %178 = load i32, ptr %177, align 4, !tbaa !19
  %179 = icmp eq i32 %178, -1
  br i1 %179, label %180, label %198

180:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 360, ptr nonnull %12) #8
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %12)
          to label %181 unwind label %186

181:                                              ; preds = %180
  %182 = load i32, ptr %165, align 4, !tbaa !19
  store i32 %182, ptr %166, align 4, !tbaa !19
  %183 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %165)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %13, i32 noundef 0)
  %184 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %13)
  %.not170 = icmp eq i32 %183, %184
  br i1 %.not170, label %185, label %188

185:                                              ; preds = %181
  call void @__assert_fail(ptr noundef nonnull @.str.979, ptr noundef nonnull @.str.11, i32 noundef 5735, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL22constant_op_expressionB5cxx11ERKNS_14SPIRConstantOpE) #9
  unreachable

186:                                              ; preds = %180
  %187 = landingpad { ptr, i32 }
          cleanup
  br label %197

188:                                              ; preds = %181
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %12, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %189 unwind label %192

189:                                              ; preds = %188
  %190 = 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) %14)
          to label %191 unwind label %194

191:                                              ; preds = %189
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %12) #8
  call void @llvm.lifetime.end.p0(i64 360, ptr nonnull %12) #8
  br label %232

192:                                              ; preds = %188
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %196

194:                                              ; preds = %189
  %195 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  br label %196

196:                                              ; preds = %194, %192
  %.pn171 = phi { ptr, i32 } [ %195, %194 ], [ %193, %192 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %12) #8
  br label %197

197:                                              ; preds = %196, %186
  %.pn171.pn = phi { ptr, i32 } [ %.pn171, %196 ], [ %187, %186 ]
  call void @llvm.lifetime.end.p0(i64 360, ptr nonnull %12) #8
  br label %247

198:                                              ; preds = %176
  %.not = icmp ult i32 %178, %156
  br i1 %.not, label %216, label %199

199:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.719)
          to label %200 unwind label %208

200:                                              ; preds = %199
  %201 = sub i32 %178, %156
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds [5 x i8], ptr @.str.980, i64 0, i64 %202
  %204 = load i8, ptr %203, align 1, !tbaa !40
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(32) %16, i8 noundef signext %204)
          to label %205 unwind label %210

205:                                              ; preds = %200
  %206 = 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) %15)
          to label %207 unwind label %212

207:                                              ; preds = %205
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #8
  br label %232

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

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

212:                                              ; preds = %205
  %213 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  br label %214

214:                                              ; preds = %212, %210
  %.pn167 = phi { ptr, i32 } [ %213, %212 ], [ %211, %210 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  br label %215

215:                                              ; preds = %214, %208
  %.pn167.pn = phi { ptr, i32 } [ %.pn167, %214 ], [ %209, %208 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #8
  br label %247

216:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #8
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.719)
          to label %217 unwind label %224

217:                                              ; preds = %216
  %218 = zext i32 %178 to i64
  %219 = getelementptr inbounds [5 x i8], ptr @.str.980, i64 0, i64 %218
  %220 = load i8, ptr %219, align 1, !tbaa !40
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(32) %18, i8 noundef signext %220)
          to label %221 unwind label %226

221:                                              ; preds = %217
  %222 = 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) %17)
          to label %223 unwind label %228

223:                                              ; preds = %221
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #8
  br label %232

224:                                              ; preds = %216
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %231

226:                                              ; preds = %217
  %227 = landingpad { ptr, i32 }
          cleanup
  br label %230

228:                                              ; preds = %221
  %229 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  br label %230

230:                                              ; preds = %228, %226
  %.pn164 = phi { ptr, i32 } [ %229, %228 ], [ %227, %226 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  br label %231

231:                                              ; preds = %230, %224
  %.pn164.pn = phi { ptr, i32 } [ %.pn164, %230 ], [ %225, %224 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #8
  br label %247

232:                                              ; preds = %207, %223, %191
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %233 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %150) #8
  %234 = and i64 %233, 4294967295
  %235 = icmp ult i64 %indvars.iv.next, %234
  br i1 %235, label %236, label %240

236:                                              ; preds = %232
  %237 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %240 unwind label %238

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

240:                                              ; preds = %236, %232
  %241 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %150) #8
  %242 = and i64 %241, 4294967295
  %243 = icmp ult i64 %indvars.iv.next, %242
  br i1 %243, label %176, label %._crit_edge238, !llvm.loop !41

244:                                              ; preds = %._crit_edge238
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %510

245:                                              ; preds = %._crit_edge238
  %246 = landingpad { ptr, i32 }
          cleanup
  br label %247

247:                                              ; preds = %197, %215, %231, %238, %245
  %.pn174.pn = phi { ptr, i32 } [ %246, %245 ], [ %239, %238 ], [ %.pn171.pn, %197 ], [ %.pn167.pn, %215 ], [ %.pn164.pn, %231 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  br label %248

248:                                              ; preds = %247, %174
  %.pn174.pn.pn = phi { ptr, i32 } [ %.pn174.pn, %247 ], [ %175, %174 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  br label %249

249:                                              ; preds = %248, %172
  %.pn174.pn.pn.pn = phi { ptr, i32 } [ %.pn174.pn.pn, %248 ], [ %173, %172 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %250

250:                                              ; preds = %170, %249, %168
  %.pn174.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %169, %168 ], [ %.pn174.pn.pn.pn, %249 ], [ %171, %170 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br label %511

251:                                              ; preds = %57
  %252 = getelementptr inbounds i8, ptr %2, i64 16
  %253 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %252, i64 noundef 0) #8
  %254 = load i32, ptr %253, align 4, !tbaa !19
  %255 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %252, i64 noundef 1) #8
  %256 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %252) #8
  %257 = trunc i64 %256 to i32
  %258 = add i32 %257, -1
  invoke void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %254, ptr noundef nonnull %255, i32 noundef %258, i32 noundef 1, ptr noundef null)
          to label %510 unwind label %53

259:                                              ; preds = %57
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %19) #8
  %260 = getelementptr inbounds i8, ptr %2, i64 16
  %261 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %260, i64 noundef 1) #8
  %262 = load i32, ptr %261, align 4, !tbaa !19
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef %262)
  %263 = load i32, ptr %20, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL26get_composite_constant_idsENS_7TypedIDILNS_5TypesE3EEE(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::SmallVector.310") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 %263)
          to label %264 unwind label %303

264:                                              ; preds = %259
  %265 = getelementptr inbounds i8, ptr %2, i64 8
  %266 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %265)
  %267 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %43)
  %268 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %260) #8
  %269 = add i64 %268, -4
  %270 = icmp ult i64 %269, -3
  br i1 %270, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %264
  %271 = getelementptr inbounds i8, ptr %1, i64 8
  br label %272

272:                                              ; preds = %.lr.ph, %296
  %273 = phi i64 [ 2, %.lr.ph ], [ %299, %296 ]
  %.0145233 = phi i32 [ %267, %.lr.ph ], [ %297, %296 ]
  %.0146232 = phi i32 [ %266, %.lr.ph ], [ %274, %296 ]
  %.0147231 = phi i32 [ 2, %.lr.ph ], [ %298, %296 ]
  %274 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %271, i32 noundef 1)
          to label %275 unwind label %307

275:                                              ; preds = %272
  %276 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %260, i64 noundef %273) #8
  %277 = load i32, ptr %276, align 4, !tbaa !19
  %278 = zext i32 %277 to i64
  %279 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %278) #8
  %280 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %279)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef %274)
  %281 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %260, i64 noundef %273) #8
  %282 = load i32, ptr %281, align 4, !tbaa !19
  %283 = zext i32 %282 to i64
  %284 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %283) #8
  %285 = load i32, ptr %21, align 4, !tbaa !19
  store i32 %285, ptr %284, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef %.0146232)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %23, i32 noundef %.0145233)
  %286 = load i32, ptr %22, align 4
  %287 = load i32, ptr %23, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL22set_composite_constantENS_7TypedIDILNS_5TypesE3EEENS1_ILS2_1EEERKNS_11SmallVectorIS3_Lm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 %286, i32 %287, ptr noundef nonnull align 8 dereferenceable(56) %19)
          to label %288 unwind label %309

288:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %24) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef %280)
  %289 = load i32, ptr %25, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL26get_composite_constant_idsENS_7TypedIDILNS_5TypesE3EEE(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::SmallVector.310") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 %289)
          to label %290 unwind label %311

290:                                              ; preds = %288
  %291 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(56) %19, ptr noundef nonnull align 8 dereferenceable(56) %24) #8
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %24) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %24) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %27, i32 noundef %.0145233)
  %292 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %260, i64 noundef %273) #8
  %293 = load i32, ptr %292, align 4, !tbaa !19
  %294 = load i32, ptr %27, align 4
  %295 = invoke i32 @_ZN11spirv_cross12CompilerGLSL25get_composite_member_typeENS_7TypedIDILNS_5TypesE1EEEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 %294, i32 noundef %293)
          to label %296 unwind label %313

296:                                              ; preds = %290
  store i32 %295, ptr %26, align 4
  %297 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %26)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  %298 = add i32 %.0147231, 1
  %299 = zext i32 %298 to i64
  %300 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %260) #8
  %301 = add i64 %300, -1
  %302 = icmp ugt i64 %301, %299
  br i1 %302, label %272, label %._crit_edge, !llvm.loop !43

303:                                              ; preds = %259
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %342

305:                                              ; preds = %._crit_edge
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %341

307:                                              ; preds = %272
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %341

309:                                              ; preds = %275
  %310 = landingpad { ptr, i32 }
          cleanup
  br label %341

311:                                              ; preds = %288
  %312 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %24) #8
  br label %341

313:                                              ; preds = %290
  %314 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  br label %341

._crit_edge:                                      ; preds = %296, %264
  %.0146.lcssa = phi i32 [ %266, %264 ], [ %274, %296 ]
  %.0145.lcssa = phi i32 [ %267, %264 ], [ %297, %296 ]
  %.lcssa = phi i64 [ 2, %264 ], [ %299, %296 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #8
  %315 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %260, i64 noundef 0) #8
  %316 = load i32, ptr %315, align 4, !tbaa !19
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef %316)
  %317 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %260, i64 noundef %.lcssa) #8
  %318 = load i32, ptr %317, align 4, !tbaa !19
  %319 = zext i32 %318 to i64
  %320 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %319) #8
  %321 = load i32, ptr %28, align 4, !tbaa !19
  store i32 %321, ptr %320, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE3EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %29, i32 noundef %.0146.lcssa)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %30, i32 noundef %.0145.lcssa)
  %322 = load i32, ptr %29, align 4
  %323 = load i32, ptr %30, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL22set_composite_constantENS_7TypedIDILNS_5TypesE3EEENS1_ILS2_1EEERKNS_11SmallVectorIS3_Lm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 %322, i32 %323, ptr noundef nonnull align 8 dereferenceable(56) %19)
          to label %324 unwind label %305

324:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 360, ptr nonnull %31) #8
  %325 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %43)
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ej(ptr noundef nonnull align 8 dereferenceable(360) %31, i32 noundef %325)
          to label %326 unwind label %333

326:                                              ; preds = %324
  %.sroa.0.0.copyload = load i32, ptr %43, align 8, !tbaa !19
  %327 = getelementptr inbounds i8, ptr %1, i64 9792
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #8
  %328 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %265)
  store i32 %328, ptr %32, align 4, !tbaa !19
  %329 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %327, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %330 unwind label %335

330:                                              ; preds = %326
  invoke void @_ZN11spirv_cross12CompilerGLSL23fill_composite_constantERNS_12SPIRConstantENS_7TypedIDILNS_5TypesE1EEERKNS_11SmallVectorINS3_ILS4_3EEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %31, i32 %.sroa.0.0.copyload, ptr noundef nonnull align 8 dereferenceable(56) %329)
          to label %331 unwind label %335

331:                                              ; preds = %330
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %31, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %332 unwind label %337

332:                                              ; preds = %331
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %31) #8
  call void @llvm.lifetime.end.p0(i64 360, ptr nonnull %31) #8
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %19) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %19) #8
  br label %510

333:                                              ; preds = %324
  %334 = landingpad { ptr, i32 }
          cleanup
  br label %340

335:                                              ; preds = %330, %326
  %336 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #8
  br label %339

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

339:                                              ; preds = %337, %335
  %.pn = phi { ptr, i32 } [ %338, %337 ], [ %336, %335 ]
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %31) #8
  br label %340

340:                                              ; preds = %339, %333
  %.pn.pn = phi { ptr, i32 } [ %.pn, %339 ], [ %334, %333 ]
  call void @llvm.lifetime.end.p0(i64 360, ptr nonnull %31) #8
  br label %341

341:                                              ; preds = %307, %313, %311, %309, %340, %305
  %.pn159.pn.pn = phi { ptr, i32 } [ %.pn.pn, %340 ], [ %306, %305 ], [ %308, %307 ], [ %314, %313 ], [ %312, %311 ], [ %310, %309 ]
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %19) #8
  br label %342

342:                                              ; preds = %341, %303
  %.pn159.pn.pn.pn = phi { ptr, i32 } [ %.pn159.pn.pn, %341 ], [ %304, %303 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %19) #8
  br label %511

343:                                              ; preds = %57
  %344 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %344, ptr noundef nonnull @.str.981)
          to label %.invoke unwind label %346

.invoke:                                          ; preds = %51, %343, %126
  %345 = phi ptr [ %127, %126 ], [ %344, %343 ], [ %52, %51 ]
  invoke void @__cxa_throw(ptr nonnull %345, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %.cont unwind label %53

.cont:                                            ; preds = %.invoke
  unreachable

346:                                              ; preds = %343
  %347 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %344) #8
  br label %511

348:                                              ; preds = %61, %138
  %349 = load i32, ptr %58, align 4, !tbaa !5
  %.off = add i32 %349, -113
  %switch = icmp ult i32 %.off, 2
  br i1 %switch, label %.thread, label %359

.thread:                                          ; preds = %.invoke253, %.invoke252, %348
  %.0218 = phi i1 [ false, %348 ], [ true, %.invoke252 ], [ false, %.invoke253 ]
  %.0107216 = phi i1 [ false, %348 ], [ false, %.invoke252 ], [ true, %.invoke253 ]
  %350 = getelementptr inbounds i8, ptr %2, i64 16
  %351 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %350, i64 noundef 0) #8
  %352 = load i32, ptr %351, align 4, !tbaa !19
  %353 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %352)
          to label %354 unwind label %357

354:                                              ; preds = %.thread
  %355 = getelementptr inbounds i8, ptr %353, i64 20
  %356 = load i32, ptr %355, align 4, !tbaa !44
  %.pre = load i32, ptr %58, align 4, !tbaa !5
  br label %359

357:                                              ; preds = %.thread
  %358 = landingpad { ptr, i32 }
          cleanup
  br label %511

359:                                              ; preds = %348, %354
  %360 = phi i32 [ %.pre, %354 ], [ %349, %348 ]
  %.0217 = phi i1 [ %.0218, %354 ], [ false, %348 ]
  %.0107215 = phi i1 [ %.0107216, %354 ], [ false, %348 ]
  %.0108 = phi i32 [ %356, %354 ], [ 0, %348 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #8
  %361 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %360)
  %362 = load i32, ptr %58, align 4, !tbaa !5
  switch i32 %362, label %374 [
    i32 170, label %365
    i32 171, label %365
    i32 177, label %368
    i32 179, label %368
    i32 173, label %368
    i32 175, label %368
    i32 139, label %368
    i32 135, label %368
    i32 195, label %368
    i32 114, label %368
    i32 126, label %368
    i32 176, label %371
    i32 178, label %371
    i32 172, label %371
    i32 174, label %371
    i32 137, label %371
    i32 134, label %371
    i32 194, label %371
    i32 113, label %371
  ]

363:                                              ; preds = %.invoke254, %371, %368, %365
  %364 = landingpad { ptr, i32 }
          cleanup
  br label %509

365:                                              ; preds = %359, %359
  %366 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %.0108)
          to label %367 unwind label %363

367:                                              ; preds = %365
  store i32 %366, ptr %33, align 4, !tbaa !45
  br label %377

368:                                              ; preds = %359, %359, %359, %359, %359, %359, %359, %359, %359
  %369 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %.0108)
          to label %370 unwind label %363

370:                                              ; preds = %368
  store i32 %369, ptr %33, align 4, !tbaa !45
  br label %377

371:                                              ; preds = %359, %359, %359, %359, %359, %359, %359, %359
  %372 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %.0108)
          to label %373 unwind label %363

373:                                              ; preds = %371
  store i32 %372, ptr %33, align 4, !tbaa !45
  br label %377

374:                                              ; preds = %359
  %375 = getelementptr inbounds i8, ptr %45, i64 16
  %376 = load i32, ptr %375, align 8, !tbaa !46
  store i32 %376, ptr %33, align 4, !tbaa !45
  br label %377

377:                                              ; preds = %374, %373, %370, %367
  %378 = phi i32 [ %376, %374 ], [ %372, %373 ], [ %369, %370 ], [ %366, %367 ]
  br i1 %.0217, label %379, label %424

379:                                              ; preds = %377
  %380 = getelementptr inbounds i8, ptr %2, i64 16
  %381 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %380) #8
  %382 = icmp ult i64 %381, 2
  br i1 %382, label %383, label %387

383:                                              ; preds = %379
  %384 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %384, ptr noundef nonnull @.str.978)
          to label %.invoke254 unwind label %385

385:                                              ; preds = %383
  %386 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %384) #8
  br label %509

387:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %36) #8
  %388 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %380, i64 noundef 0) #8
  %389 = load i32, ptr %388, align 4, !tbaa !19
  %390 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %380, i64 noundef 1) #8
  %391 = load i32, ptr %390, align 4, !tbaa !19
  invoke void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind nonnull writable sret(%"struct.spirv_cross::SPIRType") align 8 %36, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 4 dereferenceable(4) %33, i32 noundef %389, i32 noundef %391, i1 noundef zeroext %361)
          to label %392 unwind label %408

392:                                              ; preds = %387
  %393 = getelementptr inbounds i8, ptr %45, i64 16
  %394 = load i32, ptr %393, align 8, !tbaa !46
  %395 = load i32, ptr %33, align 4, !tbaa !45
  %.not197 = icmp eq i32 %394, %395
  %.not198 = icmp eq i32 %394, 2
  %or.cond = or i1 %.not198, %.not197
  br i1 %or.cond, label %420, label %396

396:                                              ; preds = %392
  %397 = getelementptr inbounds i8, ptr %36, i64 16
  store i32 %395, ptr %397, align 8, !tbaa !46
  %398 = load ptr, ptr %1, align 8, !tbaa !47
  %399 = getelementptr inbounds i8, ptr %398, i64 472
  %400 = load ptr, ptr %399, align 8
  invoke void %400(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %45, ptr noundef nonnull align 8 dereferenceable(336) %36)
          to label %401 unwind label %410

401:                                              ; preds = %396
  %402 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 40)
          to label %403 unwind label %412

403:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_SA_S7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %404 unwind label %414

404:                                              ; preds = %403
  %405 = 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) %37)
          to label %406 unwind label %416

406:                                              ; preds = %404
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  %407 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 41)
          to label %421 unwind label %412

408:                                              ; preds = %387
  %409 = landingpad { ptr, i32 }
          cleanup
  br label %423

410:                                              ; preds = %420, %396
  %411 = landingpad { ptr, i32 }
          cleanup
  br label %422

412:                                              ; preds = %406, %401
  %413 = landingpad { ptr, i32 }
          cleanup
  br label %419

414:                                              ; preds = %403
  %415 = landingpad { ptr, i32 }
          cleanup
  br label %418

416:                                              ; preds = %404
  %417 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %418

418:                                              ; preds = %416, %414
  %.pn199 = phi { ptr, i32 } [ %417, %416 ], [ %415, %414 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  br label %419

419:                                              ; preds = %418, %412
  %.pn201 = phi { ptr, i32 } [ %413, %412 ], [ %.pn199, %418 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br label %422

420:                                              ; preds = %392
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_SA_S3_SA_S3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %421 unwind label %410

421:                                              ; preds = %420, %406
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %36) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  br label %508

422:                                              ; preds = %419, %410
  %.pn201.pn = phi { ptr, i32 } [ %.pn201, %419 ], [ %411, %410 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %36) #8
  br label %423

423:                                              ; preds = %422, %408
  %.pn201.pn.pn = phi { ptr, i32 } [ %.pn201.pn, %422 ], [ %409, %408 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  br label %509

424:                                              ; preds = %377
  br i1 %.0107215, label %425, label %443

425:                                              ; preds = %424
  %426 = getelementptr inbounds i8, ptr %2, i64 16
  %427 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %426) #8
  %428 = icmp eq i64 %427, 0
  br i1 %428, label %429, label %433

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

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

433:                                              ; preds = %425
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #8
  %434 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %426, i64 noundef 0) #8
  %435 = load i32, ptr %434, align 4, !tbaa !19
  invoke void @_ZN11spirv_cross12CompilerGLSL12bitcast_glslB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %45, i32 noundef %435)
          to label %436 unwind label %438

436:                                              ; preds = %433
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_S3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %437 unwind label %440

437:                                              ; preds = %436
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  br label %508

438:                                              ; preds = %433
  %439 = landingpad { ptr, i32 }
          cleanup
  br label %442

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

442:                                              ; preds = %440, %438
  %.pn195 = phi { ptr, i32 } [ %441, %440 ], [ %439, %438 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  br label %509

443:                                              ; preds = %424
  %444 = load i32, ptr %58, align 4, !tbaa !5
  %.off210 = add i32 %444, -113
  %switch211 = icmp ult i32 %.off210, 2
  %445 = getelementptr inbounds i8, ptr %2, i64 16
  %446 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %445) #8
  %447 = icmp eq i64 %446, 0
  br i1 %switch211, label %448, label %492

448:                                              ; preds = %443
  br i1 %447, label %449, label %453

449:                                              ; preds = %448
  %450 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %450, ptr noundef nonnull @.str.978)
          to label %.invoke254 unwind label %451

451:                                              ; preds = %449
  %452 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %450) #8
  br label %509

453:                                              ; preds = %448
  %454 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %445, i64 noundef 0) #8
  %455 = load i32, ptr %454, align 4, !tbaa !19
  %456 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %455)
          to label %457 unwind label %472

457:                                              ; preds = %453
  %458 = getelementptr inbounds i8, ptr %456, i64 20
  %459 = load i32, ptr %458, align 4, !tbaa !44
  %460 = getelementptr inbounds i8, ptr %45, i64 20
  %461 = load i32, ptr %460, align 4, !tbaa !44
  %462 = icmp uge i32 %459, %461
  %463 = getelementptr inbounds i8, ptr %456, i64 16
  %464 = load i32, ptr %463, align 8
  %.not188 = icmp eq i32 %378, %464
  %or.cond257 = select i1 %462, i1 true, i1 %.not188
  br i1 %or.cond257, label %482, label %465

465:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %39) #8
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %39, ptr noundef nonnull align 8 dereferenceable(336) %456)
          to label %466 unwind label %474

466:                                              ; preds = %465
  %467 = getelementptr inbounds i8, ptr %39, i64 16
  store i32 %378, ptr %467, align 8, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #8
  %468 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %445, i64 noundef 0) #8
  %469 = load i32, ptr %468, align 4, !tbaa !19
  invoke void @_ZN11spirv_cross12CompilerGLSL12bitcast_glslB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %39, i32 noundef %469)
          to label %470 unwind label %476

470:                                              ; preds = %466
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %471 unwind label %478

471:                                              ; preds = %470
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %39) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %39) #8
  br label %508

472:                                              ; preds = %453
  %473 = landingpad { ptr, i32 }
          cleanup
  br label %509

474:                                              ; preds = %465
  %475 = landingpad { ptr, i32 }
          cleanup
  br label %481

476:                                              ; preds = %466
  %477 = landingpad { ptr, i32 }
          cleanup
  br label %480

478:                                              ; preds = %470
  %479 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  br label %480

480:                                              ; preds = %478, %476
  %.pn191 = phi { ptr, i32 } [ %479, %478 ], [ %477, %476 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %39) #8
  br label %481

481:                                              ; preds = %480, %474
  %.pn191.pn = phi { ptr, i32 } [ %.pn191, %480 ], [ %475, %474 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %39) #8
  br label %509

482:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #8
  %483 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %445, i64 noundef 0) #8
  %484 = load i32, ptr %483, align 4, !tbaa !19
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %484, i1 noundef zeroext true)
          to label %485 unwind label %487

485:                                              ; preds = %482
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %486 unwind label %489

486:                                              ; preds = %485
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #8
  br label %508

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

489:                                              ; preds = %485
  %490 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  br label %491

491:                                              ; preds = %489, %487
  %.pn189 = phi { ptr, i32 } [ %490, %489 ], [ %488, %487 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #8
  br label %509

492:                                              ; preds = %443
  br i1 %447, label %493, label %498

493:                                              ; preds = %492
  %494 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %494, ptr noundef nonnull @.str.978)
          to label %.invoke254 unwind label %496

.invoke254:                                       ; preds = %493, %449, %429, %383
  %495 = phi ptr [ %384, %383 ], [ %430, %429 ], [ %450, %449 ], [ %494, %493 ]
  invoke void @__cxa_throw(ptr nonnull %495, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %.cont255 unwind label %363

.cont255:                                         ; preds = %.invoke254
  unreachable

496:                                              ; preds = %493
  %497 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %494) #8
  br label %509

498:                                              ; preds = %492
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #8
  %499 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %445, i64 noundef 0) #8
  %500 = load i32, ptr %499, align 4, !tbaa !19
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %500, i1 noundef zeroext true)
          to label %501 unwind label %503

501:                                              ; preds = %498
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %502 unwind label %505

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

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

505:                                              ; preds = %501
  %506 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  br label %507

507:                                              ; preds = %505, %503
  %.pn186 = phi { ptr, i32 } [ %506, %505 ], [ %504, %503 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  br label %509

508:                                              ; preds = %471, %486, %502, %437, %421
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #8
  br label %510

509:                                              ; preds = %472, %481, %491, %507, %496, %451, %442, %431, %423, %385, %363
  %.pn205 = phi { ptr, i32 } [ %364, %363 ], [ %386, %385 ], [ %.pn201.pn.pn, %423 ], [ %432, %431 ], [ %.pn195, %442 ], [ %452, %451 ], [ %497, %496 ], [ %.pn186, %507 ], [ %.pn191.pn, %481 ], [ %.pn189, %491 ], [ %473, %472 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #8
  br label %511

510:                                              ; preds = %251, %139, %244, %508, %332, %107
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #8
  ret void

511:                                              ; preds = %357, %509, %346, %342, %250, %128, %121, %63, %55, %53
  %.pn208 = phi { ptr, i32 } [ %54, %53 ], [ %56, %55 ], [ %347, %346 ], [ %.pn159.pn.pn.pn, %342 ], [ %.pn174.pn.pn.pn.pn.pn, %250 ], [ %129, %128 ], [ %.pn181.pn.pn.pn, %121 ], [ %64, %63 ], [ %.pn205, %509 ], [ %358, %357 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #8
  resume { ptr, i32 } %.pn208
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL18is_unsigned_opcodeN3spv2OpE(i32 noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind noalias writable sret(%"struct.spirv_cross::SPIRType") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #2 align 2

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { 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, !12, i64 12}
!6 = !{!"_ZTSN11spirv_cross14SPIRConstantOpE", !7, i64 0, !12, i64 12, !13, i64 16, !18, i64 72}
!7 = !{!"_ZTSN11spirv_cross8IVariantE", !8, i64 8}
!8 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSN3spv2OpE", !10, i64 0}
!13 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !14, i64 0, !16, i64 16, !17, i64 24}
!14 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !15, i64 0, !16, i64 8}
!15 = !{!"any pointer", !10, i64 0}
!16 = !{!"long", !10, i64 0}
!17 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !10, i64 0}
!18 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !9, i64 0}
!19 = !{!9, !9, i64 0}
!20 = !{!21, !9, i64 24}
!21 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !7, i64 0, !12, i64 12, !22, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !13, i64 32, !23, i64 88, !9, i64 120, !26, i64 124, !26, i64 125, !27, i64 128, !28, i64 136, !13, i64 192, !31, i64 248, !18, i64 272, !18, i64 276, !35, i64 280}
!22 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !10, i64 0}
!23 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !24, i64 0, !16, i64 16, !25, i64 24}
!24 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !15, i64 0, !16, i64 8}
!25 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !10, i64 0}
!26 = !{!"bool", !10, i64 0}
!27 = !{!"_ZTSN3spv12StorageClassE", !10, i64 0}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !29, i64 0, !16, i64 16, !30, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !15, i64 0, !16, i64 8}
!30 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !10, i64 0}
!31 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !18, i64 0, !32, i64 4, !26, i64 8, !26, i64 9, !26, i64 10, !9, i64 12, !33, i64 16, !34, i64 20}
!32 = !{!"_ZTSN3spv3DimE", !10, i64 0}
!33 = !{!"_ZTSN3spv11ImageFormatE", !10, i64 0}
!34 = !{!"_ZTSN3spv15AccessQualifierE", !10, i64 0}
!35 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !36, i64 0}
!36 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !15, i64 0, !16, i64 8, !37, i64 16, !16, i64 24, !38, i64 32, !15, i64 48}
!37 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !15, i64 0}
!38 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !39, i64 0, !16, i64 8}
!39 = !{!"float", !10, i64 0}
!40 = !{!10, !10, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = distinct !{!43, !42}
!44 = !{!21, !9, i64 20}
!45 = !{!22, !22, i64 0}
!46 = !{!21, !22, i64 16}
!47 = !{!48, !48, i64 0}
!48 = !{!"vtable pointer", !11, i64 0}


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