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

; 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.3 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.3 = type { i64, [8 x i8] }
%"class.std::allocator.0" = type { i8 }
%"class.spirv_cross::TypedID.285" = type { i32 }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.81" }
%"class.std::_Hashtable.81" = 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::TypedID.281" = type { i32 }
%"class.spirv_cross::TypedID.302" = type { i32 }
%"class.spirv_cross::CompilerReflection" = type { %"class.spirv_cross::CompilerGLSL", %"class.std::shared_ptr" }
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.166", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.169", %"class.std::unordered_set.169", %"class.std::unordered_set.169", %"class.std::unordered_set.169", %"class.std::unordered_set.169", %"class.std::unordered_set.169", %"class.std::unordered_set.169", %"class.std::unordered_map.189", %"class.std::unordered_map.152", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.203", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.217", %"class.spirv_cross::SmallVector.37", %"class.spirv_cross::SmallVector.37", %"class.std::unordered_map.217", %"class.spirv_cross::SmallVector.231", i32, i32, i32, i8, i8, %"class.std::vector.234", %"class.std::vector.234", %"class.std::vector.239", %"class.std::vector.244", %"class.std::unordered_map.217", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.249", %"class.std::unordered_set", ptr, %"class.std::unordered_map.267" }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.99", %"class.spirv_cross::SmallVector.99", ptr, ptr, i32, %"class.std::unordered_set.102", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.121", %"class.spirv_cross::SmallVector.99", %"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.124", %"class.spirv_cross::SmallVector.99", %"class.std::unordered_map.138", %"class.std::unordered_set", i8, %"class.std::unordered_map.152" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector.9", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.17"], %"class.spirv_cross::SmallVector.17", %"class.spirv_cross::SmallVector.17", %"class.std::unordered_map.20", %"class.spirv_cross::SmallVector.34", %"class.spirv_cross::SmallVector.37", %"class.spirv_cross::SmallVector.40", %"class.std::unordered_map.43", %"class.std::unordered_map.62", %"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.5" }
%"struct.std::_Head_base.5" = 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.9" = type { %"class.spirv_cross::VectorView.10", i64, %"class.spirv_cross::AlignedBuffer.11" }
%"class.spirv_cross::VectorView.10" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.11" = 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.17" = type { %"class.spirv_cross::VectorView.18", i64, %"class.spirv_cross::AlignedBuffer.19" }
%"class.spirv_cross::VectorView.18" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.19" = type { [32 x i8] }
%"class.std::unordered_map.20" = type { %"class.std::_Hashtable.21" }
%"class.std::_Hashtable.21" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.34" = type { %"class.spirv_cross::VectorView.35", i64, %"class.spirv_cross::AlignedBuffer.36" }
%"class.spirv_cross::VectorView.35" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.36" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.40" = type { %"class.spirv_cross::VectorView.41", i64, %"class.spirv_cross::AlignedBuffer.42" }
%"class.spirv_cross::VectorView.41" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.42" = type { [8 x i8] }
%"class.std::unordered_map.43" = type { %"class.std::_Hashtable.44" }
%"class.std::_Hashtable.44" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.62" = type { %"class.std::_Hashtable.63" }
%"class.std::_Hashtable.63" = 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.102" = type { %"class.std::_Hashtable.103" }
%"class.std::_Hashtable.103" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.121" = type { %"class.spirv_cross::VectorView.122", i64, %"class.spirv_cross::AlignedBuffer.123" }
%"class.spirv_cross::VectorView.122" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.123" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.std::unordered_map.124" = type { %"class.std::_Hashtable.125" }
%"class.std::_Hashtable.125" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.99" = type { %"class.spirv_cross::VectorView.100", i64, %"class.spirv_cross::AlignedBuffer.101" }
%"class.spirv_cross::VectorView.100" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.101" = type { [32 x i8] }
%"class.std::unordered_map.138" = type { %"class.std::_Hashtable.139" }
%"class.std::_Hashtable.139" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.166" = type { %"class.spirv_cross::VectorView.167", i64, %"class.spirv_cross::AlignedBuffer.168" }
%"class.spirv_cross::VectorView.167" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.168" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"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] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_set.169" = type { %"class.std::_Hashtable.170" }
%"class.std::_Hashtable.170" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.189" = type { %"class.std::_Hashtable.190" }
%"class.std::_Hashtable.190" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.152" = type { %"class.std::_Hashtable.153" }
%"class.std::_Hashtable.153" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.203" = type { %"class.std::_Hashtable.204" }
%"class.std::_Hashtable.204" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.37" = type { %"class.spirv_cross::VectorView.38", i64, %"class.spirv_cross::AlignedBuffer.39" }
%"class.spirv_cross::VectorView.38" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.39" = type { [256 x i8] }
%"class.spirv_cross::SmallVector.231" = type { %"class.spirv_cross::VectorView.232", i64, %"class.spirv_cross::AlignedBuffer.233" }
%"class.spirv_cross::VectorView.232" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.233" = type { [32 x i8] }
%"class.std::vector.234" = type { %"struct.std::_Vector_base.235" }
%"struct.std::_Vector_base.235" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.239" = type { %"struct.std::_Vector_base.240" }
%"struct.std::_Vector_base.240" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.244" = type { %"struct.std::_Vector_base.245" }
%"struct.std::_Vector_base.245" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_map.217" = type { %"class.std::_Hashtable.218" }
%"class.std::_Hashtable.218" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set.249" = type { %"class.std::_Hashtable.250" }
%"class.std::_Hashtable.250" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.267" = type { %"class.std::_Hashtable.268" }
%"class.std::_Hashtable.268" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.spirv_cross::Resource" = type { %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.285", %"class.spirv_cross::TypedID.285", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.281", [4 x i8] }>
%"struct.spirv_cross::Meta" = type { %"struct.spirv_cross::Meta::Decoration", %"class.spirv_cross::SmallVector.286", %"class.std::unordered_map.217", i8, i32 }
%"struct.spirv_cross::Meta::Decoration" = type { %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, %"struct.spirv_cross::Meta::Decoration::Extended" }
%"struct.spirv_cross::Meta::Decoration::Extended" = type { %"class.spirv_cross::Bitset", [18 x i32] }
%"class.spirv_cross::SmallVector.286" = type <{ %"class.spirv_cross::VectorView.287", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.287" = type { ptr, i64 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.99", %"class.spirv_cross::SmallVector.282", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.231", %"class.spirv_cross::SmallVector.99", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.285", %"class.spirv_cross::TypedID.285", %"class.std::unordered_set.169" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.281" }>
%"class.spirv_cross::SmallVector.282" = type { %"class.spirv_cross::VectorView.283", i64, %"class.spirv_cross::AlignedBuffer.284" }
%"class.spirv_cross::VectorView.283" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.284" = type { [8 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.285", i32, i8, i8, i8, i32, i32, i32 }

@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [7 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross18CompilerReflection15emit_type_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9864), 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) #5

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross18CompilerReflection14emit_resourcesEPKcRKNS_11SmallVectorINS_8ResourceELm8EEE(ptr noundef nonnull align 8 dereferenceable(9864) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(408) %2) #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::allocator.0", align 1
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca %"class.spirv_cross::TypedID.285", align 4
  %17 = alloca %"class.spirv_cross::Bitset", align 8
  %18 = alloca ptr, align 8
  %19 = alloca %"class.spirv_cross::TypedID.281", align 4
  %20 = alloca i8, align 1
  %21 = alloca %"class.spirv_cross::TypedID.302", align 4
  %22 = alloca i8, align 1
  %23 = alloca %"class.spirv_cross::TypedID.281", align 4
  %24 = alloca %"class.spirv_cross::TypedID.281", align 4
  %25 = alloca %"class.spirv_cross::TypedID.281", align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::allocator.0", align 1
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::allocator.0", align 1
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::allocator.0", align 1
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.spirv_cross::TypedID.281", align 4
  %37 = alloca i8, align 1
  %38 = alloca %"class.spirv_cross::Bitset", align 8
  %39 = alloca %"class.spirv_cross::TypedID.302", align 4
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::allocator.0", align 1
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::allocator.0", align 1
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::allocator.0", align 1
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::allocator.0", align 1
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::allocator.0", align 1
  %50 = alloca i8, align 1
  %51 = alloca %"class.spirv_cross::TypedID.302", align 4
  %52 = alloca %"class.spirv_cross::TypedID.302", align 4
  %53 = alloca %"class.spirv_cross::TypedID.302", align 4
  %54 = alloca i32, align 4
  %55 = alloca %"class.spirv_cross::TypedID.285", align 4
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::allocator.0", align 1
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::allocator.0", align 1
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::allocator.0", align 1
  %62 = alloca %"class.spirv_cross::TypedID.281", align 4
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::allocator.0", align 1
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::allocator.0", align 1
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::allocator.0", align 1
  %69 = alloca %"class.spirv_cross::TypedID.281", align 4
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::allocator.0", align 1
  %72 = alloca %"class.spirv_cross::TypedID.281", align 4
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::allocator.0", align 1
  %75 = alloca %"class.spirv_cross::TypedID.281", align 4
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::allocator.0", align 1
  %78 = alloca %"class.spirv_cross::TypedID.281", align 4
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::allocator.0", align 1
  %81 = alloca %"class.spirv_cross::TypedID.281", align 4
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::allocator.0", align 1
  %84 = alloca %"class.spirv_cross::TypedID.281", align 4
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca %"class.std::allocator.0", align 1
  %87 = alloca %"class.spirv_cross::TypedID.281", align 4
  %88 = alloca %"class.std::__cxx11::basic_string", align 8
  %89 = alloca %"class.std::allocator.0", align 1
  %90 = alloca %"class.spirv_cross::TypedID.281", align 4
  %91 = alloca ptr, align 8
  %92 = alloca %"class.std::__cxx11::basic_string", align 8
  %93 = alloca %"class.std::allocator.0", align 1
  %94 = alloca %"class.std::__cxx11::basic_string", align 8
  %95 = alloca %"class.std::allocator.0", align 1
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %96 = load ptr, ptr %4, align 8
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_8ResourceEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %97) #7
  br i1 %98, label %99, label %100

99:                                               ; preds = %3
  br label %846

100:                                              ; preds = %3
  %101 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %102 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %101) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %7) #7
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef %103, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %104 unwind label %116

104:                                              ; preds = %100
  invoke void @_ZN11simple_json6Stream19emit_json_key_arrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4421) %102, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %105 unwind label %120

105:                                              ; preds = %104
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %106 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %106, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %107 = load ptr, ptr %11, align 8, !tbaa !5
  %108 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_8ResourceEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %107) #7
  store ptr %108, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %109 = load ptr, ptr %11, align 8, !tbaa !5
  %110 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_8ResourceEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %109) #7
  store ptr %110, ptr %13, align 8, !tbaa !5
  br label %111

111:                                              ; preds = %836, %105
  %112 = load ptr, ptr %12, align 8, !tbaa !5
  %113 = load ptr, ptr %13, align 8, !tbaa !5
  %114 = icmp ne ptr %112, %113
  br i1 %114, label %125, label %115

115:                                              ; preds = %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %843

116:                                              ; preds = %100
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %9, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %10, align 4
  br label %124

120:                                              ; preds = %104
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %9, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  br label %124

124:                                              ; preds = %120, %116
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #7
  br label %847

125:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %126 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %126, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %127 = load ptr, ptr %14, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %127, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 4 %128, i64 4, i1 false), !tbaa.struct !9
  %129 = getelementptr inbounds %"class.spirv_cross::TypedID.285", ptr %16, i32 0, i32 0
  %130 = load i32, ptr %129, align 4
  %131 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler8get_typeENS_7TypedIDILNS_5TypesE1EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %130)
  store ptr %131, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %17) #7
  %132 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %96, i32 0, i32 1
  %133 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %132, i32 0, i32 3
  %134 = load ptr, ptr %15, align 8, !tbaa !5
  %135 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %134, i32 0, i32 1
  %136 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %133, ptr noundef nonnull align 4 dereferenceable(4) %135)
  %137 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %136, i32 0, i32 0
  %138 = getelementptr inbounds %"struct.spirv_cross::Meta::Decoration", ptr %137, i32 0, i32 4
  call void @_ZN11spirv_cross6BitsetC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %17, ptr noundef nonnull align 8 dereferenceable(64) %138)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %139 = load ptr, ptr %14, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %139, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 8 %140, i64 4, i1 false), !tbaa.struct !9
  %141 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %19, i32 0, i32 0
  %142 = load i32, ptr %141, align 4
  %143 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %142)
          to label %144 unwind label %206

144:                                              ; preds = %125
  store ptr %143, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #7
  %145 = load ptr, ptr %14, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %145, i32 0, i32 0
  %147 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %146)
          to label %148 unwind label %210

148:                                              ; preds = %144
  %149 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %21, i32 0, i32 0
  store i32 %147, ptr %149, align 4
  %150 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %21, i32 0, i32 0
  %151 = load i32, ptr %150, align 4
  %152 = invoke noundef i32 @_ZNK11spirv_cross8Compiler17get_storage_classENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %151)
          to label %153 unwind label %210

153:                                              ; preds = %148
  %154 = icmp eq i32 %152, 9
  %155 = zext i1 %154 to i8
  store i8 %155, ptr %20, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  %156 = load ptr, ptr %15, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %156, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 8 %157, i64 4, i1 false), !tbaa.struct !9
  %158 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %23, i32 0, i32 0
  %159 = load i32, ptr %158, align 4
  %160 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %159)
          to label %161 unwind label %214

161:                                              ; preds = %153
  %162 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %160, i32 noundef 2)
          to label %163 unwind label %214

163:                                              ; preds = %161
  br i1 %162, label %173, label %164

164:                                              ; preds = %163
  %165 = load ptr, ptr %15, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %165, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %24, ptr align 8 %166, i64 4, i1 false), !tbaa.struct !9
  %167 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %24, i32 0, i32 0
  %168 = load i32, ptr %167, align 4
  %169 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %168)
          to label %170 unwind label %214

170:                                              ; preds = %164
  %171 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %169, i32 noundef 3)
          to label %172 unwind label %214

172:                                              ; preds = %170
  br label %173

173:                                              ; preds = %172, %163
  %174 = phi i1 [ true, %163 ], [ %171, %172 ]
  %175 = zext i1 %174 to i8
  store i8 %175, ptr %22, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %176 = load i8, ptr %20, align 1, !tbaa !12, !range !14, !noundef !15
  %177 = trunc i8 %176 to i1
  br i1 %177, label %185, label %178

178:                                              ; preds = %173
  %179 = load i8, ptr %22, align 1, !tbaa !12, !range !14, !noundef !15
  %180 = trunc i8 %179 to i1
  br i1 %180, label %181, label %185

181:                                              ; preds = %178
  %182 = load ptr, ptr %14, align 8, !tbaa !5
  %183 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %182, i32 0, i32 2
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 4 dereferenceable(4) %183)
          to label %184 unwind label %218

184:                                              ; preds = %181
  br label %188

185:                                              ; preds = %178, %173
  %186 = load ptr, ptr %14, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %186, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 8 %187, i64 4, i1 false), !tbaa.struct !9
  br label %188

188:                                              ; preds = %185, %184
  %189 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %190 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %189) #7
  invoke void @_ZN11simple_json6Stream17begin_json_objectEv(ptr noundef nonnull align 8 dereferenceable(4421) %190)
          to label %191 unwind label %218

191:                                              ; preds = %188
  %192 = load ptr, ptr %15, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %192, i32 0, i32 2
  %194 = load i32, ptr %193, align 8, !tbaa !16
  %195 = icmp eq i32 %194, 15
  br i1 %195, label %196, label %241

196:                                              ; preds = %191
  %197 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %198 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %197) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.18, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %199 unwind label %222

199:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #7
  %200 = load ptr, ptr %14, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %200, i32 0, i32 2
  %202 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %201)
          to label %203 unwind label %226

203:                                              ; preds = %199
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, i32 noundef %202) #7
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef @.str.16, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %204 unwind label %230

204:                                              ; preds = %203
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %198, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %205 unwind label %234

205:                                              ; preds = %204
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %265

206:                                              ; preds = %125
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %9, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %10, align 4
  br label %842

210:                                              ; preds = %148, %144
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %9, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %10, align 4
  br label %841

214:                                              ; preds = %170, %164, %161, %153
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %9, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %10, align 4
  br label %840

218:                                              ; preds = %832, %761, %737, %713, %689, %665, %641, %617, %588, %570, %552, %528, %427, %188, %181
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %9, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %10, align 4
  br label %839

222:                                              ; preds = %196
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %9, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %10, align 4
  br label %240

226:                                              ; preds = %199
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %9, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %10, align 4
  br label %239

230:                                              ; preds = %203
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %9, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %10, align 4
  br label %238

234:                                              ; preds = %204
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %9, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  br label %238

238:                                              ; preds = %234, %230
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  br label %239

239:                                              ; preds = %238, %226
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  br label %240

240:                                              ; preds = %239, %222
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #7
  br label %839

241:                                              ; preds = %191
  %242 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %243 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %242) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef @.str.18, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %244 unwind label %251

244:                                              ; preds = %241
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #7
  %245 = load ptr, ptr %15, align 8, !tbaa !5
  %246 = load ptr, ptr %96, align 8, !tbaa !43
  %247 = getelementptr inbounds ptr, ptr %246, i64 19
  %248 = load ptr, ptr %247, align 8
  invoke void %248(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(9848) %96, ptr noundef nonnull align 8 dereferenceable(336) %245, i32 noundef 0)
          to label %249 unwind label %255

249:                                              ; preds = %244
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %243, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %250 unwind label %259

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

251:                                              ; preds = %241
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %9, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %10, align 4
  br label %264

255:                                              ; preds = %244
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %9, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %10, align 4
  br label %263

259:                                              ; preds = %249
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %9, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  br label %263

263:                                              ; preds = %259, %255
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %264

264:                                              ; preds = %263, %251
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  br label %839

265:                                              ; preds = %250, %205
  %266 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %267 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %266) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %268 unwind label %324

268:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #7
  %269 = load ptr, ptr %14, align 8, !tbaa !5
  %270 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %269, i32 0, i32 3
  %271 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %270) #7
  br i1 %271, label %276, label %272

272:                                              ; preds = %268
  %273 = load ptr, ptr %14, align 8, !tbaa !5
  %274 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %273, i32 0, i32 3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(32) %274)
          to label %275 unwind label %328

275:                                              ; preds = %272
  br label %283

276:                                              ; preds = %268
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %25, i64 4, i1 false), !tbaa.struct !9
  %277 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %36, i32 0, i32 0
  %278 = load i32, ptr %277, align 4
  %279 = load ptr, ptr %96, align 8, !tbaa !43
  %280 = getelementptr inbounds ptr, ptr %279, i64 3
  %281 = load ptr, ptr %280, align 8
  invoke void %281(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %278)
          to label %282 unwind label %328

282:                                              ; preds = %276
  br label %283

283:                                              ; preds = %282, %275
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %267, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %284 unwind label %332

284:                                              ; preds = %283
  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) %33) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #7
  %285 = load ptr, ptr %15, align 8, !tbaa !5
  %286 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %285, i32 0, i32 11
  %287 = load i32, ptr %286, align 8, !tbaa !45
  %288 = icmp eq i32 %287, 12
  br i1 %288, label %299, label %289

289:                                              ; preds = %284
  %290 = load ptr, ptr %15, align 8, !tbaa !5
  %291 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %290, i32 0, i32 11
  %292 = load i32, ptr %291, align 8, !tbaa !45
  %293 = icmp eq i32 %292, 2
  br i1 %293, label %294, label %297

294:                                              ; preds = %289
  %295 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %17, i32 noundef 3)
          to label %296 unwind label %338

296:                                              ; preds = %294
  br label %297

297:                                              ; preds = %296, %289
  %298 = phi i1 [ false, %289 ], [ %295, %296 ]
  br label %299

299:                                              ; preds = %297, %284
  %300 = phi i1 [ true, %284 ], [ %298, %297 ]
  %301 = zext i1 %300 to i8
  store i8 %301, ptr %37, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 64, ptr %38) #7
  %302 = load i8, ptr %37, align 1, !tbaa !12, !range !14, !noundef !15
  %303 = trunc i8 %302 to i1
  br i1 %303, label %304, label %313

304:                                              ; preds = %299
  %305 = load ptr, ptr %14, align 8, !tbaa !5
  %306 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %305, i32 0, i32 0
  %307 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %306)
          to label %308 unwind label %342

308:                                              ; preds = %304
  %309 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %39, i32 0, i32 0
  store i32 %307, ptr %309, align 4
  %310 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %39, i32 0, i32 0
  %311 = load i32, ptr %310, align 4
  invoke void @_ZNK11spirv_cross8Compiler22get_buffer_block_flagsENS_7TypedIDILNS_5TypesE2EEE(ptr dead_on_unwind writable sret(%"class.spirv_cross::Bitset") align 8 %38, ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %311)
          to label %312 unwind label %342

312:                                              ; preds = %308
  br label %316

313:                                              ; preds = %299
  %314 = load ptr, ptr %18, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross6BitsetC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %38, ptr noundef nonnull align 8 dereferenceable(64) %314)
          to label %315 unwind label %342

315:                                              ; preds = %313
  br label %316

316:                                              ; preds = %315, %312
  %317 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %38, i32 noundef 25)
          to label %318 unwind label %346

318:                                              ; preds = %316
  br i1 %317, label %319, label %359

319:                                              ; preds = %318
  %320 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %321 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %320) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.57, ptr noundef nonnull align 1 dereferenceable(1) %41)
          to label %322 unwind label %350

322:                                              ; preds = %319
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %321, ptr noundef nonnull align 8 dereferenceable(32) %40, i1 noundef zeroext true)
          to label %323 unwind label %354

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

324:                                              ; preds = %265
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %9, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %10, align 4
  br label %337

328:                                              ; preds = %276, %272
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %9, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %10, align 4
  br label %336

332:                                              ; preds = %283
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %9, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br label %336

336:                                              ; preds = %332, %328
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  br label %337

337:                                              ; preds = %336, %324
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #7
  br label %839

338:                                              ; preds = %294
  %339 = landingpad { ptr, i32 }
          cleanup
  %340 = extractvalue { ptr, i32 } %339, 0
  store ptr %340, ptr %9, align 8
  %341 = extractvalue { ptr, i32 } %339, 1
  store i32 %341, ptr %10, align 4
  br label %489

342:                                              ; preds = %313, %308, %304
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %9, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %10, align 4
  br label %488

346:                                              ; preds = %410, %393, %376, %359, %316
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %9, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %10, align 4
  br label %487

350:                                              ; preds = %319
  %351 = landingpad { ptr, i32 }
          cleanup
  %352 = extractvalue { ptr, i32 } %351, 0
  store ptr %352, ptr %9, align 8
  %353 = extractvalue { ptr, i32 } %351, 1
  store i32 %353, ptr %10, align 4
  br label %358

354:                                              ; preds = %322
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %9, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  br label %358

358:                                              ; preds = %354, %350
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %41) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #7
  br label %487

359:                                              ; preds = %323, %318
  %360 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %38, i32 noundef 24)
          to label %361 unwind label %346

361:                                              ; preds = %359
  br i1 %360, label %362, label %376

362:                                              ; preds = %361
  %363 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %364 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %363) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef @.str.58, ptr noundef nonnull align 1 dereferenceable(1) %43)
          to label %365 unwind label %367

365:                                              ; preds = %362
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %364, ptr noundef nonnull align 8 dereferenceable(32) %42, i1 noundef zeroext true)
          to label %366 unwind label %371

366:                                              ; preds = %365
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  br label %376

367:                                              ; preds = %362
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %9, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %10, align 4
  br label %375

371:                                              ; preds = %365
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %9, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %375

375:                                              ; preds = %371, %367
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #7
  br label %487

376:                                              ; preds = %366, %361
  %377 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %38, i32 noundef 19)
          to label %378 unwind label %346

378:                                              ; preds = %376
  br i1 %377, label %379, label %393

379:                                              ; preds = %378
  %380 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %381 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %380) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef @.str.59, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %382 unwind label %384

382:                                              ; preds = %379
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %381, ptr noundef nonnull align 8 dereferenceable(32) %44, i1 noundef zeroext true)
          to label %383 unwind label %388

383:                                              ; preds = %382
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  br label %393

384:                                              ; preds = %379
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %9, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %10, align 4
  br label %392

388:                                              ; preds = %382
  %389 = landingpad { ptr, i32 }
          cleanup
  %390 = extractvalue { ptr, i32 } %389, 0
  store ptr %390, ptr %9, align 8
  %391 = extractvalue { ptr, i32 } %389, 1
  store i32 %391, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %392

392:                                              ; preds = %388, %384
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  br label %487

393:                                              ; preds = %383, %378
  %394 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %38, i32 noundef 23)
          to label %395 unwind label %346

395:                                              ; preds = %393
  br i1 %394, label %396, label %410

396:                                              ; preds = %395
  %397 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %398 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %397) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %47) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef @.str.60, ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %399 unwind label %401

399:                                              ; preds = %396
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %398, ptr noundef nonnull align 8 dereferenceable(32) %46, i1 noundef zeroext true)
          to label %400 unwind label %405

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

401:                                              ; preds = %396
  %402 = landingpad { ptr, i32 }
          cleanup
  %403 = extractvalue { ptr, i32 } %402, 0
  store ptr %403, ptr %9, align 8
  %404 = extractvalue { ptr, i32 } %402, 1
  store i32 %404, ptr %10, align 4
  br label %409

405:                                              ; preds = %399
  %406 = landingpad { ptr, i32 }
          cleanup
  %407 = extractvalue { ptr, i32 } %406, 0
  store ptr %407, ptr %9, align 8
  %408 = extractvalue { ptr, i32 } %406, 1
  store i32 %408, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br label %409

409:                                              ; preds = %405, %401
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %47) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  br label %487

410:                                              ; preds = %400, %395
  %411 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %38, i32 noundef 21)
          to label %412 unwind label %346

412:                                              ; preds = %410
  br i1 %411, label %413, label %427

413:                                              ; preds = %412
  %414 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %415 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %414) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %49) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef @.str.61, ptr noundef nonnull align 1 dereferenceable(1) %49)
          to label %416 unwind label %418

416:                                              ; preds = %413
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %415, ptr noundef nonnull align 8 dereferenceable(32) %48, i1 noundef zeroext true)
          to label %417 unwind label %422

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

418:                                              ; preds = %413
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %9, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %10, align 4
  br label %426

422:                                              ; preds = %416
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %9, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  br label %426

426:                                              ; preds = %422, %418
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %49) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #7
  br label %487

427:                                              ; preds = %417, %412
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %38) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  %428 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross18CompilerReflection15emit_type_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9864) %96, ptr noundef nonnull align 8 dereferenceable(336) %428)
          to label %429 unwind label %218

429:                                              ; preds = %427
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #7
  %430 = load i8, ptr %22, align 1, !tbaa !12, !range !14, !noundef !15
  %431 = trunc i8 %430 to i1
  br i1 %431, label %432, label %467

432:                                              ; preds = %429
  %433 = load ptr, ptr %14, align 8, !tbaa !5
  %434 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %433, i32 0, i32 0
  %435 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %434)
          to label %436 unwind label %490

436:                                              ; preds = %432
  %437 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %51, i32 0, i32 0
  store i32 %435, ptr %437, align 4
  %438 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %51, i32 0, i32 0
  %439 = load i32, ptr %438, align 4
  %440 = invoke noundef i32 @_ZNK11spirv_cross8Compiler17get_storage_classENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %439)
          to label %441 unwind label %490

441:                                              ; preds = %436
  %442 = icmp eq i32 %440, 2
  br i1 %442, label %465, label %443

443:                                              ; preds = %441
  %444 = load ptr, ptr %14, align 8, !tbaa !5
  %445 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %444, i32 0, i32 0
  %446 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %445)
          to label %447 unwind label %490

447:                                              ; preds = %443
  %448 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %52, i32 0, i32 0
  store i32 %446, ptr %448, align 4
  %449 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %52, i32 0, i32 0
  %450 = load i32, ptr %449, align 4
  %451 = invoke noundef i32 @_ZNK11spirv_cross8Compiler17get_storage_classENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %450)
          to label %452 unwind label %490

452:                                              ; preds = %447
  %453 = icmp eq i32 %451, 0
  br i1 %453, label %465, label %454

454:                                              ; preds = %452
  %455 = load ptr, ptr %14, align 8, !tbaa !5
  %456 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %455, i32 0, i32 0
  %457 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %456)
          to label %458 unwind label %490

458:                                              ; preds = %454
  %459 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %53, i32 0, i32 0
  store i32 %457, ptr %459, align 4
  %460 = getelementptr inbounds %"class.spirv_cross::TypedID.302", ptr %53, i32 0, i32 0
  %461 = load i32, ptr %460, align 4
  %462 = invoke noundef i32 @_ZNK11spirv_cross8Compiler17get_storage_classENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %461)
          to label %463 unwind label %490

463:                                              ; preds = %458
  %464 = icmp eq i32 %462, 12
  br label %465

465:                                              ; preds = %463, %452, %441
  %466 = phi i1 [ true, %452 ], [ true, %441 ], [ %464, %463 ]
  br label %467

467:                                              ; preds = %465, %429
  %468 = phi i1 [ false, %429 ], [ %466, %465 ]
  %469 = zext i1 %468 to i8
  store i8 %469, ptr %50, align 1, !tbaa !12
  %470 = load i8, ptr %50, align 1, !tbaa !12, !range !14, !noundef !15
  %471 = trunc i8 %470 to i1
  br i1 %471, label %472, label %508

472:                                              ; preds = %467
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #7
  %473 = load ptr, ptr %14, align 8, !tbaa !5
  %474 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %473, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %55, ptr align 8 %474, i64 4, i1 false), !tbaa.struct !9
  %475 = getelementptr inbounds %"class.spirv_cross::TypedID.285", ptr %55, i32 0, i32 0
  %476 = load i32, ptr %475, align 4
  %477 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler8get_typeENS_7TypedIDILNS_5TypesE1EEE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %476)
          to label %478 unwind label %494

478:                                              ; preds = %472
  %479 = invoke noundef i64 @_ZNK11spirv_cross8Compiler24get_declared_struct_sizeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %96, ptr noundef nonnull align 8 dereferenceable(336) %477)
          to label %480 unwind label %494

480:                                              ; preds = %478
  %481 = trunc i64 %479 to i32
  store i32 %481, ptr %54, align 4, !tbaa !10
  %482 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %483 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %482) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef @.str.62, ptr noundef nonnull align 1 dereferenceable(1) %57)
          to label %484 unwind label %498

484:                                              ; preds = %480
  %485 = load i32, ptr %54, align 4, !tbaa !10
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %483, ptr noundef nonnull align 8 dereferenceable(32) %56, i32 noundef %485)
          to label %486 unwind label %502

486:                                              ; preds = %484
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  br label %508

487:                                              ; preds = %426, %409, %392, %375, %358, %346
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %38) #7
  br label %488

488:                                              ; preds = %487, %342
  call void @llvm.lifetime.end.p0(i64 64, ptr %38) #7
  br label %489

489:                                              ; preds = %488, %338
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #7
  br label %839

490:                                              ; preds = %458, %454, %447, %443, %436, %432
  %491 = landingpad { ptr, i32 }
          cleanup
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %9, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %10, align 4
  br label %518

494:                                              ; preds = %478, %472
  %495 = landingpad { ptr, i32 }
          cleanup
  %496 = extractvalue { ptr, i32 } %495, 0
  store ptr %496, ptr %9, align 8
  %497 = extractvalue { ptr, i32 } %495, 1
  store i32 %497, ptr %10, align 4
  br label %507

498:                                              ; preds = %480
  %499 = landingpad { ptr, i32 }
          cleanup
  %500 = extractvalue { ptr, i32 } %499, 0
  store ptr %500, ptr %9, align 8
  %501 = extractvalue { ptr, i32 } %499, 1
  store i32 %501, ptr %10, align 4
  br label %506

502:                                              ; preds = %484
  %503 = landingpad { ptr, i32 }
          cleanup
  %504 = extractvalue { ptr, i32 } %503, 0
  store ptr %504, ptr %9, align 8
  %505 = extractvalue { ptr, i32 } %503, 1
  store i32 %505, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  br label %506

506:                                              ; preds = %502, %498
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %57) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #7
  br label %507

507:                                              ; preds = %506, %494
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  br label %518

508:                                              ; preds = %486, %467
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #7
  %509 = load ptr, ptr %15, align 8, !tbaa !5
  %510 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %509, i32 0, i32 11
  %511 = load i32, ptr %510, align 8, !tbaa !45
  %512 = icmp eq i32 %511, 9
  br i1 %512, label %513, label %528

513:                                              ; preds = %508
  %514 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %515 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %514) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef @.str.63, ptr noundef nonnull align 1 dereferenceable(1) %59)
          to label %516 unwind label %519

516:                                              ; preds = %513
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %515, ptr noundef nonnull align 8 dereferenceable(32) %58, i1 noundef zeroext true)
          to label %517 unwind label %523

517:                                              ; preds = %516
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  br label %528

518:                                              ; preds = %507, %490
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #7
  br label %839

519:                                              ; preds = %513
  %520 = landingpad { ptr, i32 }
          cleanup
  %521 = extractvalue { ptr, i32 } %520, 0
  store ptr %521, ptr %9, align 8
  %522 = extractvalue { ptr, i32 } %520, 1
  store i32 %522, ptr %10, align 4
  br label %527

523:                                              ; preds = %516
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %9, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #7
  br label %527

527:                                              ; preds = %523, %519
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %59) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #7
  br label %839

528:                                              ; preds = %517, %508
  %529 = load ptr, ptr %18, align 8, !tbaa !5
  %530 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %529, i32 noundef 30)
          to label %531 unwind label %218

531:                                              ; preds = %528
  br i1 %530, label %532, label %552

532:                                              ; preds = %531
  %533 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %534 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %533) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef @.str.24, ptr noundef nonnull align 1 dereferenceable(1) %61)
          to label %535 unwind label %543

535:                                              ; preds = %532
  %536 = load ptr, ptr %14, align 8, !tbaa !5
  %537 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %536, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %62, ptr align 8 %537, i64 4, i1 false), !tbaa.struct !9
  %538 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %62, i32 0, i32 0
  %539 = load i32, ptr %538, align 4
  %540 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %539, i32 noundef 30)
          to label %541 unwind label %547

541:                                              ; preds = %535
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %534, ptr noundef nonnull align 8 dereferenceable(32) %60, i32 noundef %540)
          to label %542 unwind label %547

542:                                              ; preds = %541
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #7
  br label %552

543:                                              ; preds = %532
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %9, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %10, align 4
  br label %551

547:                                              ; preds = %541, %535
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %9, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  br label %551

551:                                              ; preds = %547, %543
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #7
  br label %839

552:                                              ; preds = %542, %531
  %553 = load ptr, ptr %18, align 8, !tbaa !5
  %554 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %553, i32 noundef 4)
          to label %555 unwind label %218

555:                                              ; preds = %552
  br i1 %554, label %556, label %570

556:                                              ; preds = %555
  %557 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %558 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %557) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %64) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef @.str.27, ptr noundef nonnull align 1 dereferenceable(1) %64)
          to label %559 unwind label %561

559:                                              ; preds = %556
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %558, ptr noundef nonnull align 8 dereferenceable(32) %63, i1 noundef zeroext true)
          to label %560 unwind label %565

560:                                              ; preds = %559
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %64) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #7
  br label %570

561:                                              ; preds = %556
  %562 = landingpad { ptr, i32 }
          cleanup
  %563 = extractvalue { ptr, i32 } %562, 0
  store ptr %563, ptr %9, align 8
  %564 = extractvalue { ptr, i32 } %562, 1
  store i32 %564, ptr %10, align 4
  br label %569

565:                                              ; preds = %559
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %9, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  br label %569

569:                                              ; preds = %565, %561
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %64) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #7
  br label %839

570:                                              ; preds = %560, %555
  %571 = load ptr, ptr %18, align 8, !tbaa !5
  %572 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %571, i32 noundef 5)
          to label %573 unwind label %218

573:                                              ; preds = %570
  br i1 %572, label %574, label %588

574:                                              ; preds = %573
  %575 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %576 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %575) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %66) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %66) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef @.str.64, ptr noundef nonnull align 1 dereferenceable(1) %66)
          to label %577 unwind label %579

577:                                              ; preds = %574
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %576, ptr noundef nonnull align 8 dereferenceable(32) %65, i1 noundef zeroext true)
          to label %578 unwind label %583

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

579:                                              ; preds = %574
  %580 = landingpad { ptr, i32 }
          cleanup
  %581 = extractvalue { ptr, i32 } %580, 0
  store ptr %581, ptr %9, align 8
  %582 = extractvalue { ptr, i32 } %580, 1
  store i32 %582, ptr %10, align 4
  br label %587

583:                                              ; preds = %577
  %584 = landingpad { ptr, i32 }
          cleanup
  %585 = extractvalue { ptr, i32 } %584, 0
  store ptr %585, ptr %9, align 8
  %586 = extractvalue { ptr, i32 } %584, 1
  store i32 %586, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  br label %587

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

588:                                              ; preds = %578, %573
  %589 = load ptr, ptr %18, align 8, !tbaa !5
  %590 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %589, i32 noundef 32)
          to label %591 unwind label %218

591:                                              ; preds = %588
  br i1 %590, label %592, label %612

592:                                              ; preds = %591
  %593 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %594 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %593) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %68) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef @.str.65, ptr noundef nonnull align 1 dereferenceable(1) %68)
          to label %595 unwind label %603

595:                                              ; preds = %592
  %596 = load ptr, ptr %14, align 8, !tbaa !5
  %597 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %596, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %69, ptr align 8 %597, i64 4, i1 false), !tbaa.struct !9
  %598 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %69, i32 0, i32 0
  %599 = load i32, ptr %598, align 4
  %600 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %599, i32 noundef 32)
          to label %601 unwind label %607

601:                                              ; preds = %595
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %594, ptr noundef nonnull align 8 dereferenceable(32) %67, i32 noundef %600)
          to label %602 unwind label %607

602:                                              ; preds = %601
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #7
  br label %612

603:                                              ; preds = %592
  %604 = landingpad { ptr, i32 }
          cleanup
  %605 = extractvalue { ptr, i32 } %604, 0
  store ptr %605, ptr %9, align 8
  %606 = extractvalue { ptr, i32 } %604, 1
  store i32 %606, ptr %10, align 4
  br label %611

607:                                              ; preds = %601, %595
  %608 = landingpad { ptr, i32 }
          cleanup
  %609 = extractvalue { ptr, i32 } %608, 0
  store ptr %609, ptr %9, align 8
  %610 = extractvalue { ptr, i32 } %608, 1
  store i32 %610, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #7
  br label %611

611:                                              ; preds = %607, %603
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #7
  br label %839

612:                                              ; preds = %602, %591
  %613 = load ptr, ptr %15, align 8, !tbaa !5
  %614 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %613, i32 0, i32 11
  %615 = load i32, ptr %614, align 8, !tbaa !45
  %616 = icmp ne i32 %615, 9
  br i1 %616, label %617, label %641

617:                                              ; preds = %612
  %618 = load ptr, ptr %18, align 8, !tbaa !5
  %619 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %618, i32 noundef 34)
          to label %620 unwind label %218

620:                                              ; preds = %617
  br i1 %619, label %621, label %641

621:                                              ; preds = %620
  %622 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %623 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %622) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %71) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %71) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef @.str.66, ptr noundef nonnull align 1 dereferenceable(1) %71)
          to label %624 unwind label %632

624:                                              ; preds = %621
  %625 = load ptr, ptr %14, align 8, !tbaa !5
  %626 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %625, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %72, ptr align 8 %626, i64 4, i1 false), !tbaa.struct !9
  %627 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %72, i32 0, i32 0
  %628 = load i32, ptr %627, align 4
  %629 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %628, i32 noundef 34)
          to label %630 unwind label %636

630:                                              ; preds = %624
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %623, ptr noundef nonnull align 8 dereferenceable(32) %70, i32 noundef %629)
          to label %631 unwind label %636

631:                                              ; preds = %630
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %71) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #7
  br label %641

632:                                              ; preds = %621
  %633 = landingpad { ptr, i32 }
          cleanup
  %634 = extractvalue { ptr, i32 } %633, 0
  store ptr %634, ptr %9, align 8
  %635 = extractvalue { ptr, i32 } %633, 1
  store i32 %635, ptr %10, align 4
  br label %640

636:                                              ; preds = %630, %624
  %637 = landingpad { ptr, i32 }
          cleanup
  %638 = extractvalue { ptr, i32 } %637, 0
  store ptr %638, ptr %9, align 8
  %639 = extractvalue { ptr, i32 } %637, 1
  store i32 %639, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #7
  br label %640

640:                                              ; preds = %636, %632
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %71) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #7
  br label %839

641:                                              ; preds = %631, %620, %612
  %642 = load ptr, ptr %18, align 8, !tbaa !5
  %643 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %642, i32 noundef 33)
          to label %644 unwind label %218

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

645:                                              ; preds = %644
  %646 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %647 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %646) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %73) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %74) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef @.str.67, ptr noundef nonnull align 1 dereferenceable(1) %74)
          to label %648 unwind label %656

648:                                              ; preds = %645
  %649 = load ptr, ptr %14, align 8, !tbaa !5
  %650 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %649, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %75, ptr align 8 %650, i64 4, i1 false), !tbaa.struct !9
  %651 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %75, i32 0, i32 0
  %652 = load i32, ptr %651, align 4
  %653 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %652, i32 noundef 33)
          to label %654 unwind label %660

654:                                              ; preds = %648
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %647, ptr noundef nonnull align 8 dereferenceable(32) %73, i32 noundef %653)
          to label %655 unwind label %660

655:                                              ; preds = %654
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %73) #7
  br label %665

656:                                              ; preds = %645
  %657 = landingpad { ptr, i32 }
          cleanup
  %658 = extractvalue { ptr, i32 } %657, 0
  store ptr %658, ptr %9, align 8
  %659 = extractvalue { ptr, i32 } %657, 1
  store i32 %659, ptr %10, align 4
  br label %664

660:                                              ; preds = %654, %648
  %661 = landingpad { ptr, i32 }
          cleanup
  %662 = extractvalue { ptr, i32 } %661, 0
  store ptr %662, ptr %9, align 8
  %663 = extractvalue { ptr, i32 } %661, 1
  store i32 %663, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #7
  br label %664

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

665:                                              ; preds = %655, %644
  %666 = load ptr, ptr %18, align 8, !tbaa !5
  %667 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %666, i32 noundef 43)
          to label %668 unwind label %218

668:                                              ; preds = %665
  br i1 %667, label %669, label %689

669:                                              ; preds = %668
  %670 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %671 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %670) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %77) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %77)
          to label %672 unwind label %680

672:                                              ; preds = %669
  %673 = load ptr, ptr %14, align 8, !tbaa !5
  %674 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %673, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %78, ptr align 8 %674, i64 4, i1 false), !tbaa.struct !9
  %675 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %78, i32 0, i32 0
  %676 = load i32, ptr %675, align 4
  %677 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %676, i32 noundef 43)
          to label %678 unwind label %684

678:                                              ; preds = %672
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %671, ptr noundef nonnull align 8 dereferenceable(32) %76, i32 noundef %677)
          to label %679 unwind label %684

679:                                              ; preds = %678
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #7
  br label %689

680:                                              ; preds = %669
  %681 = landingpad { ptr, i32 }
          cleanup
  %682 = extractvalue { ptr, i32 } %681, 0
  store ptr %682, ptr %9, align 8
  %683 = extractvalue { ptr, i32 } %681, 1
  store i32 %683, ptr %10, align 4
  br label %688

684:                                              ; preds = %678, %672
  %685 = landingpad { ptr, i32 }
          cleanup
  %686 = extractvalue { ptr, i32 } %685, 0
  store ptr %686, ptr %9, align 8
  %687 = extractvalue { ptr, i32 } %685, 1
  store i32 %687, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #7
  br label %688

688:                                              ; preds = %684, %680
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %77) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #7
  br label %839

689:                                              ; preds = %679, %668
  %690 = load ptr, ptr %18, align 8, !tbaa !5
  %691 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %690, i32 noundef 35)
          to label %692 unwind label %218

692:                                              ; preds = %689
  br i1 %691, label %693, label %713

693:                                              ; preds = %692
  %694 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %695 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %694) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %80) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %79, ptr noundef @.str.25, ptr noundef nonnull align 1 dereferenceable(1) %80)
          to label %696 unwind label %704

696:                                              ; preds = %693
  %697 = load ptr, ptr %14, align 8, !tbaa !5
  %698 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %697, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %81, ptr align 8 %698, i64 4, i1 false), !tbaa.struct !9
  %699 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %81, i32 0, i32 0
  %700 = load i32, ptr %699, align 4
  %701 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %700, i32 noundef 35)
          to label %702 unwind label %708

702:                                              ; preds = %696
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %695, ptr noundef nonnull align 8 dereferenceable(32) %79, i32 noundef %701)
          to label %703 unwind label %708

703:                                              ; preds = %702
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #7
  br label %713

704:                                              ; preds = %693
  %705 = landingpad { ptr, i32 }
          cleanup
  %706 = extractvalue { ptr, i32 } %705, 0
  store ptr %706, ptr %9, align 8
  %707 = extractvalue { ptr, i32 } %705, 1
  store i32 %707, ptr %10, align 4
  br label %712

708:                                              ; preds = %702, %696
  %709 = landingpad { ptr, i32 }
          cleanup
  %710 = extractvalue { ptr, i32 } %709, 0
  store ptr %710, ptr %9, align 8
  %711 = extractvalue { ptr, i32 } %709, 1
  store i32 %711, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #7
  br label %712

712:                                              ; preds = %708, %704
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #7
  br label %839

713:                                              ; preds = %703, %692
  %714 = load ptr, ptr %18, align 8, !tbaa !5
  %715 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %714, i32 noundef 4487)
          to label %716 unwind label %218

716:                                              ; preds = %713
  br i1 %715, label %717, label %737

717:                                              ; preds = %716
  %718 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %719 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %718) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %83) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %83) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %83)
          to label %720 unwind label %728

720:                                              ; preds = %717
  %721 = load ptr, ptr %14, align 8, !tbaa !5
  %722 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %721, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %84, ptr align 8 %722, i64 4, i1 false), !tbaa.struct !9
  %723 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %84, i32 0, i32 0
  %724 = load i32, ptr %723, align 4
  %725 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %724, i32 noundef 4487)
          to label %726 unwind label %732

726:                                              ; preds = %720
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %719, ptr noundef nonnull align 8 dereferenceable(32) %82, i32 noundef %725)
          to label %727 unwind label %732

727:                                              ; preds = %726
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %83) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #7
  br label %737

728:                                              ; preds = %717
  %729 = landingpad { ptr, i32 }
          cleanup
  %730 = extractvalue { ptr, i32 } %729, 0
  store ptr %730, ptr %9, align 8
  %731 = extractvalue { ptr, i32 } %729, 1
  store i32 %731, ptr %10, align 4
  br label %736

732:                                              ; preds = %726, %720
  %733 = landingpad { ptr, i32 }
          cleanup
  %734 = extractvalue { ptr, i32 } %733, 0
  store ptr %734, ptr %9, align 8
  %735 = extractvalue { ptr, i32 } %733, 1
  store i32 %735, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #7
  br label %736

736:                                              ; preds = %732, %728
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %83) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #7
  br label %839

737:                                              ; preds = %727, %716
  %738 = load ptr, ptr %18, align 8, !tbaa !5
  %739 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %738, i32 noundef 4488)
          to label %740 unwind label %218

740:                                              ; preds = %737
  br i1 %739, label %741, label %761

741:                                              ; preds = %740
  %742 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %743 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %742) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %86) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef @.str.70, ptr noundef nonnull align 1 dereferenceable(1) %86)
          to label %744 unwind label %752

744:                                              ; preds = %741
  %745 = load ptr, ptr %14, align 8, !tbaa !5
  %746 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %745, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %87, ptr align 8 %746, i64 4, i1 false), !tbaa.struct !9
  %747 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %87, i32 0, i32 0
  %748 = load i32, ptr %747, align 4
  %749 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %748, i32 noundef 4488)
          to label %750 unwind label %756

750:                                              ; preds = %744
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %743, ptr noundef nonnull align 8 dereferenceable(32) %85, i32 noundef %749)
          to label %751 unwind label %756

751:                                              ; preds = %750
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #7
  br label %761

752:                                              ; preds = %741
  %753 = landingpad { ptr, i32 }
          cleanup
  %754 = extractvalue { ptr, i32 } %753, 0
  store ptr %754, ptr %9, align 8
  %755 = extractvalue { ptr, i32 } %753, 1
  store i32 %755, ptr %10, align 4
  br label %760

756:                                              ; preds = %750, %744
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %9, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #7
  br label %760

760:                                              ; preds = %756, %752
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %86) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #7
  br label %839

761:                                              ; preds = %751, %740
  %762 = load ptr, ptr %18, align 8, !tbaa !5
  %763 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %762, i32 noundef 4499)
          to label %764 unwind label %218

764:                                              ; preds = %761
  br i1 %763, label %765, label %785

765:                                              ; preds = %764
  %766 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %767 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %766) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %88) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %89) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %89) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %88, ptr noundef @.str.71, ptr noundef nonnull align 1 dereferenceable(1) %89)
          to label %768 unwind label %776

768:                                              ; preds = %765
  %769 = load ptr, ptr %14, align 8, !tbaa !5
  %770 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %769, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %90, ptr align 8 %770, i64 4, i1 false), !tbaa.struct !9
  %771 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %90, i32 0, i32 0
  %772 = load i32, ptr %771, align 4
  %773 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %96, i32 %772, i32 noundef 4499)
          to label %774 unwind label %780

774:                                              ; preds = %768
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %767, ptr noundef nonnull align 8 dereferenceable(32) %88, i32 noundef %773)
          to label %775 unwind label %780

775:                                              ; preds = %774
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %89) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #7
  br label %785

776:                                              ; preds = %765
  %777 = landingpad { ptr, i32 }
          cleanup
  %778 = extractvalue { ptr, i32 } %777, 0
  store ptr %778, ptr %9, align 8
  %779 = extractvalue { ptr, i32 } %777, 1
  store i32 %779, ptr %10, align 4
  br label %784

780:                                              ; preds = %774, %768
  %781 = landingpad { ptr, i32 }
          cleanup
  %782 = extractvalue { ptr, i32 } %781, 0
  store ptr %782, ptr %9, align 8
  %783 = extractvalue { ptr, i32 } %781, 1
  store i32 %783, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  br label %784

784:                                              ; preds = %780, %776
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %89) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %88) #7
  br label %839

785:                                              ; preds = %775, %764
  %786 = load ptr, ptr %15, align 8, !tbaa !5
  %787 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %786, i32 0, i32 2
  %788 = load i32, ptr %787, align 8, !tbaa !16
  %789 = icmp eq i32 %788, 16
  br i1 %789, label %790, label %832

790:                                              ; preds = %785
  %791 = load ptr, ptr %15, align 8, !tbaa !5
  %792 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %791, i32 0, i32 14
  %793 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %792, i32 0, i32 5
  %794 = load i32, ptr %793, align 4, !tbaa !46
  %795 = icmp eq i32 %794, 2
  br i1 %795, label %796, label %832

796:                                              ; preds = %790
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #7
  %797 = load ptr, ptr %15, align 8, !tbaa !5
  %798 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %797, i32 0, i32 14
  %799 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %798, i32 0, i32 6
  %800 = load i32, ptr %799, align 8, !tbaa !47
  %801 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14format_to_glslEN3spv11ImageFormatE(ptr noundef nonnull align 8 dereferenceable(9848) %96, i32 noundef %800)
          to label %802 unwind label %812

802:                                              ; preds = %796
  store ptr %801, ptr %91, align 8, !tbaa !5
  %803 = load ptr, ptr %91, align 8, !tbaa !5
  %804 = icmp ne ptr %803, null
  br i1 %804, label %805, label %830

805:                                              ; preds = %802
  %806 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %807 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %806) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %92) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %93) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %93) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef @.str.72, ptr noundef nonnull align 1 dereferenceable(1) %93)
          to label %808 unwind label %816

808:                                              ; preds = %805
  call void @llvm.lifetime.start.p0(i64 32, ptr %94) #7
  %809 = load ptr, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %95) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %95) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %94, ptr noundef %809, ptr noundef nonnull align 1 dereferenceable(1) %95)
          to label %810 unwind label %820

810:                                              ; preds = %808
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %807, ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull align 8 dereferenceable(32) %94)
          to label %811 unwind label %824

811:                                              ; preds = %810
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %95) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %95) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %93) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %93) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #7
  br label %830

812:                                              ; preds = %796
  %813 = landingpad { ptr, i32 }
          cleanup
  %814 = extractvalue { ptr, i32 } %813, 0
  store ptr %814, ptr %9, align 8
  %815 = extractvalue { ptr, i32 } %813, 1
  store i32 %815, ptr %10, align 4
  br label %831

816:                                              ; preds = %805
  %817 = landingpad { ptr, i32 }
          cleanup
  %818 = extractvalue { ptr, i32 } %817, 0
  store ptr %818, ptr %9, align 8
  %819 = extractvalue { ptr, i32 } %817, 1
  store i32 %819, ptr %10, align 4
  br label %829

820:                                              ; preds = %808
  %821 = landingpad { ptr, i32 }
          cleanup
  %822 = extractvalue { ptr, i32 } %821, 0
  store ptr %822, ptr %9, align 8
  %823 = extractvalue { ptr, i32 } %821, 1
  store i32 %823, ptr %10, align 4
  br label %828

824:                                              ; preds = %810
  %825 = landingpad { ptr, i32 }
          cleanup
  %826 = extractvalue { ptr, i32 } %825, 0
  store ptr %826, ptr %9, align 8
  %827 = extractvalue { ptr, i32 } %825, 1
  store i32 %827, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #7
  br label %828

828:                                              ; preds = %824, %820
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %95) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %95) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %94) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #7
  br label %829

829:                                              ; preds = %828, %816
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %93) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %93) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #7
  br label %831

830:                                              ; preds = %811, %802
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  br label %832

831:                                              ; preds = %829, %812
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  br label %839

832:                                              ; preds = %830, %790, %785
  %833 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %834 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %833) #7
  invoke void @_ZN11simple_json6Stream15end_json_objectEv(ptr noundef nonnull align 8 dereferenceable(4421) %834)
          to label %835 unwind label %218

835:                                              ; preds = %832
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %17) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  br label %836

836:                                              ; preds = %835
  %837 = load ptr, ptr %12, align 8, !tbaa !5
  %838 = getelementptr inbounds %"struct.spirv_cross::Resource", ptr %837, i32 1
  store ptr %838, ptr %12, align 8, !tbaa !5
  br label %111

839:                                              ; preds = %831, %784, %760, %736, %712, %688, %664, %640, %611, %587, %569, %551, %527, %518, %489, %337, %264, %240, %218
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %840

840:                                              ; preds = %839, %214
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  br label %841

841:                                              ; preds = %840, %210
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  br label %842

842:                                              ; preds = %841, %206
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %17) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %847

843:                                              ; preds = %115
  %844 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %96, i32 0, i32 1
  %845 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %844) #7
  call void @_ZN11simple_json6Stream14end_json_arrayEv(ptr noundef nonnull align 8 dereferenceable(4421) %845)
  br label %846

846:                                              ; preds = %843, %99
  ret void

847:                                              ; preds = %842, %124
  %848 = load ptr, ptr %9, align 8
  %849 = load i32, ptr %10, align 4
  %850 = insertvalue { ptr, i32 } poison, ptr %848, 0
  %851 = insertvalue { ptr, i32 } %850, i32 %849, 1
  resume { ptr, i32 } %851
}

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #3 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

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

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

declare noundef i64 @_ZNK11spirv_cross8Compiler24get_declared_struct_sizeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL14format_to_glslEN3spv11ImageFormatE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #5

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


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.3 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.3 = type { i64, [8 x i8] }
%"class.std::allocator.0" = type { i8 }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.81" }
%"class.std::_Hashtable.81" = 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::TypedID.281" = type { i32 }

@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [7 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross18CompilerReflection15emit_type_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9864), 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 #5

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross18CompilerReflection14emit_resourcesEPKcRKNS_11SmallVectorINS_8ResourceELm8EEE(ptr noundef nonnull align 8 dereferenceable(9864) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(408) %2) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::allocator.0", align 1
  %6 = alloca %"class.spirv_cross::Bitset", align 8
  %7 = alloca %"class.spirv_cross::TypedID.281", align 4
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::allocator.0", align 1
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator.0", align 1
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::allocator.0", align 1
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.spirv_cross::Bitset", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::allocator.0", align 1
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::allocator.0", align 1
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::allocator.0", align 1
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator.0", align 1
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator.0", align 1
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator.0", align 1
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::allocator.0", align 1
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::allocator.0", align 1
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::allocator.0", align 1
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::allocator.0", align 1
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::allocator.0", align 1
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::allocator.0", align 1
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::allocator.0", align 1
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::allocator.0", align 1
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::allocator.0", align 1
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::allocator.0", align 1
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::allocator.0", align 1
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::allocator.0", align 1
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::allocator.0", align 1
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::allocator.0", align 1
  %59 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_8ResourceEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %2) #6
  br i1 %59, label %475, label %60

60:                                               ; preds = %3
  %61 = getelementptr inbounds i8, ptr %0, i64 9848
  %62 = tail call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef %1, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %63 unwind label %69

63:                                               ; preds = %60
  invoke void @_ZN11simple_json6Stream19emit_json_key_arrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4421) %62, ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %64 unwind label %71

64:                                               ; preds = %63
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  %65 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_8ResourceEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %2) #6
  %66 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_8ResourceEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %2) #6
  %.not199 = icmp eq ptr %65, %66
  br i1 %.not199, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %64
  %67 = getelementptr inbounds i8, ptr %0, i64 256
  br label %74

._crit_edge:                                      ; preds = %471, %64
  %68 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @_ZN11simple_json6Stream14end_json_arrayEv(ptr noundef nonnull align 8 dereferenceable(4421) %68)
  br label %475

69:                                               ; preds = %60
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %73

71:                                               ; preds = %63
  %72 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  br label %73

73:                                               ; preds = %71, %69
  %.pn = phi { ptr, i32 } [ %72, %71 ], [ %70, %69 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  br label %476

74:                                               ; preds = %.lr.ph, %471
  %.0123200 = phi ptr [ %65, %.lr.ph ], [ %472, %471 ]
  %75 = getelementptr inbounds i8, ptr %.0123200, i64 4
  %.sroa.037.0.copyload = load i32, ptr %75, align 4, !tbaa !5
  %76 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler8get_typeENS_7TypedIDILNS_5TypesE1EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.037.0.copyload)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #6
  %77 = getelementptr inbounds i8, ptr %76, i64 8
  %78 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixERSA_(ptr noundef nonnull align 8 dereferenceable(56) %67, ptr noundef nonnull align 4 dereferenceable(4) %77)
  %79 = getelementptr inbounds i8, ptr %78, i64 128
  call void @_ZN11spirv_cross6BitsetC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %6, ptr noundef nonnull align 8 dereferenceable(64) %79)
  %.sroa.024.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %80 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.024.0.copyload)
          to label %81 unwind label %114

81:                                               ; preds = %74
  %82 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %.0123200)
          to label %83 unwind label %116

83:                                               ; preds = %81
  %84 = invoke noundef i32 @_ZNK11spirv_cross8Compiler17get_storage_classENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %82)
          to label %85 unwind label %116

85:                                               ; preds = %83
  %86 = icmp ne i32 %84, 9
  %.sroa.019.0.copyload = load i32, ptr %77, align 8, !tbaa !5
  %87 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.019.0.copyload)
          to label %88 unwind label %118

88:                                               ; preds = %85
  %89 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %87, i32 noundef 2)
          to label %90 unwind label %118

90:                                               ; preds = %88
  br i1 %89, label %95, label %91

91:                                               ; preds = %90
  %.sroa.018.0.copyload = load i32, ptr %77, align 8, !tbaa !5
  %92 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.018.0.copyload)
          to label %93 unwind label %118

93:                                               ; preds = %91
  %94 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %92, i32 noundef 3)
          to label %95 unwind label %118

95:                                               ; preds = %93, %90
  %96 = phi i1 [ true, %90 ], [ %94, %93 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  %brmerge.not = and i1 %86, %96
  br i1 %brmerge.not, label %97, label %99

97:                                               ; preds = %95
  %98 = getelementptr inbounds i8, ptr %.0123200, i64 8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_1EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %98)
          to label %101 unwind label %120

99:                                               ; preds = %95
  %100 = load i32, ptr %.0123200, align 8, !tbaa !5
  store i32 %100, ptr %7, align 4, !tbaa !5
  br label %101

101:                                              ; preds = %97, %99
  %102 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  invoke void @_ZN11simple_json6Stream17begin_json_objectEv(ptr noundef nonnull align 8 dereferenceable(4421) %102)
          to label %103 unwind label %120

103:                                              ; preds = %101
  %104 = getelementptr inbounds i8, ptr %76, i64 16
  %105 = load i32, ptr %104, align 8, !tbaa !9
  %106 = icmp eq i32 %105, 15
  %107 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  br i1 %106, label %108, label %130

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

109:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  %110 = getelementptr inbounds i8, ptr %.0123200, i64 8
  %111 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %110)
  call void @_ZNSt7__cxx119to_stringEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, i32 noundef %111) #6
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull @.str.16, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %112 unwind label %124

112:                                              ; preds = %109
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %107, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %113 unwind label %126

113:                                              ; preds = %112
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(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.end.p0(i64 32, ptr nonnull %8) #6
  br label %145

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

116:                                              ; preds = %83, %81
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %474

118:                                              ; preds = %93, %91, %88, %85
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %474

120:                                              ; preds = %469, %429, %415, %401, %387, %373, %359, %345, %329, %317, %305, %291, %240, %101, %97
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %473

122:                                              ; preds = %108
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %129

124:                                              ; preds = %109
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %128

126:                                              ; preds = %112
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  br label %128

128:                                              ; preds = %126, %124
  %.pn130 = phi { ptr, i32 } [ %127, %126 ], [ %125, %124 ]
  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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  br label %129

129:                                              ; preds = %128, %122
  %.pn130.pn = phi { ptr, i32 } [ %.pn130, %128 ], [ %123, %122 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(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.end.p0(i64 32, ptr nonnull %8) #6
  br label %473

130:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.18, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %131 unwind label %137

131:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  %132 = load ptr, ptr %0, align 8, !tbaa !38
  %133 = getelementptr inbounds i8, ptr %132, i64 152
  %134 = load ptr, ptr %133, align 8
  invoke void %134(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) %76, i32 noundef 0)
          to label %135 unwind label %139

135:                                              ; preds = %131
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %107, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %136 unwind label %141

136:                                              ; preds = %135
  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) %12) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %145

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

139:                                              ; preds = %131
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %143

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

143:                                              ; preds = %141, %139
  %.pn127 = phi { ptr, i32 } [ %142, %141 ], [ %140, %139 ]
  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) %12) #6
  br label %144

144:                                              ; preds = %143, %137
  %.pn127.pn = phi { ptr, i32 } [ %.pn127, %143 ], [ %138, %137 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %473

145:                                              ; preds = %136, %113
  %146 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %147 unwind label %173

147:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #6
  %148 = getelementptr inbounds i8, ptr %.0123200, i64 16
  %149 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %148) #6
  br i1 %149, label %151, label %150

150:                                              ; preds = %147
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %148)
          to label %155 unwind label %175

151:                                              ; preds = %147
  %.sroa.017.0.copyload = load i32, ptr %7, align 4, !tbaa !5
  %152 = load ptr, ptr %0, align 8, !tbaa !38
  %153 = getelementptr inbounds i8, ptr %152, i64 24
  %154 = load ptr, ptr %153, align 8
  invoke void %154(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.017.0.copyload)
          to label %155 unwind label %175

155:                                              ; preds = %151, %150
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %146, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %156 unwind label %177

156:                                              ; preds = %155
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  %157 = getelementptr inbounds i8, ptr %76, i64 128
  %158 = load i32, ptr %157, align 8, !tbaa !40
  switch i32 %158, label %.fold.split [
    i32 12, label %.critedge
    i32 2, label %159
  ]

159:                                              ; preds = %156
  %160 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %6, i32 noundef 3)
          to label %161 unwind label %181

.fold.split:                                      ; preds = %156
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %18) #6
  br label %165

161:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %18) #6
  br i1 %160, label %162, label %165

.critedge:                                        ; preds = %156
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %18) #6
  br label %162

162:                                              ; preds = %.critedge, %161
  %163 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %.0123200)
          to label %164 unwind label %183

164:                                              ; preds = %162
  invoke void @_ZNK11spirv_cross8Compiler22get_buffer_block_flagsENS_7TypedIDILNS_5TypesE2EEE(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::Bitset") align 8 %18, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %163)
          to label %166 unwind label %183

165:                                              ; preds = %.fold.split, %161
  invoke void @_ZN11spirv_cross6BitsetC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %18, ptr noundef nonnull align 8 dereferenceable(64) %80)
          to label %166 unwind label %183

166:                                              ; preds = %165, %164
  %167 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %18, i32 noundef 25)
          to label %168 unwind label %185

168:                                              ; preds = %166
  br i1 %167, label %169, label %192

169:                                              ; preds = %168
  %170 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull @.str.57, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %171 unwind label %187

171:                                              ; preds = %169
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %170, ptr noundef nonnull align 8 dereferenceable(32) %19, i1 noundef zeroext true)
          to label %172 unwind label %189

172:                                              ; preds = %171
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %192

173:                                              ; preds = %145
  %174 = landingpad { ptr, i32 }
          cleanup
  br label %180

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

177:                                              ; preds = %155
  %178 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  br label %179

179:                                              ; preds = %177, %175
  %.pn133 = phi { ptr, i32 } [ %178, %177 ], [ %176, %175 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %180

180:                                              ; preds = %179, %173
  %.pn133.pn = phi { ptr, i32 } [ %.pn133, %179 ], [ %174, %173 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %473

181:                                              ; preds = %159
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %473

183:                                              ; preds = %165, %164, %162
  %184 = landingpad { ptr, i32 }
          cleanup
  br label %270

185:                                              ; preds = %228, %216, %204, %192, %166
  %186 = landingpad { ptr, i32 }
          cleanup
  br label %269

187:                                              ; preds = %169
  %188 = landingpad { ptr, i32 }
          cleanup
  br label %191

189:                                              ; preds = %171
  %190 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  br label %191

191:                                              ; preds = %189, %187
  %.pn136 = phi { ptr, i32 } [ %190, %189 ], [ %188, %187 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #6
  br label %269

192:                                              ; preds = %172, %168
  %193 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %18, i32 noundef 24)
          to label %194 unwind label %185

194:                                              ; preds = %192
  br i1 %193, label %195, label %204

195:                                              ; preds = %194
  %196 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull @.str.58, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %197 unwind label %199

197:                                              ; preds = %195
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %196, ptr noundef nonnull align 8 dereferenceable(32) %21, i1 noundef zeroext true)
          to label %198 unwind label %201

198:                                              ; preds = %197
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %204

199:                                              ; preds = %195
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %203

201:                                              ; preds = %197
  %202 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #6
  br label %203

203:                                              ; preds = %201, %199
  %.pn138 = phi { ptr, i32 } [ %202, %201 ], [ %200, %199 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #6
  br label %269

204:                                              ; preds = %198, %194
  %205 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %18, i32 noundef 19)
          to label %206 unwind label %185

206:                                              ; preds = %204
  br i1 %205, label %207, label %216

207:                                              ; preds = %206
  %208 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull @.str.59, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %209 unwind label %211

209:                                              ; preds = %207
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %208, ptr noundef nonnull align 8 dereferenceable(32) %23, i1 noundef zeroext true)
          to label %210 unwind label %213

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

211:                                              ; preds = %207
  %212 = landingpad { ptr, i32 }
          cleanup
  br label %215

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

215:                                              ; preds = %213, %211
  %.pn140 = phi { ptr, i32 } [ %214, %213 ], [ %212, %211 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #6
  br label %269

216:                                              ; preds = %210, %206
  %217 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %18, i32 noundef 23)
          to label %218 unwind label %185

218:                                              ; preds = %216
  br i1 %217, label %219, label %228

219:                                              ; preds = %218
  %220 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull @.str.60, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %221 unwind label %223

221:                                              ; preds = %219
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %220, ptr noundef nonnull align 8 dereferenceable(32) %25, i1 noundef zeroext true)
          to label %222 unwind label %225

222:                                              ; preds = %221
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %228

223:                                              ; preds = %219
  %224 = landingpad { ptr, i32 }
          cleanup
  br label %227

225:                                              ; preds = %221
  %226 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  br label %227

227:                                              ; preds = %225, %223
  %.pn142 = phi { ptr, i32 } [ %226, %225 ], [ %224, %223 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #6
  br label %269

228:                                              ; preds = %222, %218
  %229 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %18, i32 noundef 21)
          to label %230 unwind label %185

230:                                              ; preds = %228
  br i1 %229, label %231, label %240

231:                                              ; preds = %230
  %232 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.61, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %233 unwind label %235

233:                                              ; preds = %231
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %232, ptr noundef nonnull align 8 dereferenceable(32) %27, i1 noundef zeroext true)
          to label %234 unwind label %237

234:                                              ; preds = %233
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %240

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

237:                                              ; preds = %233
  %238 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  br label %239

239:                                              ; preds = %237, %235
  %.pn144 = phi { ptr, i32 } [ %238, %237 ], [ %236, %235 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #6
  br label %269

240:                                              ; preds = %234, %230
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %18) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %18) #6
  invoke void @_ZN11spirv_cross18CompilerReflection15emit_type_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9864) %0, ptr noundef nonnull align 8 dereferenceable(336) %76)
          to label %241 unwind label %120

241:                                              ; preds = %240
  br i1 %96, label %242, label %.critedge193

242:                                              ; preds = %241
  %243 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %.0123200)
          to label %244 unwind label %271

244:                                              ; preds = %242
  %245 = invoke noundef i32 @_ZNK11spirv_cross8Compiler17get_storage_classENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %243)
          to label %246 unwind label %271

246:                                              ; preds = %244
  %247 = icmp eq i32 %245, 2
  br i1 %247, label %.critedge195, label %248

248:                                              ; preds = %246
  %249 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %.0123200)
          to label %250 unwind label %271

250:                                              ; preds = %248
  %251 = invoke noundef i32 @_ZNK11spirv_cross8Compiler17get_storage_classENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %249)
          to label %252 unwind label %271

252:                                              ; preds = %250
  %253 = icmp eq i32 %251, 0
  br i1 %253, label %.critedge195, label %254

254:                                              ; preds = %252
  %255 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %.0123200)
          to label %256 unwind label %271

256:                                              ; preds = %254
  %257 = invoke noundef i32 @_ZNK11spirv_cross8Compiler17get_storage_classENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %255)
          to label %258 unwind label %271

258:                                              ; preds = %256
  %259 = icmp eq i32 %257, 12
  br i1 %259, label %.critedge195, label %.critedge193

.critedge195:                                     ; preds = %252, %246, %258
  %260 = getelementptr inbounds i8, ptr %.0123200, i64 8
  %.sroa.010.0.copyload = load i32, ptr %260, align 8, !tbaa !5
  %261 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler8get_typeENS_7TypedIDILNS_5TypesE1EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.010.0.copyload)
          to label %262 unwind label %273

262:                                              ; preds = %.critedge195
  %263 = invoke noundef i64 @_ZNK11spirv_cross8Compiler24get_declared_struct_sizeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %261)
          to label %264 unwind label %273

264:                                              ; preds = %262
  %265 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull @.str.62, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %266 unwind label %275

266:                                              ; preds = %264
  %267 = trunc i64 %263 to i32
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %265, ptr noundef nonnull align 8 dereferenceable(32) %29, i32 noundef %267)
          to label %268 unwind label %277

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

269:                                              ; preds = %239, %227, %215, %203, %191, %185
  %.pn144.pn = phi { ptr, i32 } [ %.pn144, %239 ], [ %186, %185 ], [ %.pn142, %227 ], [ %.pn140, %215 ], [ %.pn138, %203 ], [ %.pn136, %191 ]
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %18) #6
  br label %270

270:                                              ; preds = %269, %183
  %.pn144.pn.pn = phi { ptr, i32 } [ %.pn144.pn, %269 ], [ %184, %183 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %18) #6
  br label %473

271:                                              ; preds = %256, %254, %250, %248, %244, %242
  %272 = landingpad { ptr, i32 }
          cleanup
  br label %473

273:                                              ; preds = %262, %.critedge195
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %473

275:                                              ; preds = %264
  %276 = landingpad { ptr, i32 }
          cleanup
  br label %279

277:                                              ; preds = %266
  %278 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  br label %279

279:                                              ; preds = %277, %275
  %.pn149 = phi { ptr, i32 } [ %278, %277 ], [ %276, %275 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #6
  br label %473

.critedge193:                                     ; preds = %241, %268, %258
  %280 = load i32, ptr %157, align 8, !tbaa !40
  %281 = icmp eq i32 %280, 9
  br i1 %281, label %282, label %291

282:                                              ; preds = %.critedge193
  %283 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %32) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull @.str.63, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %284 unwind label %286

284:                                              ; preds = %282
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %283, ptr noundef nonnull align 8 dereferenceable(32) %31, i1 noundef zeroext true)
          to label %285 unwind label %288

285:                                              ; preds = %284
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  br label %291

286:                                              ; preds = %282
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %290

288:                                              ; preds = %284
  %289 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #6
  br label %290

290:                                              ; preds = %288, %286
  %.pn153 = phi { ptr, i32 } [ %289, %288 ], [ %287, %286 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #6
  br label %473

291:                                              ; preds = %285, %.critedge193
  %292 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 30)
          to label %293 unwind label %120

293:                                              ; preds = %291
  br i1 %292, label %294, label %305

294:                                              ; preds = %293
  %295 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %34) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str.24, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %296 unwind label %300

296:                                              ; preds = %294
  %.sroa.09.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %297 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.09.0.copyload, i32 noundef 30)
          to label %298 unwind label %302

298:                                              ; preds = %296
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %295, ptr noundef nonnull align 8 dereferenceable(32) %33, i32 noundef %297)
          to label %299 unwind label %302

299:                                              ; preds = %298
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #6
  br label %305

300:                                              ; preds = %294
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %304

302:                                              ; preds = %298, %296
  %303 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  br label %304

304:                                              ; preds = %302, %300
  %.pn155 = phi { ptr, i32 } [ %303, %302 ], [ %301, %300 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #6
  br label %473

305:                                              ; preds = %299, %293
  %306 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 4)
          to label %307 unwind label %120

307:                                              ; preds = %305
  br i1 %306, label %308, label %317

308:                                              ; preds = %307
  %309 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %36) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull @.str.27, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %310 unwind label %312

310:                                              ; preds = %308
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %309, ptr noundef nonnull align 8 dereferenceable(32) %35, i1 noundef zeroext true)
          to label %311 unwind label %314

311:                                              ; preds = %310
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %317

312:                                              ; preds = %308
  %313 = landingpad { ptr, i32 }
          cleanup
  br label %316

314:                                              ; preds = %310
  %315 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #6
  br label %316

316:                                              ; preds = %314, %312
  %.pn157 = phi { ptr, i32 } [ %315, %314 ], [ %313, %312 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #6
  br label %473

317:                                              ; preds = %311, %307
  %318 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 5)
          to label %319 unwind label %120

319:                                              ; preds = %317
  br i1 %318, label %320, label %329

320:                                              ; preds = %319
  %321 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %38) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull @.str.64, ptr noundef nonnull align 1 dereferenceable(1) %38)
          to label %322 unwind label %324

322:                                              ; preds = %320
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(4421) %321, ptr noundef nonnull align 8 dereferenceable(32) %37, i1 noundef zeroext true)
          to label %323 unwind label %326

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

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

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

328:                                              ; preds = %326, %324
  %.pn159 = phi { ptr, i32 } [ %327, %326 ], [ %325, %324 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %38) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #6
  br label %473

329:                                              ; preds = %323, %319
  %330 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 32)
          to label %331 unwind label %120

331:                                              ; preds = %329
  br i1 %330, label %332, label %343

332:                                              ; preds = %331
  %333 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %40) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull @.str.65, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %334 unwind label %338

334:                                              ; preds = %332
  %.sroa.08.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %335 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.08.0.copyload, i32 noundef 32)
          to label %336 unwind label %340

336:                                              ; preds = %334
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %333, ptr noundef nonnull align 8 dereferenceable(32) %39, i32 noundef %335)
          to label %337 unwind label %340

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

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

340:                                              ; preds = %336, %334
  %341 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #6
  br label %342

342:                                              ; preds = %340, %338
  %.pn161 = phi { ptr, i32 } [ %341, %340 ], [ %339, %338 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #6
  br label %473

343:                                              ; preds = %337, %331
  %344 = load i32, ptr %157, align 8, !tbaa !40
  %.not163 = icmp eq i32 %344, 9
  br i1 %.not163, label %359, label %345

345:                                              ; preds = %343
  %346 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 34)
          to label %347 unwind label %120

347:                                              ; preds = %345
  br i1 %346, label %348, label %359

348:                                              ; preds = %347
  %349 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %42) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull @.str.66, ptr noundef nonnull align 1 dereferenceable(1) %42)
          to label %350 unwind label %354

350:                                              ; preds = %348
  %.sroa.07.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %351 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.07.0.copyload, i32 noundef 34)
          to label %352 unwind label %356

352:                                              ; preds = %350
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %349, ptr noundef nonnull align 8 dereferenceable(32) %41, i32 noundef %351)
          to label %353 unwind label %356

353:                                              ; preds = %352
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #6
  br label %359

354:                                              ; preds = %348
  %355 = landingpad { ptr, i32 }
          cleanup
  br label %358

356:                                              ; preds = %352, %350
  %357 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #6
  br label %358

358:                                              ; preds = %356, %354
  %.pn164 = phi { ptr, i32 } [ %357, %356 ], [ %355, %354 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #6
  br label %473

359:                                              ; preds = %353, %347, %343
  %360 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 33)
          to label %361 unwind label %120

361:                                              ; preds = %359
  br i1 %360, label %362, label %373

362:                                              ; preds = %361
  %363 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %44) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull @.str.67, ptr noundef nonnull align 1 dereferenceable(1) %44)
          to label %364 unwind label %368

364:                                              ; preds = %362
  %.sroa.06.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %365 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.06.0.copyload, i32 noundef 33)
          to label %366 unwind label %370

366:                                              ; preds = %364
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %363, ptr noundef nonnull align 8 dereferenceable(32) %43, i32 noundef %365)
          to label %367 unwind label %370

367:                                              ; preds = %366
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  br label %373

368:                                              ; preds = %362
  %369 = landingpad { ptr, i32 }
          cleanup
  br label %372

370:                                              ; preds = %366, %364
  %371 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #6
  br label %372

372:                                              ; preds = %370, %368
  %.pn166 = phi { ptr, i32 } [ %371, %370 ], [ %369, %368 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %44) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #6
  br label %473

373:                                              ; preds = %367, %361
  %374 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 43)
          to label %375 unwind label %120

375:                                              ; preds = %373
  br i1 %374, label %376, label %387

376:                                              ; preds = %375
  %377 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %46) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %46)
          to label %378 unwind label %382

378:                                              ; preds = %376
  %.sroa.05.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %379 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.05.0.copyload, i32 noundef 43)
          to label %380 unwind label %384

380:                                              ; preds = %378
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %377, ptr noundef nonnull align 8 dereferenceable(32) %45, i32 noundef %379)
          to label %381 unwind label %384

381:                                              ; preds = %380
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %46) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  br label %387

382:                                              ; preds = %376
  %383 = landingpad { ptr, i32 }
          cleanup
  br label %386

384:                                              ; preds = %380, %378
  %385 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #6
  br label %386

386:                                              ; preds = %384, %382
  %.pn168 = phi { ptr, i32 } [ %385, %384 ], [ %383, %382 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %46) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #6
  br label %473

387:                                              ; preds = %381, %375
  %388 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 35)
          to label %389 unwind label %120

389:                                              ; preds = %387
  br i1 %388, label %390, label %401

390:                                              ; preds = %389
  %391 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %48) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull @.str.25, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %392 unwind label %396

392:                                              ; preds = %390
  %.sroa.04.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %393 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.04.0.copyload, i32 noundef 35)
          to label %394 unwind label %398

394:                                              ; preds = %392
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %391, ptr noundef nonnull align 8 dereferenceable(32) %47, i32 noundef %393)
          to label %395 unwind label %398

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

396:                                              ; preds = %390
  %397 = landingpad { ptr, i32 }
          cleanup
  br label %400

398:                                              ; preds = %394, %392
  %399 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #6
  br label %400

400:                                              ; preds = %398, %396
  %.pn170 = phi { ptr, i32 } [ %399, %398 ], [ %397, %396 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #6
  br label %473

401:                                              ; preds = %395, %389
  %402 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 4487)
          to label %403 unwind label %120

403:                                              ; preds = %401
  br i1 %402, label %404, label %415

404:                                              ; preds = %403
  %405 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %50) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %406 unwind label %410

406:                                              ; preds = %404
  %.sroa.03.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %407 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.03.0.copyload, i32 noundef 4487)
          to label %408 unwind label %412

408:                                              ; preds = %406
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %405, ptr noundef nonnull align 8 dereferenceable(32) %49, i32 noundef %407)
          to label %409 unwind label %412

409:                                              ; preds = %408
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #6
  br label %415

410:                                              ; preds = %404
  %411 = landingpad { ptr, i32 }
          cleanup
  br label %414

412:                                              ; preds = %408, %406
  %413 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #6
  br label %414

414:                                              ; preds = %412, %410
  %.pn172 = phi { ptr, i32 } [ %413, %412 ], [ %411, %410 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %50) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #6
  br label %473

415:                                              ; preds = %409, %403
  %416 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 4488)
          to label %417 unwind label %120

417:                                              ; preds = %415
  br i1 %416, label %418, label %429

418:                                              ; preds = %417
  %419 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %52) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %52) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull @.str.70, ptr noundef nonnull align 1 dereferenceable(1) %52)
          to label %420 unwind label %424

420:                                              ; preds = %418
  %.sroa.02.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %421 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.02.0.copyload, i32 noundef 4488)
          to label %422 unwind label %426

422:                                              ; preds = %420
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %419, ptr noundef nonnull align 8 dereferenceable(32) %51, i32 noundef %421)
          to label %423 unwind label %426

423:                                              ; preds = %422
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %52) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %52) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #6
  br label %429

424:                                              ; preds = %418
  %425 = landingpad { ptr, i32 }
          cleanup
  br label %428

426:                                              ; preds = %422, %420
  %427 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #6
  br label %428

428:                                              ; preds = %426, %424
  %.pn174 = phi { ptr, i32 } [ %427, %426 ], [ %425, %424 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %52) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %52) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #6
  br label %473

429:                                              ; preds = %423, %417
  %430 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %80, i32 noundef 4499)
          to label %431 unwind label %120

431:                                              ; preds = %429
  br i1 %430, label %432, label %443

432:                                              ; preds = %431
  %433 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %54) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %54) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull @.str.71, ptr noundef nonnull align 1 dereferenceable(1) %54)
          to label %434 unwind label %438

434:                                              ; preds = %432
  %.sroa.0.0.copyload = load i32, ptr %.0123200, align 8, !tbaa !5
  %435 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0.0.copyload, i32 noundef 4499)
          to label %436 unwind label %440

436:                                              ; preds = %434
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(4421) %433, ptr noundef nonnull align 8 dereferenceable(32) %53, i32 noundef %435)
          to label %437 unwind label %440

437:                                              ; preds = %436
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %54) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %54) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #6
  br label %443

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

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

442:                                              ; preds = %440, %438
  %.pn176 = phi { ptr, i32 } [ %441, %440 ], [ %439, %438 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %54) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %54) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #6
  br label %473

443:                                              ; preds = %437, %431
  %444 = load i32, ptr %104, align 8, !tbaa !9
  %445 = icmp eq i32 %444, 16
  %446 = getelementptr inbounds i8, ptr %76, i64 260
  %447 = load i32, ptr %446, align 4
  %448 = icmp eq i32 %447, 2
  %or.cond = select i1 %445, i1 %448, i1 false
  br i1 %or.cond, label %449, label %469

449:                                              ; preds = %443
  %450 = getelementptr inbounds i8, ptr %76, i64 264
  %451 = load i32, ptr %450, align 8, !tbaa !41
  %452 = invoke noundef ptr @_ZN11spirv_cross12CompilerGLSL14format_to_glslEN3spv11ImageFormatE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %451)
          to label %453 unwind label %459

453:                                              ; preds = %449
  %.not178 = icmp eq ptr %452, null
  br i1 %.not178, label %469, label %454

454:                                              ; preds = %453
  %455 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %56) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %56) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull @.str.72, ptr noundef nonnull align 1 dereferenceable(1) %56)
          to label %456 unwind label %461

456:                                              ; preds = %454
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %58) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %58) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull %452, ptr noundef nonnull align 1 dereferenceable(1) %58)
          to label %457 unwind label %463

457:                                              ; preds = %456
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %455, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %458 unwind label %465

458:                                              ; preds = %457
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %58) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %58) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %56) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %56) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #6
  br label %469

459:                                              ; preds = %449
  %460 = landingpad { ptr, i32 }
          cleanup
  br label %473

461:                                              ; preds = %454
  %462 = landingpad { ptr, i32 }
          cleanup
  br label %468

463:                                              ; preds = %456
  %464 = landingpad { ptr, i32 }
          cleanup
  br label %467

465:                                              ; preds = %457
  %466 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #6
  br label %467

467:                                              ; preds = %465, %463
  %.pn179 = phi { ptr, i32 } [ %466, %465 ], [ %464, %463 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %58) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %58) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #6
  br label %468

468:                                              ; preds = %467, %461
  %.pn179.pn = phi { ptr, i32 } [ %.pn179, %467 ], [ %462, %461 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %56) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %56) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #6
  br label %473

469:                                              ; preds = %453, %458, %443
  %470 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %61) #6
  invoke void @_ZN11simple_json6Stream15end_json_objectEv(ptr noundef nonnull align 8 dereferenceable(4421) %470)
          to label %471 unwind label %120

471:                                              ; preds = %469
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #6
  %472 = getelementptr inbounds i8, ptr %.0123200, i64 48
  %.not = icmp eq ptr %472, %66
  br i1 %.not, label %._crit_edge, label %74

473:                                              ; preds = %459, %468, %271, %279, %273, %181, %270, %442, %428, %414, %400, %386, %372, %358, %342, %328, %316, %304, %290, %180, %144, %129, %120
  %.pn183 = phi { ptr, i32 } [ %121, %120 ], [ %.pn176, %442 ], [ %.pn174, %428 ], [ %.pn172, %414 ], [ %.pn170, %400 ], [ %.pn168, %386 ], [ %.pn166, %372 ], [ %.pn164, %358 ], [ %.pn161, %342 ], [ %.pn159, %328 ], [ %.pn157, %316 ], [ %.pn155, %304 ], [ %.pn153, %290 ], [ %.pn133.pn, %180 ], [ %.pn130.pn, %129 ], [ %.pn127.pn, %144 ], [ %.pn144.pn.pn, %270 ], [ %182, %181 ], [ %272, %271 ], [ %.pn149, %279 ], [ %274, %273 ], [ %.pn179.pn, %468 ], [ %460, %459 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  br label %474

474:                                              ; preds = %116, %473, %118, %114
  %.pn183.pn.pn.pn = phi { ptr, i32 } [ %115, %114 ], [ %117, %116 ], [ %.pn183, %473 ], [ %119, %118 ]
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #6
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #6
  br label %476

475:                                              ; preds = %3, %._crit_edge
  ret void

476:                                              ; preds = %474, %73
  %.pn183.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn183.pn.pn.pn, %474 ], [ %.pn, %73 ]
  resume { ptr, i32 } %.pn183.pn.pn.pn.pn
}

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 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

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

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

declare noundef i64 @_ZNK11spirv_cross8Compiler24get_declared_struct_sizeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #5

declare noundef ptr @_ZN11spirv_cross12CompilerGLSL14format_to_glslEN3spv11ImageFormatE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #5

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 = { 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 #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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, !14, i64 16}
!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 = !{!39, !39, i64 0}
!39 = !{!"vtable pointer", !8, i64 0}
!40 = !{!10, !24, i64 128}
!41 = !{!10, !31, i64 264}


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