; 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.spirv_cross::SmallVector.288" = type { %"class.spirv_cross::VectorView.289", i64, %"class.spirv_cross::AlignedBuffer.290" }
%"class.spirv_cross::VectorView.289" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.290" = type { [320 x i8] }
%class.anon.291 = type { i8 }
%"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 }
%"struct.spirv_cross::SpecializationConstant" = type { %"class.spirv_cross::TypedID.295", i32 }
%"class.spirv_cross::TypedID.295" = type { i32 }
%"class.spirv_cross::TypedID.281" = 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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"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.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"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_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 }
%"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::EntryPoint" = type <{ %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"struct.spirv_cross::SPIREntryPoint" = type <{ %"class.spirv_cross::TypedID", [4 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::SmallVector.292", %"class.spirv_cross::Bitset", %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", i32, i32, i32, i32, i8, [3 x i8] }>
%"class.spirv_cross::SmallVector.292" = type { %"class.spirv_cross::VectorView.293", i64, %"class.spirv_cross::AlignedBuffer.294" }
%"class.spirv_cross::VectorView.293" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.294" = type { [32 x i8] }
%"struct.spirv_cross::SPIREntryPoint::WorkgroupSize" = type { i32, i32, i32, i32, i32, i32, i32 }

@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [35 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: mustprogress uwtable
declare dso_local void @_ZN11simple_json6Stream21emit_json_array_valueEj(ptr noundef nonnull align 8 dereferenceable(4421), i32 noundef) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11simple_json6Stream21emit_json_array_valueEb(ptr noundef nonnull align 8 dereferenceable(4421), i1 noundef zeroext) #1 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_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)) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross18CompilerReflection17emit_entry_pointsEv(ptr noundef nonnull align 8 dereferenceable(9864) %0) #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.spirv_cross::SmallVector.288", align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca %class.anon.291, align 1
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::allocator.0", align 1
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::allocator.0", align 1
  %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 ptr, align 8
  %19 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %20 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %21 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator.0", align 1
  %24 = alloca %"class.spirv_cross::TypedID.281", align 4
  %25 = alloca %"class.spirv_cross::TypedID.281", align 4
  %26 = alloca %"class.spirv_cross::TypedID.281", align 4
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator.0", align 1
  %29 = alloca %"class.spirv_cross::TypedID.281", align 4
  %30 = alloca %"class.spirv_cross::TypedID.281", align 4
  %31 = alloca %"class.spirv_cross::TypedID.281", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %32 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 344, ptr %3) #6
  call void @_ZNK11spirv_cross8Compiler27get_entry_points_and_stagesEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::SmallVector.288") align 8 %3, ptr noundef nonnull align 8 dereferenceable(3176) %32)
  %33 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_10EntryPointEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  br i1 %33, label %294, label %34

34:                                               ; preds = %1
  %35 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_10EntryPointELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(344) %3)
          to label %36 unwind label %53

36:                                               ; preds = %34
  %37 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_10EntryPointELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(344) %3)
          to label %38 unwind label %53

38:                                               ; preds = %36
  invoke void @"_ZSt4sortIPN11spirv_cross10EntryPointEZNS0_18CompilerReflection17emit_entry_pointsEvE3$_0EvT_S5_T0_"(ptr noundef %35, ptr noundef %37)
          to label %39 unwind label %53

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

42:                                               ; preds = %39
  invoke void @_ZN11simple_json6Stream19emit_json_key_arrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4421) %41, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %43 unwind label %61

43:                                               ; preds = %42
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  store ptr %3, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %44 = load ptr, ptr %9, align 8, !tbaa !5
  %45 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_10EntryPointEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %44) #6
  store ptr %45, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %46 = load ptr, ptr %9, align 8, !tbaa !5
  %47 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_10EntryPointEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %46) #6
  store ptr %47, ptr %11, align 8, !tbaa !5
  br label %48

48:                                               ; preds = %286, %43
  %49 = load ptr, ptr %10, align 8, !tbaa !5
  %50 = load ptr, ptr %11, align 8, !tbaa !5
  %51 = icmp ne ptr %49, %50
  br i1 %51, label %66, label %52

52:                                               ; preds = %48
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  br label %290

53:                                               ; preds = %290, %38, %36, %34
  %54 = landingpad { ptr, i32 }
          cleanup
  %55 = extractvalue { ptr, i32 } %54, 0
  store ptr %55, ptr %4, align 8
  %56 = extractvalue { ptr, i32 } %54, 1
  store i32 %56, ptr %5, align 4
  br label %295

57:                                               ; preds = %39
  %58 = landingpad { ptr, i32 }
          cleanup
  %59 = extractvalue { ptr, i32 } %58, 0
  store ptr %59, ptr %4, align 8
  %60 = extractvalue { ptr, i32 } %58, 1
  store i32 %60, ptr %5, align 4
  br label %65

61:                                               ; preds = %42
  %62 = landingpad { ptr, i32 }
          cleanup
  %63 = extractvalue { ptr, i32 } %62, 0
  store ptr %63, ptr %4, align 8
  %64 = extractvalue { ptr, i32 } %62, 1
  store i32 %64, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  br label %65

65:                                               ; preds = %61, %57
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #6
  br label %295

66:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %67 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %67, ptr %12, align 8, !tbaa !5
  %68 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %69 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %68) #6
  invoke void @_ZN11simple_json6Stream17begin_json_objectEv(ptr noundef nonnull align 8 dereferenceable(4421) %69)
          to label %70 unwind label %203

70:                                               ; preds = %66
  %71 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %72 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %71) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %73 unwind label %207

73:                                               ; preds = %70
  %74 = load ptr, ptr %12, align 8, !tbaa !5
  %75 = getelementptr inbounds %"struct.spirv_cross::EntryPoint", ptr %74, i32 0, i32 0
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %72, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %75)
          to label %76 unwind label %211

76:                                               ; preds = %73
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #6
  %77 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %78 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %77) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %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 @.str.42, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %79 unwind label %216

79:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #6
  %80 = load ptr, ptr %12, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.spirv_cross::EntryPoint", ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 8, !tbaa !9
  invoke void @_ZN11spirv_cross18CompilerReflection22execution_model_to_strB5cxx11EN3spv14ExecutionModelE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, i32 noundef %82)
          to label %83 unwind label %220

83:                                               ; preds = %79
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %78, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %84 unwind label %224

84:                                               ; preds = %83
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %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 %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #6
  %85 = load ptr, ptr %12, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.spirv_cross::EntryPoint", ptr %85, i32 0, i32 1
  %87 = load i32, ptr %86, align 8, !tbaa !9
  %88 = icmp eq i32 %87, 5
  br i1 %88, label %89, label %282

89:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %90 = load ptr, ptr %12, align 8, !tbaa !5
  %91 = getelementptr inbounds %"struct.spirv_cross::EntryPoint", ptr %90, i32 0, i32 0
  %92 = load ptr, ptr %12, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.spirv_cross::EntryPoint", ptr %92, i32 0, i32 1
  %94 = load i32, ptr %93, align 8, !tbaa !9
  %95 = invoke noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3spv14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(3176) %32, ptr noundef nonnull align 8 dereferenceable(32) %91, i32 noundef %94)
          to label %96 unwind label %230

96:                                               ; preds = %89
  store ptr %95, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %20) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %21) #6
  %97 = invoke noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176) %32, ptr noundef nonnull align 4 dereferenceable(8) %19, ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 4 dereferenceable(8) %21)
          to label %98 unwind label %234

98:                                               ; preds = %96
  %99 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %100 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %99) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.43, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %101 unwind label %238

101:                                              ; preds = %98
  invoke void @_ZN11simple_json6Stream19emit_json_key_arrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4421) %100, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %102 unwind label %242

102:                                              ; preds = %101
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  %103 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %104 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %103) #6
  %105 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %19, i32 0, i32 0
  %106 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %107 unwind label %234

107:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %24, i32 noundef 0)
          to label %108 unwind label %247

108:                                              ; preds = %107
  %109 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %110 unwind label %247

110:                                              ; preds = %108
  %111 = icmp ne i32 %106, %109
  br i1 %111, label %112, label %115

112:                                              ; preds = %110
  %113 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %19, i32 0, i32 1
  %114 = load i32, ptr %113, align 4, !tbaa !15
  br label %120

115:                                              ; preds = %110
  %116 = load ptr, ptr %18, align 8, !tbaa !5
  %117 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %116, i32 0, i32 6
  %118 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %117, i32 0, i32 0
  %119 = load i32, ptr %118, align 8, !tbaa !19
  br label %120

120:                                              ; preds = %115, %112
  %121 = phi i32 [ %114, %112 ], [ %119, %115 ]
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEj(ptr noundef nonnull align 8 dereferenceable(4421) %104, i32 noundef %121)
          to label %122 unwind label %247

122:                                              ; preds = %120
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  %123 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %124 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %123) #6
  %125 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %20, i32 0, i32 0
  %126 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %125)
          to label %127 unwind label %234

127:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef 0)
          to label %128 unwind label %251

128:                                              ; preds = %127
  %129 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %130 unwind label %251

130:                                              ; preds = %128
  %131 = icmp ne i32 %126, %129
  br i1 %131, label %132, label %135

132:                                              ; preds = %130
  %133 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %20, i32 0, i32 1
  %134 = load i32, ptr %133, align 4, !tbaa !15
  br label %140

135:                                              ; preds = %130
  %136 = load ptr, ptr %18, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %136, i32 0, i32 6
  %138 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %137, i32 0, i32 1
  %139 = load i32, ptr %138, align 4, !tbaa !33
  br label %140

140:                                              ; preds = %135, %132
  %141 = phi i32 [ %134, %132 ], [ %139, %135 ]
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEj(ptr noundef nonnull align 8 dereferenceable(4421) %124, i32 noundef %141)
          to label %142 unwind label %251

142:                                              ; preds = %140
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  %143 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %144 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %143) #6
  %145 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %21, i32 0, i32 0
  %146 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
          to label %147 unwind label %234

147:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef 0)
          to label %148 unwind label %255

148:                                              ; preds = %147
  %149 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %150 unwind label %255

150:                                              ; preds = %148
  %151 = icmp ne i32 %146, %149
  br i1 %151, label %152, label %155

152:                                              ; preds = %150
  %153 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %21, i32 0, i32 1
  %154 = load i32, ptr %153, align 4, !tbaa !15
  br label %160

155:                                              ; preds = %150
  %156 = load ptr, ptr %18, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %156, i32 0, i32 6
  %158 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %157, i32 0, i32 2
  %159 = load i32, ptr %158, align 8, !tbaa !34
  br label %160

160:                                              ; preds = %155, %152
  %161 = phi i32 [ %154, %152 ], [ %159, %155 ]
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEj(ptr noundef nonnull align 8 dereferenceable(4421) %144, i32 noundef %161)
          to label %162 unwind label %255

162:                                              ; preds = %160
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  %163 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %164 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %163) #6
  invoke void @_ZN11simple_json6Stream14end_json_arrayEv(ptr noundef nonnull align 8 dereferenceable(4421) %164)
          to label %165 unwind label %234

165:                                              ; preds = %162
  %166 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %167 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %166) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %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 @.str.44, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %168 unwind label %259

168:                                              ; preds = %165
  invoke void @_ZN11simple_json6Stream19emit_json_key_arrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4421) %167, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %169 unwind label %263

169:                                              ; preds = %168
  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 %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #6
  %170 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %171 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %170) #6
  %172 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %19, i32 0, i32 0
  %173 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %172)
          to label %174 unwind label %234

174:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %29, i32 noundef 0)
          to label %175 unwind label %268

175:                                              ; preds = %174
  %176 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %29)
          to label %177 unwind label %268

177:                                              ; preds = %175
  %178 = icmp ne i32 %173, %176
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEb(ptr noundef nonnull align 8 dereferenceable(4421) %171, i1 noundef zeroext %178)
          to label %179 unwind label %268

179:                                              ; preds = %177
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  %180 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %181 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %180) #6
  %182 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %20, i32 0, i32 0
  %183 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %182)
          to label %184 unwind label %234

184:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %30, i32 noundef 0)
          to label %185 unwind label %272

185:                                              ; preds = %184
  %186 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %187 unwind label %272

187:                                              ; preds = %185
  %188 = icmp ne i32 %183, %186
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEb(ptr noundef nonnull align 8 dereferenceable(4421) %181, i1 noundef zeroext %188)
          to label %189 unwind label %272

189:                                              ; preds = %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  %190 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %191 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %190) #6
  %192 = getelementptr inbounds %"struct.spirv_cross::SpecializationConstant", ptr %21, i32 0, i32 0
  %193 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %192)
          to label %194 unwind label %234

194:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %31, i32 noundef 0)
          to label %195 unwind label %276

195:                                              ; preds = %194
  %196 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %197 unwind label %276

197:                                              ; preds = %195
  %198 = icmp ne i32 %193, %196
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEb(ptr noundef nonnull align 8 dereferenceable(4421) %191, i1 noundef zeroext %198)
          to label %199 unwind label %276

199:                                              ; preds = %197
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  %200 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %201 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %200) #6
  invoke void @_ZN11simple_json6Stream14end_json_arrayEv(ptr noundef nonnull align 8 dereferenceable(4421) %201)
          to label %202 unwind label %234

202:                                              ; preds = %199
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %282

203:                                              ; preds = %282, %66
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %4, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %5, align 4
  br label %289

207:                                              ; preds = %70
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %4, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %5, align 4
  br label %215

211:                                              ; preds = %73
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %4, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  br label %215

215:                                              ; preds = %211, %207
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #6
  br label %289

216:                                              ; preds = %76
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %4, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %5, align 4
  br label %229

220:                                              ; preds = %79
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %4, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %5, align 4
  br label %228

224:                                              ; preds = %83
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %4, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  br label %228

228:                                              ; preds = %224, %220
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %229

229:                                              ; preds = %228, %216
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #6
  br label %289

230:                                              ; preds = %89
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %4, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %5, align 4
  br label %281

234:                                              ; preds = %199, %189, %179, %169, %162, %142, %122, %102, %96
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %4, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %5, align 4
  br label %280

238:                                              ; preds = %98
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %4, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %5, align 4
  br label %246

242:                                              ; preds = %101
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %4, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  br label %246

246:                                              ; preds = %242, %238
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  br label %280

247:                                              ; preds = %120, %108, %107
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %4, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %280

251:                                              ; preds = %140, %128, %127
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %4, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %280

255:                                              ; preds = %160, %148, %147
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %4, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %280

259:                                              ; preds = %165
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %4, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %5, align 4
  br label %267

263:                                              ; preds = %168
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %4, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  br label %267

267:                                              ; preds = %263, %259
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #6
  br label %280

268:                                              ; preds = %177, %175, %174
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %4, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  br label %280

272:                                              ; preds = %187, %185, %184
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %4, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  br label %280

276:                                              ; preds = %197, %195, %194
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %4, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %280

280:                                              ; preds = %276, %272, %268, %267, %255, %251, %247, %246, %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  br label %281

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

282:                                              ; preds = %202, %84
  %283 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %284 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %283) #6
  invoke void @_ZN11simple_json6Stream15end_json_objectEv(ptr noundef nonnull align 8 dereferenceable(4421) %284)
          to label %285 unwind label %203

285:                                              ; preds = %282
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %286

286:                                              ; preds = %285
  %287 = load ptr, ptr %10, align 8, !tbaa !5
  %288 = getelementptr inbounds %"struct.spirv_cross::EntryPoint", ptr %287, i32 1
  store ptr %288, ptr %10, align 8, !tbaa !5
  br label %48

289:                                              ; preds = %281, %229, %215, %203
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  br label %295

290:                                              ; preds = %52
  %291 = getelementptr inbounds %"class.spirv_cross::CompilerReflection", ptr %32, i32 0, i32 1
  %292 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %291) #6
  invoke void @_ZN11simple_json6Stream14end_json_arrayEv(ptr noundef nonnull align 8 dereferenceable(4421) %292)
          to label %293 unwind label %53

293:                                              ; preds = %290
  br label %294

294:                                              ; preds = %293, %1
  call void @_ZN11spirv_cross11SmallVectorINS_10EntryPointELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(344) %3) #6
  call void @llvm.lifetime.end.p0(i64 344, ptr %3) #6
  ret void

295:                                              ; preds = %289, %65, %53
  call void @_ZN11spirv_cross11SmallVectorINS_10EntryPointELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(344) %3) #6
  call void @llvm.lifetime.end.p0(i64 344, ptr %3) #6
  br label %296

296:                                              ; preds = %295
  %297 = load ptr, ptr %4, align 8
  %298 = load i32, ptr %5, align 4
  %299 = insertvalue { ptr, i32 } poison, ptr %297, 0
  %300 = insertvalue { ptr, i32 } %299, i32 %298, 1
  resume { ptr, i32 } %300
}

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

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

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

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

declare void @_ZNK11spirv_cross8Compiler27get_entry_points_and_stagesEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::SmallVector.288") align 8, ptr noundef nonnull align 8 dereferenceable(3176)) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZSt4sortIPN11spirv_cross10EntryPointEZNS0_18CompilerReflection17emit_entry_pointsEvE3$_0EvT_S5_T0_"(ptr noundef, ptr noundef) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_10EntryPointELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(344)) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_10EntryPointELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(344)) #5

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

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

declare noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3spv14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #3

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !14, i64 32}
!10 = !{!"_ZTSN11spirv_cross10EntryPointE", !11, i64 0, !14, i64 32}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !12, i64 0, !13, i64 8, !7, i64 16}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSN3spv14ExecutionModelE", !7, i64 0}
!15 = !{!16, !18, i64 4}
!16 = !{!"_ZTSN11spirv_cross22SpecializationConstantE", !17, i64 0, !18, i64 4}
!17 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE3EEE", !18, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!20, !18, i64 192}
!20 = !{!"_ZTSN11spirv_cross14SPIREntryPointE", !21, i64 0, !11, i64 8, !11, i64 40, !22, i64 72, !25, i64 128, !31, i64 192, !18, i64 220, !18, i64 224, !18, i64 228, !14, i64 232, !32, i64 236}
!21 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !18, i64 0}
!22 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !23, i64 0, !13, i64 16, !24, i64 24}
!23 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !6, i64 0, !13, i64 8}
!24 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !7, i64 0}
!25 = !{!"_ZTSN11spirv_cross6BitsetE", !13, i64 0, !26, i64 8}
!26 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !27, i64 0}
!27 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !13, i64 8, !28, i64 16, !13, i64 24, !29, i64 32, !6, i64 48}
!28 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!29 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !30, i64 0, !13, i64 8}
!30 = !{!"float", !7, i64 0}
!31 = !{!"_ZTSN11spirv_cross14SPIREntryPoint13WorkgroupSizeE", !18, i64 0, !18, i64 4, !18, i64 8, !18, i64 12, !18, i64 16, !18, i64 20, !18, i64 24}
!32 = !{!"bool", !7, i64 0}
!33 = !{!20, !18, i64 196}
!34 = !{!20, !18, i64 200}


; 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.spirv_cross::SmallVector.288" = type { %"class.spirv_cross::VectorView.289", i64, %"class.spirv_cross::AlignedBuffer.290" }
%"class.spirv_cross::VectorView.289" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.290" = type { [320 x i8] }
%"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 }
%"struct.spirv_cross::SpecializationConstant" = type { %"class.spirv_cross::TypedID.295", i32 }
%"class.spirv_cross::TypedID.295" = type { i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }

@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [35 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: mustprogress uwtable
declare dso_local void @_ZN11simple_json6Stream21emit_json_array_valueEj(ptr noundef nonnull align 8 dereferenceable(4421), i32 noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11simple_json6Stream21emit_json_array_valueEb(ptr noundef nonnull align 8 dereferenceable(4421), i1 noundef zeroext) local_unnamed_addr #1 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_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 #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross18CompilerReflection17emit_entry_pointsEv(ptr noundef nonnull align 8 dereferenceable(9864) %0) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.spirv_cross::SmallVector.288", align 8
  %3 = alloca %"class.std::__cxx11::basic_string", align 8
  %4 = alloca %"class.std::allocator.0", align 1
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::allocator.0", align 1
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::allocator.0", align 1
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %11 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %12 = alloca %"struct.spirv_cross::SpecializationConstant", align 4
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::allocator.0", align 1
  %15 = alloca %"class.spirv_cross::TypedID.281", align 4
  %16 = alloca %"class.spirv_cross::TypedID.281", align 4
  %17 = alloca %"class.spirv_cross::TypedID.281", align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator.0", align 1
  %20 = alloca %"class.spirv_cross::TypedID.281", align 4
  %21 = alloca %"class.spirv_cross::TypedID.281", align 4
  %22 = alloca %"class.spirv_cross::TypedID.281", align 4
  call void @llvm.lifetime.start.p0(i64 344, ptr nonnull %2) #6
  call void @_ZNK11spirv_cross8Compiler27get_entry_points_and_stagesEv(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::SmallVector.288") align 8 %2, ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %23 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_10EntryPointEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %2) #6
  br i1 %23, label %159, label %24

24:                                               ; preds = %1
  %25 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_10EntryPointELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(344) %2)
  %26 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_10EntryPointELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(344) %2)
  invoke void @"_ZSt4sortIPN11spirv_cross10EntryPointEZNS0_18CompilerReflection17emit_entry_pointsEvE3$_0EvT_S5_T0_"(ptr noundef %25, ptr noundef %26)
          to label %27 unwind label %38

27:                                               ; preds = %24
  %28 = getelementptr inbounds i8, ptr %0, i64 9848
  %29 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull @.str.41, ptr noundef nonnull align 1 dereferenceable(1) %4)
          to label %30 unwind label %40

30:                                               ; preds = %27
  invoke void @_ZN11simple_json6Stream19emit_json_key_arrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4421) %29, ptr noundef nonnull align 8 dereferenceable(32) %3)
          to label %31 unwind label %42

31:                                               ; preds = %30
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #6
  %32 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_10EntryPointEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %2) #6
  %33 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_10EntryPointEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %2) #6
  %.not47 = icmp eq ptr %32, %33
  br i1 %.not47, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %31
  %34 = getelementptr inbounds i8, ptr %10, i64 4
  %35 = getelementptr inbounds i8, ptr %11, i64 4
  %36 = getelementptr inbounds i8, ptr %12, i64 4
  br label %45

._crit_edge:                                      ; preds = %157, %31
  %37 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  invoke void @_ZN11simple_json6Stream14end_json_arrayEv(ptr noundef nonnull align 8 dereferenceable(4421) %37)
          to label %159 unwind label %38

38:                                               ; preds = %._crit_edge, %24
  %39 = landingpad { ptr, i32 }
          cleanup
  br label %160

40:                                               ; preds = %27
  %41 = landingpad { ptr, i32 }
          cleanup
  br label %44

42:                                               ; preds = %30
  %43 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #6
  br label %44

44:                                               ; preds = %42, %40
  %.pn = phi { ptr, i32 } [ %43, %42 ], [ %41, %40 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #6
  br label %160

45:                                               ; preds = %.lr.ph, %157
  %.02648 = phi ptr [ %32, %.lr.ph ], [ %158, %157 ]
  %46 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  invoke void @_ZN11simple_json6Stream17begin_json_objectEv(ptr noundef nonnull align 8 dereferenceable(4421) %46)
          to label %47 unwind label %113

47:                                               ; preds = %45
  %48 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull @.str.17, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %49 unwind label %115

49:                                               ; preds = %47
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %48, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(32) %.02648)
          to label %50 unwind label %117

50:                                               ; preds = %49
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  %51 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.42, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %52 unwind label %120

52:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  %53 = getelementptr inbounds i8, ptr %.02648, i64 32
  %54 = load i32, ptr %53, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross18CompilerReflection22execution_model_to_strB5cxx11EN3spv14ExecutionModelE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, i32 noundef %54)
          to label %55 unwind label %122

55:                                               ; preds = %52
  invoke void @_ZN11simple_json6Stream19emit_json_key_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_(ptr noundef nonnull align 8 dereferenceable(4421) %51, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %56 unwind label %124

56:                                               ; preds = %55
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  %57 = load i32, ptr %53, align 8, !tbaa !5
  %58 = icmp eq i32 %57, 5
  br i1 %58, label %59, label %155

59:                                               ; preds = %56
  %60 = invoke noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3spv14ExecutionModelE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(32) %.02648, i32 noundef 5)
          to label %61 unwind label %128

61:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %10) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  call void @_ZN11spirv_cross22SpecializationConstantC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %12) #6
  %62 = invoke noundef i32 @_ZNK11spirv_cross8Compiler44get_work_group_size_specialization_constantsERNS_22SpecializationConstantES2_S2_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(8) %10, ptr noundef nonnull align 4 dereferenceable(8) %11, ptr noundef nonnull align 4 dereferenceable(8) %12)
          to label %63 unwind label %130

63:                                               ; preds = %61
  %64 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.43, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %65 unwind label %132

65:                                               ; preds = %63
  invoke void @_ZN11simple_json6Stream19emit_json_key_arrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4421) %64, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %66 unwind label %134

66:                                               ; preds = %65
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  %67 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  %68 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef 0)
  %69 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %.not36 = icmp eq i32 %68, %69
  %70 = load i32, ptr %34, align 4
  %71 = getelementptr inbounds i8, ptr %60, i64 192
  %72 = load i32, ptr %71, align 8
  %73 = select i1 %.not36, i32 %72, i32 %70
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEj(ptr noundef nonnull align 8 dereferenceable(4421) %67, i32 noundef %73)
          to label %74 unwind label %137

74:                                               ; preds = %66
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #6
  %75 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  %76 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %11)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %16, i32 noundef 0)
  %77 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %16)
  %.not37 = icmp eq i32 %76, %77
  %78 = load i32, ptr %35, align 4
  %79 = getelementptr inbounds i8, ptr %60, i64 196
  %80 = load i32, ptr %79, align 4
  %81 = select i1 %.not37, i32 %80, i32 %78
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEj(ptr noundef nonnull align 8 dereferenceable(4421) %75, i32 noundef %81)
          to label %82 unwind label %139

82:                                               ; preds = %74
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #6
  %83 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  %84 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef 0)
  %85 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  %.not38 = icmp eq i32 %84, %85
  %86 = load i32, ptr %36, align 4
  %87 = getelementptr inbounds i8, ptr %60, i64 200
  %88 = load i32, ptr %87, align 8
  %89 = select i1 %.not38, i32 %88, i32 %86
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEj(ptr noundef nonnull align 8 dereferenceable(4421) %83, i32 noundef %89)
          to label %90 unwind label %141

90:                                               ; preds = %82
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  %91 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  invoke void @_ZN11simple_json6Stream14end_json_arrayEv(ptr noundef nonnull align 8 dereferenceable(4421) %91)
          to label %92 unwind label %130

92:                                               ; preds = %90
  %93 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @.str.44, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %94 unwind label %143

94:                                               ; preds = %92
  invoke void @_ZN11simple_json6Stream19emit_json_key_arrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4421) %93, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %95 unwind label %145

95:                                               ; preds = %94
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  %96 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  %97 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef 0)
  %98 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %99 = icmp ne i32 %97, %98
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEb(ptr noundef nonnull align 8 dereferenceable(4421) %96, i1 noundef zeroext %99)
          to label %100 unwind label %148

100:                                              ; preds = %95
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  %101 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  %102 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %11)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef 0)
  %103 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %104 = icmp ne i32 %102, %103
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEb(ptr noundef nonnull align 8 dereferenceable(4421) %101, i1 noundef zeroext %104)
          to label %105 unwind label %150

105:                                              ; preds = %100
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  %106 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  %107 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE3EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #6
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef 0)
  %108 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %22)
  %109 = icmp ne i32 %107, %108
  invoke void @_ZN11simple_json6Stream21emit_json_array_valueEb(ptr noundef nonnull align 8 dereferenceable(4421) %106, i1 noundef zeroext %109)
          to label %110 unwind label %152

110:                                              ; preds = %105
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  %111 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  invoke void @_ZN11simple_json6Stream14end_json_arrayEv(ptr noundef nonnull align 8 dereferenceable(4421) %111)
          to label %112 unwind label %130

112:                                              ; preds = %110
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  br label %155

113:                                              ; preds = %155, %45
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %160

115:                                              ; preds = %47
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %119

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

119:                                              ; preds = %117, %115
  %.pn29 = phi { ptr, i32 } [ %118, %117 ], [ %116, %115 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  br label %160

120:                                              ; preds = %50
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %127

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

124:                                              ; preds = %55
  %125 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  br label %126

126:                                              ; preds = %124, %122
  %.pn31 = phi { ptr, i32 } [ %125, %124 ], [ %123, %122 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  br label %127

127:                                              ; preds = %126, %120
  %.pn31.pn = phi { ptr, i32 } [ %.pn31, %126 ], [ %121, %120 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %160

128:                                              ; preds = %59
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %160

130:                                              ; preds = %110, %90, %61
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %154

132:                                              ; preds = %63
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %136

134:                                              ; preds = %65
  %135 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  br label %136

136:                                              ; preds = %134, %132
  %.pn34 = phi { ptr, i32 } [ %135, %134 ], [ %133, %132 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %154

137:                                              ; preds = %66
  %138 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #6
  br label %154

139:                                              ; preds = %74
  %140 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #6
  br label %154

141:                                              ; preds = %82
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #6
  br label %154

143:                                              ; preds = %92
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %147

145:                                              ; preds = %94
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  br label %147

147:                                              ; preds = %145, %143
  %.pn39 = phi { ptr, i32 } [ %146, %145 ], [ %144, %143 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %154

148:                                              ; preds = %95
  %149 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  br label %154

150:                                              ; preds = %100
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  br label %154

152:                                              ; preds = %105
  %153 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  br label %154

154:                                              ; preds = %152, %150, %148, %147, %141, %139, %137, %136, %130
  %.pn41 = phi { ptr, i32 } [ %131, %130 ], [ %153, %152 ], [ %151, %150 ], [ %149, %148 ], [ %.pn39, %147 ], [ %142, %141 ], [ %140, %139 ], [ %138, %137 ], [ %.pn34, %136 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  br label %160

155:                                              ; preds = %112, %56
  %156 = call noundef ptr @_ZNKSt19__shared_ptr_accessIN11simple_json6StreamELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv(ptr noundef nonnull align 1 dereferenceable(1) %28) #6
  invoke void @_ZN11simple_json6Stream15end_json_objectEv(ptr noundef nonnull align 8 dereferenceable(4421) %156)
          to label %157 unwind label %113

157:                                              ; preds = %155
  %158 = getelementptr inbounds i8, ptr %.02648, i64 40
  %.not = icmp eq ptr %158, %33
  br i1 %.not, label %._crit_edge, label %45

159:                                              ; preds = %._crit_edge, %1
  call void @_ZN11spirv_cross11SmallVectorINS_10EntryPointELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(344) %2) #6
  call void @llvm.lifetime.end.p0(i64 344, ptr nonnull %2) #6
  ret void

160:                                              ; preds = %113, %119, %127, %154, %128, %44, %38
  %.pn44.pn = phi { ptr, i32 } [ %39, %38 ], [ %.pn, %44 ], [ %114, %113 ], [ %.pn31.pn, %127 ], [ %.pn29, %119 ], [ %.pn41, %154 ], [ %129, %128 ]
  call void @_ZN11spirv_cross11SmallVectorINS_10EntryPointELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(344) %2) #6
  call void @llvm.lifetime.end.p0(i64 344, ptr nonnull %2) #6
  resume { ptr, i32 } %.pn44.pn
}

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

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

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

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

declare void @_ZNK11spirv_cross8Compiler27get_entry_points_and_stagesEv(ptr dead_on_unwind writable sret(%"class.spirv_cross::SmallVector.288") align 8, ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZSt4sortIPN11spirv_cross10EntryPointEZNS0_18CompilerReflection17emit_entry_pointsEvE3$_0EvT_S5_T0_"(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_10EntryPointELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(344)) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_10EntryPointELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(344)) local_unnamed_addr #5

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !13, i64 32}
!6 = !{!"_ZTSN11spirv_cross10EntryPointE", !7, i64 0, !13, i64 32}
!7 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !8, i64 0, !12, i64 8, !10, i64 16}
!8 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"_ZTSN3spv14ExecutionModelE", !10, i64 0}


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