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

@_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.185 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.551 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.672 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1002 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1003 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1010 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.1011 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1012 = external hidden unnamed_addr constant [38 x i8], align 1

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare 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)) #3 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL22convert_half_to_stringB5cxx11ERKNS_12SPIRConstantEjj(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), i32 noundef, i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL23convert_float_to_stringB5cxx11ERKNS_12SPIRConstantEjj(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), i32 noundef, i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24convert_double_to_stringB5cxx11ERKNS_12SPIRConstantEjj(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), i32 noundef, i32 noundef) #1 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL26constant_expression_vectorB5cxx11ERKNS_12SPIRConstantEj(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(360) %2, i32 noundef %3) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"struct.spirv_cross::SPIRType", align 8
  %10 = alloca %"struct.spirv_cross::SPIRType", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i1, align 1
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca i32, align 4
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca i32, align 4
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca i32, align 4
  %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 i32, align 4
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca i64, align 8
  %47 = alloca i32, align 4
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca i64, align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca i32, align 4
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca i1, align 1
  %55 = alloca %"class.std::allocator.71", align 1
  %56 = alloca i1, align 1
  %57 = alloca i1, align 1
  %58 = alloca i1, align 1
  %59 = alloca i32, align 4
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca i32, align 4
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca i1, align 1
  %65 = alloca %"class.std::allocator.71", align 1
  %66 = alloca i1, align 1
  %67 = alloca i1, align 1
  %68 = alloca i1, align 1
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca i32, align 4
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca i16, align 2
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca i16, align 2
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca i16, align 2
  %84 = alloca i32, align 4
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca i16, align 2
  %88 = alloca %"class.std::__cxx11::basic_string", align 8
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca i16, align 2
  %91 = alloca %"class.std::__cxx11::basic_string", align 8
  %92 = alloca i8, align 1
  %93 = alloca i32, align 4
  %94 = alloca %"class.std::__cxx11::basic_string", align 8
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca %"class.std::__cxx11::basic_string", align 8
  %97 = alloca i8, align 1
  %98 = alloca %"class.std::__cxx11::basic_string", align 8
  %99 = alloca i8, align 1
  %100 = alloca i32, align 4
  %101 = alloca %"class.std::__cxx11::basic_string", align 8
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca %"class.std::__cxx11::basic_string", align 8
  %104 = alloca i8, align 1
  %105 = alloca i32, align 4
  %106 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %5, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i32 %3, ptr %8, align 4, !tbaa !9
  %107 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 336, ptr %9) #6
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %108, i32 0, i32 1
  %110 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %109)
  %111 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %107, i32 noundef %110)
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %9, ptr noundef nonnull align 8 dereferenceable(336) %111)
  %112 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %9, i32 0, i32 5
  store i32 1, ptr %112, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 336, ptr %10) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %10, ptr noundef nonnull align 8 dereferenceable(336) %9)
          to label %113 unwind label %142

113:                                              ; preds = %4
  %114 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %10, i32 0, i32 4
  store i32 1, ptr %114, align 8, !tbaa !39
  store i1 false, ptr %13, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #6
  %115 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %116 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %115, i32 0, i32 28
  %117 = load i8, ptr %116, align 1, !tbaa !40, !range !135, !noundef !136
  %118 = trunc i8 %117 to i1
  br i1 %118, label %119, label %124

119:                                              ; preds = %113
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  %121 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %120)
          to label %122 unwind label %146

122:                                              ; preds = %119
  %123 = icmp ugt i32 %121, 1
  br label %124

124:                                              ; preds = %122, %113
  %125 = phi i1 [ false, %113 ], [ %123, %122 ]
  %126 = zext i1 %125 to i8
  store i8 %126, ptr %14, align 1, !tbaa !137
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #6
  %127 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %128 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %127, i32 0, i32 30
  %129 = load i8, ptr %128, align 1, !tbaa !138, !range !135, !noundef !136
  %130 = trunc i8 %129 to i1
  br i1 %130, label %131, label %136

131:                                              ; preds = %124
  %132 = load ptr, ptr %7, align 8, !tbaa !5
  %133 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %132)
          to label %134 unwind label %150

134:                                              ; preds = %131
  %135 = icmp ugt i32 %133, 1
  br label %136

136:                                              ; preds = %134, %124
  %137 = phi i1 [ false, %124 ], [ %135, %134 ]
  %138 = zext i1 %137 to i8
  store i8 %138, ptr %15, align 1, !tbaa !137
  %139 = invoke noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %9)
          to label %140 unwind label %150

140:                                              ; preds = %136
  br i1 %139, label %154, label %141

141:                                              ; preds = %140
  store i8 0, ptr %15, align 1, !tbaa !137
  br label %154

142:                                              ; preds = %4
  %143 = landingpad { ptr, i32 }
          cleanup
  %144 = extractvalue { ptr, i32 } %143, 0
  store ptr %144, ptr %11, align 8
  %145 = extractvalue { ptr, i32 } %143, 1
  store i32 %145, ptr %12, align 4
  br label %1837

146:                                              ; preds = %119
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %11, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %12, align 4
  br label %1834

150:                                              ; preds = %1828, %1820, %1815, %1737, %1733, %960, %919, %911, %889, %787, %775, %268, %136, %131
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %11, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %12, align 4
  br label %1833

154:                                              ; preds = %141, %140
  %155 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %156 = trunc i8 %155 to i1
  br i1 %156, label %160, label %157

157:                                              ; preds = %154
  %158 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %159 = trunc i8 %158 to i1
  br i1 %159, label %160, label %186

160:                                              ; preds = %157, %154
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %161

161:                                              ; preds = %181, %160
  %162 = load i32, ptr %16, align 4, !tbaa !9
  %163 = load ptr, ptr %7, align 8, !tbaa !5
  %164 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %163)
          to label %165 unwind label %168

165:                                              ; preds = %161
  %166 = icmp ult i32 %162, %164
  br i1 %166, label %172, label %167

167:                                              ; preds = %165
  store i32 2, ptr %17, align 4
  br label %184

168:                                              ; preds = %172, %161
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %11, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %1833

172:                                              ; preds = %165
  %173 = load ptr, ptr %7, align 8, !tbaa !5
  %174 = load i32, ptr %8, align 4, !tbaa !9
  %175 = load i32, ptr %16, align 4, !tbaa !9
  %176 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %173, i32 noundef %174, i32 noundef %175)
          to label %177 unwind label %168

177:                                              ; preds = %172
  %178 = icmp ne i32 %176, 0
  br i1 %178, label %179, label %180

179:                                              ; preds = %177
  store i8 0, ptr %14, align 1, !tbaa !137
  store i8 0, ptr %15, align 1, !tbaa !137
  store i32 2, ptr %17, align 4
  br label %184

180:                                              ; preds = %177
  br label %181

181:                                              ; preds = %180
  %182 = load i32, ptr %16, align 4, !tbaa !9
  %183 = add i32 %182, 1
  store i32 %183, ptr %16, align 4, !tbaa !9
  br label %161, !llvm.loop !139

184:                                              ; preds = %179, %167
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %185

185:                                              ; preds = %184
  br label %186

186:                                              ; preds = %185, %157
  %187 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %188 = trunc i8 %187 to i1
  br i1 %188, label %192, label %189

189:                                              ; preds = %186
  %190 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %191 = trunc i8 %190 to i1
  br i1 %191, label %192, label %268

192:                                              ; preds = %189, %186
  %193 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %9, i32 0, i32 3
  %194 = load i32, ptr %193, align 4, !tbaa !141
  %195 = icmp eq i32 %194, 64
  br i1 %195, label %196, label %232

196:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = load i32, ptr %8, align 4, !tbaa !9
  %199 = invoke noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_u64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %197, i32 noundef %198, i32 noundef 0)
          to label %200 unwind label %208

200:                                              ; preds = %196
  store i64 %199, ptr %18, align 8, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 1, ptr %19, align 4, !tbaa !9
  br label %201

201:                                              ; preds = %226, %200
  %202 = load i32, ptr %19, align 4, !tbaa !9
  %203 = load ptr, ptr %7, align 8, !tbaa !5
  %204 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %203)
          to label %205 unwind label %212

205:                                              ; preds = %201
  %206 = icmp ult i32 %202, %204
  br i1 %206, label %216, label %207

207:                                              ; preds = %205
  store i32 5, ptr %17, align 4
  br label %229

208:                                              ; preds = %196
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %11, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %12, align 4
  br label %231

212:                                              ; preds = %216, %201
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %11, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %231

216:                                              ; preds = %205
  %217 = load i64, ptr %18, align 8, !tbaa !142
  %218 = load ptr, ptr %7, align 8, !tbaa !5
  %219 = load i32, ptr %8, align 4, !tbaa !9
  %220 = load i32, ptr %19, align 4, !tbaa !9
  %221 = invoke noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_u64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %218, i32 noundef %219, i32 noundef %220)
          to label %222 unwind label %212

222:                                              ; preds = %216
  %223 = icmp ne i64 %217, %221
  br i1 %223, label %224, label %225

224:                                              ; preds = %222
  store i8 0, ptr %14, align 1, !tbaa !137
  store i8 0, ptr %15, align 1, !tbaa !137
  store i32 5, ptr %17, align 4
  br label %229

225:                                              ; preds = %222
  br label %226

226:                                              ; preds = %225
  %227 = load i32, ptr %19, align 4, !tbaa !9
  %228 = add i32 %227, 1
  store i32 %228, ptr %19, align 4, !tbaa !9
  br label %201, !llvm.loop !143

229:                                              ; preds = %224, %207
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %230

230:                                              ; preds = %229
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %267

231:                                              ; preds = %212, %208
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %1833

232:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %233 = load ptr, ptr %7, align 8, !tbaa !5
  %234 = load i32, ptr %8, align 4, !tbaa !9
  %235 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %233, i32 noundef %234, i32 noundef 0)
          to label %236 unwind label %244

236:                                              ; preds = %232
  store i32 %235, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %237

237:                                              ; preds = %262, %236
  %238 = load i32, ptr %21, align 4, !tbaa !9
  %239 = load ptr, ptr %7, align 8, !tbaa !5
  %240 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %239)
          to label %241 unwind label %248

241:                                              ; preds = %237
  %242 = icmp ult i32 %238, %240
  br i1 %242, label %252, label %243

243:                                              ; preds = %241
  store i32 8, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  br label %265

244:                                              ; preds = %232
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %11, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %12, align 4
  br label %266

248:                                              ; preds = %252, %237
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %11, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  br label %266

252:                                              ; preds = %241
  %253 = load i32, ptr %20, align 4, !tbaa !9
  %254 = load ptr, ptr %7, align 8, !tbaa !5
  %255 = load i32, ptr %8, align 4, !tbaa !9
  %256 = load i32, ptr %21, align 4, !tbaa !9
  %257 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %254, i32 noundef %255, i32 noundef %256)
          to label %258 unwind label %248

258:                                              ; preds = %252
  %259 = icmp ne i32 %253, %257
  br i1 %259, label %260, label %261

260:                                              ; preds = %258
  store i8 0, ptr %14, align 1, !tbaa !137
  store i8 0, ptr %15, align 1, !tbaa !137
  br label %261

261:                                              ; preds = %260, %258
  br label %262

262:                                              ; preds = %261
  %263 = load i32, ptr %21, align 4, !tbaa !9
  %264 = add i32 %263, 1
  store i32 %264, ptr %21, align 4, !tbaa !9
  br label %237, !llvm.loop !144

265:                                              ; preds = %243
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %267

266:                                              ; preds = %248, %244
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %1833

267:                                              ; preds = %265, %230
  br label %268

268:                                              ; preds = %267, %189
  %269 = load ptr, ptr %7, align 8, !tbaa !5
  %270 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %269)
          to label %271 unwind label %150

271:                                              ; preds = %268
  %272 = icmp ugt i32 %270, 1
  br i1 %272, label %273, label %298

273:                                              ; preds = %271
  %274 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %275 = trunc i8 %274 to i1
  br i1 %275, label %298, label %276

276:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #6
  %277 = load ptr, ptr %107, align 8, !tbaa !145
  %278 = getelementptr inbounds ptr, ptr %277, i64 19
  %279 = load ptr, ptr %278, align 8
  invoke void %279(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %9, i32 noundef 0)
          to label %280 unwind label %284

280:                                              ; preds = %276
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef @.str.718)
          to label %281 unwind label %288

281:                                              ; preds = %280
  %282 = 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) %22)
          to label %283 unwind label %292

283:                                              ; preds = %281
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  br label %298

284:                                              ; preds = %276
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %11, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %12, align 4
  br label %297

288:                                              ; preds = %280
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %11, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %12, align 4
  br label %296

292:                                              ; preds = %281
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %11, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  br label %296

296:                                              ; preds = %292, %288
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  br label %297

297:                                              ; preds = %296, %284
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  br label %1833

298:                                              ; preds = %283, %273, %271
  %299 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %9, i32 0, i32 2
  %300 = load i32, ptr %299, align 8, !tbaa !147
  switch i32 %300, label %1813 [
    i32 12, label %301
    i32 13, label %413
    i32 14, label %525
    i32 9, label %637
    i32 10, label %760
    i32 8, label %879
    i32 7, label %1109
    i32 6, label %1206
    i32 5, label %1352
    i32 4, label %1498
    i32 3, label %1614
    i32 2, label %1730
  ]

301:                                              ; preds = %298
  %302 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %303 = trunc i8 %302 to i1
  br i1 %303, label %307, label %304

304:                                              ; preds = %301
  %305 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %306 = trunc i8 %305 to i1
  br i1 %306, label %307, label %338

307:                                              ; preds = %304, %301
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #6
  %308 = load ptr, ptr %7, align 8, !tbaa !5
  %309 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22convert_half_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(360) %308, i32 noundef %309, i32 noundef 0)
          to label %310 unwind label %324

310:                                              ; preds = %307
  %311 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %312 unwind label %328

312:                                              ; preds = %310
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  %313 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %314 = trunc i8 %313 to i1
  br i1 %314, label %315, label %337

315:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #6
  %316 = load ptr, ptr %7, align 8, !tbaa !5
  %317 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %316, i32 0, i32 1
  %318 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %317)
          to label %319 unwind label %333

319:                                              ; preds = %315
  %320 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %107, i32 noundef %318)
          to label %321 unwind label %333

321:                                              ; preds = %319
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %320, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %322 unwind label %333

322:                                              ; preds = %321
  %323 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  br label %337

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

328:                                              ; preds = %310
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %11, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  br label %332

332:                                              ; preds = %328, %324
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  br label %1833

333:                                              ; preds = %321, %319, %315
  %334 = landingpad { ptr, i32 }
          cleanup
  %335 = extractvalue { ptr, i32 } %334, 0
  store ptr %335, ptr %11, align 8
  %336 = extractvalue { ptr, i32 } %334, 1
  store i32 %336, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  br label %1833

337:                                              ; preds = %322, %312
  br label %412

338:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %339

339:                                              ; preds = %407, %338
  %340 = load i32, ptr %26, align 4, !tbaa !9
  %341 = load ptr, ptr %7, align 8, !tbaa !5
  %342 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %341)
          to label %343 unwind label %346

343:                                              ; preds = %339
  %344 = icmp ult i32 %340, %342
  br i1 %344, label %350, label %345

345:                                              ; preds = %343
  store i32 12, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %411

346:                                              ; preds = %403, %396, %355, %350, %339
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %11, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %12, align 4
  br label %410

350:                                              ; preds = %343
  %351 = load ptr, ptr %7, align 8, !tbaa !5
  %352 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %351)
          to label %353 unwind label %346

353:                                              ; preds = %350
  %354 = icmp ugt i32 %352, 1
  br i1 %354, label %355, label %380

355:                                              ; preds = %353
  %356 = load ptr, ptr %7, align 8, !tbaa !5
  %357 = load i32, ptr %8, align 4, !tbaa !9
  %358 = load i32, ptr %26, align 4, !tbaa !9
  %359 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %356, i32 noundef %357, i32 noundef %358)
          to label %360 unwind label %346

360:                                              ; preds = %355
  %361 = icmp ne i32 %359, 0
  br i1 %361, label %362, label %380

362:                                              ; preds = %360
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #6
  %363 = load ptr, ptr %7, align 8, !tbaa !5
  %364 = load i32, ptr %8, align 4, !tbaa !9
  %365 = load i32, ptr %26, align 4, !tbaa !9
  %366 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %363, i32 noundef %364, i32 noundef %365)
          to label %367 unwind label %371

367:                                              ; preds = %362
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %366, i1 noundef zeroext true)
          to label %368 unwind label %371

368:                                              ; preds = %367
  %369 = 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) %27)
          to label %370 unwind label %375

370:                                              ; preds = %368
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #6
  br label %396

371:                                              ; preds = %367, %362
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %11, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %12, align 4
  br label %379

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

379:                                              ; preds = %375, %371
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #6
  br label %410

380:                                              ; preds = %360, %353
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #6
  %381 = load ptr, ptr %7, align 8, !tbaa !5
  %382 = load i32, ptr %8, align 4, !tbaa !9
  %383 = load i32, ptr %26, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22convert_half_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(360) %381, i32 noundef %382, i32 noundef %383)
          to label %384 unwind label %387

384:                                              ; preds = %380
  %385 = 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) %28)
          to label %386 unwind label %391

386:                                              ; preds = %384
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  br label %396

387:                                              ; preds = %380
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %11, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %12, align 4
  br label %395

391:                                              ; preds = %384
  %392 = landingpad { ptr, i32 }
          cleanup
  %393 = extractvalue { ptr, i32 } %392, 0
  store ptr %393, ptr %11, align 8
  %394 = extractvalue { ptr, i32 } %392, 1
  store i32 %394, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %395

395:                                              ; preds = %391, %387
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  br label %410

396:                                              ; preds = %386, %370
  %397 = load i32, ptr %26, align 4, !tbaa !9
  %398 = add i32 %397, 1
  %399 = load ptr, ptr %7, align 8, !tbaa !5
  %400 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %399)
          to label %401 unwind label %346

401:                                              ; preds = %396
  %402 = icmp ult i32 %398, %400
  br i1 %402, label %403, label %406

403:                                              ; preds = %401
  %404 = 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 %405 unwind label %346

405:                                              ; preds = %403
  br label %406

406:                                              ; preds = %405, %401
  br label %407

407:                                              ; preds = %406
  %408 = load i32, ptr %26, align 4, !tbaa !9
  %409 = add i32 %408, 1
  store i32 %409, ptr %26, align 4, !tbaa !9
  br label %339, !llvm.loop !148

410:                                              ; preds = %395, %379, %346
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %1833

411:                                              ; preds = %345
  br label %412

412:                                              ; preds = %411, %337
  br label %1820

413:                                              ; preds = %298
  %414 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %415 = trunc i8 %414 to i1
  br i1 %415, label %419, label %416

416:                                              ; preds = %413
  %417 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %418 = trunc i8 %417 to i1
  br i1 %418, label %419, label %450

419:                                              ; preds = %416, %413
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #6
  %420 = load ptr, ptr %7, align 8, !tbaa !5
  %421 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL23convert_float_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(360) %420, i32 noundef %421, i32 noundef 0)
          to label %422 unwind label %436

422:                                              ; preds = %419
  %423 = 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 %424 unwind label %440

424:                                              ; preds = %422
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #6
  %425 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %426 = trunc i8 %425 to i1
  br i1 %426, label %427, label %449

427:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #6
  %428 = load ptr, ptr %7, align 8, !tbaa !5
  %429 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %428, i32 0, i32 1
  %430 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %429)
          to label %431 unwind label %445

431:                                              ; preds = %427
  %432 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %107, i32 noundef %430)
          to label %433 unwind label %445

433:                                              ; preds = %431
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %432, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %434 unwind label %445

434:                                              ; preds = %433
  %435 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #6
  br label %449

436:                                              ; preds = %419
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %11, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %12, align 4
  br label %444

440:                                              ; preds = %422
  %441 = landingpad { ptr, i32 }
          cleanup
  %442 = extractvalue { ptr, i32 } %441, 0
  store ptr %442, ptr %11, align 8
  %443 = extractvalue { ptr, i32 } %441, 1
  store i32 %443, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  br label %444

444:                                              ; preds = %440, %436
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #6
  br label %1833

445:                                              ; preds = %433, %431, %427
  %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
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #6
  br label %1833

449:                                              ; preds = %434, %424
  br label %524

450:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %451

451:                                              ; preds = %519, %450
  %452 = load i32, ptr %31, align 4, !tbaa !9
  %453 = load ptr, ptr %7, align 8, !tbaa !5
  %454 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %453)
          to label %455 unwind label %458

455:                                              ; preds = %451
  %456 = icmp ult i32 %452, %454
  br i1 %456, label %462, label %457

457:                                              ; preds = %455
  store i32 15, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %523

458:                                              ; preds = %515, %508, %467, %462, %451
  %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 %522

462:                                              ; preds = %455
  %463 = load ptr, ptr %7, align 8, !tbaa !5
  %464 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %463)
          to label %465 unwind label %458

465:                                              ; preds = %462
  %466 = icmp ugt i32 %464, 1
  br i1 %466, label %467, label %492

467:                                              ; preds = %465
  %468 = load ptr, ptr %7, align 8, !tbaa !5
  %469 = load i32, ptr %8, align 4, !tbaa !9
  %470 = load i32, ptr %31, align 4, !tbaa !9
  %471 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %468, i32 noundef %469, i32 noundef %470)
          to label %472 unwind label %458

472:                                              ; preds = %467
  %473 = icmp ne i32 %471, 0
  br i1 %473, label %474, label %492

474:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #6
  %475 = load ptr, ptr %7, align 8, !tbaa !5
  %476 = load i32, ptr %8, align 4, !tbaa !9
  %477 = load i32, ptr %31, align 4, !tbaa !9
  %478 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %475, i32 noundef %476, i32 noundef %477)
          to label %479 unwind label %483

479:                                              ; preds = %474
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %478, i1 noundef zeroext true)
          to label %480 unwind label %483

480:                                              ; preds = %479
  %481 = 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 %482 unwind label %487

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

483:                                              ; preds = %479, %474
  %484 = landingpad { ptr, i32 }
          cleanup
  %485 = extractvalue { ptr, i32 } %484, 0
  store ptr %485, ptr %11, align 8
  %486 = extractvalue { ptr, i32 } %484, 1
  store i32 %486, ptr %12, align 4
  br label %491

487:                                              ; preds = %480
  %488 = landingpad { ptr, i32 }
          cleanup
  %489 = extractvalue { ptr, i32 } %488, 0
  store ptr %489, ptr %11, align 8
  %490 = extractvalue { ptr, i32 } %488, 1
  store i32 %490, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #6
  br label %491

491:                                              ; preds = %487, %483
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #6
  br label %522

492:                                              ; preds = %472, %465
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #6
  %493 = load ptr, ptr %7, align 8, !tbaa !5
  %494 = load i32, ptr %8, align 4, !tbaa !9
  %495 = load i32, ptr %31, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL23convert_float_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(360) %493, i32 noundef %494, i32 noundef %495)
          to label %496 unwind label %499

496:                                              ; preds = %492
  %497 = 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) %33)
          to label %498 unwind label %503

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

499:                                              ; preds = %492
  %500 = landingpad { ptr, i32 }
          cleanup
  %501 = extractvalue { ptr, i32 } %500, 0
  store ptr %501, ptr %11, align 8
  %502 = extractvalue { ptr, i32 } %500, 1
  store i32 %502, ptr %12, align 4
  br label %507

503:                                              ; preds = %496
  %504 = landingpad { ptr, i32 }
          cleanup
  %505 = extractvalue { ptr, i32 } %504, 0
  store ptr %505, ptr %11, align 8
  %506 = extractvalue { ptr, i32 } %504, 1
  store i32 %506, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  br label %507

507:                                              ; preds = %503, %499
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #6
  br label %522

508:                                              ; preds = %498, %482
  %509 = load i32, ptr %31, align 4, !tbaa !9
  %510 = add i32 %509, 1
  %511 = load ptr, ptr %7, align 8, !tbaa !5
  %512 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %511)
          to label %513 unwind label %458

513:                                              ; preds = %508
  %514 = icmp ult i32 %510, %512
  br i1 %514, label %515, label %518

515:                                              ; preds = %513
  %516 = 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 %517 unwind label %458

517:                                              ; preds = %515
  br label %518

518:                                              ; preds = %517, %513
  br label %519

519:                                              ; preds = %518
  %520 = load i32, ptr %31, align 4, !tbaa !9
  %521 = add i32 %520, 1
  store i32 %521, ptr %31, align 4, !tbaa !9
  br label %451, !llvm.loop !149

522:                                              ; preds = %507, %491, %458
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %1833

523:                                              ; preds = %457
  br label %524

524:                                              ; preds = %523, %449
  br label %1820

525:                                              ; preds = %298
  %526 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %527 = trunc i8 %526 to i1
  br i1 %527, label %531, label %528

528:                                              ; preds = %525
  %529 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %530 = trunc i8 %529 to i1
  br i1 %530, label %531, label %562

531:                                              ; preds = %528, %525
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #6
  %532 = load ptr, ptr %7, align 8, !tbaa !5
  %533 = load i32, ptr %8, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL24convert_double_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(360) %532, i32 noundef %533, i32 noundef 0)
          to label %534 unwind label %548

534:                                              ; preds = %531
  %535 = 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) %34)
          to label %536 unwind label %552

536:                                              ; preds = %534
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #6
  %537 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %538 = trunc i8 %537 to i1
  br i1 %538, label %539, label %561

539:                                              ; preds = %536
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #6
  %540 = load ptr, ptr %7, align 8, !tbaa !5
  %541 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %540, i32 0, i32 1
  %542 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %541)
          to label %543 unwind label %557

543:                                              ; preds = %539
  %544 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %107, i32 noundef %542)
          to label %545 unwind label %557

545:                                              ; preds = %543
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %544, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %546 unwind label %557

546:                                              ; preds = %545
  %547 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #6
  br label %561

548:                                              ; preds = %531
  %549 = landingpad { ptr, i32 }
          cleanup
  %550 = extractvalue { ptr, i32 } %549, 0
  store ptr %550, ptr %11, align 8
  %551 = extractvalue { ptr, i32 } %549, 1
  store i32 %551, ptr %12, align 4
  br label %556

552:                                              ; preds = %534
  %553 = landingpad { ptr, i32 }
          cleanup
  %554 = extractvalue { ptr, i32 } %553, 0
  store ptr %554, ptr %11, align 8
  %555 = extractvalue { ptr, i32 } %553, 1
  store i32 %555, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  br label %556

556:                                              ; preds = %552, %548
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #6
  br label %1833

557:                                              ; preds = %545, %543, %539
  %558 = landingpad { ptr, i32 }
          cleanup
  %559 = extractvalue { ptr, i32 } %558, 0
  store ptr %559, ptr %11, align 8
  %560 = extractvalue { ptr, i32 } %558, 1
  store i32 %560, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #6
  br label %1833

561:                                              ; preds = %546, %536
  br label %636

562:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store i32 0, ptr %36, align 4, !tbaa !9
  br label %563

563:                                              ; preds = %631, %562
  %564 = load i32, ptr %36, align 4, !tbaa !9
  %565 = load ptr, ptr %7, align 8, !tbaa !5
  %566 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %565)
          to label %567 unwind label %570

567:                                              ; preds = %563
  %568 = icmp ult i32 %564, %566
  br i1 %568, label %574, label %569

569:                                              ; preds = %567
  store i32 18, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %635

570:                                              ; preds = %627, %620, %579, %574, %563
  %571 = landingpad { ptr, i32 }
          cleanup
  %572 = extractvalue { ptr, i32 } %571, 0
  store ptr %572, ptr %11, align 8
  %573 = extractvalue { ptr, i32 } %571, 1
  store i32 %573, ptr %12, align 4
  br label %634

574:                                              ; preds = %567
  %575 = load ptr, ptr %7, align 8, !tbaa !5
  %576 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %575)
          to label %577 unwind label %570

577:                                              ; preds = %574
  %578 = icmp ugt i32 %576, 1
  br i1 %578, label %579, label %604

579:                                              ; preds = %577
  %580 = load ptr, ptr %7, align 8, !tbaa !5
  %581 = load i32, ptr %8, align 4, !tbaa !9
  %582 = load i32, ptr %36, align 4, !tbaa !9
  %583 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %580, i32 noundef %581, i32 noundef %582)
          to label %584 unwind label %570

584:                                              ; preds = %579
  %585 = icmp ne i32 %583, 0
  br i1 %585, label %586, label %604

586:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #6
  %587 = load ptr, ptr %7, align 8, !tbaa !5
  %588 = load i32, ptr %8, align 4, !tbaa !9
  %589 = load i32, ptr %36, align 4, !tbaa !9
  %590 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %587, i32 noundef %588, i32 noundef %589)
          to label %591 unwind label %595

591:                                              ; preds = %586
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %590, i1 noundef zeroext true)
          to label %592 unwind label %595

592:                                              ; preds = %591
  %593 = 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 %594 unwind label %599

594:                                              ; preds = %592
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #6
  br label %620

595:                                              ; preds = %591, %586
  %596 = landingpad { ptr, i32 }
          cleanup
  %597 = extractvalue { ptr, i32 } %596, 0
  store ptr %597, ptr %11, align 8
  %598 = extractvalue { ptr, i32 } %596, 1
  store i32 %598, ptr %12, align 4
  br label %603

599:                                              ; preds = %592
  %600 = landingpad { ptr, i32 }
          cleanup
  %601 = extractvalue { ptr, i32 } %600, 0
  store ptr %601, ptr %11, align 8
  %602 = extractvalue { ptr, i32 } %600, 1
  store i32 %602, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #6
  br label %603

603:                                              ; preds = %599, %595
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #6
  br label %634

604:                                              ; preds = %584, %577
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #6
  %605 = load ptr, ptr %7, align 8, !tbaa !5
  %606 = load i32, ptr %8, align 4, !tbaa !9
  %607 = load i32, ptr %36, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL24convert_double_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(360) %605, i32 noundef %606, i32 noundef %607)
          to label %608 unwind label %611

608:                                              ; preds = %604
  %609 = 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) %38)
          to label %610 unwind label %615

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

611:                                              ; preds = %604
  %612 = landingpad { ptr, i32 }
          cleanup
  %613 = extractvalue { ptr, i32 } %612, 0
  store ptr %613, ptr %11, align 8
  %614 = extractvalue { ptr, i32 } %612, 1
  store i32 %614, ptr %12, align 4
  br label %619

615:                                              ; preds = %608
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %11, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  br label %619

619:                                              ; preds = %615, %611
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #6
  br label %634

620:                                              ; preds = %610, %594
  %621 = load i32, ptr %36, align 4, !tbaa !9
  %622 = add i32 %621, 1
  %623 = load ptr, ptr %7, align 8, !tbaa !5
  %624 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %623)
          to label %625 unwind label %570

625:                                              ; preds = %620
  %626 = icmp ult i32 %622, %624
  br i1 %626, label %627, label %630

627:                                              ; preds = %625
  %628 = 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 %629 unwind label %570

629:                                              ; preds = %627
  br label %630

630:                                              ; preds = %629, %625
  br label %631

631:                                              ; preds = %630
  %632 = load i32, ptr %36, align 4, !tbaa !9
  %633 = add i32 %632, 1
  store i32 %633, ptr %36, align 4, !tbaa !9
  br label %563, !llvm.loop !150

634:                                              ; preds = %619, %603, %570
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %1833

635:                                              ; preds = %569
  br label %636

636:                                              ; preds = %635, %561
  br label %1820

637:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 336, ptr %39) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %39, ptr noundef nonnull align 8 dereferenceable(336) %9)
          to label %638 unwind label %659

638:                                              ; preds = %637
  %639 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %39, i32 0, i32 4
  store i32 1, ptr %639, align 8, !tbaa !39
  %640 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %39, i32 0, i32 5
  store i32 1, ptr %640, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #6
  %641 = load ptr, ptr %107, align 8, !tbaa !145
  %642 = getelementptr inbounds ptr, ptr %641, i64 19
  %643 = load ptr, ptr %642, align 8
  invoke void %643(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %39, i32 noundef 0)
          to label %644 unwind label %663

644:                                              ; preds = %638
  %645 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %646 = trunc i8 %645 to i1
  br i1 %646, label %647, label %676

647:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #6
  %648 = load ptr, ptr %7, align 8, !tbaa !5
  %649 = load i32, ptr %8, align 4, !tbaa !9
  %650 = invoke noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_i64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %648, i32 noundef %649, i32 noundef 0)
          to label %651 unwind label %667

651:                                              ; preds = %647
  %652 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %653 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %652, i32 0, i32 6
  %654 = load i8, ptr %653, align 1, !tbaa !151, !range !135, !noundef !136
  %655 = trunc i8 %654 to i1
  invoke void @_ZN11spirv_crossL17convert_to_stringElRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, i64 noundef %650, ptr noundef nonnull align 8 dereferenceable(32) %40, i1 noundef zeroext %655)
          to label %656 unwind label %667

656:                                              ; preds = %651
  %657 = 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) %41)
          to label %658 unwind label %671

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

659:                                              ; preds = %637
  %660 = landingpad { ptr, i32 }
          cleanup
  %661 = extractvalue { ptr, i32 } %660, 0
  store ptr %661, ptr %11, align 8
  %662 = extractvalue { ptr, i32 } %660, 1
  store i32 %662, ptr %12, align 4
  br label %759

663:                                              ; preds = %638
  %664 = landingpad { ptr, i32 }
          cleanup
  %665 = extractvalue { ptr, i32 } %664, 0
  store ptr %665, ptr %11, align 8
  %666 = extractvalue { ptr, i32 } %664, 1
  store i32 %666, ptr %12, align 4
  br label %758

667:                                              ; preds = %651, %647
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %11, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %12, align 4
  br label %675

671:                                              ; preds = %656
  %672 = landingpad { ptr, i32 }
          cleanup
  %673 = extractvalue { ptr, i32 } %672, 0
  store ptr %673, ptr %11, align 8
  %674 = extractvalue { ptr, i32 } %672, 1
  store i32 %674, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  br label %675

675:                                              ; preds = %671, %667
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #6
  br label %757

676:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %677

677:                                              ; preds = %751, %676
  %678 = load i32, ptr %42, align 4, !tbaa !9
  %679 = load ptr, ptr %7, align 8, !tbaa !5
  %680 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %679)
          to label %681 unwind label %684

681:                                              ; preds = %677
  %682 = icmp ult i32 %678, %680
  br i1 %682, label %688, label %683

683:                                              ; preds = %681
  store i32 21, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  br label %755

684:                                              ; preds = %747, %740, %693, %688, %677
  %685 = landingpad { ptr, i32 }
          cleanup
  %686 = extractvalue { ptr, i32 } %685, 0
  store ptr %686, ptr %11, align 8
  %687 = extractvalue { ptr, i32 } %685, 1
  store i32 %687, ptr %12, align 4
  br label %754

688:                                              ; preds = %681
  %689 = load ptr, ptr %7, align 8, !tbaa !5
  %690 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %689)
          to label %691 unwind label %684

691:                                              ; preds = %688
  %692 = icmp ugt i32 %690, 1
  br i1 %692, label %693, label %718

693:                                              ; preds = %691
  %694 = load ptr, ptr %7, align 8, !tbaa !5
  %695 = load i32, ptr %8, align 4, !tbaa !9
  %696 = load i32, ptr %42, align 4, !tbaa !9
  %697 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %694, i32 noundef %695, i32 noundef %696)
          to label %698 unwind label %684

698:                                              ; preds = %693
  %699 = icmp ne i32 %697, 0
  br i1 %699, label %700, label %718

700:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #6
  %701 = load ptr, ptr %7, align 8, !tbaa !5
  %702 = load i32, ptr %8, align 4, !tbaa !9
  %703 = load i32, ptr %42, align 4, !tbaa !9
  %704 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %701, i32 noundef %702, i32 noundef %703)
          to label %705 unwind label %709

705:                                              ; preds = %700
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %704, i1 noundef zeroext true)
          to label %706 unwind label %709

706:                                              ; preds = %705
  %707 = 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) %43)
          to label %708 unwind label %713

708:                                              ; preds = %706
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #6
  br label %740

709:                                              ; preds = %705, %700
  %710 = landingpad { ptr, i32 }
          cleanup
  %711 = extractvalue { ptr, i32 } %710, 0
  store ptr %711, ptr %11, align 8
  %712 = extractvalue { ptr, i32 } %710, 1
  store i32 %712, ptr %12, align 4
  br label %717

713:                                              ; preds = %706
  %714 = landingpad { ptr, i32 }
          cleanup
  %715 = extractvalue { ptr, i32 } %714, 0
  store ptr %715, ptr %11, align 8
  %716 = extractvalue { ptr, i32 } %714, 1
  store i32 %716, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  br label %717

717:                                              ; preds = %713, %709
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #6
  br label %754

718:                                              ; preds = %698, %691
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #6
  %719 = load ptr, ptr %7, align 8, !tbaa !5
  %720 = load i32, ptr %8, align 4, !tbaa !9
  %721 = load i32, ptr %42, align 4, !tbaa !9
  %722 = invoke noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_i64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %719, i32 noundef %720, i32 noundef %721)
          to label %723 unwind label %731

723:                                              ; preds = %718
  %724 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %725 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %724, i32 0, i32 6
  %726 = load i8, ptr %725, align 1, !tbaa !151, !range !135, !noundef !136
  %727 = trunc i8 %726 to i1
  invoke void @_ZN11spirv_crossL17convert_to_stringElRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, i64 noundef %722, ptr noundef nonnull align 8 dereferenceable(32) %40, i1 noundef zeroext %727)
          to label %728 unwind label %731

728:                                              ; preds = %723
  %729 = 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) %44)
          to label %730 unwind label %735

730:                                              ; preds = %728
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #6
  br label %740

731:                                              ; preds = %723, %718
  %732 = landingpad { ptr, i32 }
          cleanup
  %733 = extractvalue { ptr, i32 } %732, 0
  store ptr %733, ptr %11, align 8
  %734 = extractvalue { ptr, i32 } %732, 1
  store i32 %734, ptr %12, align 4
  br label %739

735:                                              ; preds = %728
  %736 = landingpad { ptr, i32 }
          cleanup
  %737 = extractvalue { ptr, i32 } %736, 0
  store ptr %737, ptr %11, align 8
  %738 = extractvalue { ptr, i32 } %736, 1
  store i32 %738, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #6
  br label %739

739:                                              ; preds = %735, %731
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #6
  br label %754

740:                                              ; preds = %730, %708
  %741 = load i32, ptr %42, align 4, !tbaa !9
  %742 = add i32 %741, 1
  %743 = load ptr, ptr %7, align 8, !tbaa !5
  %744 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %743)
          to label %745 unwind label %684

745:                                              ; preds = %740
  %746 = icmp ult i32 %742, %744
  br i1 %746, label %747, label %750

747:                                              ; preds = %745
  %748 = 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 %749 unwind label %684

749:                                              ; preds = %747
  br label %750

750:                                              ; preds = %749, %745
  br label %751

751:                                              ; preds = %750
  %752 = load i32, ptr %42, align 4, !tbaa !9
  %753 = add i32 %752, 1
  store i32 %753, ptr %42, align 4, !tbaa !9
  br label %677, !llvm.loop !152

754:                                              ; preds = %739, %717, %684
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  br label %757

755:                                              ; preds = %683
  br label %756

756:                                              ; preds = %755, %658
  store i32 11, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %39) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr %39) #6
  br label %1820

757:                                              ; preds = %754, %675
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  br label %758

758:                                              ; preds = %757, %663
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %39) #6
  br label %759

759:                                              ; preds = %758, %659
  call void @llvm.lifetime.end.p0(i64 336, ptr %39) #6
  br label %1833

760:                                              ; preds = %298
  %761 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %762 = trunc i8 %761 to i1
  br i1 %762, label %763, label %791

763:                                              ; preds = %760
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %764 = load ptr, ptr %7, align 8, !tbaa !5
  %765 = load i32, ptr %8, align 4, !tbaa !9
  %766 = invoke noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_u64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %764, i32 noundef %765, i32 noundef 0)
          to label %767 unwind label %778

767:                                              ; preds = %763
  store i64 %766, ptr %46, align 8, !tbaa !142
  invoke void @_ZN11spirv_cross17convert_to_stringImTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %768 unwind label %778

768:                                              ; preds = %767
  %769 = 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) %45)
          to label %770 unwind label %782

770:                                              ; preds = %768
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #6
  %771 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %772 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %771, i32 0, i32 6
  %773 = load i8, ptr %772, align 1, !tbaa !151, !range !135, !noundef !136
  %774 = trunc i8 %773 to i1
  br i1 %774, label %775, label %787

775:                                              ; preds = %770
  %776 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1002)
          to label %777 unwind label %150

777:                                              ; preds = %775
  br label %790

778:                                              ; preds = %767, %763
  %779 = landingpad { ptr, i32 }
          cleanup
  %780 = extractvalue { ptr, i32 } %779, 0
  store ptr %780, ptr %11, align 8
  %781 = extractvalue { ptr, i32 } %779, 1
  store i32 %781, ptr %12, align 4
  br label %786

782:                                              ; preds = %768
  %783 = landingpad { ptr, i32 }
          cleanup
  %784 = extractvalue { ptr, i32 } %783, 0
  store ptr %784, ptr %11, align 8
  %785 = extractvalue { ptr, i32 } %783, 1
  store i32 %785, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  br label %786

786:                                              ; preds = %782, %778
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #6
  br label %1833

787:                                              ; preds = %770
  %788 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1003)
          to label %789 unwind label %150

789:                                              ; preds = %787
  br label %790

790:                                              ; preds = %789, %777
  br label %878

791:                                              ; preds = %760
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %792

792:                                              ; preds = %873, %791
  %793 = load i32, ptr %47, align 4, !tbaa !9
  %794 = load ptr, ptr %7, align 8, !tbaa !5
  %795 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %794)
          to label %796 unwind label %799

796:                                              ; preds = %792
  %797 = icmp ult i32 %793, %795
  br i1 %797, label %803, label %798

798:                                              ; preds = %796
  store i32 24, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  br label %877

799:                                              ; preds = %869, %862, %858, %846, %808, %803, %792
  %800 = landingpad { ptr, i32 }
          cleanup
  %801 = extractvalue { ptr, i32 } %800, 0
  store ptr %801, ptr %11, align 8
  %802 = extractvalue { ptr, i32 } %800, 1
  store i32 %802, ptr %12, align 4
  br label %876

803:                                              ; preds = %796
  %804 = load ptr, ptr %7, align 8, !tbaa !5
  %805 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %804)
          to label %806 unwind label %799

806:                                              ; preds = %803
  %807 = icmp ugt i32 %805, 1
  br i1 %807, label %808, label %833

808:                                              ; preds = %806
  %809 = load ptr, ptr %7, align 8, !tbaa !5
  %810 = load i32, ptr %8, align 4, !tbaa !9
  %811 = load i32, ptr %47, align 4, !tbaa !9
  %812 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %809, i32 noundef %810, i32 noundef %811)
          to label %813 unwind label %799

813:                                              ; preds = %808
  %814 = icmp ne i32 %812, 0
  br i1 %814, label %815, label %833

815:                                              ; preds = %813
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #6
  %816 = load ptr, ptr %7, align 8, !tbaa !5
  %817 = load i32, ptr %8, align 4, !tbaa !9
  %818 = load i32, ptr %47, align 4, !tbaa !9
  %819 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %816, i32 noundef %817, i32 noundef %818)
          to label %820 unwind label %824

820:                                              ; preds = %815
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %819, i1 noundef zeroext true)
          to label %821 unwind label %824

821:                                              ; preds = %820
  %822 = 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) %48)
          to label %823 unwind label %828

823:                                              ; preds = %821
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #6
  br label %862

824:                                              ; preds = %820, %815
  %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
  br label %832

828:                                              ; preds = %821
  %829 = landingpad { ptr, i32 }
          cleanup
  %830 = extractvalue { ptr, i32 } %829, 0
  store ptr %830, ptr %11, align 8
  %831 = extractvalue { ptr, i32 } %829, 1
  store i32 %831, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  br label %832

832:                                              ; preds = %828, %824
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #6
  br label %876

833:                                              ; preds = %813, %806
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %834 = load ptr, ptr %7, align 8, !tbaa !5
  %835 = load i32, ptr %8, align 4, !tbaa !9
  %836 = load i32, ptr %47, align 4, !tbaa !9
  %837 = invoke noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_u64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %834, i32 noundef %835, i32 noundef %836)
          to label %838 unwind label %849

838:                                              ; preds = %833
  store i64 %837, ptr %50, align 8, !tbaa !142
  invoke void @_ZN11spirv_cross17convert_to_stringImTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %839 unwind label %849

839:                                              ; preds = %838
  %840 = 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) %49)
          to label %841 unwind label %853

841:                                              ; preds = %839
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #6
  %842 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %843 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %842, i32 0, i32 6
  %844 = load i8, ptr %843, align 1, !tbaa !151, !range !135, !noundef !136
  %845 = trunc i8 %844 to i1
  br i1 %845, label %846, label %858

846:                                              ; preds = %841
  %847 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1002)
          to label %848 unwind label %799

848:                                              ; preds = %846
  br label %861

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

853:                                              ; preds = %839
  %854 = landingpad { ptr, i32 }
          cleanup
  %855 = extractvalue { ptr, i32 } %854, 0
  store ptr %855, ptr %11, align 8
  %856 = extractvalue { ptr, i32 } %854, 1
  store i32 %856, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  br label %857

857:                                              ; preds = %853, %849
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #6
  br label %876

858:                                              ; preds = %841
  %859 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1003)
          to label %860 unwind label %799

860:                                              ; preds = %858
  br label %861

861:                                              ; preds = %860, %848
  br label %862

862:                                              ; preds = %861, %823
  %863 = load i32, ptr %47, align 4, !tbaa !9
  %864 = add i32 %863, 1
  %865 = load ptr, ptr %7, align 8, !tbaa !5
  %866 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %865)
          to label %867 unwind label %799

867:                                              ; preds = %862
  %868 = icmp ult i32 %864, %866
  br i1 %868, label %869, label %872

869:                                              ; preds = %867
  %870 = 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 %871 unwind label %799

871:                                              ; preds = %869
  br label %872

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

873:                                              ; preds = %872
  %874 = load i32, ptr %47, align 4, !tbaa !9
  %875 = add i32 %874, 1
  store i32 %875, ptr %47, align 4, !tbaa !9
  br label %792, !llvm.loop !153

876:                                              ; preds = %857, %832, %799
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  br label %1833

877:                                              ; preds = %798
  br label %878

878:                                              ; preds = %877, %790
  br label %1820

879:                                              ; preds = %298
  %880 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %881 = trunc i8 %880 to i1
  br i1 %881, label %882, label %965

882:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  %883 = load ptr, ptr %7, align 8, !tbaa !5
  %884 = load i32, ptr %8, align 4, !tbaa !9
  %885 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %883, i32 noundef %884, i32 noundef 0)
          to label %886 unwind label %920

886:                                              ; preds = %882
  store i32 %885, ptr %52, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 4 dereferenceable(4) %52)
          to label %887 unwind label %920

887:                                              ; preds = %886
  %888 = 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) %51)
          to label %889 unwind label %924

889:                                              ; preds = %887
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #6
  store i1 false, ptr %54, align 1
  store i1 false, ptr %56, align 1
  store i1 false, ptr %57, align 1
  store i1 false, ptr %58, align 1
  %890 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %107)
          to label %891 unwind label %150

891:                                              ; preds = %889
  br i1 %890, label %892, label %897

892:                                              ; preds = %891
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #6
  store i1 true, ptr %54, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #6
  store i1 true, ptr %56, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %55) #6
  store i1 true, ptr %57, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef @.str.185, ptr noundef nonnull align 1 dereferenceable(1) %55)
          to label %893 unwind label %929

893:                                              ; preds = %892
  store i1 true, ptr %58, align 1
  %894 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL13has_extensionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(32) %53)
          to label %895 unwind label %933

895:                                              ; preds = %893
  %896 = xor i1 %894, true
  br label %897

897:                                              ; preds = %895, %891
  %898 = phi i1 [ false, %891 ], [ %896, %895 ]
  %899 = load i1, ptr %58, align 1
  br i1 %899, label %900, label %901

900:                                              ; preds = %897
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  br label %901

901:                                              ; preds = %900, %897
  %902 = load i1, ptr %57, align 1
  br i1 %902, label %903, label %904

903:                                              ; preds = %901
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %55) #6
  br label %904

904:                                              ; preds = %903, %901
  %905 = load i1, ptr %56, align 1
  br i1 %905, label %906, label %907

906:                                              ; preds = %904
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #6
  br label %907

907:                                              ; preds = %906, %904
  %908 = load i1, ptr %54, align 1
  br i1 %908, label %909, label %910

909:                                              ; preds = %907
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #6
  br label %910

910:                                              ; preds = %909, %907
  br i1 %898, label %911, label %955

911:                                              ; preds = %910
  %912 = load ptr, ptr %7, align 8, !tbaa !5
  %913 = load i32, ptr %8, align 4, !tbaa !9
  %914 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %912, i32 noundef %913, i32 noundef 0)
          to label %915 unwind label %150

915:                                              ; preds = %911
  %916 = icmp slt i32 %914, 0
  br i1 %916, label %917, label %954

917:                                              ; preds = %915
  %918 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %918, ptr noundef @.str.1010)
          to label %919 unwind label %950

919:                                              ; preds = %917
  invoke void @__cxa_throw(ptr %918, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #7
          to label %1843 unwind label %150

920:                                              ; preds = %886, %882
  %921 = landingpad { ptr, i32 }
          cleanup
  %922 = extractvalue { ptr, i32 } %921, 0
  store ptr %922, ptr %11, align 8
  %923 = extractvalue { ptr, i32 } %921, 1
  store i32 %923, ptr %12, align 4
  br label %928

924:                                              ; preds = %887
  %925 = landingpad { ptr, i32 }
          cleanup
  %926 = extractvalue { ptr, i32 } %925, 0
  store ptr %926, ptr %11, align 8
  %927 = extractvalue { ptr, i32 } %925, 1
  store i32 %927, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  br label %928

928:                                              ; preds = %924, %920
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #6
  br label %1833

929:                                              ; preds = %892
  %930 = landingpad { ptr, i32 }
          cleanup
  %931 = extractvalue { ptr, i32 } %930, 0
  store ptr %931, ptr %11, align 8
  %932 = extractvalue { ptr, i32 } %930, 1
  store i32 %932, ptr %12, align 4
  br label %940

933:                                              ; preds = %893
  %934 = landingpad { ptr, i32 }
          cleanup
  %935 = extractvalue { ptr, i32 } %934, 0
  store ptr %935, ptr %11, align 8
  %936 = extractvalue { ptr, i32 } %934, 1
  store i32 %936, ptr %12, align 4
  %937 = load i1, ptr %58, align 1
  br i1 %937, label %938, label %939

938:                                              ; preds = %933
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  br label %939

939:                                              ; preds = %938, %933
  br label %940

940:                                              ; preds = %939, %929
  %941 = load i1, ptr %57, align 1
  br i1 %941, label %942, label %943

942:                                              ; preds = %940
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %55) #6
  br label %943

943:                                              ; preds = %942, %940
  %944 = load i1, ptr %56, align 1
  br i1 %944, label %945, label %946

945:                                              ; preds = %943
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #6
  br label %946

946:                                              ; preds = %945, %943
  %947 = load i1, ptr %54, align 1
  br i1 %947, label %948, label %949

948:                                              ; preds = %946
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #6
  br label %949

949:                                              ; preds = %948, %946
  br label %1833

950:                                              ; preds = %917
  %951 = landingpad { ptr, i32 }
          cleanup
  %952 = extractvalue { ptr, i32 } %951, 0
  store ptr %952, ptr %11, align 8
  %953 = extractvalue { ptr, i32 } %951, 1
  store i32 %953, ptr %12, align 4
  call void @__cxa_free_exception(ptr %918) #6
  br label %1833

954:                                              ; preds = %915
  br label %964

955:                                              ; preds = %910
  %956 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %957 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %956, i32 0, i32 5
  %958 = load i8, ptr %957, align 2, !tbaa !154, !range !135, !noundef !136
  %959 = trunc i8 %958 to i1
  br i1 %959, label %960, label %963

960:                                              ; preds = %955
  %961 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1011)
          to label %962 unwind label %150

962:                                              ; preds = %960
  br label %963

963:                                              ; preds = %962, %955
  br label %964

964:                                              ; preds = %963, %954
  br label %1108

965:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  store i32 0, ptr %59, align 4, !tbaa !9
  br label %966

966:                                              ; preds = %1103, %965
  %967 = load i32, ptr %59, align 4, !tbaa !9
  %968 = load ptr, ptr %7, align 8, !tbaa !5
  %969 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %968)
          to label %970 unwind label %973

970:                                              ; preds = %966
  %971 = icmp ult i32 %967, %969
  br i1 %971, label %977, label %972

972:                                              ; preds = %970
  store i32 27, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  br label %1107

973:                                              ; preds = %1099, %1092, %1087, %1046, %1037, %1015, %982, %977, %966
  %974 = landingpad { ptr, i32 }
          cleanup
  %975 = extractvalue { ptr, i32 } %974, 0
  store ptr %975, ptr %11, align 8
  %976 = extractvalue { ptr, i32 } %974, 1
  store i32 %976, ptr %12, align 4
  br label %1106

977:                                              ; preds = %970
  %978 = load ptr, ptr %7, align 8, !tbaa !5
  %979 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %978)
          to label %980 unwind label %973

980:                                              ; preds = %977
  %981 = icmp ugt i32 %979, 1
  br i1 %981, label %982, label %1007

982:                                              ; preds = %980
  %983 = load ptr, ptr %7, align 8, !tbaa !5
  %984 = load i32, ptr %8, align 4, !tbaa !9
  %985 = load i32, ptr %59, align 4, !tbaa !9
  %986 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %983, i32 noundef %984, i32 noundef %985)
          to label %987 unwind label %973

987:                                              ; preds = %982
  %988 = icmp ne i32 %986, 0
  br i1 %988, label %989, label %1007

989:                                              ; preds = %987
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #6
  %990 = load ptr, ptr %7, align 8, !tbaa !5
  %991 = load i32, ptr %8, align 4, !tbaa !9
  %992 = load i32, ptr %59, align 4, !tbaa !9
  %993 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %990, i32 noundef %991, i32 noundef %992)
          to label %994 unwind label %998

994:                                              ; preds = %989
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %993, i1 noundef zeroext true)
          to label %995 unwind label %998

995:                                              ; preds = %994
  %996 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %997 unwind label %1002

997:                                              ; preds = %995
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #6
  br label %1092

998:                                              ; preds = %994, %989
  %999 = landingpad { ptr, i32 }
          cleanup
  %1000 = extractvalue { ptr, i32 } %999, 0
  store ptr %1000, ptr %11, align 8
  %1001 = extractvalue { ptr, i32 } %999, 1
  store i32 %1001, ptr %12, align 4
  br label %1006

1002:                                             ; preds = %995
  %1003 = landingpad { ptr, i32 }
          cleanup
  %1004 = extractvalue { ptr, i32 } %1003, 0
  store ptr %1004, ptr %11, align 8
  %1005 = extractvalue { ptr, i32 } %1003, 1
  store i32 %1005, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #6
  br label %1006

1006:                                             ; preds = %1002, %998
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #6
  br label %1106

1007:                                             ; preds = %987, %980
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #6
  %1008 = load ptr, ptr %7, align 8, !tbaa !5
  %1009 = load i32, ptr %8, align 4, !tbaa !9
  %1010 = load i32, ptr %59, align 4, !tbaa !9
  %1011 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1008, i32 noundef %1009, i32 noundef %1010)
          to label %1012 unwind label %1047

1012:                                             ; preds = %1007
  store i32 %1011, ptr %62, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 4 dereferenceable(4) %62)
          to label %1013 unwind label %1047

1013:                                             ; preds = %1012
  %1014 = 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) %61)
          to label %1015 unwind label %1051

1015:                                             ; preds = %1013
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #6
  store i1 false, ptr %64, align 1
  store i1 false, ptr %66, align 1
  store i1 false, ptr %67, align 1
  store i1 false, ptr %68, align 1
  %1016 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %107)
          to label %1017 unwind label %973

1017:                                             ; preds = %1015
  br i1 %1016, label %1018, label %1023

1018:                                             ; preds = %1017
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #6
  store i1 true, ptr %64, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #6
  store i1 true, ptr %66, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #6
  store i1 true, ptr %67, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef @.str.185, ptr noundef nonnull align 1 dereferenceable(1) %65)
          to label %1019 unwind label %1056

1019:                                             ; preds = %1018
  store i1 true, ptr %68, align 1
  %1020 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL13has_extensionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %1021 unwind label %1060

1021:                                             ; preds = %1019
  %1022 = xor i1 %1020, true
  br label %1023

1023:                                             ; preds = %1021, %1017
  %1024 = phi i1 [ false, %1017 ], [ %1022, %1021 ]
  %1025 = load i1, ptr %68, align 1
  br i1 %1025, label %1026, label %1027

1026:                                             ; preds = %1023
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #6
  br label %1027

1027:                                             ; preds = %1026, %1023
  %1028 = load i1, ptr %67, align 1
  br i1 %1028, label %1029, label %1030

1029:                                             ; preds = %1027
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #6
  br label %1030

1030:                                             ; preds = %1029, %1027
  %1031 = load i1, ptr %66, align 1
  br i1 %1031, label %1032, label %1033

1032:                                             ; preds = %1030
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #6
  br label %1033

1033:                                             ; preds = %1032, %1030
  %1034 = load i1, ptr %64, align 1
  br i1 %1034, label %1035, label %1036

1035:                                             ; preds = %1033
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #6
  br label %1036

1036:                                             ; preds = %1035, %1033
  br i1 %1024, label %1037, label %1082

1037:                                             ; preds = %1036
  %1038 = load ptr, ptr %7, align 8, !tbaa !5
  %1039 = load i32, ptr %8, align 4, !tbaa !9
  %1040 = load i32, ptr %59, align 4, !tbaa !9
  %1041 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1038, i32 noundef %1039, i32 noundef %1040)
          to label %1042 unwind label %973

1042:                                             ; preds = %1037
  %1043 = icmp slt i32 %1041, 0
  br i1 %1043, label %1044, label %1081

1044:                                             ; preds = %1042
  %1045 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1045, ptr noundef @.str.1010)
          to label %1046 unwind label %1077

1046:                                             ; preds = %1044
  invoke void @__cxa_throw(ptr %1045, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #7
          to label %1843 unwind label %973

1047:                                             ; preds = %1012, %1007
  %1048 = landingpad { ptr, i32 }
          cleanup
  %1049 = extractvalue { ptr, i32 } %1048, 0
  store ptr %1049, ptr %11, align 8
  %1050 = extractvalue { ptr, i32 } %1048, 1
  store i32 %1050, ptr %12, align 4
  br label %1055

1051:                                             ; preds = %1013
  %1052 = landingpad { ptr, i32 }
          cleanup
  %1053 = extractvalue { ptr, i32 } %1052, 0
  store ptr %1053, ptr %11, align 8
  %1054 = extractvalue { ptr, i32 } %1052, 1
  store i32 %1054, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #6
  br label %1055

1055:                                             ; preds = %1051, %1047
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #6
  br label %1106

1056:                                             ; preds = %1018
  %1057 = landingpad { ptr, i32 }
          cleanup
  %1058 = extractvalue { ptr, i32 } %1057, 0
  store ptr %1058, ptr %11, align 8
  %1059 = extractvalue { ptr, i32 } %1057, 1
  store i32 %1059, ptr %12, align 4
  br label %1067

1060:                                             ; preds = %1019
  %1061 = landingpad { ptr, i32 }
          cleanup
  %1062 = extractvalue { ptr, i32 } %1061, 0
  store ptr %1062, ptr %11, align 8
  %1063 = extractvalue { ptr, i32 } %1061, 1
  store i32 %1063, ptr %12, align 4
  %1064 = load i1, ptr %68, align 1
  br i1 %1064, label %1065, label %1066

1065:                                             ; preds = %1060
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #6
  br label %1066

1066:                                             ; preds = %1065, %1060
  br label %1067

1067:                                             ; preds = %1066, %1056
  %1068 = load i1, ptr %67, align 1
  br i1 %1068, label %1069, label %1070

1069:                                             ; preds = %1067
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #6
  br label %1070

1070:                                             ; preds = %1069, %1067
  %1071 = load i1, ptr %66, align 1
  br i1 %1071, label %1072, label %1073

1072:                                             ; preds = %1070
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #6
  br label %1073

1073:                                             ; preds = %1072, %1070
  %1074 = load i1, ptr %64, align 1
  br i1 %1074, label %1075, label %1076

1075:                                             ; preds = %1073
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #6
  br label %1076

1076:                                             ; preds = %1075, %1073
  br label %1106

1077:                                             ; preds = %1044
  %1078 = landingpad { ptr, i32 }
          cleanup
  %1079 = extractvalue { ptr, i32 } %1078, 0
  store ptr %1079, ptr %11, align 8
  %1080 = extractvalue { ptr, i32 } %1078, 1
  store i32 %1080, ptr %12, align 4
  call void @__cxa_free_exception(ptr %1045) #6
  br label %1106

1081:                                             ; preds = %1042
  br label %1091

1082:                                             ; preds = %1036
  %1083 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %1084 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1083, i32 0, i32 5
  %1085 = load i8, ptr %1084, align 2, !tbaa !154, !range !135, !noundef !136
  %1086 = trunc i8 %1085 to i1
  br i1 %1086, label %1087, label %1090

1087:                                             ; preds = %1082
  %1088 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1011)
          to label %1089 unwind label %973

1089:                                             ; preds = %1087
  br label %1090

1090:                                             ; preds = %1089, %1082
  br label %1091

1091:                                             ; preds = %1090, %1081
  br label %1092

1092:                                             ; preds = %1091, %997
  %1093 = load i32, ptr %59, align 4, !tbaa !9
  %1094 = add i32 %1093, 1
  %1095 = load ptr, ptr %7, align 8, !tbaa !5
  %1096 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1095)
          to label %1097 unwind label %973

1097:                                             ; preds = %1092
  %1098 = icmp ult i32 %1094, %1096
  br i1 %1098, label %1099, label %1102

1099:                                             ; preds = %1097
  %1100 = 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 %1101 unwind label %973

1101:                                             ; preds = %1099
  br label %1102

1102:                                             ; preds = %1101, %1097
  br label %1103

1103:                                             ; preds = %1102
  %1104 = load i32, ptr %59, align 4, !tbaa !9
  %1105 = add i32 %1104, 1
  store i32 %1105, ptr %59, align 4, !tbaa !9
  br label %966, !llvm.loop !155

1106:                                             ; preds = %1077, %1076, %1055, %1006, %973
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  br label %1833

1107:                                             ; preds = %972
  br label %1108

1108:                                             ; preds = %1107, %964
  br label %1820

1109:                                             ; preds = %298
  %1110 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %1111 = trunc i8 %1110 to i1
  br i1 %1111, label %1112, label %1129

1112:                                             ; preds = %1109
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #6
  %1113 = load ptr, ptr %7, align 8, !tbaa !5
  %1114 = load i32, ptr %8, align 4, !tbaa !9
  %1115 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1113, i32 noundef %1114, i32 noundef 0)
          to label %1116 unwind label %1120

1116:                                             ; preds = %1112
  invoke void @_ZN11spirv_crossL17convert_to_stringB5cxx11Ei(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %69, i32 noundef %1115)
          to label %1117 unwind label %1120

1117:                                             ; preds = %1116
  %1118 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %69)
          to label %1119 unwind label %1124

1119:                                             ; preds = %1117
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #6
  br label %1205

1120:                                             ; preds = %1116, %1112
  %1121 = landingpad { ptr, i32 }
          cleanup
  %1122 = extractvalue { ptr, i32 } %1121, 0
  store ptr %1122, ptr %11, align 8
  %1123 = extractvalue { ptr, i32 } %1121, 1
  store i32 %1123, ptr %12, align 4
  br label %1128

1124:                                             ; preds = %1117
  %1125 = landingpad { ptr, i32 }
          cleanup
  %1126 = extractvalue { ptr, i32 } %1125, 0
  store ptr %1126, ptr %11, align 8
  %1127 = extractvalue { ptr, i32 } %1125, 1
  store i32 %1127, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #6
  br label %1128

1128:                                             ; preds = %1124, %1120
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #6
  br label %1833

1129:                                             ; preds = %1109
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #6
  store i32 0, ptr %70, align 4, !tbaa !9
  br label %1130

1130:                                             ; preds = %1200, %1129
  %1131 = load i32, ptr %70, align 4, !tbaa !9
  %1132 = load ptr, ptr %7, align 8, !tbaa !5
  %1133 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1132)
          to label %1134 unwind label %1137

1134:                                             ; preds = %1130
  %1135 = icmp ult i32 %1131, %1133
  br i1 %1135, label %1141, label %1136

1136:                                             ; preds = %1134
  store i32 30, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #6
  br label %1204

1137:                                             ; preds = %1196, %1189, %1146, %1141, %1130
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %11, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %12, align 4
  br label %1203

1141:                                             ; preds = %1134
  %1142 = load ptr, ptr %7, align 8, !tbaa !5
  %1143 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1142)
          to label %1144 unwind label %1137

1144:                                             ; preds = %1141
  %1145 = icmp ugt i32 %1143, 1
  br i1 %1145, label %1146, label %1171

1146:                                             ; preds = %1144
  %1147 = load ptr, ptr %7, align 8, !tbaa !5
  %1148 = load i32, ptr %8, align 4, !tbaa !9
  %1149 = load i32, ptr %70, align 4, !tbaa !9
  %1150 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1147, i32 noundef %1148, i32 noundef %1149)
          to label %1151 unwind label %1137

1151:                                             ; preds = %1146
  %1152 = icmp ne i32 %1150, 0
  br i1 %1152, label %1153, label %1171

1153:                                             ; preds = %1151
  call void @llvm.lifetime.start.p0(i64 32, ptr %71) #6
  %1154 = load ptr, ptr %7, align 8, !tbaa !5
  %1155 = load i32, ptr %8, align 4, !tbaa !9
  %1156 = load i32, ptr %70, align 4, !tbaa !9
  %1157 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1154, i32 noundef %1155, i32 noundef %1156)
          to label %1158 unwind label %1162

1158:                                             ; preds = %1153
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %1157, i1 noundef zeroext true)
          to label %1159 unwind label %1162

1159:                                             ; preds = %1158
  %1160 = 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) %71)
          to label %1161 unwind label %1166

1161:                                             ; preds = %1159
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #6
  br label %1189

1162:                                             ; preds = %1158, %1153
  %1163 = landingpad { ptr, i32 }
          cleanup
  %1164 = extractvalue { ptr, i32 } %1163, 0
  store ptr %1164, ptr %11, align 8
  %1165 = extractvalue { ptr, i32 } %1163, 1
  store i32 %1165, ptr %12, align 4
  br label %1170

1166:                                             ; preds = %1159
  %1167 = landingpad { ptr, i32 }
          cleanup
  %1168 = extractvalue { ptr, i32 } %1167, 0
  store ptr %1168, ptr %11, align 8
  %1169 = extractvalue { ptr, i32 } %1167, 1
  store i32 %1169, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #6
  br label %1170

1170:                                             ; preds = %1166, %1162
  call void @llvm.lifetime.end.p0(i64 32, ptr %71) #6
  br label %1203

1171:                                             ; preds = %1151, %1144
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #6
  %1172 = load ptr, ptr %7, align 8, !tbaa !5
  %1173 = load i32, ptr %8, align 4, !tbaa !9
  %1174 = load i32, ptr %70, align 4, !tbaa !9
  %1175 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1172, i32 noundef %1173, i32 noundef %1174)
          to label %1176 unwind label %1180

1176:                                             ; preds = %1171
  invoke void @_ZN11spirv_crossL17convert_to_stringB5cxx11Ei(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, i32 noundef %1175)
          to label %1177 unwind label %1180

1177:                                             ; preds = %1176
  %1178 = 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) %72)
          to label %1179 unwind label %1184

1179:                                             ; preds = %1177
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #6
  br label %1189

1180:                                             ; preds = %1176, %1171
  %1181 = landingpad { ptr, i32 }
          cleanup
  %1182 = extractvalue { ptr, i32 } %1181, 0
  store ptr %1182, ptr %11, align 8
  %1183 = extractvalue { ptr, i32 } %1181, 1
  store i32 %1183, ptr %12, align 4
  br label %1188

1184:                                             ; preds = %1177
  %1185 = landingpad { ptr, i32 }
          cleanup
  %1186 = extractvalue { ptr, i32 } %1185, 0
  store ptr %1186, ptr %11, align 8
  %1187 = extractvalue { ptr, i32 } %1185, 1
  store i32 %1187, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #6
  br label %1188

1188:                                             ; preds = %1184, %1180
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #6
  br label %1203

1189:                                             ; preds = %1179, %1161
  %1190 = load i32, ptr %70, align 4, !tbaa !9
  %1191 = add i32 %1190, 1
  %1192 = load ptr, ptr %7, align 8, !tbaa !5
  %1193 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1192)
          to label %1194 unwind label %1137

1194:                                             ; preds = %1189
  %1195 = icmp ult i32 %1191, %1193
  br i1 %1195, label %1196, label %1199

1196:                                             ; preds = %1194
  %1197 = 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 %1198 unwind label %1137

1198:                                             ; preds = %1196
  br label %1199

1199:                                             ; preds = %1198, %1194
  br label %1200

1200:                                             ; preds = %1199
  %1201 = load i32, ptr %70, align 4, !tbaa !9
  %1202 = add i32 %1201, 1
  store i32 %1202, ptr %70, align 4, !tbaa !9
  br label %1130, !llvm.loop !156

1203:                                             ; preds = %1188, %1170, %1137
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #6
  br label %1833

1204:                                             ; preds = %1136
  br label %1205

1205:                                             ; preds = %1204, %1119
  br label %1820

1206:                                             ; preds = %298
  %1207 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %1208 = trunc i8 %1207 to i1
  br i1 %1208, label %1209, label %1226

1209:                                             ; preds = %1206
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #6
  %1210 = load ptr, ptr %7, align 8, !tbaa !5
  %1211 = load i32, ptr %8, align 4, !tbaa !9
  %1212 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1210, i32 noundef %1211, i32 noundef 0)
          to label %1213 unwind label %1217

1213:                                             ; preds = %1209
  store i32 %1212, ptr %74, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 4 dereferenceable(4) %74)
          to label %1214 unwind label %1217

1214:                                             ; preds = %1213
  %1215 = 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) %73)
          to label %1216 unwind label %1221

1216:                                             ; preds = %1214
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #6
  br label %1351

1217:                                             ; preds = %1213, %1209
  %1218 = landingpad { ptr, i32 }
          cleanup
  %1219 = extractvalue { ptr, i32 } %1218, 0
  store ptr %1219, ptr %11, align 8
  %1220 = extractvalue { ptr, i32 } %1218, 1
  store i32 %1220, ptr %12, align 4
  br label %1225

1221:                                             ; preds = %1214
  %1222 = landingpad { ptr, i32 }
          cleanup
  %1223 = extractvalue { ptr, i32 } %1222, 0
  store ptr %1223, ptr %11, align 8
  %1224 = extractvalue { ptr, i32 } %1222, 1
  store i32 %1224, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #6
  br label %1225

1225:                                             ; preds = %1221, %1217
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #6
  br label %1833

1226:                                             ; preds = %1206
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #6
  store i32 0, ptr %75, align 4, !tbaa !9
  br label %1227

1227:                                             ; preds = %1346, %1226
  %1228 = load i32, ptr %75, align 4, !tbaa !9
  %1229 = load ptr, ptr %7, align 8, !tbaa !5
  %1230 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1229)
          to label %1231 unwind label %1234

1231:                                             ; preds = %1227
  %1232 = icmp ult i32 %1228, %1230
  br i1 %1232, label %1238, label %1233

1233:                                             ; preds = %1231
  store i32 33, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #6
  br label %1350

1234:                                             ; preds = %1342, %1335, %1313, %1303, %1282, %1243, %1238, %1227
  %1235 = landingpad { ptr, i32 }
          cleanup
  %1236 = extractvalue { ptr, i32 } %1235, 0
  store ptr %1236, ptr %11, align 8
  %1237 = extractvalue { ptr, i32 } %1235, 1
  store i32 %1237, ptr %12, align 4
  br label %1349

1238:                                             ; preds = %1231
  %1239 = load ptr, ptr %7, align 8, !tbaa !5
  %1240 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1239)
          to label %1241 unwind label %1234

1241:                                             ; preds = %1238
  %1242 = icmp ugt i32 %1240, 1
  br i1 %1242, label %1243, label %1268

1243:                                             ; preds = %1241
  %1244 = load ptr, ptr %7, align 8, !tbaa !5
  %1245 = load i32, ptr %8, align 4, !tbaa !9
  %1246 = load i32, ptr %75, align 4, !tbaa !9
  %1247 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1244, i32 noundef %1245, i32 noundef %1246)
          to label %1248 unwind label %1234

1248:                                             ; preds = %1243
  %1249 = icmp ne i32 %1247, 0
  br i1 %1249, label %1250, label %1268

1250:                                             ; preds = %1248
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #6
  %1251 = load ptr, ptr %7, align 8, !tbaa !5
  %1252 = load i32, ptr %8, align 4, !tbaa !9
  %1253 = load i32, ptr %75, align 4, !tbaa !9
  %1254 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1251, i32 noundef %1252, i32 noundef %1253)
          to label %1255 unwind label %1259

1255:                                             ; preds = %1250
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %1254, i1 noundef zeroext true)
          to label %1256 unwind label %1259

1256:                                             ; preds = %1255
  %1257 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %1258 unwind label %1263

1258:                                             ; preds = %1256
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #6
  br label %1335

1259:                                             ; preds = %1255, %1250
  %1260 = landingpad { ptr, i32 }
          cleanup
  %1261 = extractvalue { ptr, i32 } %1260, 0
  store ptr %1261, ptr %11, align 8
  %1262 = extractvalue { ptr, i32 } %1260, 1
  store i32 %1262, ptr %12, align 4
  br label %1267

1263:                                             ; preds = %1256
  %1264 = landingpad { ptr, i32 }
          cleanup
  %1265 = extractvalue { ptr, i32 } %1264, 0
  store ptr %1265, ptr %11, align 8
  %1266 = extractvalue { ptr, i32 } %1264, 1
  store i32 %1266, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #6
  br label %1267

1267:                                             ; preds = %1263, %1259
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #6
  br label %1349

1268:                                             ; preds = %1248, %1241
  %1269 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %1270 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1269, i32 0, i32 15
  %1271 = load ptr, ptr %1270, align 8, !tbaa !157
  %1272 = load i8, ptr %1271, align 1, !tbaa !158
  %1273 = icmp ne i8 %1272, 0
  br i1 %1273, label %1274, label %1297

1274:                                             ; preds = %1268
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %78) #6
  %1275 = load ptr, ptr %7, align 8, !tbaa !5
  %1276 = load i32, ptr %8, align 4, !tbaa !9
  %1277 = load i32, ptr %75, align 4, !tbaa !9
  %1278 = invoke noundef zeroext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_u16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1275, i32 noundef %1276, i32 noundef %1277)
          to label %1279 unwind label %1288

1279:                                             ; preds = %1274
  store i16 %1278, ptr %78, align 2, !tbaa !159
  invoke void @_ZN11spirv_cross17convert_to_stringItTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 2 dereferenceable(2) %78)
          to label %1280 unwind label %1288

1280:                                             ; preds = %1279
  %1281 = 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) %77)
          to label %1282 unwind label %1292

1282:                                             ; preds = %1280
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %78) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #6
  %1283 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %1284 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1283, i32 0, i32 15
  %1285 = load ptr, ptr %1284, align 8, !tbaa !157
  %1286 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1285)
          to label %1287 unwind label %1234

1287:                                             ; preds = %1282
  br label %1334

1288:                                             ; preds = %1279, %1274
  %1289 = landingpad { ptr, i32 }
          cleanup
  %1290 = extractvalue { ptr, i32 } %1289, 0
  store ptr %1290, ptr %11, align 8
  %1291 = extractvalue { ptr, i32 } %1289, 1
  store i32 %1291, ptr %12, align 4
  br label %1296

1292:                                             ; preds = %1280
  %1293 = landingpad { ptr, i32 }
          cleanup
  %1294 = extractvalue { ptr, i32 } %1293, 0
  store ptr %1294, ptr %11, align 8
  %1295 = extractvalue { ptr, i32 } %1293, 1
  store i32 %1295, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #6
  br label %1296

1296:                                             ; preds = %1292, %1288
  call void @llvm.lifetime.end.p0(i64 2, ptr %78) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #6
  br label %1349

1297:                                             ; preds = %1268
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #6
  %1298 = load ptr, ptr %107, align 8, !tbaa !145
  %1299 = getelementptr inbounds ptr, ptr %1298, i64 19
  %1300 = load ptr, ptr %1299, align 8
  invoke void %1300(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %10, i32 noundef 0)
          to label %1301 unwind label %1316

1301:                                             ; preds = %1297
  %1302 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %79)
          to label %1303 unwind label %1320

1303:                                             ; preds = %1301
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #6
  %1304 = 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 %1305 unwind label %1234

1305:                                             ; preds = %1303
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %81) #6
  %1306 = load ptr, ptr %7, align 8, !tbaa !5
  %1307 = load i32, ptr %8, align 4, !tbaa !9
  %1308 = load i32, ptr %75, align 4, !tbaa !9
  %1309 = invoke noundef zeroext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_u16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1306, i32 noundef %1307, i32 noundef %1308)
          to label %1310 unwind label %1325

1310:                                             ; preds = %1305
  store i16 %1309, ptr %81, align 2, !tbaa !159
  invoke void @_ZN11spirv_cross17convert_to_stringItTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 2 dereferenceable(2) %81)
          to label %1311 unwind label %1325

1311:                                             ; preds = %1310
  %1312 = 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) %80)
          to label %1313 unwind label %1329

1313:                                             ; preds = %1311
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %81) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #6
  %1314 = 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 %1315 unwind label %1234

1315:                                             ; preds = %1313
  br label %1334

1316:                                             ; preds = %1297
  %1317 = landingpad { ptr, i32 }
          cleanup
  %1318 = extractvalue { ptr, i32 } %1317, 0
  store ptr %1318, ptr %11, align 8
  %1319 = extractvalue { ptr, i32 } %1317, 1
  store i32 %1319, ptr %12, align 4
  br label %1324

1320:                                             ; preds = %1301
  %1321 = landingpad { ptr, i32 }
          cleanup
  %1322 = extractvalue { ptr, i32 } %1321, 0
  store ptr %1322, ptr %11, align 8
  %1323 = extractvalue { ptr, i32 } %1321, 1
  store i32 %1323, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #6
  br label %1324

1324:                                             ; preds = %1320, %1316
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #6
  br label %1349

1325:                                             ; preds = %1310, %1305
  %1326 = landingpad { ptr, i32 }
          cleanup
  %1327 = extractvalue { ptr, i32 } %1326, 0
  store ptr %1327, ptr %11, align 8
  %1328 = extractvalue { ptr, i32 } %1326, 1
  store i32 %1328, ptr %12, align 4
  br label %1333

1329:                                             ; preds = %1311
  %1330 = landingpad { ptr, i32 }
          cleanup
  %1331 = extractvalue { ptr, i32 } %1330, 0
  store ptr %1331, ptr %11, align 8
  %1332 = extractvalue { ptr, i32 } %1330, 1
  store i32 %1332, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #6
  br label %1333

1333:                                             ; preds = %1329, %1325
  call void @llvm.lifetime.end.p0(i64 2, ptr %81) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #6
  br label %1349

1334:                                             ; preds = %1315, %1287
  br label %1335

1335:                                             ; preds = %1334, %1258
  %1336 = load i32, ptr %75, align 4, !tbaa !9
  %1337 = add i32 %1336, 1
  %1338 = load ptr, ptr %7, align 8, !tbaa !5
  %1339 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1338)
          to label %1340 unwind label %1234

1340:                                             ; preds = %1335
  %1341 = icmp ult i32 %1337, %1339
  br i1 %1341, label %1342, label %1345

1342:                                             ; preds = %1340
  %1343 = 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 %1344 unwind label %1234

1344:                                             ; preds = %1342
  br label %1345

1345:                                             ; preds = %1344, %1340
  br label %1346

1346:                                             ; preds = %1345
  %1347 = load i32, ptr %75, align 4, !tbaa !9
  %1348 = add i32 %1347, 1
  store i32 %1348, ptr %75, align 4, !tbaa !9
  br label %1227, !llvm.loop !161

1349:                                             ; preds = %1333, %1324, %1296, %1267, %1234
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #6
  br label %1833

1350:                                             ; preds = %1233
  br label %1351

1351:                                             ; preds = %1350, %1216
  br label %1820

1352:                                             ; preds = %298
  %1353 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %1354 = trunc i8 %1353 to i1
  br i1 %1354, label %1355, label %1372

1355:                                             ; preds = %1352
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %83) #6
  %1356 = load ptr, ptr %7, align 8, !tbaa !5
  %1357 = load i32, ptr %8, align 4, !tbaa !9
  %1358 = invoke noundef signext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_i16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1356, i32 noundef %1357, i32 noundef 0)
          to label %1359 unwind label %1363

1359:                                             ; preds = %1355
  store i16 %1358, ptr %83, align 2, !tbaa !159
  invoke void @_ZN11spirv_cross17convert_to_stringIsTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 2 dereferenceable(2) %83)
          to label %1360 unwind label %1363

1360:                                             ; preds = %1359
  %1361 = 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) %82)
          to label %1362 unwind label %1367

1362:                                             ; preds = %1360
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %83) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #6
  br label %1497

1363:                                             ; preds = %1359, %1355
  %1364 = landingpad { ptr, i32 }
          cleanup
  %1365 = extractvalue { ptr, i32 } %1364, 0
  store ptr %1365, ptr %11, align 8
  %1366 = extractvalue { ptr, i32 } %1364, 1
  store i32 %1366, ptr %12, align 4
  br label %1371

1367:                                             ; preds = %1360
  %1368 = landingpad { ptr, i32 }
          cleanup
  %1369 = extractvalue { ptr, i32 } %1368, 0
  store ptr %1369, ptr %11, align 8
  %1370 = extractvalue { ptr, i32 } %1368, 1
  store i32 %1370, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #6
  br label %1371

1371:                                             ; preds = %1367, %1363
  call void @llvm.lifetime.end.p0(i64 2, ptr %83) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #6
  br label %1833

1372:                                             ; preds = %1352
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #6
  store i32 0, ptr %84, align 4, !tbaa !9
  br label %1373

1373:                                             ; preds = %1492, %1372
  %1374 = load i32, ptr %84, align 4, !tbaa !9
  %1375 = load ptr, ptr %7, align 8, !tbaa !5
  %1376 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1375)
          to label %1377 unwind label %1380

1377:                                             ; preds = %1373
  %1378 = icmp ult i32 %1374, %1376
  br i1 %1378, label %1384, label %1379

1379:                                             ; preds = %1377
  store i32 36, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #6
  br label %1496

1380:                                             ; preds = %1488, %1481, %1459, %1449, %1428, %1389, %1384, %1373
  %1381 = landingpad { ptr, i32 }
          cleanup
  %1382 = extractvalue { ptr, i32 } %1381, 0
  store ptr %1382, ptr %11, align 8
  %1383 = extractvalue { ptr, i32 } %1381, 1
  store i32 %1383, ptr %12, align 4
  br label %1495

1384:                                             ; preds = %1377
  %1385 = load ptr, ptr %7, align 8, !tbaa !5
  %1386 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1385)
          to label %1387 unwind label %1380

1387:                                             ; preds = %1384
  %1388 = icmp ugt i32 %1386, 1
  br i1 %1388, label %1389, label %1414

1389:                                             ; preds = %1387
  %1390 = load ptr, ptr %7, align 8, !tbaa !5
  %1391 = load i32, ptr %8, align 4, !tbaa !9
  %1392 = load i32, ptr %84, align 4, !tbaa !9
  %1393 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1390, i32 noundef %1391, i32 noundef %1392)
          to label %1394 unwind label %1380

1394:                                             ; preds = %1389
  %1395 = icmp ne i32 %1393, 0
  br i1 %1395, label %1396, label %1414

1396:                                             ; preds = %1394
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #6
  %1397 = load ptr, ptr %7, align 8, !tbaa !5
  %1398 = load i32, ptr %8, align 4, !tbaa !9
  %1399 = load i32, ptr %84, align 4, !tbaa !9
  %1400 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1397, i32 noundef %1398, i32 noundef %1399)
          to label %1401 unwind label %1405

1401:                                             ; preds = %1396
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %1400, i1 noundef zeroext true)
          to label %1402 unwind label %1405

1402:                                             ; preds = %1401
  %1403 = 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) %85)
          to label %1404 unwind label %1409

1404:                                             ; preds = %1402
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #6
  br label %1481

1405:                                             ; preds = %1401, %1396
  %1406 = landingpad { ptr, i32 }
          cleanup
  %1407 = extractvalue { ptr, i32 } %1406, 0
  store ptr %1407, ptr %11, align 8
  %1408 = extractvalue { ptr, i32 } %1406, 1
  store i32 %1408, ptr %12, align 4
  br label %1413

1409:                                             ; preds = %1402
  %1410 = landingpad { ptr, i32 }
          cleanup
  %1411 = extractvalue { ptr, i32 } %1410, 0
  store ptr %1411, ptr %11, align 8
  %1412 = extractvalue { ptr, i32 } %1410, 1
  store i32 %1412, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #6
  br label %1413

1413:                                             ; preds = %1409, %1405
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #6
  br label %1495

1414:                                             ; preds = %1394, %1387
  %1415 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %1416 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1415, i32 0, i32 14
  %1417 = load ptr, ptr %1416, align 8, !tbaa !162
  %1418 = load i8, ptr %1417, align 1, !tbaa !158
  %1419 = icmp ne i8 %1418, 0
  br i1 %1419, label %1420, label %1443

1420:                                             ; preds = %1414
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %87) #6
  %1421 = load ptr, ptr %7, align 8, !tbaa !5
  %1422 = load i32, ptr %8, align 4, !tbaa !9
  %1423 = load i32, ptr %84, align 4, !tbaa !9
  %1424 = invoke noundef signext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_i16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1421, i32 noundef %1422, i32 noundef %1423)
          to label %1425 unwind label %1434

1425:                                             ; preds = %1420
  store i16 %1424, ptr %87, align 2, !tbaa !159
  invoke void @_ZN11spirv_cross17convert_to_stringIsTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 2 dereferenceable(2) %87)
          to label %1426 unwind label %1434

1426:                                             ; preds = %1425
  %1427 = 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) %86)
          to label %1428 unwind label %1438

1428:                                             ; preds = %1426
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %87) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #6
  %1429 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %107, i32 0, i32 21
  %1430 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1429, i32 0, i32 14
  %1431 = load ptr, ptr %1430, align 8, !tbaa !162
  %1432 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1431)
          to label %1433 unwind label %1380

1433:                                             ; preds = %1428
  br label %1480

1434:                                             ; preds = %1425, %1420
  %1435 = landingpad { ptr, i32 }
          cleanup
  %1436 = extractvalue { ptr, i32 } %1435, 0
  store ptr %1436, ptr %11, align 8
  %1437 = extractvalue { ptr, i32 } %1435, 1
  store i32 %1437, ptr %12, align 4
  br label %1442

1438:                                             ; preds = %1426
  %1439 = landingpad { ptr, i32 }
          cleanup
  %1440 = extractvalue { ptr, i32 } %1439, 0
  store ptr %1440, ptr %11, align 8
  %1441 = extractvalue { ptr, i32 } %1439, 1
  store i32 %1441, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #6
  br label %1442

1442:                                             ; preds = %1438, %1434
  call void @llvm.lifetime.end.p0(i64 2, ptr %87) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #6
  br label %1495

1443:                                             ; preds = %1414
  call void @llvm.lifetime.start.p0(i64 32, ptr %88) #6
  %1444 = load ptr, ptr %107, align 8, !tbaa !145
  %1445 = getelementptr inbounds ptr, ptr %1444, i64 19
  %1446 = load ptr, ptr %1445, align 8
  invoke void %1446(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %88, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %10, i32 noundef 0)
          to label %1447 unwind label %1462

1447:                                             ; preds = %1443
  %1448 = 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) %88)
          to label %1449 unwind label %1466

1449:                                             ; preds = %1447
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #6
  %1450 = 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 %1451 unwind label %1380

1451:                                             ; preds = %1449
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %90) #6
  %1452 = load ptr, ptr %7, align 8, !tbaa !5
  %1453 = load i32, ptr %8, align 4, !tbaa !9
  %1454 = load i32, ptr %84, align 4, !tbaa !9
  %1455 = invoke noundef signext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_i16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1452, i32 noundef %1453, i32 noundef %1454)
          to label %1456 unwind label %1471

1456:                                             ; preds = %1451
  store i16 %1455, ptr %90, align 2, !tbaa !159
  invoke void @_ZN11spirv_cross17convert_to_stringIsTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 2 dereferenceable(2) %90)
          to label %1457 unwind label %1471

1457:                                             ; preds = %1456
  %1458 = 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) %89)
          to label %1459 unwind label %1475

1459:                                             ; preds = %1457
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %90) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #6
  %1460 = 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 %1461 unwind label %1380

1461:                                             ; preds = %1459
  br label %1480

1462:                                             ; preds = %1443
  %1463 = landingpad { ptr, i32 }
          cleanup
  %1464 = extractvalue { ptr, i32 } %1463, 0
  store ptr %1464, ptr %11, align 8
  %1465 = extractvalue { ptr, i32 } %1463, 1
  store i32 %1465, ptr %12, align 4
  br label %1470

1466:                                             ; preds = %1447
  %1467 = landingpad { ptr, i32 }
          cleanup
  %1468 = extractvalue { ptr, i32 } %1467, 0
  store ptr %1468, ptr %11, align 8
  %1469 = extractvalue { ptr, i32 } %1467, 1
  store i32 %1469, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #6
  br label %1470

1470:                                             ; preds = %1466, %1462
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #6
  br label %1495

1471:                                             ; preds = %1456, %1451
  %1472 = landingpad { ptr, i32 }
          cleanup
  %1473 = extractvalue { ptr, i32 } %1472, 0
  store ptr %1473, ptr %11, align 8
  %1474 = extractvalue { ptr, i32 } %1472, 1
  store i32 %1474, ptr %12, align 4
  br label %1479

1475:                                             ; preds = %1457
  %1476 = landingpad { ptr, i32 }
          cleanup
  %1477 = extractvalue { ptr, i32 } %1476, 0
  store ptr %1477, ptr %11, align 8
  %1478 = extractvalue { ptr, i32 } %1476, 1
  store i32 %1478, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #6
  br label %1479

1479:                                             ; preds = %1475, %1471
  call void @llvm.lifetime.end.p0(i64 2, ptr %90) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #6
  br label %1495

1480:                                             ; preds = %1461, %1433
  br label %1481

1481:                                             ; preds = %1480, %1404
  %1482 = load i32, ptr %84, align 4, !tbaa !9
  %1483 = add i32 %1482, 1
  %1484 = load ptr, ptr %7, align 8, !tbaa !5
  %1485 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1484)
          to label %1486 unwind label %1380

1486:                                             ; preds = %1481
  %1487 = icmp ult i32 %1483, %1485
  br i1 %1487, label %1488, label %1491

1488:                                             ; preds = %1486
  %1489 = 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 %1490 unwind label %1380

1490:                                             ; preds = %1488
  br label %1491

1491:                                             ; preds = %1490, %1486
  br label %1492

1492:                                             ; preds = %1491
  %1493 = load i32, ptr %84, align 4, !tbaa !9
  %1494 = add i32 %1493, 1
  store i32 %1494, ptr %84, align 4, !tbaa !9
  br label %1373, !llvm.loop !163

1495:                                             ; preds = %1479, %1470, %1442, %1413, %1380
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #6
  br label %1833

1496:                                             ; preds = %1379
  br label %1497

1497:                                             ; preds = %1496, %1362
  br label %1820

1498:                                             ; preds = %298
  %1499 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %1500 = trunc i8 %1499 to i1
  br i1 %1500, label %1501, label %1518

1501:                                             ; preds = %1498
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %92) #6
  %1502 = load ptr, ptr %7, align 8, !tbaa !5
  %1503 = load i32, ptr %8, align 4, !tbaa !9
  %1504 = invoke noundef zeroext i8 @_ZNK11spirv_cross12SPIRConstant9scalar_u8Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1502, i32 noundef %1503, i32 noundef 0)
          to label %1505 unwind label %1509

1505:                                             ; preds = %1501
  store i8 %1504, ptr %92, align 1, !tbaa !158
  invoke void @_ZN11spirv_cross17convert_to_stringIhTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef nonnull align 1 dereferenceable(1) %92)
          to label %1506 unwind label %1509

1506:                                             ; preds = %1505
  %1507 = 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) %91)
          to label %1508 unwind label %1513

1508:                                             ; preds = %1506
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #6
  br label %1613

1509:                                             ; preds = %1505, %1501
  %1510 = landingpad { ptr, i32 }
          cleanup
  %1511 = extractvalue { ptr, i32 } %1510, 0
  store ptr %1511, ptr %11, align 8
  %1512 = extractvalue { ptr, i32 } %1510, 1
  store i32 %1512, ptr %12, align 4
  br label %1517

1513:                                             ; preds = %1506
  %1514 = landingpad { ptr, i32 }
          cleanup
  %1515 = extractvalue { ptr, i32 } %1514, 0
  store ptr %1515, ptr %11, align 8
  %1516 = extractvalue { ptr, i32 } %1514, 1
  store i32 %1516, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #6
  br label %1517

1517:                                             ; preds = %1513, %1509
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #6
  br label %1833

1518:                                             ; preds = %1498
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #6
  store i32 0, ptr %93, align 4, !tbaa !9
  br label %1519

1519:                                             ; preds = %1608, %1518
  %1520 = load i32, ptr %93, align 4, !tbaa !9
  %1521 = load ptr, ptr %7, align 8, !tbaa !5
  %1522 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1521)
          to label %1523 unwind label %1526

1523:                                             ; preds = %1519
  %1524 = icmp ult i32 %1520, %1522
  br i1 %1524, label %1530, label %1525

1525:                                             ; preds = %1523
  store i32 39, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #6
  br label %1612

1526:                                             ; preds = %1604, %1597, %1576, %1566, %1535, %1530, %1519
  %1527 = landingpad { ptr, i32 }
          cleanup
  %1528 = extractvalue { ptr, i32 } %1527, 0
  store ptr %1528, ptr %11, align 8
  %1529 = extractvalue { ptr, i32 } %1527, 1
  store i32 %1529, ptr %12, align 4
  br label %1611

1530:                                             ; preds = %1523
  %1531 = load ptr, ptr %7, align 8, !tbaa !5
  %1532 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1531)
          to label %1533 unwind label %1526

1533:                                             ; preds = %1530
  %1534 = icmp ugt i32 %1532, 1
  br i1 %1534, label %1535, label %1560

1535:                                             ; preds = %1533
  %1536 = load ptr, ptr %7, align 8, !tbaa !5
  %1537 = load i32, ptr %8, align 4, !tbaa !9
  %1538 = load i32, ptr %93, align 4, !tbaa !9
  %1539 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1536, i32 noundef %1537, i32 noundef %1538)
          to label %1540 unwind label %1526

1540:                                             ; preds = %1535
  %1541 = icmp ne i32 %1539, 0
  br i1 %1541, label %1542, label %1560

1542:                                             ; preds = %1540
  call void @llvm.lifetime.start.p0(i64 32, ptr %94) #6
  %1543 = load ptr, ptr %7, align 8, !tbaa !5
  %1544 = load i32, ptr %8, align 4, !tbaa !9
  %1545 = load i32, ptr %93, align 4, !tbaa !9
  %1546 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1543, i32 noundef %1544, i32 noundef %1545)
          to label %1547 unwind label %1551

1547:                                             ; preds = %1542
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %1546, i1 noundef zeroext true)
          to label %1548 unwind label %1551

1548:                                             ; preds = %1547
  %1549 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %94)
          to label %1550 unwind label %1555

1550:                                             ; preds = %1548
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #6
  br label %1597

1551:                                             ; preds = %1547, %1542
  %1552 = landingpad { ptr, i32 }
          cleanup
  %1553 = extractvalue { ptr, i32 } %1552, 0
  store ptr %1553, ptr %11, align 8
  %1554 = extractvalue { ptr, i32 } %1552, 1
  store i32 %1554, ptr %12, align 4
  br label %1559

1555:                                             ; preds = %1548
  %1556 = landingpad { ptr, i32 }
          cleanup
  %1557 = extractvalue { ptr, i32 } %1556, 0
  store ptr %1557, ptr %11, align 8
  %1558 = extractvalue { ptr, i32 } %1556, 1
  store i32 %1558, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #6
  br label %1559

1559:                                             ; preds = %1555, %1551
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #6
  br label %1611

1560:                                             ; preds = %1540, %1533
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #6
  %1561 = load ptr, ptr %107, align 8, !tbaa !145
  %1562 = getelementptr inbounds ptr, ptr %1561, i64 19
  %1563 = load ptr, ptr %1562, align 8
  invoke void %1563(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %10, i32 noundef 0)
          to label %1564 unwind label %1579

1564:                                             ; preds = %1560
  %1565 = 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) %95)
          to label %1566 unwind label %1583

1566:                                             ; preds = %1564
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #6
  %1567 = 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 %1568 unwind label %1526

1568:                                             ; preds = %1566
  call void @llvm.lifetime.start.p0(i64 32, ptr %96) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %97) #6
  %1569 = load ptr, ptr %7, align 8, !tbaa !5
  %1570 = load i32, ptr %8, align 4, !tbaa !9
  %1571 = load i32, ptr %93, align 4, !tbaa !9
  %1572 = invoke noundef zeroext i8 @_ZNK11spirv_cross12SPIRConstant9scalar_u8Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1569, i32 noundef %1570, i32 noundef %1571)
          to label %1573 unwind label %1588

1573:                                             ; preds = %1568
  store i8 %1572, ptr %97, align 1, !tbaa !158
  invoke void @_ZN11spirv_cross17convert_to_stringIhTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull align 1 dereferenceable(1) %97)
          to label %1574 unwind label %1588

1574:                                             ; preds = %1573
  %1575 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %96)
          to label %1576 unwind label %1592

1576:                                             ; preds = %1574
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #6
  %1577 = 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 %1578 unwind label %1526

1578:                                             ; preds = %1576
  br label %1597

1579:                                             ; preds = %1560
  %1580 = landingpad { ptr, i32 }
          cleanup
  %1581 = extractvalue { ptr, i32 } %1580, 0
  store ptr %1581, ptr %11, align 8
  %1582 = extractvalue { ptr, i32 } %1580, 1
  store i32 %1582, ptr %12, align 4
  br label %1587

1583:                                             ; preds = %1564
  %1584 = landingpad { ptr, i32 }
          cleanup
  %1585 = extractvalue { ptr, i32 } %1584, 0
  store ptr %1585, ptr %11, align 8
  %1586 = extractvalue { ptr, i32 } %1584, 1
  store i32 %1586, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #6
  br label %1587

1587:                                             ; preds = %1583, %1579
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #6
  br label %1611

1588:                                             ; preds = %1573, %1568
  %1589 = landingpad { ptr, i32 }
          cleanup
  %1590 = extractvalue { ptr, i32 } %1589, 0
  store ptr %1590, ptr %11, align 8
  %1591 = extractvalue { ptr, i32 } %1589, 1
  store i32 %1591, ptr %12, align 4
  br label %1596

1592:                                             ; preds = %1574
  %1593 = landingpad { ptr, i32 }
          cleanup
  %1594 = extractvalue { ptr, i32 } %1593, 0
  store ptr %1594, ptr %11, align 8
  %1595 = extractvalue { ptr, i32 } %1593, 1
  store i32 %1595, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #6
  br label %1596

1596:                                             ; preds = %1592, %1588
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #6
  br label %1611

1597:                                             ; preds = %1578, %1550
  %1598 = load i32, ptr %93, align 4, !tbaa !9
  %1599 = add i32 %1598, 1
  %1600 = load ptr, ptr %7, align 8, !tbaa !5
  %1601 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1600)
          to label %1602 unwind label %1526

1602:                                             ; preds = %1597
  %1603 = icmp ult i32 %1599, %1601
  br i1 %1603, label %1604, label %1607

1604:                                             ; preds = %1602
  %1605 = 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 %1606 unwind label %1526

1606:                                             ; preds = %1604
  br label %1607

1607:                                             ; preds = %1606, %1602
  br label %1608

1608:                                             ; preds = %1607
  %1609 = load i32, ptr %93, align 4, !tbaa !9
  %1610 = add i32 %1609, 1
  store i32 %1610, ptr %93, align 4, !tbaa !9
  br label %1519, !llvm.loop !164

1611:                                             ; preds = %1596, %1587, %1559, %1526
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #6
  br label %1833

1612:                                             ; preds = %1525
  br label %1613

1613:                                             ; preds = %1612, %1508
  br label %1820

1614:                                             ; preds = %298
  %1615 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %1616 = trunc i8 %1615 to i1
  br i1 %1616, label %1617, label %1634

1617:                                             ; preds = %1614
  call void @llvm.lifetime.start.p0(i64 32, ptr %98) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %99) #6
  %1618 = load ptr, ptr %7, align 8, !tbaa !5
  %1619 = load i32, ptr %8, align 4, !tbaa !9
  %1620 = invoke noundef signext i8 @_ZNK11spirv_cross12SPIRConstant9scalar_i8Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1618, i32 noundef %1619, i32 noundef 0)
          to label %1621 unwind label %1625

1621:                                             ; preds = %1617
  store i8 %1620, ptr %99, align 1, !tbaa !158
  invoke void @_ZN11spirv_cross17convert_to_stringIaTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %98, ptr noundef nonnull align 1 dereferenceable(1) %99)
          to label %1622 unwind label %1625

1622:                                             ; preds = %1621
  %1623 = 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) %98)
          to label %1624 unwind label %1629

1624:                                             ; preds = %1622
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %99) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %98) #6
  br label %1729

1625:                                             ; preds = %1621, %1617
  %1626 = landingpad { ptr, i32 }
          cleanup
  %1627 = extractvalue { ptr, i32 } %1626, 0
  store ptr %1627, ptr %11, align 8
  %1628 = extractvalue { ptr, i32 } %1626, 1
  store i32 %1628, ptr %12, align 4
  br label %1633

1629:                                             ; preds = %1622
  %1630 = landingpad { ptr, i32 }
          cleanup
  %1631 = extractvalue { ptr, i32 } %1630, 0
  store ptr %1631, ptr %11, align 8
  %1632 = extractvalue { ptr, i32 } %1630, 1
  store i32 %1632, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %98) #6
  br label %1633

1633:                                             ; preds = %1629, %1625
  call void @llvm.lifetime.end.p0(i64 1, ptr %99) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %98) #6
  br label %1833

1634:                                             ; preds = %1614
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #6
  store i32 0, ptr %100, align 4, !tbaa !9
  br label %1635

1635:                                             ; preds = %1724, %1634
  %1636 = load i32, ptr %100, align 4, !tbaa !9
  %1637 = load ptr, ptr %7, align 8, !tbaa !5
  %1638 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1637)
          to label %1639 unwind label %1642

1639:                                             ; preds = %1635
  %1640 = icmp ult i32 %1636, %1638
  br i1 %1640, label %1646, label %1641

1641:                                             ; preds = %1639
  store i32 42, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #6
  br label %1728

1642:                                             ; preds = %1720, %1713, %1692, %1682, %1651, %1646, %1635
  %1643 = landingpad { ptr, i32 }
          cleanup
  %1644 = extractvalue { ptr, i32 } %1643, 0
  store ptr %1644, ptr %11, align 8
  %1645 = extractvalue { ptr, i32 } %1643, 1
  store i32 %1645, ptr %12, align 4
  br label %1727

1646:                                             ; preds = %1639
  %1647 = load ptr, ptr %7, align 8, !tbaa !5
  %1648 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1647)
          to label %1649 unwind label %1642

1649:                                             ; preds = %1646
  %1650 = icmp ugt i32 %1648, 1
  br i1 %1650, label %1651, label %1676

1651:                                             ; preds = %1649
  %1652 = load ptr, ptr %7, align 8, !tbaa !5
  %1653 = load i32, ptr %8, align 4, !tbaa !9
  %1654 = load i32, ptr %100, align 4, !tbaa !9
  %1655 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1652, i32 noundef %1653, i32 noundef %1654)
          to label %1656 unwind label %1642

1656:                                             ; preds = %1651
  %1657 = icmp ne i32 %1655, 0
  br i1 %1657, label %1658, label %1676

1658:                                             ; preds = %1656
  call void @llvm.lifetime.start.p0(i64 32, ptr %101) #6
  %1659 = load ptr, ptr %7, align 8, !tbaa !5
  %1660 = load i32, ptr %8, align 4, !tbaa !9
  %1661 = load i32, ptr %100, align 4, !tbaa !9
  %1662 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1659, i32 noundef %1660, i32 noundef %1661)
          to label %1663 unwind label %1667

1663:                                             ; preds = %1658
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %101, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %1662, i1 noundef zeroext true)
          to label %1664 unwind label %1667

1664:                                             ; preds = %1663
  %1665 = 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) %101)
          to label %1666 unwind label %1671

1666:                                             ; preds = %1664
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #6
  br label %1713

1667:                                             ; preds = %1663, %1658
  %1668 = landingpad { ptr, i32 }
          cleanup
  %1669 = extractvalue { ptr, i32 } %1668, 0
  store ptr %1669, ptr %11, align 8
  %1670 = extractvalue { ptr, i32 } %1668, 1
  store i32 %1670, ptr %12, align 4
  br label %1675

1671:                                             ; preds = %1664
  %1672 = landingpad { ptr, i32 }
          cleanup
  %1673 = extractvalue { ptr, i32 } %1672, 0
  store ptr %1673, ptr %11, align 8
  %1674 = extractvalue { ptr, i32 } %1672, 1
  store i32 %1674, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #6
  br label %1675

1675:                                             ; preds = %1671, %1667
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #6
  br label %1727

1676:                                             ; preds = %1656, %1649
  call void @llvm.lifetime.start.p0(i64 32, ptr %102) #6
  %1677 = load ptr, ptr %107, align 8, !tbaa !145
  %1678 = getelementptr inbounds ptr, ptr %1677, i64 19
  %1679 = load ptr, ptr %1678, align 8
  invoke void %1679(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(9848) %107, ptr noundef nonnull align 8 dereferenceable(336) %10, i32 noundef 0)
          to label %1680 unwind label %1695

1680:                                             ; preds = %1676
  %1681 = 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) %102)
          to label %1682 unwind label %1699

1682:                                             ; preds = %1680
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #6
  %1683 = 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 %1684 unwind label %1642

1684:                                             ; preds = %1682
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %104) #6
  %1685 = load ptr, ptr %7, align 8, !tbaa !5
  %1686 = load i32, ptr %8, align 4, !tbaa !9
  %1687 = load i32, ptr %100, align 4, !tbaa !9
  %1688 = invoke noundef signext i8 @_ZNK11spirv_cross12SPIRConstant9scalar_i8Ejj(ptr noundef nonnull align 8 dereferenceable(360) %1685, i32 noundef %1686, i32 noundef %1687)
          to label %1689 unwind label %1704

1689:                                             ; preds = %1684
  store i8 %1688, ptr %104, align 1, !tbaa !158
  invoke void @_ZN11spirv_cross17convert_to_stringIaTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 1 dereferenceable(1) %104)
          to label %1690 unwind label %1704

1690:                                             ; preds = %1689
  %1691 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %103)
          to label %1692 unwind label %1708

1692:                                             ; preds = %1690
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %104) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #6
  %1693 = 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 %1694 unwind label %1642

1694:                                             ; preds = %1692
  br label %1713

1695:                                             ; preds = %1676
  %1696 = landingpad { ptr, i32 }
          cleanup
  %1697 = extractvalue { ptr, i32 } %1696, 0
  store ptr %1697, ptr %11, align 8
  %1698 = extractvalue { ptr, i32 } %1696, 1
  store i32 %1698, ptr %12, align 4
  br label %1703

1699:                                             ; preds = %1680
  %1700 = landingpad { ptr, i32 }
          cleanup
  %1701 = extractvalue { ptr, i32 } %1700, 0
  store ptr %1701, ptr %11, align 8
  %1702 = extractvalue { ptr, i32 } %1700, 1
  store i32 %1702, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #6
  br label %1703

1703:                                             ; preds = %1699, %1695
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #6
  br label %1727

1704:                                             ; preds = %1689, %1684
  %1705 = landingpad { ptr, i32 }
          cleanup
  %1706 = extractvalue { ptr, i32 } %1705, 0
  store ptr %1706, ptr %11, align 8
  %1707 = extractvalue { ptr, i32 } %1705, 1
  store i32 %1707, ptr %12, align 4
  br label %1712

1708:                                             ; preds = %1690
  %1709 = landingpad { ptr, i32 }
          cleanup
  %1710 = extractvalue { ptr, i32 } %1709, 0
  store ptr %1710, ptr %11, align 8
  %1711 = extractvalue { ptr, i32 } %1709, 1
  store i32 %1711, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #6
  br label %1712

1712:                                             ; preds = %1708, %1704
  call void @llvm.lifetime.end.p0(i64 1, ptr %104) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #6
  br label %1727

1713:                                             ; preds = %1694, %1666
  %1714 = load i32, ptr %100, align 4, !tbaa !9
  %1715 = add i32 %1714, 1
  %1716 = load ptr, ptr %7, align 8, !tbaa !5
  %1717 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1716)
          to label %1718 unwind label %1642

1718:                                             ; preds = %1713
  %1719 = icmp ult i32 %1715, %1717
  br i1 %1719, label %1720, label %1723

1720:                                             ; preds = %1718
  %1721 = 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 %1722 unwind label %1642

1722:                                             ; preds = %1720
  br label %1723

1723:                                             ; preds = %1722, %1718
  br label %1724

1724:                                             ; preds = %1723
  %1725 = load i32, ptr %100, align 4, !tbaa !9
  %1726 = add i32 %1725, 1
  store i32 %1726, ptr %100, align 4, !tbaa !9
  br label %1635, !llvm.loop !165

1727:                                             ; preds = %1712, %1703, %1675, %1642
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #6
  br label %1833

1728:                                             ; preds = %1641
  br label %1729

1729:                                             ; preds = %1728, %1624
  br label %1820

1730:                                             ; preds = %298
  %1731 = load i8, ptr %14, align 1, !tbaa !137, !range !135, !noundef !136
  %1732 = trunc i8 %1731 to i1
  br i1 %1732, label %1733, label %1743

1733:                                             ; preds = %1730
  %1734 = load ptr, ptr %7, align 8, !tbaa !5
  %1735 = load i32, ptr %8, align 4, !tbaa !9
  %1736 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1734, i32 noundef %1735, i32 noundef 0)
          to label %1737 unwind label %150

1737:                                             ; preds = %1733
  %1738 = icmp ne i32 %1736, 0
  %1739 = zext i1 %1738 to i64
  %1740 = select i1 %1738, ptr @.str.672, ptr @.str.551
  %1741 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1740)
          to label %1742 unwind label %150

1742:                                             ; preds = %1737
  br label %1812

1743:                                             ; preds = %1730
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #6
  store i32 0, ptr %105, align 4, !tbaa !9
  br label %1744

1744:                                             ; preds = %1807, %1743
  %1745 = load i32, ptr %105, align 4, !tbaa !9
  %1746 = load ptr, ptr %7, align 8, !tbaa !5
  %1747 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1746)
          to label %1748 unwind label %1751

1748:                                             ; preds = %1744
  %1749 = icmp ult i32 %1745, %1747
  br i1 %1749, label %1755, label %1750

1750:                                             ; preds = %1748
  store i32 45, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #6
  br label %1811

1751:                                             ; preds = %1803, %1796, %1790, %1785, %1760, %1755, %1744
  %1752 = landingpad { ptr, i32 }
          cleanup
  %1753 = extractvalue { ptr, i32 } %1752, 0
  store ptr %1753, ptr %11, align 8
  %1754 = extractvalue { ptr, i32 } %1752, 1
  store i32 %1754, ptr %12, align 4
  br label %1810

1755:                                             ; preds = %1748
  %1756 = load ptr, ptr %7, align 8, !tbaa !5
  %1757 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1756)
          to label %1758 unwind label %1751

1758:                                             ; preds = %1755
  %1759 = icmp ugt i32 %1757, 1
  br i1 %1759, label %1760, label %1785

1760:                                             ; preds = %1758
  %1761 = load ptr, ptr %7, align 8, !tbaa !5
  %1762 = load i32, ptr %8, align 4, !tbaa !9
  %1763 = load i32, ptr %105, align 4, !tbaa !9
  %1764 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1761, i32 noundef %1762, i32 noundef %1763)
          to label %1765 unwind label %1751

1765:                                             ; preds = %1760
  %1766 = icmp ne i32 %1764, 0
  br i1 %1766, label %1767, label %1785

1767:                                             ; preds = %1765
  call void @llvm.lifetime.start.p0(i64 32, ptr %106) #6
  %1768 = load ptr, ptr %7, align 8, !tbaa !5
  %1769 = load i32, ptr %8, align 4, !tbaa !9
  %1770 = load i32, ptr %105, align 4, !tbaa !9
  %1771 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %1768, i32 noundef %1769, i32 noundef %1770)
          to label %1772 unwind label %1776

1772:                                             ; preds = %1767
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %106, ptr noundef nonnull align 8 dereferenceable(9848) %107, i32 noundef %1771, i1 noundef zeroext true)
          to label %1773 unwind label %1776

1773:                                             ; preds = %1772
  %1774 = 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) %106)
          to label %1775 unwind label %1780

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

1776:                                             ; preds = %1772, %1767
  %1777 = landingpad { ptr, i32 }
          cleanup
  %1778 = extractvalue { ptr, i32 } %1777, 0
  store ptr %1778, ptr %11, align 8
  %1779 = extractvalue { ptr, i32 } %1777, 1
  store i32 %1779, ptr %12, align 4
  br label %1784

1780:                                             ; preds = %1773
  %1781 = landingpad { ptr, i32 }
          cleanup
  %1782 = extractvalue { ptr, i32 } %1781, 0
  store ptr %1782, ptr %11, align 8
  %1783 = extractvalue { ptr, i32 } %1781, 1
  store i32 %1783, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #6
  br label %1784

1784:                                             ; preds = %1780, %1776
  call void @llvm.lifetime.end.p0(i64 32, ptr %106) #6
  br label %1810

1785:                                             ; preds = %1765, %1758
  %1786 = load ptr, ptr %7, align 8, !tbaa !5
  %1787 = load i32, ptr %8, align 4, !tbaa !9
  %1788 = load i32, ptr %105, align 4, !tbaa !9
  %1789 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1786, i32 noundef %1787, i32 noundef %1788)
          to label %1790 unwind label %1751

1790:                                             ; preds = %1785
  %1791 = icmp ne i32 %1789, 0
  %1792 = zext i1 %1791 to i64
  %1793 = select i1 %1791, ptr @.str.672, ptr @.str.551
  %1794 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1793)
          to label %1795 unwind label %1751

1795:                                             ; preds = %1790
  br label %1796

1796:                                             ; preds = %1795, %1775
  %1797 = load i32, ptr %105, align 4, !tbaa !9
  %1798 = add i32 %1797, 1
  %1799 = load ptr, ptr %7, align 8, !tbaa !5
  %1800 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1799)
          to label %1801 unwind label %1751

1801:                                             ; preds = %1796
  %1802 = icmp ult i32 %1798, %1800
  br i1 %1802, label %1803, label %1806

1803:                                             ; preds = %1801
  %1804 = 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 %1805 unwind label %1751

1805:                                             ; preds = %1803
  br label %1806

1806:                                             ; preds = %1805, %1801
  br label %1807

1807:                                             ; preds = %1806
  %1808 = load i32, ptr %105, align 4, !tbaa !9
  %1809 = add i32 %1808, 1
  store i32 %1809, ptr %105, align 4, !tbaa !9
  br label %1744, !llvm.loop !166

1810:                                             ; preds = %1784, %1751
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #6
  br label %1833

1811:                                             ; preds = %1750
  br label %1812

1812:                                             ; preds = %1811, %1742
  br label %1820

1813:                                             ; preds = %298
  %1814 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1814, ptr noundef @.str.1012)
          to label %1815 unwind label %1816

1815:                                             ; preds = %1813
  invoke void @__cxa_throw(ptr %1814, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #7
          to label %1843 unwind label %150

1816:                                             ; preds = %1813
  %1817 = landingpad { ptr, i32 }
          cleanup
  %1818 = extractvalue { ptr, i32 } %1817, 0
  store ptr %1818, ptr %11, align 8
  %1819 = extractvalue { ptr, i32 } %1817, 1
  store i32 %1819, ptr %12, align 4
  call void @__cxa_free_exception(ptr %1814) #6
  br label %1833

1820:                                             ; preds = %1812, %1729, %1613, %1497, %1351, %1205, %1108, %878, %756, %636, %524, %412
  %1821 = load ptr, ptr %7, align 8, !tbaa !5
  %1822 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %1821)
          to label %1823 unwind label %150

1823:                                             ; preds = %1820
  %1824 = icmp ugt i32 %1822, 1
  br i1 %1824, label %1825, label %1831

1825:                                             ; preds = %1823
  %1826 = load i8, ptr %15, align 1, !tbaa !137, !range !135, !noundef !136
  %1827 = trunc i8 %1826 to i1
  br i1 %1827, label %1831, label %1828

1828:                                             ; preds = %1825
  %1829 = 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 %1830 unwind label %150

1830:                                             ; preds = %1828
  br label %1831

1831:                                             ; preds = %1830, %1825, %1823
  store i1 true, ptr %13, align 1
  store i32 1, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  %1832 = load i1, ptr %13, align 1
  br i1 %1832, label %1836, label %1835

1833:                                             ; preds = %1816, %1810, %1727, %1633, %1611, %1517, %1495, %1371, %1349, %1225, %1203, %1128, %1106, %950, %949, %928, %876, %786, %759, %634, %557, %556, %522, %445, %444, %410, %333, %332, %297, %266, %231, %168, %150
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  br label %1834

1834:                                             ; preds = %1833, %146
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %10) #6
  br label %1837

1835:                                             ; preds = %1831
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %1836

1836:                                             ; preds = %1835, %1831
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %10) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr %10) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %9) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr %9) #6
  ret void

1837:                                             ; preds = %1834, %142
  call void @llvm.lifetime.end.p0(i64 336, ptr %10) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %9) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr %9) #6
  br label %1838

1838:                                             ; preds = %1837
  %1839 = load ptr, ptr %11, align 8
  %1840 = load i32, ptr %12, align 4
  %1841 = insertvalue { ptr, i32 } poison, ptr %1839, 0
  %1842 = insertvalue { ptr, i32 } %1841, i32 %1840, 1
  resume { ptr, i32 } %1842

1843:                                             ; preds = %1815, %1046, %919
  unreachable
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) #4

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN11spirv_crossL17convert_to_stringB5cxx11Ei(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) #5

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

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

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

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

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

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

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

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

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

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

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


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

@_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.185 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.551 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.672 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1002 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1003 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1010 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.1011 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1012 = external hidden unnamed_addr constant [38 x i8], align 1

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare 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 #3 align 2

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

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

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

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

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

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

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

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

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

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

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

76:                                               ; preds = %4
  %77 = getelementptr inbounds i8, ptr %6, i64 24
  store i32 1, ptr %77, align 8, !tbaa !37
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  %78 = getelementptr inbounds i8, ptr %1, i64 8389
  %79 = load i8, ptr %78, align 1, !tbaa !38, !range !133, !noundef !134
  %80 = trunc nuw i8 %79 to i1
  br i1 %80, label %81, label %84

81:                                               ; preds = %76
  %82 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %83 = icmp ugt i32 %82, 1
  br label %84

84:                                               ; preds = %81, %76
  %85 = phi i1 [ false, %76 ], [ %83, %81 ]
  %86 = getelementptr inbounds i8, ptr %1, i64 8391
  %87 = load i8, ptr %86, align 1, !tbaa !135, !range !133, !noundef !134
  %88 = trunc nuw i8 %87 to i1
  br i1 %88, label %89, label %92

89:                                               ; preds = %84
  %90 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %91 = icmp ugt i32 %90, 1
  br label %92

92:                                               ; preds = %89, %84
  %93 = phi i1 [ false, %84 ], [ %91, %89 ]
  %94 = call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %5)
  %narrow = and i1 %93, %94
  %spec.select = zext i1 %narrow to i8
  %brmerge = or i1 %85, %narrow
  br i1 %brmerge, label %.preheader527, label %.thread

.preheader527:                                    ; preds = %92
  %95 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not580 = icmp eq i32 %95, 0
  br i1 %.not580, label %._crit_edge, label %.lr.ph

96:                                               ; preds = %4
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %864

98:                                               ; preds = %.invoke617, %.invoke, %860
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %862

100:                                              ; preds = %.lr.ph
  %101 = add nuw i32 %.0361529, 1
  %102 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %103 = icmp ult i32 %101, %102
  br i1 %103, label %.lr.ph, label %._crit_edge, !llvm.loop !136

.lr.ph:                                           ; preds = %.preheader527, %100
  %.0361529 = phi i32 [ %101, %100 ], [ 0, %.preheader527 ]
  %104 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0361529)
  %.not = icmp eq i32 %104, 0
  br i1 %.not, label %100, label %.thread.thread

._crit_edge:                                      ; preds = %100, %.preheader527
  %brmerge618 = or i1 %85, %narrow
  %.mux = zext i1 %85 to i8
  br i1 %brmerge618, label %105, label %.thread.thread

.thread:                                          ; preds = %92
  br i1 %narrow, label %105, label %.thread.thread

105:                                              ; preds = %._crit_edge, %.thread
  %.1370496 = phi i8 [ 0, %.thread ], [ %.mux, %._crit_edge ]
  %106 = getelementptr inbounds i8, ptr %5, i64 20
  %107 = load i32, ptr %106, align 4, !tbaa !138
  %108 = icmp eq i32 %107, 64
  br i1 %108, label %109, label %118

109:                                              ; preds = %105
  %110 = call noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_u64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  %111 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %112 = icmp ugt i32 %111, 1
  br i1 %112, label %.lr.ph538, label %.thread.thread

113:                                              ; preds = %.lr.ph538
  %114 = add nuw i32 %.0311536, 1
  %115 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %116 = icmp ult i32 %114, %115
  br i1 %116, label %.lr.ph538, label %.thread.thread, !llvm.loop !139

.lr.ph538:                                        ; preds = %109, %113
  %.0311536 = phi i32 [ %114, %113 ], [ 1, %109 ]
  %117 = call noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_u64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0311536)
  %.not376 = icmp eq i64 %110, %117
  br i1 %.not376, label %113, label %.thread.thread

118:                                              ; preds = %105
  %119 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  %120 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %121 = icmp ugt i32 %120, 1
  br i1 %121, label %.lr.ph534, label %.thread.thread

.lr.ph534:                                        ; preds = %118, %.lr.ph534
  %.0309532 = phi i32 [ %123, %.lr.ph534 ], [ 1, %118 ]
  %.4366531 = phi i8 [ %spec.select486, %.lr.ph534 ], [ %spec.select, %118 ]
  %.3372530 = phi i8 [ %spec.select485, %.lr.ph534 ], [ %.1370496, %118 ]
  %122 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0309532)
  %.not375 = icmp eq i32 %119, %122
  %spec.select485 = select i1 %.not375, i8 %.3372530, i8 0
  %spec.select486 = select i1 %.not375, i8 %.4366531, i8 0
  %123 = add nuw i32 %.0309532, 1
  %124 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %125 = icmp ult i32 %123, %124
  br i1 %125, label %.lr.ph534, label %.thread.thread, !llvm.loop !140

.thread.thread:                                   ; preds = %.lr.ph, %.lr.ph534, %.lr.ph538, %113, %._crit_edge, %118, %109, %.thread
  %.5374 = phi i8 [ 0, %.thread ], [ %.1370496, %109 ], [ %.1370496, %118 ], [ 0, %._crit_edge ], [ 0, %.lr.ph538 ], [ %.1370496, %113 ], [ %spec.select485, %.lr.ph534 ], [ 0, %.lr.ph ]
  %.6368 = phi i8 [ 0, %.thread ], [ %spec.select, %109 ], [ %spec.select, %118 ], [ 0, %._crit_edge ], [ 0, %.lr.ph538 ], [ %spec.select, %113 ], [ %spec.select486, %.lr.ph534 ], [ 0, %.lr.ph ]
  %126 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %127 = icmp ugt i32 %126, 1
  br i1 %127, label %128, label %146

128:                                              ; preds = %.thread.thread
  %129 = trunc nuw i8 %.6368 to i1
  br i1 %129, label %146, label %130

130:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #6
  %131 = load ptr, ptr %1, align 8, !tbaa !141
  %132 = getelementptr inbounds i8, ptr %131, i64 152
  %133 = load ptr, ptr %132, align 8
  invoke void %133(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef 0)
          to label %134 unwind label %138

134:                                              ; preds = %130
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.718)
          to label %135 unwind label %140

135:                                              ; preds = %134
  %136 = 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) %7)
          to label %137 unwind label %142

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

138:                                              ; preds = %130
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %145

140:                                              ; preds = %134
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %144

142:                                              ; preds = %135
  %143 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  br label %144

144:                                              ; preds = %142, %140
  %.pn = phi { ptr, i32 } [ %143, %142 ], [ %141, %140 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  br label %145

145:                                              ; preds = %144, %138
  %.pn.pn = phi { ptr, i32 } [ %.pn, %144 ], [ %139, %138 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %862

146:                                              ; preds = %137, %128, %.thread.thread
  %147 = getelementptr inbounds i8, ptr %5, i64 16
  %148 = load i32, ptr %147, align 8, !tbaa !143
  switch i32 %148, label %851 [
    i32 12, label %149
    i32 13, label %206
    i32 14, label %263
    i32 9, label %320
    i32 10, label %389
    i32 8, label %444
    i32 7, label %524
    i32 6, label %572
    i32 5, label %639
    i32 4, label %706
    i32 3, label %760
    i32 2, label %814
  ]

149:                                              ; preds = %146
  %150 = trunc nuw i8 %.5374 to i1
  br i1 %150, label %154, label %151

151:                                              ; preds = %149
  %152 = trunc nuw i8 %.6368 to i1
  br i1 %152, label %154, label %.preheader

.preheader:                                       ; preds = %151
  %153 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not592 = icmp eq i32 %153, 0
  br i1 %.not592, label %.loopexit, label %.lr.ph579

154:                                              ; preds = %151, %149
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL22convert_half_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
          to label %155 unwind label %165

155:                                              ; preds = %154
  %156 = 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) %9)
          to label %157 unwind label %167

157:                                              ; preds = %155
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  %158 = trunc nuw i8 %.6368 to i1
  br i1 %158, label %159, label %.loopexit

159:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  %160 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  %161 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %160)
          to label %162 unwind label %170

162:                                              ; preds = %159
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %161, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %163 unwind label %170

163:                                              ; preds = %162
  %164 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %.loopexit

165:                                              ; preds = %154
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %169

167:                                              ; preds = %155
  %168 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  br label %169

169:                                              ; preds = %167, %165
  %.pn480 = phi { ptr, i32 } [ %168, %167 ], [ %166, %165 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %862

170:                                              ; preds = %162, %159
  %171 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %862

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

.lr.ph579:                                        ; preds = %.preheader, %203
  %.0308577 = phi i32 [ %198, %203 ], [ 0, %.preheader ]
  %174 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %175 = icmp ugt i32 %174, 1
  br i1 %175, label %176, label %188

176:                                              ; preds = %.lr.ph579
  %177 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0308577)
  %.not473 = icmp eq i32 %177, 0
  br i1 %.not473, label %188, label %178

178:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  %179 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0308577)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_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 %179, i1 noundef zeroext true)
          to label %180 unwind label %183

180:                                              ; preds = %178
  %181 = 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) %11)
          to label %182 unwind label %185

182:                                              ; preds = %180
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %197

183:                                              ; preds = %178
  %184 = landingpad { ptr, i32 }
          cleanup
  br label %187

185:                                              ; preds = %180
  %186 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  br label %187

187:                                              ; preds = %185, %183
  %.pn476 = phi { ptr, i32 } [ %186, %185 ], [ %184, %183 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %862

188:                                              ; preds = %176, %.lr.ph579
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL22convert_half_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0308577)
          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) %12)
          to label %191 unwind label %194

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

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) %12) #6
  br label %196

196:                                              ; preds = %194, %192
  %.pn474 = phi { ptr, i32 } [ %195, %194 ], [ %193, %192 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %862

197:                                              ; preds = %191, %182
  %198 = add nuw i32 %.0308577, 1
  %199 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %200 = icmp ult i32 %198, %199
  br i1 %200, label %201, label %203

201:                                              ; preds = %197
  %202 = 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 %203 unwind label %172

203:                                              ; preds = %197, %201
  %204 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %205 = icmp ult i32 %198, %204
  br i1 %205, label %.lr.ph579, label %.loopexit, !llvm.loop !144

206:                                              ; preds = %146
  %207 = trunc nuw i8 %.5374 to i1
  br i1 %207, label %211, label %208

208:                                              ; preds = %206
  %209 = trunc nuw i8 %.6368 to i1
  br i1 %209, label %211, label %.preheader503

.preheader503:                                    ; preds = %208
  %210 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not591 = icmp eq i32 %210, 0
  br i1 %.not591, label %.loopexit, label %.lr.ph576

211:                                              ; preds = %208, %206
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL23convert_float_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
          to label %212 unwind label %222

212:                                              ; preds = %211
  %213 = 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) %13)
          to label %214 unwind label %224

214:                                              ; preds = %212
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  %215 = trunc nuw i8 %.6368 to i1
  br i1 %215, label %216, label %.loopexit

216:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  %217 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  %218 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %217)
          to label %219 unwind label %227

219:                                              ; preds = %216
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %218, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %220 unwind label %227

220:                                              ; preds = %219
  %221 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %.loopexit

222:                                              ; preds = %211
  %223 = landingpad { ptr, i32 }
          cleanup
  br label %226

224:                                              ; preds = %212
  %225 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  br label %226

226:                                              ; preds = %224, %222
  %.pn471 = phi { ptr, i32 } [ %225, %224 ], [ %223, %222 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %862

227:                                              ; preds = %219, %216
  %228 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  br label %862

229:                                              ; preds = %258
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %862

.lr.ph576:                                        ; preds = %.preheader503, %260
  %.0307574 = phi i32 [ %255, %260 ], [ 0, %.preheader503 ]
  %231 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %232 = icmp ugt i32 %231, 1
  br i1 %232, label %233, label %245

233:                                              ; preds = %.lr.ph576
  %234 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0307574)
  %.not464 = icmp eq i32 %234, 0
  br i1 %.not464, label %245, label %235

235:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  %236 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0307574)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %236, i1 noundef zeroext true)
          to label %237 unwind label %240

237:                                              ; preds = %235
  %238 = 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 %239 unwind label %242

239:                                              ; preds = %237
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %254

240:                                              ; preds = %235
  %241 = landingpad { ptr, i32 }
          cleanup
  br label %244

242:                                              ; preds = %237
  %243 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %244

244:                                              ; preds = %242, %240
  %.pn467 = phi { ptr, i32 } [ %243, %242 ], [ %241, %240 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %862

245:                                              ; preds = %233, %.lr.ph576
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL23convert_float_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0307574)
          to label %246 unwind label %249

246:                                              ; preds = %245
  %247 = 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) %16)
          to label %248 unwind label %251

248:                                              ; preds = %246
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %254

249:                                              ; preds = %245
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %253

251:                                              ; preds = %246
  %252 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  br label %253

253:                                              ; preds = %251, %249
  %.pn465 = phi { ptr, i32 } [ %252, %251 ], [ %250, %249 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %862

254:                                              ; preds = %248, %239
  %255 = add nuw i32 %.0307574, 1
  %256 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %257 = icmp ult i32 %255, %256
  br i1 %257, label %258, label %260

258:                                              ; preds = %254
  %259 = 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 %260 unwind label %229

260:                                              ; preds = %254, %258
  %261 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %262 = icmp ult i32 %255, %261
  br i1 %262, label %.lr.ph576, label %.loopexit, !llvm.loop !145

263:                                              ; preds = %146
  %264 = trunc nuw i8 %.5374 to i1
  br i1 %264, label %268, label %265

265:                                              ; preds = %263
  %266 = trunc nuw i8 %.6368 to i1
  br i1 %266, label %268, label %.preheader505

.preheader505:                                    ; preds = %265
  %267 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not590 = icmp eq i32 %267, 0
  br i1 %.not590, label %.loopexit, label %.lr.ph573

268:                                              ; preds = %265, %263
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL24convert_double_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
          to label %269 unwind label %279

269:                                              ; preds = %268
  %270 = 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 %271 unwind label %281

271:                                              ; preds = %269
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  %272 = trunc nuw i8 %.6368 to i1
  br i1 %272, label %273, label %.loopexit

273:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  %274 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %72)
  %275 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %274)
          to label %276 unwind label %284

276:                                              ; preds = %273
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %275, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) %0)
          to label %277 unwind label %284

277:                                              ; preds = %276
  %278 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %.loopexit

279:                                              ; preds = %268
  %280 = landingpad { ptr, i32 }
          cleanup
  br label %283

281:                                              ; preds = %269
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  br label %283

283:                                              ; preds = %281, %279
  %.pn462 = phi { ptr, i32 } [ %282, %281 ], [ %280, %279 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  br label %862

284:                                              ; preds = %276, %273
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %862

286:                                              ; preds = %315
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %862

.lr.ph573:                                        ; preds = %.preheader505, %317
  %.0306571 = phi i32 [ %312, %317 ], [ 0, %.preheader505 ]
  %288 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %289 = icmp ugt i32 %288, 1
  br i1 %289, label %290, label %302

290:                                              ; preds = %.lr.ph573
  %291 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0306571)
  %.not455 = icmp eq i32 %291, 0
  br i1 %.not455, label %302, label %292

292:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  %293 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0306571)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %293, i1 noundef zeroext true)
          to label %294 unwind label %297

294:                                              ; preds = %292
  %295 = 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) %19)
          to label %296 unwind label %299

296:                                              ; preds = %294
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %311

297:                                              ; preds = %292
  %298 = landingpad { ptr, i32 }
          cleanup
  br label %301

299:                                              ; preds = %294
  %300 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  br label %301

301:                                              ; preds = %299, %297
  %.pn458 = phi { ptr, i32 } [ %300, %299 ], [ %298, %297 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %862

302:                                              ; preds = %290, %.lr.ph573
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL24convert_double_to_stringB5cxx11ERKNS_12SPIRConstantEjj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0306571)
          to label %303 unwind label %306

303:                                              ; preds = %302
  %304 = 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) %20)
          to label %305 unwind label %308

305:                                              ; preds = %303
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  br label %311

306:                                              ; preds = %302
  %307 = landingpad { ptr, i32 }
          cleanup
  br label %310

308:                                              ; preds = %303
  %309 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  br label %310

310:                                              ; preds = %308, %306
  %.pn456 = phi { ptr, i32 } [ %309, %308 ], [ %307, %306 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  br label %862

311:                                              ; preds = %305, %296
  %312 = add nuw i32 %.0306571, 1
  %313 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %314 = icmp ult i32 %312, %313
  br i1 %314, label %315, label %317

315:                                              ; preds = %311
  %316 = 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 %317 unwind label %286

317:                                              ; preds = %311, %315
  %318 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %319 = icmp ult i32 %312, %318
  br i1 %319, label %.lr.ph573, label %.loopexit, !llvm.loop !146

320:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %21) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %21, ptr noundef nonnull align 8 dereferenceable(336) %5)
          to label %321 unwind label %339

321:                                              ; preds = %320
  %322 = getelementptr inbounds i8, ptr %21, i64 24
  store i32 1, ptr %322, align 8, !tbaa !37
  %323 = getelementptr inbounds i8, ptr %21, i64 28
  store i32 1, ptr %323, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #6
  %324 = load ptr, ptr %1, align 8, !tbaa !141
  %325 = getelementptr inbounds i8, ptr %324, i64 152
  %326 = load ptr, ptr %325, align 8
  invoke void %326(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %21, i32 noundef 0)
          to label %327 unwind label %341

327:                                              ; preds = %321
  %328 = trunc nuw i8 %.5374 to i1
  br i1 %328, label %331, label %.preheader507

.preheader507:                                    ; preds = %327
  %329 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not589 = icmp eq i32 %329, 0
  br i1 %.not589, label %.loopexit508, label %.lr.ph570

.lr.ph570:                                        ; preds = %.preheader507
  %330 = getelementptr inbounds i8, ptr %1, i64 8291
  br label %350

331:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #6
  %332 = call noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_i64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  %333 = getelementptr inbounds i8, ptr %1, i64 8291
  %334 = load i8, ptr %333, align 1, !tbaa !147, !range !133, !noundef !134
  %335 = trunc nuw i8 %334 to i1
  invoke void @_ZN11spirv_crossL17convert_to_stringElRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, i64 noundef %332, ptr noundef nonnull align 8 dereferenceable(32) %22, i1 noundef zeroext %335)
          to label %336 unwind label %343

336:                                              ; preds = %331
  %337 = 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) %23)
          to label %338 unwind label %345

338:                                              ; preds = %336
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  br label %.loopexit508

339:                                              ; preds = %320
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %388

341:                                              ; preds = %321
  %342 = landingpad { ptr, i32 }
          cleanup
  br label %387

343:                                              ; preds = %331
  %344 = landingpad { ptr, i32 }
          cleanup
  br label %347

345:                                              ; preds = %336
  %346 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  br label %347

347:                                              ; preds = %345, %343
  %.pn450 = phi { ptr, i32 } [ %346, %345 ], [ %344, %343 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  br label %386

348:                                              ; preds = %381
  %349 = landingpad { ptr, i32 }
          cleanup
  br label %386

350:                                              ; preds = %.lr.ph570, %383
  %.0305568 = phi i32 [ 0, %.lr.ph570 ], [ %378, %383 ]
  %351 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %352 = icmp ugt i32 %351, 1
  br i1 %352, label %353, label %365

353:                                              ; preds = %350
  %354 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0305568)
  %.not443 = icmp eq i32 %354, 0
  br i1 %.not443, label %365, label %355

355:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #6
  %356 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0305568)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %356, i1 noundef zeroext true)
          to label %357 unwind label %360

357:                                              ; preds = %355
  %358 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %359 unwind label %362

359:                                              ; preds = %357
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  br label %377

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

362:                                              ; preds = %357
  %363 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  br label %364

364:                                              ; preds = %362, %360
  %.pn446 = phi { ptr, i32 } [ %363, %362 ], [ %361, %360 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  br label %386

365:                                              ; preds = %353, %350
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  %366 = call noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_i64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0305568)
  %367 = load i8, ptr %330, align 1, !tbaa !147, !range !133, !noundef !134
  %368 = trunc nuw i8 %367 to i1
  invoke void @_ZN11spirv_crossL17convert_to_stringElRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, i64 noundef %366, ptr noundef nonnull align 8 dereferenceable(32) %22, i1 noundef zeroext %368)
          to label %369 unwind label %372

369:                                              ; preds = %365
  %370 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %371 unwind label %374

371:                                              ; preds = %369
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %377

372:                                              ; preds = %365
  %373 = landingpad { ptr, i32 }
          cleanup
  br label %376

374:                                              ; preds = %369
  %375 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  br label %376

376:                                              ; preds = %374, %372
  %.pn444 = phi { ptr, i32 } [ %375, %374 ], [ %373, %372 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %386

377:                                              ; preds = %371, %359
  %378 = add nuw i32 %.0305568, 1
  %379 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %380 = icmp ult i32 %378, %379
  br i1 %380, label %381, label %383

381:                                              ; preds = %377
  %382 = 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 %383 unwind label %348

383:                                              ; preds = %377, %381
  %384 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %385 = icmp ult i32 %378, %384
  br i1 %385, label %350, label %.loopexit508, !llvm.loop !148

.loopexit508:                                     ; preds = %383, %.preheader507, %338
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %21) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %21) #6
  br label %.loopexit

386:                                              ; preds = %348, %364, %376, %347
  %.pn450.pn = phi { ptr, i32 } [ %.pn450, %347 ], [ %349, %348 ], [ %.pn446, %364 ], [ %.pn444, %376 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  br label %387

387:                                              ; preds = %386, %341
  %.pn450.pn.pn = phi { ptr, i32 } [ %.pn450.pn, %386 ], [ %342, %341 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %21) #6
  br label %388

388:                                              ; preds = %387, %339
  %.pn450.pn.pn.pn = phi { ptr, i32 } [ %.pn450.pn.pn, %387 ], [ %340, %339 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %21) #6
  br label %862

389:                                              ; preds = %146
  %390 = trunc nuw i8 %.5374 to i1
  br i1 %390, label %393, label %.preheader509

.preheader509:                                    ; preds = %389
  %391 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not588 = icmp eq i32 %391, 0
  br i1 %.not588, label %.loopexit, label %.lr.ph567

.lr.ph567:                                        ; preds = %.preheader509
  %392 = getelementptr inbounds i8, ptr %1, i64 8291
  br label %408

393:                                              ; preds = %389
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  %394 = call noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_u64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  store i64 %394, ptr %27, align 8, !tbaa !149
  invoke void @_ZN11spirv_cross17convert_to_stringImTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %395 unwind label %401

395:                                              ; preds = %393
  %396 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %397 unwind label %403

397:                                              ; preds = %395
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  %398 = getelementptr inbounds i8, ptr %1, i64 8291
  %399 = load i8, ptr %398, align 1, !tbaa !147, !range !133, !noundef !134
  %400 = trunc nuw i8 %399 to i1
  %.str.1002..str.1003 = select i1 %400, ptr @.str.1002, ptr @.str.1003
  br label %.invoke617

401:                                              ; preds = %393
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %405

403:                                              ; preds = %395
  %404 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  br label %405

405:                                              ; preds = %403, %401
  %.pn441 = phi { ptr, i32 } [ %404, %403 ], [ %402, %401 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  br label %862

406:                                              ; preds = %.invoke619, %439
  %407 = landingpad { ptr, i32 }
          cleanup
  br label %862

408:                                              ; preds = %.lr.ph567, %441
  %.0304565 = phi i32 [ 0, %.lr.ph567 ], [ %436, %441 ]
  %409 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %410 = icmp ugt i32 %409, 1
  br i1 %410, label %411, label %423

411:                                              ; preds = %408
  %412 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0304565)
  %.not434 = icmp eq i32 %412, 0
  br i1 %.not434, label %423, label %413

413:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #6
  %414 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0304565)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %414, i1 noundef zeroext true)
          to label %415 unwind label %418

415:                                              ; preds = %413
  %416 = 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) %28)
          to label %417 unwind label %420

417:                                              ; preds = %415
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  br label %435

418:                                              ; preds = %413
  %419 = landingpad { ptr, i32 }
          cleanup
  br label %422

420:                                              ; preds = %415
  %421 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %422

422:                                              ; preds = %420, %418
  %.pn437 = phi { ptr, i32 } [ %421, %420 ], [ %419, %418 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  br label %862

423:                                              ; preds = %411, %408
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #6
  %424 = call noundef i64 @_ZNK11spirv_cross12SPIRConstant10scalar_u64Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0304565)
  store i64 %424, ptr %30, align 8, !tbaa !149
  invoke void @_ZN11spirv_cross17convert_to_stringImTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %425 unwind label %430

425:                                              ; preds = %423
  %426 = 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 %.invoke619 unwind label %432

.invoke619:                                       ; preds = %425
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  %427 = load i8, ptr %392, align 1, !tbaa !147, !range !133, !noundef !134
  %428 = trunc nuw i8 %427 to i1
  %.str.1002..str.1003620 = select i1 %428, ptr @.str.1002, ptr @.str.1003
  %429 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %.str.1002..str.1003620)
          to label %435 unwind label %406

430:                                              ; preds = %423
  %431 = landingpad { ptr, i32 }
          cleanup
  br label %434

432:                                              ; preds = %425
  %433 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  br label %434

434:                                              ; preds = %432, %430
  %.pn435 = phi { ptr, i32 } [ %433, %432 ], [ %431, %430 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  br label %862

435:                                              ; preds = %.invoke619, %417
  %436 = add nuw i32 %.0304565, 1
  %437 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %438 = icmp ult i32 %436, %437
  br i1 %438, label %439, label %441

439:                                              ; preds = %435
  %440 = 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 %441 unwind label %406

441:                                              ; preds = %435, %439
  %442 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %443 = icmp ult i32 %436, %442
  br i1 %443, label %408, label %.loopexit, !llvm.loop !150

444:                                              ; preds = %146
  %445 = trunc nuw i8 %.5374 to i1
  br i1 %445, label %448, label %.preheader511

.preheader511:                                    ; preds = %444
  %446 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not587 = icmp eq i32 %446, 0
  br i1 %.not587, label %.loopexit, label %.lr.ph564

.lr.ph564:                                        ; preds = %.preheader511
  %447 = getelementptr inbounds i8, ptr %1, i64 8290
  br label %473

448:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #6
  %449 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  store i32 %449, ptr %32, align 4, !tbaa !151
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 4 dereferenceable(4) %32)
  %450 = 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) %31)
          to label %451 unwind label %461

451:                                              ; preds = %448
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  %452 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %1)
  br i1 %452, label %453, label %.critedge488.thread

453:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %34) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str.185, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %454 unwind label %463

454:                                              ; preds = %453
  %455 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL13has_extensionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %33)
          to label %.critedge488 unwind label %465

.critedge488:                                     ; preds = %454
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #6
  br i1 %455, label %.critedge488.thread, label %456

456:                                              ; preds = %.critedge488
  %457 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  %458 = icmp slt i32 %457, 0
  br i1 %458, label %459, label %.loopexit

459:                                              ; preds = %456
  %460 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %460, ptr noundef nonnull @.str.1010)
          to label %.invoke unwind label %468

461:                                              ; preds = %448
  %462 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  br label %862

463:                                              ; preds = %453
  %464 = landingpad { ptr, i32 }
          cleanup
  br label %467

465:                                              ; preds = %454
  %466 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  br label %467

467:                                              ; preds = %463, %465
  %.pn432 = phi { ptr, i32 } [ %466, %465 ], [ %464, %463 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #6
  br label %862

468:                                              ; preds = %459
  %469 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %460) #6
  br label %862

.critedge488.thread:                              ; preds = %451, %.critedge488
  %470 = getelementptr inbounds i8, ptr %1, i64 8290
  %471 = load i8, ptr %470, align 2, !tbaa !152, !range !133, !noundef !134
  %472 = trunc nuw i8 %471 to i1
  br i1 %472, label %.invoke617, label %.loopexit

.loopexit513:                                     ; preds = %513, %519
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %862

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

473:                                              ; preds = %.lr.ph564, %521
  %.0299562 = phi i32 [ 0, %.lr.ph564 ], [ %516, %521 ]
  %474 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %475 = icmp ugt i32 %474, 1
  br i1 %475, label %476, label %488

476:                                              ; preds = %473
  %477 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0299562)
  %.not425 = icmp eq i32 %477, 0
  br i1 %.not425, label %488, label %478

478:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #6
  %479 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0299562)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %479, i1 noundef zeroext true)
          to label %480 unwind label %483

480:                                              ; preds = %478
  %481 = 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) %35)
          to label %482 unwind label %485

482:                                              ; preds = %480
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %515

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

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

487:                                              ; preds = %485, %483
  %.pn428 = phi { ptr, i32 } [ %486, %485 ], [ %484, %483 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %862

488:                                              ; preds = %476, %473
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %37) #6
  %489 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0299562)
  store i32 %489, ptr %37, align 4, !tbaa !151
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 4 dereferenceable(4) %37)
  %490 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %491 unwind label %502

491:                                              ; preds = %488
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #6
  %492 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %1)
  br i1 %492, label %493, label %.critedge492.thread

493:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %39) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull @.str.185, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %494 unwind label %504

494:                                              ; preds = %493
  %495 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL13has_extensionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %.critedge492 unwind label %506

.critedge492:                                     ; preds = %494
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br i1 %495, label %.critedge492.thread, label %496

496:                                              ; preds = %.critedge492
  %497 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0299562)
  %498 = icmp slt i32 %497, 0
  br i1 %498, label %499, label %515

499:                                              ; preds = %496
  %500 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %500, ptr noundef nonnull @.str.1010)
          to label %501 unwind label %509

501:                                              ; preds = %499
  invoke void @__cxa_throw(ptr nonnull %500, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #7
          to label %865 unwind label %.loopexit.split-lp

502:                                              ; preds = %488
  %503 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #6
  br label %862

504:                                              ; preds = %493
  %505 = landingpad { ptr, i32 }
          cleanup
  br label %508

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

508:                                              ; preds = %504, %506
  %.pn426 = phi { ptr, i32 } [ %507, %506 ], [ %505, %504 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #6
  br label %862

509:                                              ; preds = %499
  %510 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %500) #6
  br label %862

.critedge492.thread:                              ; preds = %491, %.critedge492
  %511 = load i8, ptr %447, align 2, !tbaa !152, !range !133, !noundef !134
  %512 = trunc nuw i8 %511 to i1
  br i1 %512, label %513, label %515

513:                                              ; preds = %.critedge492.thread
  %514 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1011)
          to label %515 unwind label %.loopexit513

515:                                              ; preds = %496, %513, %.critedge492.thread, %482
  %516 = add nuw i32 %.0299562, 1
  %517 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %518 = icmp ult i32 %516, %517
  br i1 %518, label %519, label %521

519:                                              ; preds = %515
  %520 = 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 %521 unwind label %.loopexit513

521:                                              ; preds = %515, %519
  %522 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %523 = icmp ult i32 %516, %522
  br i1 %523, label %473, label %.loopexit, !llvm.loop !153

524:                                              ; preds = %146
  %525 = trunc nuw i8 %.5374 to i1
  br i1 %525, label %527, label %.preheader514

.preheader514:                                    ; preds = %524
  %526 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not586 = icmp eq i32 %526, 0
  br i1 %.not586, label %.loopexit, label %.lr.ph561

527:                                              ; preds = %524
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #6
  %528 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  invoke void @_ZN11spirv_crossL17convert_to_stringB5cxx11Ei(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, i32 noundef %528)
          to label %529 unwind label %532

529:                                              ; preds = %527
  %530 = 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) %40)
          to label %531 unwind label %534

531:                                              ; preds = %529
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  br label %.loopexit

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

534:                                              ; preds = %529
  %535 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #6
  br label %536

536:                                              ; preds = %534, %532
  %.pn423 = phi { ptr, i32 } [ %535, %534 ], [ %533, %532 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #6
  br label %862

537:                                              ; preds = %567
  %538 = landingpad { ptr, i32 }
          cleanup
  br label %862

.lr.ph561:                                        ; preds = %.preheader514, %569
  %.0294559 = phi i32 [ %564, %569 ], [ 0, %.preheader514 ]
  %539 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %540 = icmp ugt i32 %539, 1
  br i1 %540, label %541, label %553

541:                                              ; preds = %.lr.ph561
  %542 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0294559)
  %.not416 = icmp eq i32 %542, 0
  br i1 %.not416, label %553, label %543

543:                                              ; preds = %541
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #6
  %544 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0294559)
  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 %544, i1 noundef zeroext true)
          to label %545 unwind label %548

545:                                              ; preds = %543
  %546 = 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) %41)
          to label %547 unwind label %550

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

548:                                              ; preds = %543
  %549 = landingpad { ptr, i32 }
          cleanup
  br label %552

550:                                              ; preds = %545
  %551 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  br label %552

552:                                              ; preds = %550, %548
  %.pn419 = phi { ptr, i32 } [ %551, %550 ], [ %549, %548 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #6
  br label %862

553:                                              ; preds = %541, %.lr.ph561
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #6
  %554 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant10scalar_i32Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0294559)
  invoke void @_ZN11spirv_crossL17convert_to_stringB5cxx11Ei(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, i32 noundef %554)
          to label %555 unwind label %558

555:                                              ; preds = %553
  %556 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %557 unwind label %560

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

558:                                              ; preds = %553
  %559 = landingpad { ptr, i32 }
          cleanup
  br label %562

560:                                              ; preds = %555
  %561 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #6
  br label %562

562:                                              ; preds = %560, %558
  %.pn417 = phi { ptr, i32 } [ %561, %560 ], [ %559, %558 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #6
  br label %862

563:                                              ; preds = %557, %547
  %564 = add nuw i32 %.0294559, 1
  %565 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %566 = icmp ult i32 %564, %565
  br i1 %566, label %567, label %569

567:                                              ; preds = %563
  %568 = 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 %569 unwind label %537

569:                                              ; preds = %563, %567
  %570 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %571 = icmp ult i32 %564, %570
  br i1 %571, label %.lr.ph561, label %.loopexit, !llvm.loop !154

572:                                              ; preds = %146
  %573 = trunc nuw i8 %.5374 to i1
  br i1 %573, label %576, label %.preheader516

.preheader516:                                    ; preds = %572
  %574 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not585 = icmp eq i32 %574, 0
  br i1 %.not585, label %.loopexit, label %.lr.ph558

.lr.ph558:                                        ; preds = %.preheader516
  %575 = getelementptr inbounds i8, ptr %1, i64 8352
  br label %584

576:                                              ; preds = %572
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #6
  %577 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  store i32 %577, ptr %44, align 4, !tbaa !151
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 4 dereferenceable(4) %44)
  %578 = 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) %43)
          to label %579 unwind label %580

579:                                              ; preds = %576
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  br label %.loopexit

580:                                              ; preds = %576
  %581 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  br label %862

582:                                              ; preds = %634, %621, %616, %605
  %583 = landingpad { ptr, i32 }
          cleanup
  br label %862

584:                                              ; preds = %.lr.ph558, %636
  %.0293556 = phi i32 [ 0, %.lr.ph558 ], [ %631, %636 ]
  %585 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %586 = icmp ugt i32 %585, 1
  br i1 %586, label %587, label %599

587:                                              ; preds = %584
  %588 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0293556)
  %.not408 = icmp eq i32 %588, 0
  br i1 %.not408, label %599, label %589

589:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #6
  %590 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0293556)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %590, i1 noundef zeroext true)
          to label %591 unwind label %594

591:                                              ; preds = %589
  %592 = 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) %45)
          to label %593 unwind label %596

593:                                              ; preds = %591
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  br label %630

594:                                              ; preds = %589
  %595 = landingpad { ptr, i32 }
          cleanup
  br label %598

596:                                              ; preds = %591
  %597 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  br label %598

598:                                              ; preds = %596, %594
  %.pn412 = phi { ptr, i32 } [ %597, %596 ], [ %595, %594 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  br label %862

599:                                              ; preds = %587, %584
  %600 = load ptr, ptr %575, align 8, !tbaa !155
  %601 = load i8, ptr %600, align 1, !tbaa !156
  %.not409 = icmp eq i8 %601, 0
  br i1 %.not409, label %610, label %602

602:                                              ; preds = %599
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %47) #6
  %603 = call noundef zeroext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_u16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0293556)
  store i16 %603, ptr %47, align 2, !tbaa !157
  call void @_ZN11spirv_cross17convert_to_stringItTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 2 dereferenceable(2) %47)
  %604 = 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) %46)
          to label %605 unwind label %608

605:                                              ; preds = %602
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %47) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #6
  %606 = load ptr, ptr %575, align 8, !tbaa !155
  %607 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %606)
          to label %630 unwind label %582

608:                                              ; preds = %602
  %609 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %47) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #6
  br label %862

610:                                              ; preds = %599
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #6
  %611 = load ptr, ptr %1, align 8, !tbaa !141
  %612 = getelementptr inbounds i8, ptr %611, i64 152
  %613 = load ptr, ptr %612, align 8
  invoke void %613(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %6, i32 noundef 0)
          to label %614 unwind label %623

614:                                              ; preds = %610
  %615 = 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) %48)
          to label %616 unwind label %625

616:                                              ; preds = %614
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #6
  %617 = 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 %618 unwind label %582

618:                                              ; preds = %616
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %50) #6
  %619 = call noundef zeroext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_u16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0293556)
  store i16 %619, ptr %50, align 2, !tbaa !157
  call void @_ZN11spirv_cross17convert_to_stringItTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 2 dereferenceable(2) %50)
  %620 = 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) %49)
          to label %621 unwind label %628

621:                                              ; preds = %618
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #6
  %622 = 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 %630 unwind label %582

623:                                              ; preds = %610
  %624 = landingpad { ptr, i32 }
          cleanup
  br label %627

625:                                              ; preds = %614
  %626 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #6
  br label %627

627:                                              ; preds = %625, %623
  %.pn410 = phi { ptr, i32 } [ %626, %625 ], [ %624, %623 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #6
  br label %862

628:                                              ; preds = %618
  %629 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #6
  br label %862

630:                                              ; preds = %605, %621, %593
  %631 = add nuw i32 %.0293556, 1
  %632 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %633 = icmp ult i32 %631, %632
  br i1 %633, label %634, label %636

634:                                              ; preds = %630
  %635 = 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 %636 unwind label %582

636:                                              ; preds = %630, %634
  %637 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %638 = icmp ult i32 %631, %637
  br i1 %638, label %584, label %.loopexit, !llvm.loop !159

639:                                              ; preds = %146
  %640 = trunc nuw i8 %.5374 to i1
  br i1 %640, label %643, label %.preheader518

.preheader518:                                    ; preds = %639
  %641 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not584 = icmp eq i32 %641, 0
  br i1 %.not584, label %.loopexit, label %.lr.ph555

.lr.ph555:                                        ; preds = %.preheader518
  %642 = getelementptr inbounds i8, ptr %1, i64 8344
  br label %651

643:                                              ; preds = %639
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %52) #6
  %644 = call noundef signext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_i16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  store i16 %644, ptr %52, align 2, !tbaa !157
  call void @_ZN11spirv_cross17convert_to_stringIsTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 2 dereferenceable(2) %52)
  %645 = 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) %51)
          to label %646 unwind label %647

646:                                              ; preds = %643
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %52) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #6
  br label %.loopexit

647:                                              ; preds = %643
  %648 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %52) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #6
  br label %862

649:                                              ; preds = %701, %688, %683, %672
  %650 = landingpad { ptr, i32 }
          cleanup
  br label %862

651:                                              ; preds = %.lr.ph555, %703
  %.0292553 = phi i32 [ 0, %.lr.ph555 ], [ %698, %703 ]
  %652 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %653 = icmp ugt i32 %652, 1
  br i1 %653, label %654, label %666

654:                                              ; preds = %651
  %655 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0292553)
  %.not400 = icmp eq i32 %655, 0
  br i1 %.not400, label %666, label %656

656:                                              ; preds = %654
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #6
  %657 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0292553)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %657, i1 noundef zeroext true)
          to label %658 unwind label %661

658:                                              ; preds = %656
  %659 = 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) %53)
          to label %660 unwind label %663

660:                                              ; preds = %658
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #6
  br label %697

661:                                              ; preds = %656
  %662 = landingpad { ptr, i32 }
          cleanup
  br label %665

663:                                              ; preds = %658
  %664 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  br label %665

665:                                              ; preds = %663, %661
  %.pn404 = phi { ptr, i32 } [ %664, %663 ], [ %662, %661 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #6
  br label %862

666:                                              ; preds = %654, %651
  %667 = load ptr, ptr %642, align 8, !tbaa !160
  %668 = load i8, ptr %667, align 1, !tbaa !156
  %.not401 = icmp eq i8 %668, 0
  br i1 %.not401, label %677, label %669

669:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %55) #6
  %670 = call noundef signext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_i16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0292553)
  store i16 %670, ptr %55, align 2, !tbaa !157
  call void @_ZN11spirv_cross17convert_to_stringIsTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 2 dereferenceable(2) %55)
  %671 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %672 unwind label %675

672:                                              ; preds = %669
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %55) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #6
  %673 = load ptr, ptr %642, align 8, !tbaa !160
  %674 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %673)
          to label %697 unwind label %649

675:                                              ; preds = %669
  %676 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %55) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #6
  br label %862

677:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #6
  %678 = load ptr, ptr %1, align 8, !tbaa !141
  %679 = getelementptr inbounds i8, ptr %678, i64 152
  %680 = load ptr, ptr %679, align 8
  invoke void %680(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %6, i32 noundef 0)
          to label %681 unwind label %690

681:                                              ; preds = %677
  %682 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %683 unwind label %692

683:                                              ; preds = %681
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #6
  %684 = 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 %685 unwind label %649

685:                                              ; preds = %683
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %58) #6
  %686 = call noundef signext i16 @_ZNK11spirv_cross12SPIRConstant10scalar_i16Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0292553)
  store i16 %686, ptr %58, align 2, !tbaa !157
  call void @_ZN11spirv_cross17convert_to_stringIsTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 2 dereferenceable(2) %58)
  %687 = 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) %57)
          to label %688 unwind label %695

688:                                              ; preds = %685
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %58) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #6
  %689 = 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 %697 unwind label %649

690:                                              ; preds = %677
  %691 = landingpad { ptr, i32 }
          cleanup
  br label %694

692:                                              ; preds = %681
  %693 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #6
  br label %694

694:                                              ; preds = %692, %690
  %.pn402 = phi { ptr, i32 } [ %693, %692 ], [ %691, %690 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #6
  br label %862

695:                                              ; preds = %685
  %696 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %58) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #6
  br label %862

697:                                              ; preds = %672, %688, %660
  %698 = add nuw i32 %.0292553, 1
  %699 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %700 = icmp ult i32 %698, %699
  br i1 %700, label %701, label %703

701:                                              ; preds = %697
  %702 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %703 unwind label %649

703:                                              ; preds = %697, %701
  %704 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %705 = icmp ult i32 %698, %704
  br i1 %705, label %651, label %.loopexit, !llvm.loop !161

706:                                              ; preds = %146
  %707 = trunc nuw i8 %.5374 to i1
  br i1 %707, label %709, label %.preheader520

.preheader520:                                    ; preds = %706
  %708 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not583 = icmp eq i32 %708, 0
  br i1 %.not583, label %.loopexit, label %.lr.ph552

709:                                              ; preds = %706
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %60) #6
  %710 = call noundef zeroext i8 @_ZNK11spirv_cross12SPIRConstant9scalar_u8Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  store i8 %710, ptr %60, align 1, !tbaa !156
  call void @_ZN11spirv_cross17convert_to_stringIhTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 1 dereferenceable(1) %60)
  %711 = 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) %59)
          to label %712 unwind label %713

712:                                              ; preds = %709
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #6
  br label %.loopexit

713:                                              ; preds = %709
  %714 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #6
  br label %862

715:                                              ; preds = %755, %742, %737
  %716 = landingpad { ptr, i32 }
          cleanup
  br label %862

.lr.ph552:                                        ; preds = %.preheader520, %757
  %.0291550 = phi i32 [ %752, %757 ], [ 0, %.preheader520 ]
  %717 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %718 = icmp ugt i32 %717, 1
  br i1 %718, label %719, label %731

719:                                              ; preds = %.lr.ph552
  %720 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0291550)
  %.not393 = icmp eq i32 %720, 0
  br i1 %.not393, label %731, label %721

721:                                              ; preds = %719
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #6
  %722 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0291550)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %722, i1 noundef zeroext true)
          to label %723 unwind label %726

723:                                              ; preds = %721
  %724 = 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) %61)
          to label %725 unwind label %728

725:                                              ; preds = %723
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #6
  br label %751

726:                                              ; preds = %721
  %727 = landingpad { ptr, i32 }
          cleanup
  br label %730

728:                                              ; preds = %723
  %729 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #6
  br label %730

730:                                              ; preds = %728, %726
  %.pn396 = phi { ptr, i32 } [ %729, %728 ], [ %727, %726 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #6
  br label %862

731:                                              ; preds = %719, %.lr.ph552
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #6
  %732 = load ptr, ptr %1, align 8, !tbaa !141
  %733 = getelementptr inbounds i8, ptr %732, i64 152
  %734 = load ptr, ptr %733, align 8
  invoke void %734(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %6, i32 noundef 0)
          to label %735 unwind label %744

735:                                              ; preds = %731
  %736 = 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 %737 unwind label %746

737:                                              ; preds = %735
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #6
  %738 = 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 %739 unwind label %715

739:                                              ; preds = %737
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %64) #6
  %740 = call noundef zeroext i8 @_ZNK11spirv_cross12SPIRConstant9scalar_u8Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0291550)
  store i8 %740, ptr %64, align 1, !tbaa !156
  call void @_ZN11spirv_cross17convert_to_stringIhTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 1 dereferenceable(1) %64)
  %741 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %742 unwind label %749

742:                                              ; preds = %739
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %64) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #6
  %743 = 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 %751 unwind label %715

744:                                              ; preds = %731
  %745 = landingpad { ptr, i32 }
          cleanup
  br label %748

746:                                              ; preds = %735
  %747 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #6
  br label %748

748:                                              ; preds = %746, %744
  %.pn394 = phi { ptr, i32 } [ %747, %746 ], [ %745, %744 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #6
  br label %862

749:                                              ; preds = %739
  %750 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %64) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #6
  br label %862

751:                                              ; preds = %742, %725
  %752 = add nuw i32 %.0291550, 1
  %753 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %754 = icmp ult i32 %752, %753
  br i1 %754, label %755, label %757

755:                                              ; preds = %751
  %756 = 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 %757 unwind label %715

757:                                              ; preds = %751, %755
  %758 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %759 = icmp ult i32 %752, %758
  br i1 %759, label %.lr.ph552, label %.loopexit, !llvm.loop !162

760:                                              ; preds = %146
  %761 = trunc nuw i8 %.5374 to i1
  br i1 %761, label %763, label %.preheader522

.preheader522:                                    ; preds = %760
  %762 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not582 = icmp eq i32 %762, 0
  br i1 %.not582, label %.loopexit, label %.lr.ph549

763:                                              ; preds = %760
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %66) #6
  %764 = call noundef signext i8 @_ZNK11spirv_cross12SPIRConstant9scalar_i8Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  store i8 %764, ptr %66, align 1, !tbaa !156
  call void @_ZN11spirv_cross17convert_to_stringIaTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 1 dereferenceable(1) %66)
  %765 = 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) %65)
          to label %766 unwind label %767

766:                                              ; preds = %763
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %66) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #6
  br label %.loopexit

767:                                              ; preds = %763
  %768 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %66) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #6
  br label %862

769:                                              ; preds = %809, %796, %791
  %770 = landingpad { ptr, i32 }
          cleanup
  br label %862

.lr.ph549:                                        ; preds = %.preheader522, %811
  %.0290547 = phi i32 [ %806, %811 ], [ 0, %.preheader522 ]
  %771 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %772 = icmp ugt i32 %771, 1
  br i1 %772, label %773, label %785

773:                                              ; preds = %.lr.ph549
  %774 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0290547)
  %.not386 = icmp eq i32 %774, 0
  br i1 %.not386, label %785, label %775

775:                                              ; preds = %773
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #6
  %776 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0290547)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %776, i1 noundef zeroext true)
          to label %777 unwind label %780

777:                                              ; preds = %775
  %778 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %67)
          to label %779 unwind label %782

779:                                              ; preds = %777
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #6
  br label %805

780:                                              ; preds = %775
  %781 = landingpad { ptr, i32 }
          cleanup
  br label %784

782:                                              ; preds = %777
  %783 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #6
  br label %784

784:                                              ; preds = %782, %780
  %.pn389 = phi { ptr, i32 } [ %783, %782 ], [ %781, %780 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #6
  br label %862

785:                                              ; preds = %773, %.lr.ph549
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #6
  %786 = load ptr, ptr %1, align 8, !tbaa !141
  %787 = getelementptr inbounds i8, ptr %786, i64 152
  %788 = load ptr, ptr %787, align 8
  invoke void %788(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %6, i32 noundef 0)
          to label %789 unwind label %798

789:                                              ; preds = %785
  %790 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %791 unwind label %800

791:                                              ; preds = %789
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #6
  %792 = 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 %793 unwind label %769

793:                                              ; preds = %791
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %70) #6
  %794 = call noundef signext i8 @_ZNK11spirv_cross12SPIRConstant9scalar_i8Ejj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0290547)
  store i8 %794, ptr %70, align 1, !tbaa !156
  call void @_ZN11spirv_cross17convert_to_stringIaTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 1 dereferenceable(1) %70)
  %795 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %69)
          to label %796 unwind label %803

796:                                              ; preds = %793
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %70) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #6
  %797 = 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 %805 unwind label %769

798:                                              ; preds = %785
  %799 = landingpad { ptr, i32 }
          cleanup
  br label %802

800:                                              ; preds = %789
  %801 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #6
  br label %802

802:                                              ; preds = %800, %798
  %.pn387 = phi { ptr, i32 } [ %801, %800 ], [ %799, %798 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #6
  br label %862

803:                                              ; preds = %793
  %804 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %70) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #6
  br label %862

805:                                              ; preds = %796, %779
  %806 = add nuw i32 %.0290547, 1
  %807 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %808 = icmp ult i32 %806, %807
  br i1 %808, label %809, label %811

809:                                              ; preds = %805
  %810 = 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 %811 unwind label %769

811:                                              ; preds = %805, %809
  %812 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %813 = icmp ult i32 %806, %812
  br i1 %813, label %.lr.ph549, label %.loopexit, !llvm.loop !163

814:                                              ; preds = %146
  %815 = trunc nuw i8 %.5374 to i1
  br i1 %815, label %817, label %.preheader524

.preheader524:                                    ; preds = %814
  %816 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %.not581 = icmp eq i32 %816, 0
  br i1 %.not581, label %.loopexit, label %.lr.ph546

817:                                              ; preds = %814
  %818 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef 0)
  %.not385 = icmp eq i32 %818, 0
  %819 = select i1 %.not385, ptr @.str.551, ptr @.str.672
  br label %.invoke617

.invoke617:                                       ; preds = %.critedge488.thread, %397, %817
  %820 = phi ptr [ %819, %817 ], [ %.str.1002..str.1003, %397 ], [ @.str.1011, %.critedge488.thread ]
  %821 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %820)
          to label %.loopexit unwind label %98

822:                                              ; preds = %846, %838
  %823 = landingpad { ptr, i32 }
          cleanup
  br label %862

.lr.ph546:                                        ; preds = %.preheader524, %848
  %.0544 = phi i32 [ %843, %848 ], [ 0, %.preheader524 ]
  %824 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %825 = icmp ugt i32 %824, 1
  br i1 %825, label %826, label %838

826:                                              ; preds = %.lr.ph546
  %827 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0544)
  %.not379 = icmp eq i32 %827, 0
  br i1 %.not379, label %838, label %828

828:                                              ; preds = %826
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #6
  %829 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant26specialization_constant_idEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0544)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %829, i1 noundef zeroext true)
          to label %830 unwind label %833

830:                                              ; preds = %828
  %831 = 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) %71)
          to label %832 unwind label %835

832:                                              ; preds = %830
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #6
  br label %842

833:                                              ; preds = %828
  %834 = landingpad { ptr, i32 }
          cleanup
  br label %837

835:                                              ; preds = %830
  %836 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #6
  br label %837

837:                                              ; preds = %835, %833
  %.pn381 = phi { ptr, i32 } [ %836, %835 ], [ %834, %833 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #6
  br label %862

838:                                              ; preds = %826, %.lr.ph546
  %839 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %2, i32 noundef %3, i32 noundef %.0544)
  %.not380 = icmp eq i32 %839, 0
  %840 = select i1 %.not380, ptr @.str.551, ptr @.str.672
  %841 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %840)
          to label %842 unwind label %822

842:                                              ; preds = %838, %832
  %843 = add nuw i32 %.0544, 1
  %844 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %845 = icmp ult i32 %843, %844
  br i1 %845, label %846, label %848

846:                                              ; preds = %842
  %847 = 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 %848 unwind label %822

848:                                              ; preds = %842, %846
  %849 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %850 = icmp ult i32 %843, %849
  br i1 %850, label %.lr.ph546, label %.loopexit, !llvm.loop !164

851:                                              ; preds = %146
  %852 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %852, ptr noundef nonnull @.str.1012)
          to label %.invoke unwind label %854

.invoke:                                          ; preds = %851, %459
  %853 = phi ptr [ %460, %459 ], [ %852, %851 ]
  invoke void @__cxa_throw(ptr nonnull %853, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #7
          to label %.cont unwind label %98

.cont:                                            ; preds = %.invoke
  unreachable

854:                                              ; preds = %851
  %855 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %852) #6
  br label %862

.loopexit:                                        ; preds = %848, %811, %757, %703, %636, %569, %521, %441, %317, %260, %203, %.invoke617, %.preheader524, %.preheader522, %.preheader520, %.preheader518, %.preheader516, %.preheader514, %.preheader511, %.preheader509, %.preheader505, %.preheader503, %.preheader, %766, %712, %646, %579, %531, %.critedge488.thread, %456, %277, %271, %220, %214, %163, %157, %.loopexit508
  %856 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant11vector_sizeEv(ptr noundef nonnull align 8 dereferenceable(360) %2)
  %857 = icmp ugt i32 %856, 1
  br i1 %857, label %858, label %863

858:                                              ; preds = %.loopexit
  %859 = trunc nuw i8 %.6368 to i1
  br i1 %859, label %863, label %860

860:                                              ; preds = %858
  %861 = 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 %863 unwind label %98

862:                                              ; preds = %.loopexit513, %.loopexit.split-lp, %822, %837, %769, %784, %802, %803, %715, %730, %748, %749, %649, %665, %675, %694, %695, %582, %598, %608, %627, %628, %537, %552, %562, %487, %502, %509, %508, %406, %422, %434, %286, %301, %310, %229, %244, %253, %172, %187, %196, %467, %854, %767, %713, %647, %580, %536, %468, %461, %405, %388, %284, %283, %227, %226, %170, %169, %145, %98
  %.pn482 = phi { ptr, i32 } [ %99, %98 ], [ %855, %854 ], [ %768, %767 ], [ %714, %713 ], [ %648, %647 ], [ %581, %580 ], [ %.pn423, %536 ], [ %469, %468 ], [ %.pn432, %467 ], [ %462, %461 ], [ %.pn441, %405 ], [ %.pn450.pn.pn.pn, %388 ], [ %285, %284 ], [ %.pn462, %283 ], [ %228, %227 ], [ %.pn471, %226 ], [ %171, %170 ], [ %.pn480, %169 ], [ %.pn.pn, %145 ], [ %173, %172 ], [ %.pn476, %187 ], [ %.pn474, %196 ], [ %230, %229 ], [ %.pn467, %244 ], [ %.pn465, %253 ], [ %287, %286 ], [ %.pn458, %301 ], [ %.pn456, %310 ], [ %407, %406 ], [ %.pn437, %422 ], [ %.pn435, %434 ], [ %.pn428, %487 ], [ %510, %509 ], [ %.pn426, %508 ], [ %503, %502 ], [ %538, %537 ], [ %.pn419, %552 ], [ %.pn417, %562 ], [ %583, %582 ], [ %.pn412, %598 ], [ %609, %608 ], [ %629, %628 ], [ %.pn410, %627 ], [ %650, %649 ], [ %.pn404, %665 ], [ %676, %675 ], [ %696, %695 ], [ %.pn402, %694 ], [ %716, %715 ], [ %.pn396, %730 ], [ %750, %749 ], [ %.pn394, %748 ], [ %770, %769 ], [ %.pn389, %784 ], [ %804, %803 ], [ %.pn387, %802 ], [ %823, %822 ], [ %.pn381, %837 ], [ %lpad.loopexit, %.loopexit513 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %6) #6
  br label %864

863:                                              ; preds = %.loopexit, %858, %860
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %6) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %6) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %5) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %5) #6
  ret void

864:                                              ; preds = %862, %96
  %.pn482.pn = phi { ptr, i32 } [ %.pn482, %862 ], [ %97, %96 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %6) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %5) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %5) #6
  resume { ptr, i32 } %.pn482.pn

865:                                              ; preds = %501
  unreachable
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN11spirv_crossL17convert_to_stringB5cxx11Ei(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) local_unnamed_addr #5

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

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

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

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

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

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

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

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

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


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