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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"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::function.349" = 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.anon.351 = type { ptr, ptr, i8, i32, i8, i8, i32, %"class.std::__cxx11::basic_string" }
%class.anon.352 = type { %"class.std::__cxx11::basic_string", ptr, ptr }
%class.anon.353 = type { ptr, ptr }
%class.anon.354 = type { %"class.std::__cxx11::basic_string", i8, ptr, ptr }
%"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.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", i32, i32, %"class.spirv_cross::TypedID.280", %"class.spirv_cross::TypedID.282", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.280", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.283", i8, i8, i8, ptr }
%"class.spirv_cross::TypedID.282" = type { i32 }
%"class.spirv_cross::TypedID.283" = type { i32 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 x i8] }>
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.310", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::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] }
%"struct.spirv_cross::SPIRFunction" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", [4 x i8], %"class.spirv_cross::SmallVector.298", %"class.spirv_cross::SmallVector.298", %"class.spirv_cross::SmallVector.293", %"class.spirv_cross::TypedID.283", [4 x i8], %"class.spirv_cross::SmallVector.301", %"class.spirv_cross::SmallVector.304", %"struct.spirv_cross::SPIRFunction::EntryLine", %"class.spirv_cross::SmallVector.307", %"class.spirv_cross::SmallVector.307", %"class.spirv_cross::SmallVector.7", i8, i8, i8, [5 x i8] }>
%"class.spirv_cross::SmallVector.298" = type { %"class.spirv_cross::VectorView.299", i64, %"class.spirv_cross::AlignedBuffer.300" }
%"class.spirv_cross::VectorView.299" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.300" = type { [160 x i8] }
%"class.spirv_cross::SmallVector.293" = type { %"class.spirv_cross::VectorView.294", i64, %"class.spirv_cross::AlignedBuffer.295" }
%"class.spirv_cross::VectorView.294" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.295" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.301" = type { %"class.spirv_cross::VectorView.302", i64, %"class.spirv_cross::AlignedBuffer.303" }
%"class.spirv_cross::VectorView.302" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.303" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.304" = type { %"class.spirv_cross::VectorView.305", i64, %"class.spirv_cross::AlignedBuffer.306" }
%"class.spirv_cross::VectorView.305" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.306" = type { [128 x i8] }
%"struct.spirv_cross::SPIRFunction::EntryLine" = type { i32, i32 }
%"class.spirv_cross::SmallVector.307" = type <{ %"class.spirv_cross::VectorView.308", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.308" = type { ptr, i64 }

@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.286 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.307 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.334 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.335 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.750 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.751 = external hidden unnamed_addr constant [3 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 i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_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_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %1) #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i8, align 1
  %8 = alloca %"class.spirv_cross::TypedID.280", align 4
  %9 = alloca i8, align 1
  %10 = alloca %"class.spirv_cross::TypedID.280", align 4
  %11 = alloca i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca i8, align 1
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca %"class.spirv_cross::TypedID.281", align 4
  %19 = alloca %"class.spirv_cross::TypedID.281", align 4
  %20 = alloca %"class.spirv_cross::TypedID.281", align 4
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca %"struct.spirv_cross::SPIRType", align 8
  %28 = alloca %"class.spirv_cross::TypedID.281", align 4
  %29 = alloca i8, align 1
  %30 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca i32, align 4
  %39 = alloca %"class.std::function.349", align 8
  %40 = alloca %class.anon.351, align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::function.349", align 8
  %46 = alloca %class.anon.352, align 8
  %47 = alloca %"class.spirv_cross::TypedID.280", align 4
  %48 = alloca %"class.spirv_cross::TypedID.280", align 4
  %49 = alloca %"class.std::function.349", align 8
  %50 = alloca %class.anon.353, align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::function.349", align 8
  %56 = alloca %class.anon.354, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %57 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  %58 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 1
  %59 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %58, i32 0, i32 13
  %60 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %59)
  %61 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %60)
  store ptr %61, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %62, i32 0, i32 1
  %64 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %65 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %64)
  store ptr %65, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #7
  %66 = load ptr, ptr %4, align 8, !tbaa !5
  %67 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %66, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8, ptr align 8 %67, i64 4, i1 false), !tbaa.struct !9
  %68 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %8, i32 0, i32 0
  %69 = load i32, ptr %68, align 4
  %70 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 %69, i32 noundef 15)
  %71 = zext i1 %70 to i8
  store i8 %71, ptr %7, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #7
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %72, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 8 %73, i64 4, i1 false), !tbaa.struct !9
  %74 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %10, i32 0, i32 0
  %75 = load i32, ptr %74, align 4
  %76 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 %75, i32 noundef 2)
  %77 = zext i1 %76 to i8
  store i8 %77, ptr %9, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #7
  %78 = call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %57)
  %79 = icmp eq i32 %78, 1
  br i1 %79, label %80, label %84

80:                                               ; preds = %2
  %81 = load i8, ptr %7, align 1, !tbaa !12, !range !14, !noundef !15
  %82 = trunc i8 %81 to i1
  %83 = xor i1 %82, true
  br label %84

84:                                               ; preds = %80, %2
  %85 = phi i1 [ false, %2 ], [ %83, %80 ]
  %86 = zext i1 %85 to i8
  store i8 %86, ptr %11, align 1, !tbaa !12
  %87 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %88 = trunc i8 %87 to i1
  br i1 %88, label %89, label %339

89:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  %91 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %90, i32 0, i32 12
  %92 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %91) #7
  %93 = trunc i64 %92 to i32
  store i32 %93, ptr %12, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #7
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %94, i32 0, i32 6
  %96 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %95) #7
  %97 = icmp eq i64 %96, 1
  %98 = zext i1 %97 to i8
  store i8 %98, ptr %13, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  store i32 1, ptr %14, align 4, !tbaa !10
  %99 = load i8, ptr %13, align 1, !tbaa !12, !range !14, !noundef !15
  %100 = trunc i8 %99 to i1
  br i1 %100, label %101, label %104

101:                                              ; preds = %89
  %102 = load ptr, ptr %6, align 8, !tbaa !5
  %103 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 8 dereferenceable(336) %102)
  store i32 %103, ptr %14, align 4, !tbaa !10
  br label %104

104:                                              ; preds = %101, %89
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %105 = load i8, ptr %11, align 1, !tbaa !12, !range !14, !noundef !15
  %106 = trunc i8 %105 to i1
  br i1 %106, label %107, label %108

107:                                              ; preds = %104
  br label %110

108:                                              ; preds = %104
  %109 = load i32, ptr %14, align 4, !tbaa !10
  br label %110

110:                                              ; preds = %108, %107
  %111 = phi i32 [ 1, %107 ], [ %109, %108 ]
  store i32 %111, ptr %15, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 0, ptr %16, align 4, !tbaa !10
  br label %112

112:                                              ; preds = %334, %110
  %113 = load i32, ptr %16, align 4, !tbaa !10
  %114 = load i32, ptr %12, align 4, !tbaa !10
  %115 = icmp ult i32 %113, %114
  br i1 %115, label %117, label %116

116:                                              ; preds = %112
  store i32 2, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %338

117:                                              ; preds = %112
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %118, i32 0, i32 1
  %120 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %119)
  %121 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %18, i32 0, i32 0
  store i32 %120, ptr %121, align 4
  %122 = load i32, ptr %16, align 4, !tbaa !10
  %123 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %18, i32 0, i32 0
  %124 = load i32, ptr %123, align 4
  %125 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 %124, i32 noundef %122, i32 noundef 11)
  br i1 %125, label %126, label %157

126:                                              ; preds = %117
  %127 = load ptr, ptr %6, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %127, i32 0, i32 1
  %129 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %128)
  %130 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %19, i32 0, i32 0
  store i32 %129, ptr %130, align 4
  %131 = load i32, ptr %16, align 4, !tbaa !10
  %132 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %19, i32 0, i32 0
  %133 = load i32, ptr %132, align 4
  %134 = call noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 %133, i32 noundef %131, i32 noundef 11)
  %135 = icmp eq i32 %134, 4
  br i1 %135, label %136, label %141

136:                                              ; preds = %126
  %137 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 23
  %138 = load i32, ptr %137, align 4, !tbaa !16
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %141, label %140

140:                                              ; preds = %136
  br label %334

141:                                              ; preds = %136, %126
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %142, i32 0, i32 1
  %144 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %143)
  %145 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %20, i32 0, i32 0
  store i32 %144, ptr %145, align 4
  %146 = load i32, ptr %16, align 4, !tbaa !10
  %147 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %20, i32 0, i32 0
  %148 = load i32, ptr %147, align 4
  %149 = call noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 %148, i32 noundef %146, i32 noundef 11)
  %150 = icmp eq i32 %149, 3
  br i1 %150, label %151, label %156

151:                                              ; preds = %141
  %152 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %57, i32 0, i32 22
  %153 = load i32, ptr %152, align 8, !tbaa !81
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %156, label %155

155:                                              ; preds = %151
  br label %334

156:                                              ; preds = %151, %141
  br label %157

157:                                              ; preds = %156, %117
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  %158 = load i8, ptr %13, align 1, !tbaa !12, !range !14, !noundef !15
  %159 = trunc i8 %158 to i1
  br i1 %159, label %160, label %290

160:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #7
  %161 = load ptr, ptr %4, align 8, !tbaa !5
  %162 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %161, i32 0, i32 1
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRKNS_7TypedIDILNS_5TypesE0EEES3_RjRA6_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 4 dereferenceable(4) %162, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 1 dereferenceable(6) @.str.750)
          to label %163 unwind label %201

163:                                              ; preds = %160
  %164 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %165 = load ptr, ptr %4, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %165, i32 0, i32 1
  %167 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %166)
          to label %168 unwind label %205

168:                                              ; preds = %163
  %169 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %167)
          to label %170 unwind label %205

170:                                              ; preds = %168
  %171 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %169, i32 0, i32 12
  %172 = load i32, ptr %16, align 4, !tbaa !10
  %173 = zext i32 %172 to i64
  %174 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %171, i64 noundef %173) #7
  %175 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %174)
          to label %176 unwind label %205

176:                                              ; preds = %170
  store i32 %175, ptr %25, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %177 = load i32, ptr %25, align 4, !tbaa !10
  %178 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %177)
          to label %179 unwind label %209

179:                                              ; preds = %176
  store ptr %178, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %27) #7
  %180 = load ptr, ptr %26, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %27, ptr noundef nonnull align 8 dereferenceable(336) %180)
          to label %181 unwind label %213

181:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %182 = load i32, ptr %25, align 4, !tbaa !10
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef %182)
          to label %183 unwind label %217

183:                                              ; preds = %181
  %184 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %27, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %184, ptr align 4 %28, i64 4, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  %185 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %27, i32 0, i32 1
  store i32 28, ptr %185, align 4, !tbaa !82
  %186 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %27, i32 0, i32 6
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %186, ptr noundef nonnull align 4 dereferenceable(4) %14) #7
  %187 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %27, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #7
  store i8 1, ptr %29, align 1, !tbaa !12
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %187, ptr noundef nonnull align 1 dereferenceable(1) %29) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 280, ptr %30) #7
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %30) #7
  %188 = load i32, ptr %14, align 4, !tbaa !10
  %189 = zext i32 %188 to i64
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(280) %30, i64 noundef %189) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %190 = load ptr, ptr %4, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %190, i32 0, i32 4
  %192 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %191)
          to label %193 unwind label %221

193:                                              ; preds = %183
  %194 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %192)
          to label %195 unwind label %221

195:                                              ; preds = %193
  store ptr %194, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  store i32 0, ptr %32, align 4, !tbaa !10
  br label %196

196:                                              ; preds = %242, %195
  %197 = load i32, ptr %32, align 4, !tbaa !10
  %198 = load i32, ptr %14, align 4, !tbaa !10
  %199 = icmp ult i32 %197, %198
  br i1 %199, label %225, label %200

200:                                              ; preds = %196
  store i32 5, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  br label %249

201:                                              ; preds = %160
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %23, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #7
  br label %337

205:                                              ; preds = %170, %168, %163
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = extractvalue { ptr, i32 } %206, 0
  store ptr %207, ptr %23, align 8
  %208 = extractvalue { ptr, i32 } %206, 1
  store i32 %208, ptr %24, align 4
  br label %289

209:                                              ; preds = %176
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %23, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %24, align 4
  br label %288

213:                                              ; preds = %179
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %23, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %24, align 4
  br label %287

217:                                              ; preds = %181
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %23, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %286

221:                                              ; preds = %193, %183
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %23, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %24, align 4
  br label %285

225:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #7
  %226 = load ptr, ptr %31, align 8, !tbaa !5
  %227 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %226, i32 0, i32 6
  %228 = load i32, ptr %32, align 4, !tbaa !10
  %229 = zext i32 %228 to i64
  %230 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %227, i64 noundef %229) #7
  %231 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %230)
          to label %232 unwind label %245

232:                                              ; preds = %225
  %233 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 noundef %231)
          to label %234 unwind label %245

234:                                              ; preds = %232
  %235 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %233, i32 0, i32 6
  %236 = load i32, ptr %16, align 4, !tbaa !10
  %237 = zext i32 %236 to i64
  %238 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %235, i64 noundef %237) #7
  %239 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %238)
          to label %240 unwind label %245

240:                                              ; preds = %234
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(9848) %57, i32 noundef %239, i1 noundef zeroext true)
          to label %241 unwind label %245

241:                                              ; preds = %240
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %30, ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  br label %242

242:                                              ; preds = %241
  %243 = load i32, ptr %32, align 4, !tbaa !10
  %244 = add i32 %243, 1
  store i32 %244, ptr %32, align 4, !tbaa !10
  br label %196, !llvm.loop !102

245:                                              ; preds = %240, %234, %232, %225
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %23, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  br label %285

249:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #7
  %250 = load ptr, ptr %57, align 8, !tbaa !104
  %251 = getelementptr inbounds ptr, ptr %250, i64 19
  %252 = load ptr, ptr %251, align 8
  invoke void %252(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 8 dereferenceable(336) %27, i32 noundef 0)
          to label %253 unwind label %261

253:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #7
  %254 = load ptr, ptr %57, align 8, !tbaa !104
  %255 = getelementptr inbounds ptr, ptr %254, i64 38
  %256 = load ptr, ptr %255, align 8
  invoke void %256(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 8 dereferenceable(336) %27, i32 noundef 0)
          to label %257 unwind label %265

257:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 8 dereferenceable(336) %27)
          to label %258 unwind label %269

258:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #7
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(280) %30, ptr noundef @.str.177)
          to label %259 unwind label %273

259:                                              ; preds = %258
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_RSA_SA_RA4_S2_SA_SC_SA_RA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 1 dereferenceable(7) @.str.334, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %260 unwind label %277

260:                                              ; preds = %259
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %30) #7
  call void @llvm.lifetime.end.p0(i64 280, ptr %30) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %27) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %290

261:                                              ; preds = %249
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %23, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %24, align 4
  br label %284

265:                                              ; preds = %253
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %23, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %24, align 4
  br label %283

269:                                              ; preds = %257
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %23, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %24, align 4
  br label %282

273:                                              ; preds = %258
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %23, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %24, align 4
  br label %281

277:                                              ; preds = %259
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %23, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  br label %281

281:                                              ; preds = %277, %273
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %282

282:                                              ; preds = %281, %269
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br label %283

283:                                              ; preds = %282, %265
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %284

284:                                              ; preds = %283, %261
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #7
  br label %285

285:                                              ; preds = %284, %245, %221
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %30) #7
  call void @llvm.lifetime.end.p0(i64 280, ptr %30) #7
  br label %286

286:                                              ; preds = %285, %217
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %27) #7
  br label %287

287:                                              ; preds = %286, %213
  call void @llvm.lifetime.end.p0(i64 336, ptr %27) #7
  br label %288

288:                                              ; preds = %287, %209
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  br label %289

289:                                              ; preds = %288, %205
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %337

290:                                              ; preds = %260, %157
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  store i32 0, ptr %38, align 4, !tbaa !10
  br label %291

291:                                              ; preds = %321, %290
  %292 = load i32, ptr %38, align 4, !tbaa !10
  %293 = load i32, ptr %15, align 4, !tbaa !10
  %294 = icmp ult i32 %292, %293
  br i1 %294, label %296, label %295

295:                                              ; preds = %291
  store i32 8, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  br label %333

296:                                              ; preds = %291
  %297 = load ptr, ptr %5, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %297, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 64, ptr %40) #7
  %299 = getelementptr inbounds %class.anon.351, ptr %40, i32 0, i32 0
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %300, ptr %299, align 8, !tbaa !5
  %301 = getelementptr inbounds %class.anon.351, ptr %40, i32 0, i32 1
  store ptr %57, ptr %301, align 8, !tbaa !106
  %302 = getelementptr inbounds %class.anon.351, ptr %40, i32 0, i32 2
  %303 = load i8, ptr %11, align 1, !tbaa !12, !range !14, !noundef !15
  %304 = trunc i8 %303 to i1
  %305 = zext i1 %304 to i8
  store i8 %305, ptr %302, align 8, !tbaa !108
  %306 = getelementptr inbounds %class.anon.351, ptr %40, i32 0, i32 3
  %307 = load i32, ptr %16, align 4, !tbaa !10
  store i32 %307, ptr %306, align 4, !tbaa !109
  %308 = getelementptr inbounds %class.anon.351, ptr %40, i32 0, i32 4
  %309 = load i8, ptr %7, align 1, !tbaa !12, !range !14, !noundef !15
  %310 = trunc i8 %309 to i1
  %311 = zext i1 %310 to i8
  store i8 %311, ptr %308, align 8, !tbaa !110
  %312 = getelementptr inbounds %class.anon.351, ptr %40, i32 0, i32 5
  %313 = load i8, ptr %13, align 1, !tbaa !12, !range !14, !noundef !15
  %314 = trunc i8 %313 to i1
  %315 = zext i1 %314 to i8
  store i8 %315, ptr %312, align 1, !tbaa !111
  %316 = getelementptr inbounds %class.anon.351, ptr %40, i32 0, i32 6
  %317 = load i32, ptr %38, align 4, !tbaa !10
  store i32 %317, ptr %316, align 4, !tbaa !112
  %318 = getelementptr inbounds %class.anon.351, ptr %40, i32 0, i32 7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %318, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %319 unwind label %324

319:                                              ; preds = %296
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(64) %40)
          to label %320 unwind label %328

320:                                              ; preds = %319
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %298, ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(64) %40) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  br label %321

321:                                              ; preds = %320
  %322 = load i32, ptr %38, align 4, !tbaa !10
  %323 = add i32 %322, 1
  store i32 %323, ptr %38, align 4, !tbaa !10
  br label %291, !llvm.loop !113

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

328:                                              ; preds = %319
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %23, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %24, align 4
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(64) %40) #7
  br label %332

332:                                              ; preds = %328, %324
  call void @llvm.lifetime.end.p0(i64 64, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  br label %337

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

334:                                              ; preds = %333, %155, %140
  %335 = load i32, ptr %16, align 4, !tbaa !10
  %336 = add i32 %335, 1
  store i32 %336, ptr %16, align 4, !tbaa !10
  br label %112, !llvm.loop !114

337:                                              ; preds = %332, %289, %201
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %484

338:                                              ; preds = %116
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %483

339:                                              ; preds = %84
  %340 = load i8, ptr %11, align 1, !tbaa !12, !range !14, !noundef !15
  %341 = trunc i8 %340 to i1
  br i1 %341, label %342, label %398

342:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #7
  %343 = load ptr, ptr %4, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %343, i32 0, i32 1
  call void @_ZN11spirv_cross4joinIJRA2_KcRKNS_7TypedIDILNS_5TypesE0EEERA6_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 4 dereferenceable(4) %344, ptr noundef nonnull align 1 dereferenceable(6) @.str.750)
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #7
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = load ptr, ptr %57, align 8, !tbaa !104
  %347 = getelementptr inbounds ptr, ptr %346, i64 19
  %348 = load ptr, ptr %347, align 8
  invoke void %348(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 8 dereferenceable(336) %345, i32 noundef 0)
          to label %349 unwind label %369

349:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #7
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = load ptr, ptr %57, align 8, !tbaa !104
  %352 = getelementptr inbounds ptr, ptr %351, i64 38
  %353 = load ptr, ptr %352, align 8
  invoke void %353(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 8 dereferenceable(336) %350, i32 noundef 0)
          to label %354 unwind label %373

354:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #7
  %355 = load ptr, ptr %4, align 8, !tbaa !5
  %356 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %355, i32 0, i32 4
  %357 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %356)
          to label %358 unwind label %377

358:                                              ; preds = %354
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %57, i32 noundef %357, i1 noundef zeroext true)
          to label %359 unwind label %377

359:                                              ; preds = %358
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_RSA_SA_RA4_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 1 dereferenceable(7) @.str.334, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %360 unwind label %381

360:                                              ; preds = %359
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  %361 = load ptr, ptr %5, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %361, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr %46) #7
  %363 = getelementptr inbounds %class.anon.352, ptr %46, i32 0, i32 0
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %363, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %364 unwind label %388

364:                                              ; preds = %360
  %365 = getelementptr inbounds %class.anon.352, ptr %46, i32 0, i32 1
  store ptr %57, ptr %365, align 8, !tbaa !115
  %366 = getelementptr inbounds %class.anon.352, ptr %46, i32 0, i32 2
  %367 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %367, ptr %366, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(48) %46)
          to label %368 unwind label %392

368:                                              ; preds = %364
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %362, ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(48) %46) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #7
  br label %482

369:                                              ; preds = %342
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %23, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %24, align 4
  br label %387

373:                                              ; preds = %349
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %23, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %24, align 4
  br label %386

377:                                              ; preds = %358, %354
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %23, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %24, align 4
  br label %385

381:                                              ; preds = %359
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %23, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %385

385:                                              ; preds = %381, %377
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  br label %386

386:                                              ; preds = %385, %373
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %387

387:                                              ; preds = %386, %369
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  br label %397

388:                                              ; preds = %360
  %389 = landingpad { ptr, i32 }
          cleanup
  %390 = extractvalue { ptr, i32 } %389, 0
  store ptr %390, ptr %23, align 8
  %391 = extractvalue { ptr, i32 } %389, 1
  store i32 %391, ptr %24, align 4
  br label %396

392:                                              ; preds = %364
  %393 = landingpad { ptr, i32 }
          cleanup
  %394 = extractvalue { ptr, i32 } %393, 0
  store ptr %394, ptr %23, align 8
  %395 = extractvalue { ptr, i32 } %393, 1
  store i32 %395, ptr %24, align 4
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(48) %46) #7
  br label %396

396:                                              ; preds = %392, %388
  call void @llvm.lifetime.end.p0(i64 48, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  br label %397

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

398:                                              ; preds = %339
  %399 = load ptr, ptr %4, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %399, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %47, ptr align 8 %400, i64 4, i1 false), !tbaa.struct !9
  %401 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %47, i32 0, i32 0
  %402 = load i32, ptr %401, align 4
  %403 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 %402, i32 noundef 11)
  br i1 %403, label %404, label %417

404:                                              ; preds = %398
  %405 = load ptr, ptr %4, align 8, !tbaa !5
  %406 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %405, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 8 %406, i64 4, i1 false), !tbaa.struct !9
  %407 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %48, i32 0, i32 0
  %408 = load i32, ptr %407, align 4
  %409 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %57, i32 %408, i32 noundef 11)
  %410 = icmp eq i32 %409, 20
  br i1 %410, label %411, label %417

411:                                              ; preds = %404
  %412 = load ptr, ptr %5, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %412, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #7
  %414 = getelementptr inbounds %class.anon.353, ptr %50, i32 0, i32 0
  store ptr %57, ptr %414, align 8, !tbaa !117
  %415 = getelementptr inbounds %class.anon.353, ptr %50, i32 0, i32 1
  %416 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %416, ptr %415, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(16) %50) #7
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %413, ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  br label %481

417:                                              ; preds = %404, %398
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #7
  %418 = load ptr, ptr %4, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %418, i32 0, i32 1
  call void @_ZN11spirv_cross4joinIJRA2_KcRKNS_7TypedIDILNS_5TypesE0EEERA6_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 4 dereferenceable(4) %419, ptr noundef nonnull align 1 dereferenceable(6) @.str.750)
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #7
  %420 = load ptr, ptr %6, align 8, !tbaa !5
  %421 = load ptr, ptr %57, align 8, !tbaa !104
  %422 = getelementptr inbounds ptr, ptr %421, i64 19
  %423 = load ptr, ptr %422, align 8
  invoke void %423(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 8 dereferenceable(336) %420, i32 noundef 0)
          to label %424 unwind label %452

424:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #7
  %425 = load ptr, ptr %6, align 8, !tbaa !5
  %426 = load ptr, ptr %4, align 8, !tbaa !5
  %427 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %426, i32 0, i32 1
  %428 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %427)
          to label %429 unwind label %456

429:                                              ; preds = %424
  %430 = load ptr, ptr %57, align 8, !tbaa !104
  %431 = getelementptr inbounds ptr, ptr %430, i64 38
  %432 = load ptr, ptr %431, align 8
  invoke void %432(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 8 dereferenceable(336) %425, i32 noundef %428)
          to label %433 unwind label %456

433:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #7
  %434 = load ptr, ptr %4, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %434, i32 0, i32 4
  %436 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %435)
          to label %437 unwind label %460

437:                                              ; preds = %433
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %57, i32 noundef %436, i1 noundef zeroext true)
          to label %438 unwind label %460

438:                                              ; preds = %437
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_RSA_SA_RA4_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %57, ptr noundef nonnull align 1 dereferenceable(7) @.str.334, ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %439 unwind label %464

439:                                              ; preds = %438
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  %440 = load ptr, ptr %5, align 8, !tbaa !5
  %441 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %440, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #7
  call void @llvm.lifetime.start.p0(i64 56, ptr %56) #7
  %442 = getelementptr inbounds %class.anon.354, ptr %56, i32 0, i32 0
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %442, ptr noundef nonnull align 8 dereferenceable(32) %51)
          to label %443 unwind label %471

443:                                              ; preds = %439
  %444 = getelementptr inbounds %class.anon.354, ptr %56, i32 0, i32 1
  %445 = load i8, ptr %7, align 1, !tbaa !12, !range !14, !noundef !15
  %446 = trunc i8 %445 to i1
  %447 = zext i1 %446 to i8
  store i8 %447, ptr %444, align 8, !tbaa !119
  %448 = getelementptr inbounds %class.anon.354, ptr %56, i32 0, i32 2
  store ptr %57, ptr %448, align 8, !tbaa !121
  %449 = getelementptr inbounds %class.anon.354, ptr %56, i32 0, i32 3
  %450 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %450, ptr %449, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 8 dereferenceable(56) %56)
          to label %451 unwind label %475

451:                                              ; preds = %443
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %441, ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %56) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  br label %481

452:                                              ; preds = %417
  %453 = landingpad { ptr, i32 }
          cleanup
  %454 = extractvalue { ptr, i32 } %453, 0
  store ptr %454, ptr %23, align 8
  %455 = extractvalue { ptr, i32 } %453, 1
  store i32 %455, ptr %24, align 4
  br label %470

456:                                              ; preds = %429, %424
  %457 = landingpad { ptr, i32 }
          cleanup
  %458 = extractvalue { ptr, i32 } %457, 0
  store ptr %458, ptr %23, align 8
  %459 = extractvalue { ptr, i32 } %457, 1
  store i32 %459, ptr %24, align 4
  br label %469

460:                                              ; preds = %437, %433
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %23, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %24, align 4
  br label %468

464:                                              ; preds = %438
  %465 = landingpad { ptr, i32 }
          cleanup
  %466 = extractvalue { ptr, i32 } %465, 0
  store ptr %466, ptr %23, align 8
  %467 = extractvalue { ptr, i32 } %465, 1
  store i32 %467, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  br label %468

468:                                              ; preds = %464, %460
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #7
  br label %469

469:                                              ; preds = %468, %456
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #7
  br label %470

470:                                              ; preds = %469, %452
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #7
  br label %480

471:                                              ; preds = %439
  %472 = landingpad { ptr, i32 }
          cleanup
  %473 = extractvalue { ptr, i32 } %472, 0
  store ptr %473, ptr %23, align 8
  %474 = extractvalue { ptr, i32 } %472, 1
  store i32 %474, ptr %24, align 4
  br label %479

475:                                              ; preds = %443
  %476 = landingpad { ptr, i32 }
          cleanup
  %477 = extractvalue { ptr, i32 } %476, 0
  store ptr %477, ptr %23, align 8
  %478 = extractvalue { ptr, i32 } %476, 1
  store i32 %478, ptr %24, align 4
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %56) #7
  br label %479

479:                                              ; preds = %475, %471
  call void @llvm.lifetime.end.p0(i64 56, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #7
  br label %480

480:                                              ; preds = %479, %470
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  br label %484

481:                                              ; preds = %451, %411
  br label %482

482:                                              ; preds = %481, %368
  br label %483

483:                                              ; preds = %482, %338
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  ret void

484:                                              ; preds = %480, %397, %337
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  br label %485

485:                                              ; preds = %484
  %486 = load ptr, ptr %23, align 8
  %487 = load i32, ptr %24, align 4
  %488 = insertvalue { ptr, i32 } poison, ptr %486, 0
  %489 = insertvalue { ptr, i32 } %488, i32 %487, 1
  resume { ptr, i32 } %489
}

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(280), i64 noundef) #2 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: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #6 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #6 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{i64 0, i64 4, !10}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"bool", !7, i64 0}
!14 = !{i8 0, i8 2}
!15 = !{}
!16 = !{!17, !11, i64 2812}
!17 = !{!"_ZTSN11spirv_cross8CompilerE", !18, i64 8, !65, i64 1928, !65, i64 1984, !6, i64 2040, !6, i64 2048, !11, i64 2056, !68, i64 2064, !13, i64 2120, !63, i64 2128, !13, i64 2184, !13, i64 2185, !70, i64 2192, !65, i64 2312, !73, i64 2368, !63, i64 2400, !63, i64 2456, !63, i64 2512, !63, i64 2568, !63, i64 2624, !62, i64 2680, !62, i64 2744, !11, i64 2808, !11, i64 2812, !13, i64 2816, !63, i64 2824, !13, i64 2880, !13, i64 2881, !11, i64 2884, !75, i64 2888, !65, i64 2944, !77, i64 3000, !63, i64 3056, !13, i64 3112, !79, i64 3120}
!18 = !{!"_ZTSN11spirv_cross8ParsedIRE", !19, i64 0, !25, i64 8, !29, i64 32, !33, i64 248, !7, i64 304, !38, i64 1088, !38, i64 1144, !41, i64 1200, !43, i64 1256, !46, i64 1312, !49, i64 1592, !52, i64 1624, !54, i64 1680, !56, i64 1736, !57, i64 1740, !58, i64 1748, !59, i64 1752, !11, i64 1756, !11, i64 1760, !60, i64 1768, !62, i64 1800, !63, i64 1864}
!19 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !20, i64 0}
!20 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !21, i64 0}
!21 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !23, i64 0}
!23 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !24, i64 0}
!24 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!25 = !{!"_ZTSSt6vectorIjSaIjEE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !30, i64 0, !31, i64 16, !32, i64 24}
!30 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !31, i64 8}
!31 = !{!"long", !7, i64 0}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!33 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !34, i64 0}
!34 = !{!"_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, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!35 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!36 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !37, i64 0, !31, i64 8}
!37 = !{!"float", !7, i64 0}
!38 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !39, i64 0, !31, i64 16, !40, i64 24}
!39 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !31, i64 8}
!40 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!41 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !42, i64 0}
!42 = !{!"_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, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!43 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !44, i64 0, !31, i64 16, !45, i64 24}
!44 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !31, i64 8}
!45 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!46 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !47, i64 0, !31, i64 16, !48, i64 24}
!47 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !31, i64 8}
!48 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!49 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !50, i64 0, !31, i64 16, !51, i64 24}
!50 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !31, i64 8}
!51 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!52 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !53, i64 0}
!53 = !{!"_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, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!54 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !55, i64 0}
!55 = !{!"_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, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!56 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !11, i64 0}
!57 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !11, i64 0, !13, i64 4, !13, i64 5, !13, i64 6}
!58 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!59 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!60 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !61, i64 0, !31, i64 8, !7, i64 16}
!61 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!62 = !{!"_ZTSN11spirv_cross6BitsetE", !31, i64 0, !63, i64 8}
!63 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !64, i64 0}
!64 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!65 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !66, i64 0, !31, i64 16, !67, i64 24}
!66 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !31, i64 8}
!67 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!68 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !69, i64 0}
!69 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!70 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !71, i64 0, !31, i64 16, !72, i64 24}
!71 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !31, i64 8}
!72 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!73 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !74, i64 0, !6, i64 24}
!74 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!75 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !76, i64 0}
!76 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!77 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !78, i64 0}
!78 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!79 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !80, i64 0}
!80 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!81 = !{!17, !11, i64 2808}
!82 = !{!83, !86, i64 12}
!83 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !84, i64 0, !86, i64 12, !87, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !65, i64 32, !88, i64 88, !11, i64 120, !13, i64 124, !13, i64 125, !91, i64 128, !92, i64 136, !65, i64 192, !95, i64 248, !96, i64 272, !96, i64 276, !100, i64 280}
!84 = !{!"_ZTSN11spirv_cross8IVariantE", !85, i64 8}
!85 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !11, i64 0}
!86 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!87 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!88 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !89, i64 0, !31, i64 16, !90, i64 24}
!89 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !31, i64 8}
!90 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!91 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!92 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !93, i64 0, !31, i64 16, !94, i64 24}
!93 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !31, i64 8}
!94 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!95 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !96, i64 0, !97, i64 4, !13, i64 8, !13, i64 9, !13, i64 10, !11, i64 12, !98, i64 16, !99, i64 20}
!96 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !11, i64 0}
!97 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!98 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!99 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!100 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !101, i64 0}
!101 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !6, i64 48}
!102 = distinct !{!102, !103}
!103 = !{!"llvm.loop.mustprogress"}
!104 = !{!105, !105, i64 0}
!105 = !{!"vtable pointer", !8, i64 0}
!106 = !{!107, !6, i64 8}
!107 = !{!"_ZTSZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEE3$_0", !6, i64 0, !6, i64 8, !13, i64 16, !11, i64 20, !13, i64 24, !13, i64 25, !11, i64 28, !60, i64 32}
!108 = !{!107, !13, i64 16}
!109 = !{!107, !11, i64 20}
!110 = !{!107, !13, i64 24}
!111 = !{!107, !13, i64 25}
!112 = !{!107, !11, i64 28}
!113 = distinct !{!113, !103}
!114 = distinct !{!114, !103}
!115 = !{!116, !6, i64 32}
!116 = !{!"_ZTSZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEE3$_1", !60, i64 0, !6, i64 32, !6, i64 40}
!117 = !{!118, !6, i64 0}
!118 = !{!"_ZTSZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEE3$_2", !6, i64 0, !6, i64 8}
!119 = !{!120, !13, i64 32}
!120 = !{!"_ZTSZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEE3$_3", !60, i64 0, !13, i64 32, !6, i64 40, !6, i64 48}
!121 = !{!120, !6, i64 40}


; 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.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::function.349" = 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.anon.351 = type { ptr, ptr, i8, i32, i8, i8, i32, %"class.std::__cxx11::basic_string" }
%class.anon.352 = type { %"class.std::__cxx11::basic_string", ptr, ptr }
%class.anon.353 = type { ptr, ptr }
%class.anon.354 = type { %"class.std::__cxx11::basic_string", i8, ptr, ptr }

@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.286 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.307 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.334 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.335 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.750 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.751 = external hidden unnamed_addr constant [3 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 i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_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_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"struct.spirv_cross::SPIRType", align 8
  %8 = alloca %"class.spirv_cross::TypedID.281", align 4
  %9 = alloca i8, align 1
  %10 = alloca %"class.spirv_cross::SmallVector.27", 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::function.349", align 8
  %17 = alloca %class.anon.351, 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 %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::function.349", align 8
  %23 = alloca %class.anon.352, align 8
  %24 = alloca %"class.std::function.349", align 8
  %25 = alloca %class.anon.353, align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::function.349", align 8
  %31 = alloca %class.anon.354, align 8
  %32 = getelementptr inbounds i8, ptr %0, i64 1744
  %33 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
  %34 = tail call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %33)
  %35 = getelementptr inbounds i8, ptr %1, i64 12
  %36 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %35)
  %37 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %36)
  %38 = getelementptr inbounds i8, ptr %1, i64 8
  %.sroa.025.0.copyload = load i32, ptr %38, align 8, !tbaa !5
  %39 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.025.0.copyload, i32 noundef 15)
  %40 = zext i1 %39 to i8
  %41 = getelementptr inbounds i8, ptr %37, i64 8
  %.sroa.023.0.copyload = load i32, ptr %41, align 8, !tbaa !5
  %42 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.023.0.copyload, i32 noundef 2)
  %43 = tail call noundef i32 @_ZNK11spirv_cross8Compiler19get_execution_modelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %44 = icmp eq i32 %43, 1
  %45 = xor i1 %39, true
  %46 = and i1 %44, %45
  %47 = zext i1 %46 to i8
  br i1 %42, label %48, label %182

48:                                               ; preds = %2
  %49 = getelementptr inbounds i8, ptr %37, i64 136
  %50 = tail call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %49) #6
  %51 = trunc i64 %50 to i32
  %52 = getelementptr inbounds i8, ptr %37, i64 32
  %53 = tail call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %52) #6
  %54 = icmp eq i64 %53, 1
  %55 = zext i1 %54 to i8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #6
  store i32 1, ptr %3, align 4, !tbaa !5
  br i1 %54, label %56, label %58

56:                                               ; preds = %48
  %57 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %37)
  store i32 %57, ptr %3, align 4, !tbaa !5
  br label %58

58:                                               ; preds = %56, %48
  %59 = phi i32 [ %57, %56 ], [ 1, %48 ]
  %60 = select i1 %46, i32 1, i32 %59
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  store i32 0, ptr %4, align 4, !tbaa !5
  %.not123 = icmp eq i32 %51, 0
  br i1 %.not123, label %._crit_edge122, label %.lr.ph121

.lr.ph121:                                        ; preds = %58
  %61 = getelementptr inbounds i8, ptr %0, i64 2812
  %62 = getelementptr inbounds i8, ptr %0, i64 2808
  %63 = getelementptr inbounds i8, ptr %7, i64 276
  %64 = getelementptr inbounds i8, ptr %7, i64 12
  %65 = getelementptr inbounds i8, ptr %7, i64 32
  %66 = getelementptr inbounds i8, ptr %7, i64 88
  %67 = getelementptr inbounds i8, ptr %1, i64 24
  %.not124 = icmp eq i32 %60, 0
  %68 = getelementptr inbounds i8, ptr %34, i64 704
  %69 = getelementptr inbounds i8, ptr %17, i64 8
  %70 = getelementptr inbounds i8, ptr %17, i64 16
  %71 = getelementptr inbounds i8, ptr %17, i64 20
  %72 = getelementptr inbounds i8, ptr %17, i64 24
  %73 = getelementptr inbounds i8, ptr %17, i64 25
  %74 = getelementptr inbounds i8, ptr %17, i64 28
  %75 = getelementptr inbounds i8, ptr %17, i64 32
  br label %76

._crit_edge122:                                   ; preds = %177, %58
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  br label %263

76:                                               ; preds = %.lr.ph121, %177
  %77 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %41)
  %78 = load i32, ptr %4, align 4, !tbaa !5
  %79 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %77, i32 noundef %78, i32 noundef 11)
  br i1 %79, label %80, label %92

80:                                               ; preds = %76
  %81 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %41)
  %82 = load i32, ptr %4, align 4, !tbaa !5
  %83 = call noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %81, i32 noundef %82, i32 noundef 11)
  %84 = icmp eq i32 %83, 4
  %85 = load i32, ptr %61, align 4
  %.not = icmp eq i32 %85, 0
  %or.cond = select i1 %84, i1 %.not, i1 false
  br i1 %or.cond, label %177, label %86

86:                                               ; preds = %80
  %87 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %41)
  %88 = load i32, ptr %4, align 4, !tbaa !5
  %89 = call noundef i32 @_ZNK11spirv_cross8Compiler21get_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %87, i32 noundef %88, i32 noundef 11)
  %90 = icmp eq i32 %89, 3
  %91 = load i32, ptr %62, align 8
  %.not97 = icmp eq i32 %91, 0
  %or.cond114 = select i1 %90, i1 %.not97, i1 false
  br i1 %or.cond114, label %177, label %92

92:                                               ; preds = %86, %76
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #6
  br i1 %54, label %93, label %167

93:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #6
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRKNS_7TypedIDILNS_5TypesE0EEES3_RjRA6_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 1 dereferenceable(6) @.str.750)
          to label %94 unwind label %117

94:                                               ; preds = %93
  %95 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  %96 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %35)
  %97 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %96)
          to label %98 unwind label %119

98:                                               ; preds = %94
  %99 = getelementptr inbounds i8, ptr %97, i64 136
  %100 = load i32, ptr %4, align 4, !tbaa !5
  %101 = zext i32 %100 to i64
  %102 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %99, i64 noundef %101) #6
  %103 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %102)
  %104 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %103)
          to label %105 unwind label %121

105:                                              ; preds = %98
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %7) #6
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %7, ptr noundef nonnull align 8 dereferenceable(336) %104)
          to label %106 unwind label %123

106:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef %103)
  %107 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %107, ptr %63, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  store i32 28, ptr %64, align 4, !tbaa !9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %65, ptr noundef nonnull align 4 dereferenceable(4) %3) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #6
  store i8 1, ptr %9, align 1, !tbaa !38
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 1 dereferenceable(1) %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 280, ptr nonnull %10) #6
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %10) #6
  %108 = load i32, ptr %3, align 4, !tbaa !5
  %109 = zext i32 %108 to i64
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(280) %10, i64 noundef %109) #6
  %110 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %67)
  %111 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %110)
          to label %.preheader unwind label %125

.preheader:                                       ; preds = %106
  %112 = load i32, ptr %3, align 4, !tbaa !5
  %.not125 = icmp eq i32 %112, 0
  br i1 %.not125, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader
  %113 = getelementptr inbounds i8, ptr %111, i64 272
  br label %127

._crit_edge:                                      ; preds = %137, %.preheader
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  %114 = load ptr, ptr %0, align 8, !tbaa !39
  %115 = getelementptr inbounds i8, ptr %114, i64 152
  %116 = load ptr, ptr %115, align 8
  invoke void %116(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %7, i32 noundef 0)
          to label %143 unwind label %151

117:                                              ; preds = %93
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  br label %181

119:                                              ; preds = %94
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %181

121:                                              ; preds = %98
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %181

123:                                              ; preds = %105
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %166

125:                                              ; preds = %106
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %165

127:                                              ; preds = %.lr.ph, %137
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %137 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  %128 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %113, i64 noundef %indvars.iv) #6
  %129 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %128)
  %130 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %129)
          to label %131 unwind label %141

131:                                              ; preds = %127
  %132 = getelementptr inbounds i8, ptr %130, i64 272
  %133 = load i32, ptr %4, align 4, !tbaa !5
  %134 = zext i32 %133 to i64
  %135 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %132, i64 noundef %134) #6
  %136 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %135)
  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) %0, i32 noundef %136, i1 noundef zeroext true)
          to label %137 unwind label %141

137:                                              ; preds = %131
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %10, ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  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
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %138 = load i32, ptr %3, align 4, !tbaa !5
  %139 = zext i32 %138 to i64
  %140 = icmp ult i64 %indvars.iv.next, %139
  br i1 %140, label %127, label %._crit_edge, !llvm.loop !41

141:                                              ; preds = %131, %127
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %165

143:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  %144 = load ptr, ptr %0, align 8, !tbaa !39
  %145 = getelementptr inbounds i8, ptr %144, i64 304
  %146 = load ptr, ptr %145, align 8
  invoke void %146(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %7, i32 noundef 0)
          to label %147 unwind label %153

147:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %7)
          to label %148 unwind label %155

148:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(280) %10, ptr noundef nonnull @.str.177)
          to label %149 unwind label %157

149:                                              ; preds = %148
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_RSA_SA_RA4_S2_SA_SC_SA_RA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.334, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %150 unwind label %159

150:                                              ; preds = %149
  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
  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
  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
  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
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %10) #6
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %10) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %7) #6
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %7) #6
  br label %167

151:                                              ; preds = %._crit_edge
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %164

153:                                              ; preds = %143
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %163

155:                                              ; preds = %147
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %162

157:                                              ; preds = %148
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %161

159:                                              ; preds = %149
  %160 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %161

161:                                              ; preds = %159, %157
  %.pn98 = phi { ptr, i32 } [ %160, %159 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  br label %162

162:                                              ; preds = %161, %155
  %.pn98.pn = phi { ptr, i32 } [ %.pn98, %161 ], [ %156, %155 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  br label %163

163:                                              ; preds = %162, %153
  %.pn98.pn.pn = phi { ptr, i32 } [ %.pn98.pn, %162 ], [ %154, %153 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  br label %164

164:                                              ; preds = %163, %151
  %.pn98.pn.pn.pn = phi { ptr, i32 } [ %.pn98.pn.pn, %163 ], [ %152, %151 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %165

165:                                              ; preds = %164, %141, %125
  %.pn105 = phi { ptr, i32 } [ %142, %141 ], [ %.pn98.pn.pn.pn, %164 ], [ %126, %125 ]
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %10) #6
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %10) #6
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %7) #6
  br label %166

166:                                              ; preds = %165, %123
  %.pn105.pn = phi { ptr, i32 } [ %.pn105, %165 ], [ %124, %123 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %7) #6
  br label %181

167:                                              ; preds = %150, %92
  br i1 %.not124, label %._crit_edge119, label %.lr.ph118

._crit_edge119:                                   ; preds = %170, %167
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  br label %177

.lr.ph118:                                        ; preds = %167, %170
  %.061116 = phi i32 [ %171, %170 ], [ 0, %167 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %17) #6
  store ptr %1, ptr %17, align 8, !tbaa !43
  store ptr %0, ptr %69, align 8, !tbaa !44
  store i8 %47, ptr %70, align 8, !tbaa !48
  %168 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %168, ptr %71, align 4, !tbaa !49
  store i8 %40, ptr %72, align 8, !tbaa !50
  store i8 %55, ptr %73, align 1, !tbaa !51
  store i32 %.061116, ptr %74, align 4, !tbaa !52
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 8 dereferenceable(32) %5)
          to label %169 unwind label %172

169:                                              ; preds = %.lr.ph118
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(64) %17)
          to label %170 unwind label %174

170:                                              ; preds = %169
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %68, ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(64) %17) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  %171 = add nuw i32 %.061116, 1
  %exitcond.not = icmp eq i32 %171, %60
  br i1 %exitcond.not, label %._crit_edge119, label %.lr.ph118, !llvm.loop !53

172:                                              ; preds = %.lr.ph118
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %176

174:                                              ; preds = %169
  %175 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(64) %17) #6
  br label %176

176:                                              ; preds = %174, %172
  %.pn103 = phi { ptr, i32 } [ %175, %174 ], [ %173, %172 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %181

177:                                              ; preds = %86, %80, %._crit_edge119
  %178 = load i32, ptr %4, align 4, !tbaa !5
  %179 = add i32 %178, 1
  store i32 %179, ptr %4, align 4, !tbaa !5
  %180 = icmp ult i32 %179, %51
  br i1 %180, label %76, label %._crit_edge122, !llvm.loop !54

181:                                              ; preds = %119, %166, %121, %176, %117
  %.pn105.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn103, %176 ], [ %118, %117 ], [ %120, %119 ], [ %.pn105.pn, %166 ], [ %122, %121 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  br label %264

182:                                              ; preds = %2
  br i1 %46, label %183, label %218

183:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  call void @_ZN11spirv_cross4joinIJRA2_KcRKNS_7TypedIDILNS_5TypesE0EEERA6_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 1 dereferenceable(6) @.str.750)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  %184 = load ptr, ptr %0, align 8, !tbaa !39
  %185 = getelementptr inbounds i8, ptr %184, i64 152
  %186 = load ptr, ptr %185, align 8
  invoke void %186(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %37, i32 noundef 0)
          to label %187 unwind label %201

187:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #6
  %188 = load ptr, ptr %0, align 8, !tbaa !39
  %189 = getelementptr inbounds i8, ptr %188, i64 304
  %190 = load ptr, ptr %189, align 8
  invoke void %190(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %37, i32 noundef 0)
          to label %191 unwind label %203

191:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #6
  %192 = getelementptr inbounds i8, ptr %1, i64 24
  %193 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %192)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %193, i1 noundef zeroext true)
          to label %194 unwind label %205

194:                                              ; preds = %191
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_RSA_SA_RA4_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.334, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %195 unwind label %207

195:                                              ; preds = %194
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  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
  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
  %196 = getelementptr inbounds i8, ptr %34, i64 704
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %23) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %197 unwind label %212

197:                                              ; preds = %195
  %198 = getelementptr inbounds i8, ptr %23, i64 32
  store ptr %0, ptr %198, align 8, !tbaa !55
  %199 = getelementptr inbounds i8, ptr %23, i64 40
  store ptr %1, ptr %199, align 8, !tbaa !43
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(48) %23)
          to label %200 unwind label %214

200:                                              ; preds = %197
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %196, ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(48) %23) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #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 %263

201:                                              ; preds = %183
  %202 = landingpad { ptr, i32 }
          cleanup
  br label %211

203:                                              ; preds = %187
  %204 = landingpad { ptr, i32 }
          cleanup
  br label %210

205:                                              ; preds = %191
  %206 = landingpad { ptr, i32 }
          cleanup
  br label %209

207:                                              ; preds = %194
  %208 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  br label %209

209:                                              ; preds = %207, %205
  %.pn90 = phi { ptr, i32 } [ %208, %207 ], [ %206, %205 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  br label %210

210:                                              ; preds = %209, %203
  %.pn90.pn = phi { ptr, i32 } [ %.pn90, %209 ], [ %204, %203 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  br label %211

211:                                              ; preds = %210, %201
  %.pn90.pn.pn = phi { ptr, i32 } [ %.pn90.pn, %210 ], [ %202, %201 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %217

212:                                              ; preds = %195
  %213 = landingpad { ptr, i32 }
          cleanup
  br label %216

214:                                              ; preds = %197
  %215 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(48) %23) #6
  br label %216

216:                                              ; preds = %214, %212
  %.pn94 = phi { ptr, i32 } [ %215, %214 ], [ %213, %212 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  br label %217

217:                                              ; preds = %216, %211
  %.pn94.pn = phi { ptr, i32 } [ %.pn94, %216 ], [ %.pn90.pn.pn, %211 ]
  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 %264

218:                                              ; preds = %182
  %.sroa.01.0.copyload = load i32, ptr %38, align 8, !tbaa !5
  %219 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.01.0.copyload, i32 noundef 11)
  br i1 %219, label %220, label %226

220:                                              ; preds = %218
  %.sroa.0.0.copyload = load i32, ptr %38, align 8, !tbaa !5
  %221 = tail call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0.0.copyload, i32 noundef 11)
  %222 = icmp eq i32 %221, 20
  br i1 %222, label %223, label %226

223:                                              ; preds = %220
  %224 = getelementptr inbounds i8, ptr %34, i64 704
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #6
  store ptr %0, ptr %25, align 8, !tbaa !57
  %225 = getelementptr inbounds i8, ptr %25, i64 8
  store ptr %1, ptr %225, align 8, !tbaa !43
  call void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(16) %25) #6
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %224, ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #6
  br label %263

226:                                              ; preds = %220, %218
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #6
  call void @_ZN11spirv_cross4joinIJRA2_KcRKNS_7TypedIDILNS_5TypesE0EEERA6_S1_EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.286, ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 1 dereferenceable(6) @.str.750)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #6
  %227 = load ptr, ptr %0, align 8, !tbaa !39
  %228 = getelementptr inbounds i8, ptr %227, i64 152
  %229 = load ptr, ptr %228, align 8
  invoke void %229(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %37, i32 noundef 0)
          to label %230 unwind label %246

230:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #6
  %231 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %38)
  %232 = load ptr, ptr %0, align 8, !tbaa !39
  %233 = getelementptr inbounds i8, ptr %232, i64 304
  %234 = load ptr, ptr %233, align 8
  invoke void %234(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %37, i32 noundef %231)
          to label %235 unwind label %248

235:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #6
  %236 = getelementptr inbounds i8, ptr %1, i64 24
  %237 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %236)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %237, i1 noundef zeroext true)
          to label %238 unwind label %250

238:                                              ; preds = %235
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_RSA_SA_RA4_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.334, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %239 unwind label %252

239:                                              ; preds = %238
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  %240 = getelementptr inbounds i8, ptr %34, i64 704
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %31) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %241 unwind label %257

241:                                              ; preds = %239
  %242 = getelementptr inbounds i8, ptr %31, i64 32
  store i8 %40, ptr %242, align 8, !tbaa !59
  %243 = getelementptr inbounds i8, ptr %31, i64 40
  store ptr %0, ptr %243, align 8, !tbaa !61
  %244 = getelementptr inbounds i8, ptr %31, i64 48
  store ptr %1, ptr %244, align 8, !tbaa !43
  invoke void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(56) %31)
          to label %245 unwind label %259

245:                                              ; preds = %241
  call void @_ZN11spirv_cross11SmallVectorISt8functionIFvvEELm0EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(25) %240, ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %31) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  br label %263

246:                                              ; preds = %226
  %247 = landingpad { ptr, i32 }
          cleanup
  br label %256

248:                                              ; preds = %230
  %249 = landingpad { ptr, i32 }
          cleanup
  br label %255

250:                                              ; preds = %235
  %251 = landingpad { ptr, i32 }
          cleanup
  br label %254

252:                                              ; preds = %238
  %253 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  br label %254

254:                                              ; preds = %252, %250
  %.pn = phi { ptr, i32 } [ %253, %252 ], [ %251, %250 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %255

255:                                              ; preds = %254, %248
  %.pn.pn = phi { ptr, i32 } [ %.pn, %254 ], [ %249, %248 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  br label %256

256:                                              ; preds = %255, %246
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %255 ], [ %247, %246 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %262

257:                                              ; preds = %239
  %258 = landingpad { ptr, i32 }
          cleanup
  br label %261

259:                                              ; preds = %241
  %260 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(56) %31) #6
  br label %261

261:                                              ; preds = %259, %257
  %.pn87 = phi { ptr, i32 } [ %260, %259 ], [ %258, %257 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #6
  br label %262

262:                                              ; preds = %261, %256
  %.pn87.pn = phi { ptr, i32 } [ %.pn87, %261 ], [ %.pn.pn.pn, %256 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #6
  br label %264

263:                                              ; preds = %200, %245, %223, %._crit_edge122
  ret void

264:                                              ; preds = %262, %217, %181
  %.pn105.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn105.pn.pn.pn.pn, %181 ], [ %.pn94.pn, %217 ], [ %.pn87.pn, %262 ]
  resume { ptr, i32 } %.pn105.pn.pn.pn.pn.pn
}

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(280), i64 noundef) local_unnamed_addr #2 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: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_1D2Ev"(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvvEEC2IZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS3_12SPIRVariableEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL32emit_output_variable_initializerERKNS_12SPIRVariableEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #5 align 2

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

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

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

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


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