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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::pair.145" = type { %"class.spirv_cross::TypedID.102", i32 }
%"class.spirv_cross::TypedID.102" = type { i32 }
%"struct.std::pair.143" = type <{ %"struct.std::__detail::_Node_iterator", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"struct.std::pair.147" = type <{ %"struct.std::__detail::_Node_iterator.149", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator.149" = type { %"struct.std::__detail::_Node_iterator_base.150" }
%"struct.std::__detail::_Node_iterator_base.150" = type { ptr }
%"struct.std::pair.152" = type { i32, [4 x i8], %"struct.spirv_cross::SPIREntryPoint" }
%"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.140", %"class.spirv_cross::Bitset", %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", i32, i32, i32, i32, i8, [3 x i8] }>
%"class.spirv_cross::TypedID" = type { i32 }
%"class.spirv_cross::SmallVector.140" = type { %"class.spirv_cross::VectorView.141", i64, %"class.spirv_cross::AlignedBuffer.142" }
%"class.spirv_cross::VectorView.141" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.142" = type { [32 x i8] }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.spirv_cross::SPIREntryPoint::WorkgroupSize" = type { i32, i32, i32, i32, i32, i32, i32 }
%"class.spirv_cross::TypedID.156" = type { i32 }
%"class.spirv_cross::TypedID.109" = type { i32 }
%class.anon.173 = type { ptr, ptr, ptr }
%class.anon.174 = type { ptr, ptr, ptr, ptr }
%"struct.std::pair" = type { i32, i32 }
%"struct.spirv_cross::SPIRBlock::Phi" = type { %"class.spirv_cross::TypedID.102", %"class.spirv_cross::TypedID.130", %"class.spirv_cross::TypedID.156" }
%"class.spirv_cross::TypedID.130" = type { i32 }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.109", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.175", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.102" }>
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.102"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.102"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.175" = type { %"class.spirv_cross::VectorView.176", i64, %"class.spirv_cross::AlignedBuffer.177" }
%"class.spirv_cross::VectorView.176" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.177" = type { [32 x i8] }
%"struct.spirv_cross::SPIRBlock::Case" = type <{ i64, %"class.spirv_cross::TypedID.130", [4 x i8] }>
%"struct.spirv_cross::Instruction" = type { i16, i16, i32, i32 }
%"class.spirv_cross::Parser" = type { %"class.spirv_cross::ParsedIR", ptr, ptr, i8, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.95" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.95" = type { %"class.spirv_cross::VectorView.96", i64, %"class.spirv_cross::AlignedBuffer.97" }
%"class.spirv_cross::VectorView.96" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.97" = type { [64 x i8] }
%"struct.spirv_cross::SPIRBlock" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, %"class.spirv_cross::TypedID.130", %"class.spirv_cross::TypedID.130", %"class.spirv_cross::TypedID.130", %"class.spirv_cross::TypedID.102", %"class.spirv_cross::TypedID.102", %"class.spirv_cross::TypedID.130", %"class.spirv_cross::TypedID.130", %"class.spirv_cross::TypedID.130", %struct.anon, %"class.spirv_cross::SmallVector.99", %"class.spirv_cross::SmallVector.131", %"class.spirv_cross::SmallVector.134", %"class.spirv_cross::SmallVector.134", %"class.spirv_cross::SmallVector.137", %"class.spirv_cross::SmallVector.137", i8, i8, i8, %"class.spirv_cross::TypedID.130", %"class.spirv_cross::TypedID.130", %"class.spirv_cross::SmallVector.140", %"class.spirv_cross::SmallVector.140", %"class.spirv_cross::SmallVector.7" }
%struct.anon = type { [3 x %"class.spirv_cross::TypedID.102"], %"class.spirv_cross::TypedID.102" }
%"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 { [96 x i8] }
%"class.spirv_cross::SmallVector.131" = type { %"class.spirv_cross::VectorView.132", i64, %"class.spirv_cross::AlignedBuffer.133" }
%"class.spirv_cross::VectorView.132" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.133" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.134" = type { %"class.spirv_cross::VectorView.135", i64, %"class.spirv_cross::AlignedBuffer.136" }
%"class.spirv_cross::VectorView.135" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.136" = type { [64 x i8] }
%"class.spirv_cross::SmallVector.137" = type { %"class.spirv_cross::VectorView.138", i64, %"class.spirv_cross::AlignedBuffer.139" }
%"class.spirv_cross::VectorView.138" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.139" = type { [128 x i8] }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.103", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.106", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.109", %"class.spirv_cross::TypedID.109", %"class.std::unordered_set.110" }
%"class.spirv_cross::SmallVector.103" = type { %"class.spirv_cross::VectorView.104", i64, %"class.spirv_cross::AlignedBuffer.105" }
%"class.spirv_cross::VectorView.104" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.105" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.106" = type { %"class.spirv_cross::VectorView.107", i64, %"class.spirv_cross::AlignedBuffer.108" }
%"class.spirv_cross::VectorView.107" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.108" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.109", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.110" = type { %"class.std::_Hashtable.111" }
%"class.std::_Hashtable.111" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::pair.154" = type { %"class.spirv_cross::TypedID", [4 x i8], %"struct.spirv_cross::SPIREntryPoint" }
%"struct.spirv_cross::Meta" = type { %"struct.spirv_cross::Meta::Decoration", %"class.spirv_cross::SmallVector.157", %"class.std::unordered_map.159", i8, i32 }
%"struct.spirv_cross::Meta::Decoration" = type { %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, %"struct.spirv_cross::Meta::Decoration::Extended" }
%"struct.spirv_cross::Meta::Decoration::Extended" = type { %"class.spirv_cross::Bitset", [18 x i32] }
%"class.spirv_cross::SmallVector.157" = type <{ %"class.spirv_cross::VectorView.158", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.158" = type { ptr, i64 }
%"class.std::unordered_map.159" = type { %"class.std::_Hashtable.160" }
%"class.std::_Hashtable.160" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.102", [4 x i8] }>
%"struct.spirv_cross::SPIRFunctionPrototype" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.109", %"class.spirv_cross::SmallVector.92" }
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.109", i32, i32, %"class.spirv_cross::TypedID.102", %"class.spirv_cross::TypedID.156", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.102", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.130", i8, i8, i8, ptr }
%"struct.spirv_cross::SPIRConstantOp" = type <{ %"struct.spirv_cross::IVariant.base", i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::TypedID.109", [4 x i8] }>
%"struct.spirv_cross::SPIRUndef" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.109" }
%"struct.spirv_cross::SPIRFunction" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.109", %"class.spirv_cross::TypedID.109", [4 x i8], %"class.spirv_cross::SmallVector.178", %"class.spirv_cross::SmallVector.178", %"class.spirv_cross::SmallVector.140", %"class.spirv_cross::TypedID.130", [4 x i8], %"class.spirv_cross::SmallVector.181", %"class.spirv_cross::SmallVector.184", %"struct.spirv_cross::SPIRFunction::EntryLine", %"class.spirv_cross::SmallVector.187", %"class.spirv_cross::SmallVector.187", %"class.spirv_cross::SmallVector.7", i8, i8, i8, [5 x i8] }>
%"class.spirv_cross::SmallVector.178" = type { %"class.spirv_cross::VectorView.179", i64, %"class.spirv_cross::AlignedBuffer.180" }
%"class.spirv_cross::VectorView.179" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.180" = type { [160 x i8] }
%"class.spirv_cross::SmallVector.181" = type { %"class.spirv_cross::VectorView.182", i64, %"class.spirv_cross::AlignedBuffer.183" }
%"class.spirv_cross::VectorView.182" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.183" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.184" = type { %"class.spirv_cross::VectorView.185", i64, %"class.spirv_cross::AlignedBuffer.186" }
%"class.spirv_cross::VectorView.185" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.186" = type { [128 x i8] }
%"struct.spirv_cross::SPIRFunction::EntryLine" = type { i32, i32 }
%"class.spirv_cross::SmallVector.187" = type <{ %"class.spirv_cross::VectorView.188", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.188" = type { ptr, i64 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.9 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [151 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [37 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

declare i32 @__gxx_personality_v0(...)

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 4 dereferenceable(12)) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross6Parser5parseERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(2088) %0, ptr noundef nonnull align 4 dereferenceable(12) %1) #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"struct.std::pair.145", align 4
  %23 = alloca %"struct.std::pair.143", align 8
  %24 = alloca %"struct.std::pair.147", align 8
  %25 = alloca %"struct.std::pair.152", align 8
  %26 = alloca %"struct.spirv_cross::SPIREntryPoint", align 8
  %27 = alloca %"class.spirv_cross::TypedID", align 4
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca { ptr, i8 }, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca %"class.spirv_cross::TypedID.156", align 4
  %34 = alloca %"class.spirv_cross::TypedID.102", align 4
  %35 = alloca %"class.spirv_cross::TypedID", align 4
  %36 = alloca ptr, align 8
  %37 = alloca %"class.spirv_cross::TypedID", align 4
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca %"class.spirv_cross::TypedID", align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca %"class.spirv_cross::TypedID.102", align 4
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca %"class.spirv_cross::TypedID.109", align 4
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca %"class.spirv_cross::TypedID.102", align 4
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca %class.anon.173, align 8
  %56 = alloca i32, align 4
  %57 = alloca ptr, align 8
  %58 = alloca %"class.spirv_cross::TypedID.102", align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca %class.anon.174, align 8
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca %"class.spirv_cross::TypedID.102", align 4
  %66 = alloca i32, align 4
  %67 = alloca %"class.spirv_cross::TypedID.102", align 4
  %68 = alloca %"class.spirv_cross::TypedID.102", align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca %"class.spirv_cross::TypedID.102", align 4
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca %"class.spirv_cross::TypedID.109", align 4
  %77 = alloca %"class.spirv_cross::TypedID.109", align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca %"class.spirv_cross::TypedID.109", align 4
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca i32, align 4
  %84 = alloca ptr, align 8
  %85 = alloca i32, align 4
  %86 = alloca ptr, align 8
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca ptr, align 8
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca i8, align 1
  %93 = alloca ptr, align 8
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca ptr, align 8
  %97 = alloca ptr, align 8
  %98 = alloca %"class.spirv_cross::TypedID.102", align 4
  %99 = alloca %"class.spirv_cross::TypedID.109", align 4
  %100 = alloca i32, align 4
  %101 = alloca i32, align 4
  %102 = alloca ptr, align 8
  %103 = alloca ptr, align 8
  %104 = alloca %"class.spirv_cross::TypedID.102", align 4
  %105 = alloca %"class.spirv_cross::TypedID.109", align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca ptr, align 8
  %109 = alloca ptr, align 8
  %110 = alloca %"class.spirv_cross::TypedID.109", align 4
  %111 = alloca i32, align 4
  %112 = alloca %"class.spirv_cross::TypedID.102", align 4
  %113 = alloca ptr, align 8
  %114 = alloca i8, align 1
  %115 = alloca %"struct.std::pair", align 4
  %116 = alloca i32, align 4
  %117 = alloca i32, align 4
  %118 = alloca ptr, align 8
  %119 = alloca ptr, align 8
  %120 = alloca %"struct.std::pair", align 4
  %121 = alloca i32, align 4
  %122 = alloca i8, align 1
  %123 = alloca %"class.spirv_cross::TypedID.109", align 4
  %124 = alloca i32, align 4
  %125 = alloca ptr, align 8
  %126 = alloca %"class.spirv_cross::TypedID.109", align 4
  %127 = alloca i32, align 4
  %128 = alloca i32, align 4
  %129 = alloca ptr, align 8
  %130 = alloca %"class.spirv_cross::TypedID.102", align 4
  %131 = alloca i32, align 4
  %132 = alloca ptr, align 8
  %133 = alloca i32, align 4
  %134 = alloca ptr, align 8
  %135 = alloca ptr, align 8
  %136 = alloca %"struct.std::pair", align 4
  %137 = alloca %"class.spirv_cross::TypedID.109", align 4
  %138 = alloca i32, align 4
  %139 = alloca ptr, align 8
  %140 = alloca i32, align 4
  %141 = alloca ptr, align 8
  %142 = alloca i32, align 4
  %143 = alloca %"class.spirv_cross::TypedID.109", align 4
  %144 = alloca i8, align 1
  %145 = alloca %"class.spirv_cross::TypedID.102", align 4
  %146 = alloca ptr, align 8
  %147 = alloca ptr, align 8
  %148 = alloca ptr, align 8
  %149 = alloca ptr, align 8
  %150 = alloca %"class.spirv_cross::TypedID.102", align 4
  %151 = alloca %"class.spirv_cross::TypedID.102", align 4
  %152 = alloca %"class.spirv_cross::TypedID.109", align 4
  %153 = alloca %"class.spirv_cross::TypedID.109", align 4
  %154 = alloca i32, align 4
  %155 = alloca i32, align 4
  %156 = alloca ptr, align 8
  %157 = alloca i32, align 4
  %158 = alloca i32, align 4
  %159 = alloca ptr, align 8
  %160 = alloca i32, align 4
  %161 = alloca ptr, align 8
  %162 = alloca i32, align 4
  %163 = alloca i32, align 4
  %164 = alloca i32, align 4
  %165 = alloca i32, align 4
  %166 = alloca %"class.spirv_cross::TypedID.156", align 4
  %167 = alloca i32, align 4
  %168 = alloca i32, align 4
  %169 = alloca ptr, align 8
  %170 = alloca i32, align 4
  %171 = alloca %"class.spirv_cross::TypedID.156", align 4
  %172 = alloca i32, align 4
  %173 = alloca %"struct.spirv_cross::SPIRBlock::Phi", align 4
  %174 = alloca i32, align 4
  %175 = alloca ptr, align 8
  %176 = alloca i64, align 8
  %177 = alloca i8, align 1
  %178 = alloca i8, align 1
  %179 = alloca i32, align 4
  %180 = alloca i32, align 4
  %181 = alloca i8, align 1
  %182 = alloca i32, align 4
  %183 = alloca i32, align 4
  %184 = alloca i8, align 1
  %185 = alloca i32, align 4
  %186 = alloca i32, align 4
  %187 = alloca i32, align 4
  %188 = alloca i32, align 4
  %189 = alloca ptr, align 8
  %190 = alloca ptr, align 8
  %191 = alloca i32, align 4
  %192 = alloca i8, align 1
  %193 = alloca i32, align 4
  %194 = alloca [4 x %"struct.spirv_cross::SPIRConstant"], align 16
  %195 = alloca [4 x ptr], align 16
  %196 = alloca i32, align 4
  %197 = alloca ptr, align 8
  %198 = alloca ptr, align 8
  %199 = alloca i8, align 1
  %200 = alloca i32, align 4
  %201 = alloca i32, align 4
  %202 = alloca i32, align 4
  %203 = alloca i32, align 4
  %204 = alloca i32, align 4
  %205 = alloca %"class.spirv_cross::TypedID.109", align 4
  %206 = alloca %"class.spirv_cross::TypedID.102", align 4
  %207 = alloca i32, align 4
  %208 = alloca i32, align 4
  %209 = alloca %"class.spirv_cross::TypedID.130", align 4
  %210 = alloca %"class.spirv_cross::TypedID.130", align 4
  %211 = alloca i32, align 4
  %212 = alloca %"class.spirv_cross::TypedID.130", align 4
  %213 = alloca %"class.spirv_cross::TypedID.102", align 4
  %214 = alloca %"class.spirv_cross::TypedID.130", align 4
  %215 = alloca %"class.spirv_cross::TypedID.130", align 4
  %216 = alloca i32, align 4
  %217 = alloca ptr, align 8
  %218 = alloca i32, align 4
  %219 = alloca ptr, align 8
  %220 = alloca i8, align 1
  %221 = alloca %"class.spirv_cross::TypedID.102", align 4
  %222 = alloca %"class.spirv_cross::TypedID.130", align 4
  %223 = alloca %"class.spirv_cross::TypedID.130", align 4
  %224 = alloca %"class.spirv_cross::TypedID.130", align 4
  %225 = alloca %"class.spirv_cross::TypedID.102", align 4
  %226 = alloca %"class.spirv_cross::TypedID.130", align 4
  %227 = alloca i32, align 4
  %228 = alloca i32, align 4
  %229 = alloca %"struct.spirv_cross::SPIRBlock::Case", align 8
  %230 = alloca i32, align 4
  %231 = alloca i64, align 8
  %232 = alloca %"struct.spirv_cross::SPIRBlock::Case", align 8
  %233 = alloca i32, align 4
  %234 = alloca %"class.spirv_cross::TypedID.102", align 4
  %235 = alloca %"class.spirv_cross::TypedID.102", align 4
  %236 = alloca %"class.spirv_cross::TypedID.102", align 4
  %237 = alloca %"class.spirv_cross::TypedID.130", align 4
  %238 = alloca %"class.spirv_cross::TypedID.130", align 4
  %239 = alloca %"class.spirv_cross::TypedID.130", align 4
  %240 = alloca %"class.spirv_cross::TypedID.130", align 4
  %241 = alloca %"class.spirv_cross::TypedID.130", align 4
  %242 = alloca i32, align 4
  %243 = alloca i32, align 4
  %244 = alloca i32, align 4
  %245 = alloca ptr, align 8
  %246 = alloca i32, align 4
  %247 = alloca ptr, align 8
  %248 = alloca %"struct.std::pair.145", align 4
  %249 = alloca %"struct.std::pair.143", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %250 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  %251 = load ptr, ptr %4, align 8, !tbaa !5
  %252 = call noundef ptr @_ZNK11spirv_cross6Parser6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(2088) %250, ptr noundef nonnull align 4 dereferenceable(12) %251)
  store ptr %252, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  %253 = load ptr, ptr %4, align 8, !tbaa !5
  %254 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %253, i32 0, i32 0
  %255 = load i16, ptr %254, align 4, !tbaa !9
  %256 = zext i16 %255 to i32
  store i32 %256, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %257 = load ptr, ptr %4, align 8, !tbaa !5
  %258 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %257, i32 0, i32 3
  %259 = load i32, ptr %258, align 4, !tbaa !15
  store i32 %259, ptr %7, align 4, !tbaa !16
  %260 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 3
  %261 = load i8, ptr %260, align 8, !tbaa !17, !range !73, !noundef !74
  %262 = trunc i8 %261 to i1
  br i1 %262, label %263, label %275

263:                                              ; preds = %2
  %264 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 3
  store i8 0, ptr %264, align 8, !tbaa !17
  %265 = load i32, ptr %6, align 4, !tbaa !13
  %266 = icmp eq i32 %265, 253
  br i1 %266, label %273, label %267

267:                                              ; preds = %263
  %268 = load i32, ptr %6, align 4, !tbaa !13
  %269 = icmp eq i32 %268, 249
  br i1 %269, label %273, label %270

270:                                              ; preds = %267
  %271 = load i32, ptr %6, align 4, !tbaa !13
  %272 = icmp eq i32 %271, 255
  br i1 %272, label %273, label %274

273:                                              ; preds = %270, %267, %263
  store i32 1, ptr %8, align 4
  br label %2708

274:                                              ; preds = %270
  br label %275

275:                                              ; preds = %274, %2
  %276 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %276, label %2668 [
    i32 2, label %277
    i32 4, label %277
    i32 0, label %277
    i32 330, label %277
    i32 7, label %278
    i32 14, label %294
    i32 3, label %305
    i32 1, label %360
    i32 17, label %378
    i32 10, label %397
    i32 11, label %405
    i32 12, label %466
    i32 15, label %499
    i32 16, label %586
    i32 331, label %639
    i32 5, label %674
    i32 6, label %693
    i32 73, label %716
    i32 74, label %717
    i32 75, label %747
    i32 71, label %785
    i32 332, label %785
    i32 5632, label %827
    i32 72, label %850
    i32 5633, label %880
    i32 19, label %907
    i32 20, label %915
    i32 22, label %925
    i32 21, label %964
    i32 23, label %993
    i32 24, label %1021
    i32 28, label %1049
    i32 29, label %1111
    i32 25, label %1147
    i32 27, label %1215
    i32 26, label %1233
    i32 32, label %1241
    i32 39, label %1297
    i32 30, label %1324
    i32 33, label %1415
    i32 5341, label %1440
    i32 4472, label %1448
    i32 59, label %1456
    i32 245, label %1497
    i32 50, label %1564
    i32 43, label %1564
    i32 49, label %1605
    i32 42, label %1605
    i32 48, label %1616
    i32 41, label %1616
    i32 46, label %1627
    i32 51, label %1637
    i32 44, label %1637
    i32 54, label %1844
    i32 55, label %1868
    i32 56, label %1896
    i32 248, label %1909
    i32 249, label %1953
    i32 250, label %1976
    i32 251, label %2158
    i32 252, label %2276
    i32 4416, label %2276
    i32 4449, label %2292
    i32 4448, label %2308
    i32 5294, label %2324
    i32 253, label %2375
    i32 254, label %2391
    i32 255, label %2413
    i32 247, label %2429
    i32 246, label %2487
    i32 52, label %2595
    i32 8, label %2621
    i32 317, label %2658
  ]

277:                                              ; preds = %275, %275, %275, %275
  br label %2707

278:                                              ; preds = %275
  %279 = load ptr, ptr %5, align 8, !tbaa !5
  %280 = getelementptr inbounds i32, ptr %279, i64 0
  %281 = load i32, ptr %280, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #8
  %282 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %283 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %282, i32 0, i32 1
  %284 = load ptr, ptr %4, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %284, i32 0, i32 2
  %286 = load i32, ptr %285, align 4, !tbaa !75
  %287 = add i32 %286, 1
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(24) %283, i32 noundef %287)
  %288 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN11spirv_cross6Parser3setINS_10SPIRStringEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %281, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %289 unwind label %290

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

290:                                              ; preds = %278
  %291 = landingpad { ptr, i32 }
          cleanup
  %292 = extractvalue { ptr, i32 } %291, 0
  store ptr %292, ptr %10, align 8
  %293 = extractvalue { ptr, i32 } %291, 1
  store i32 %293, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #8
  br label %2711

294:                                              ; preds = %275
  %295 = load ptr, ptr %5, align 8, !tbaa !5
  %296 = getelementptr inbounds i32, ptr %295, i64 0
  %297 = load i32, ptr %296, align 4, !tbaa !16
  %298 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %299 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %298, i32 0, i32 15
  store i32 %297, ptr %299, align 4, !tbaa !76
  %300 = load ptr, ptr %5, align 8, !tbaa !5
  %301 = getelementptr inbounds i32, ptr %300, i64 1
  %302 = load i32, ptr %301, align 4, !tbaa !16
  %303 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %304 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %303, i32 0, i32 16
  store i32 %302, ptr %304, align 8, !tbaa !77
  br label %2707

305:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %306 = load ptr, ptr %5, align 8, !tbaa !5
  %307 = getelementptr inbounds i32, ptr %306, i64 0
  %308 = load i32, ptr %307, align 4, !tbaa !16
  store i32 %308, ptr %12, align 4, !tbaa !78
  %309 = load i32, ptr %12, align 4, !tbaa !78
  switch i32 %309, label %355 [
    i32 1, label %310
    i32 2, label %326
    i32 5, label %342
  ]

310:                                              ; preds = %305
  %311 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %312 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %311, i32 0, i32 14
  %313 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %312, i32 0, i32 1
  store i8 1, ptr %313, align 4, !tbaa !80
  %314 = load ptr, ptr %5, align 8, !tbaa !5
  %315 = getelementptr inbounds i32, ptr %314, i64 1
  %316 = load i32, ptr %315, align 4, !tbaa !16
  %317 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %318 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %317, i32 0, i32 14
  %319 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %318, i32 0, i32 0
  store i32 %316, ptr %319, align 4, !tbaa !81
  %320 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %321 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %320, i32 0, i32 14
  %322 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %321, i32 0, i32 2
  store i8 1, ptr %322, align 1, !tbaa !82
  %323 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %324 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %323, i32 0, i32 14
  %325 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %324, i32 0, i32 3
  store i8 0, ptr %325, align 2, !tbaa !83
  br label %359

326:                                              ; preds = %305
  %327 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %328 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %327, i32 0, i32 14
  %329 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %328, i32 0, i32 1
  store i8 0, ptr %329, align 4, !tbaa !80
  %330 = load ptr, ptr %5, align 8, !tbaa !5
  %331 = getelementptr inbounds i32, ptr %330, i64 1
  %332 = load i32, ptr %331, align 4, !tbaa !16
  %333 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %334 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %333, i32 0, i32 14
  %335 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %334, i32 0, i32 0
  store i32 %332, ptr %335, align 4, !tbaa !81
  %336 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %337 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %336, i32 0, i32 14
  %338 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %337, i32 0, i32 2
  store i8 1, ptr %338, align 1, !tbaa !82
  %339 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %340 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %339, i32 0, i32 14
  %341 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %340, i32 0, i32 3
  store i8 0, ptr %341, align 2, !tbaa !83
  br label %359

342:                                              ; preds = %305
  %343 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %344 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %343, i32 0, i32 14
  %345 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %344, i32 0, i32 1
  store i8 0, ptr %345, align 4, !tbaa !80
  %346 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %347 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %346, i32 0, i32 14
  %348 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %347, i32 0, i32 0
  store i32 450, ptr %348, align 4, !tbaa !81
  %349 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %350 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %349, i32 0, i32 14
  %351 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %350, i32 0, i32 2
  store i8 1, ptr %351, align 1, !tbaa !82
  %352 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %353 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %352, i32 0, i32 14
  %354 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %353, i32 0, i32 3
  store i8 1, ptr %354, align 2, !tbaa !83
  br label %359

355:                                              ; preds = %305
  %356 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %357 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %356, i32 0, i32 14
  %358 = getelementptr inbounds %"struct.spirv_cross::ParsedIR::Source", ptr %357, i32 0, i32 2
  store i8 0, ptr %358, align 1, !tbaa !82
  br label %359

359:                                              ; preds = %355, %342, %326, %310
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  br label %2707

360:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  %361 = load ptr, ptr %5, align 8, !tbaa !5
  %362 = getelementptr inbounds i32, ptr %361, i64 0
  %363 = load i32, ptr %362, align 4, !tbaa !16
  store i32 %363, ptr %13, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  %364 = load ptr, ptr %5, align 8, !tbaa !5
  %365 = getelementptr inbounds i32, ptr %364, i64 1
  %366 = load i32, ptr %365, align 4, !tbaa !16
  store i32 %366, ptr %14, align 4, !tbaa !16
  %367 = load i32, ptr %14, align 4, !tbaa !16
  %368 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross6Parser3setINS_9SPIRUndefEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %367, ptr noundef nonnull align 4 dereferenceable(4) %13)
  %369 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %370 = load ptr, ptr %369, align 8, !tbaa !84
  %371 = icmp ne ptr %370, null
  br i1 %371, label %372, label %377

372:                                              ; preds = %360
  %373 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %374 = load ptr, ptr %373, align 8, !tbaa !84
  %375 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %374, i32 0, i32 13
  %376 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %375, ptr noundef nonnull align 4 dereferenceable(12) %376) #8
  br label %377

377:                                              ; preds = %372, %360
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %2707

378:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = getelementptr inbounds i32, ptr %379, i64 0
  %381 = load i32, ptr %380, align 4, !tbaa !16
  store i32 %381, ptr %15, align 4, !tbaa !16
  %382 = load i32, ptr %15, align 4, !tbaa !16
  %383 = icmp eq i32 %382, 6
  br i1 %383, label %384, label %391

384:                                              ; preds = %378
  %385 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %385, ptr noundef @.str.9)
          to label %386 unwind label %387

386:                                              ; preds = %384
  call void @__cxa_throw(ptr %385, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

387:                                              ; preds = %384
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %10, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %11, align 4
  call void @__cxa_free_exception(ptr %385) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %2711

391:                                              ; preds = %378
  %392 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %393 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %392, i32 0, i32 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %394 = load ptr, ptr %5, align 8, !tbaa !5
  %395 = getelementptr inbounds i32, ptr %394, i64 0
  %396 = load i32, ptr %395, align 4, !tbaa !16
  store i32 %396, ptr %16, align 4, !tbaa !85
  call void @_ZN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(56) %393, ptr noundef nonnull align 4 dereferenceable(4) %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %2707

397:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #8
  %398 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %399 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %398, i32 0, i32 1
  %400 = load ptr, ptr %4, align 8, !tbaa !5
  %401 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %400, i32 0, i32 2
  %402 = load i32, ptr %401, align 4, !tbaa !75
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(24) %399, i32 noundef %402)
  %403 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %404 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %403, i32 0, i32 9
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %404, ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  store i32 2, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  br label %2707

405:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %406 = load ptr, ptr %5, align 8, !tbaa !5
  %407 = getelementptr inbounds i32, ptr %406, i64 0
  %408 = load i32, ptr %407, align 4, !tbaa !16
  store i32 %408, ptr %18, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 0, ptr %19, align 4, !tbaa !87
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #8
  %409 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %410 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %409, i32 0, i32 1
  %411 = load ptr, ptr %4, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %411, i32 0, i32 2
  %413 = load i32, ptr %412, align 4, !tbaa !75
  %414 = add i32 %413, 1
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(24) %410, i32 noundef %414)
  %415 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.10)
          to label %416 unwind label %418

416:                                              ; preds = %405
  br i1 %415, label %417, label %422

417:                                              ; preds = %416
  store i32 1, ptr %19, align 4, !tbaa !87
  br label %462

418:                                              ; preds = %462, %446, %442, %438, %434, %430, %426, %422, %405
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %10, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %2711

422:                                              ; preds = %416
  %423 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.11)
          to label %424 unwind label %418

424:                                              ; preds = %422
  br i1 %423, label %425, label %426

425:                                              ; preds = %424
  store i32 2, ptr %19, align 4, !tbaa !87
  br label %461

426:                                              ; preds = %424
  %427 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.12)
          to label %428 unwind label %418

428:                                              ; preds = %426
  br i1 %427, label %429, label %430

429:                                              ; preds = %428
  store i32 3, ptr %19, align 4, !tbaa !87
  br label %460

430:                                              ; preds = %428
  %431 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.13)
          to label %432 unwind label %418

432:                                              ; preds = %430
  br i1 %431, label %433, label %434

433:                                              ; preds = %432
  store i32 4, ptr %19, align 4, !tbaa !87
  br label %459

434:                                              ; preds = %432
  %435 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.14)
          to label %436 unwind label %418

436:                                              ; preds = %434
  br i1 %435, label %437, label %438

437:                                              ; preds = %436
  store i32 5, ptr %19, align 4, !tbaa !87
  br label %458

438:                                              ; preds = %436
  %439 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.15)
          to label %440 unwind label %418

440:                                              ; preds = %438
  br i1 %439, label %441, label %442

441:                                              ; preds = %440
  store i32 6, ptr %19, align 4, !tbaa !87
  br label %457

442:                                              ; preds = %440
  %443 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.16)
          to label %444 unwind label %418

444:                                              ; preds = %442
  br i1 %443, label %445, label %446

445:                                              ; preds = %444
  store i32 7, ptr %19, align 4, !tbaa !87
  br label %456

446:                                              ; preds = %444
  %447 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.17)
          to label %448 unwind label %418

448:                                              ; preds = %446
  br i1 %447, label %449, label %450

449:                                              ; preds = %448
  store i32 8, ptr %19, align 4, !tbaa !87
  br label %455

450:                                              ; preds = %448
  %451 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcm(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.18, i64 noundef 0) #8
  %452 = icmp eq i64 %451, 0
  br i1 %452, label %453, label %454

453:                                              ; preds = %450
  store i32 9, ptr %19, align 4, !tbaa !87
  br label %454

454:                                              ; preds = %453, %450
  br label %455

455:                                              ; preds = %454, %449
  br label %456

456:                                              ; preds = %455, %445
  br label %457

457:                                              ; preds = %456, %441
  br label %458

458:                                              ; preds = %457, %437
  br label %459

459:                                              ; preds = %458, %433
  br label %460

460:                                              ; preds = %459, %429
  br label %461

461:                                              ; preds = %460, %425
  br label %462

462:                                              ; preds = %461, %417
  %463 = load i32, ptr %18, align 4, !tbaa !16
  %464 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross6Parser3setINS_13SPIRExtensionEJRNS2_9ExtensionEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %463, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %465 unwind label %418

465:                                              ; preds = %462
  store i32 2, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %2707

466:                                              ; preds = %275
  %467 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %468 = load ptr, ptr %467, align 8, !tbaa !84
  %469 = icmp ne ptr %468, null
  br i1 %469, label %470, label %498

470:                                              ; preds = %466
  %471 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %472 = load ptr, ptr %471, align 8, !tbaa !84
  %473 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %472, i32 0, i32 13
  %474 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %473, ptr noundef nonnull align 4 dereferenceable(12) %474) #8
  %475 = load i32, ptr %7, align 4, !tbaa !16
  %476 = icmp uge i32 %475, 2
  br i1 %476, label %477, label %497

477:                                              ; preds = %470
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %478 = load ptr, ptr %5, align 8, !tbaa !5
  %479 = getelementptr inbounds i32, ptr %478, i64 0
  %480 = load i32, ptr %479, align 4, !tbaa !16
  %481 = call noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_8SPIRTypeEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %480)
  store ptr %481, ptr %21, align 8, !tbaa !5
  %482 = load ptr, ptr %21, align 8, !tbaa !5
  %483 = icmp ne ptr %482, null
  br i1 %483, label %484, label %496

484:                                              ; preds = %477
  %485 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %486 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %485, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %487 = load ptr, ptr %5, align 8, !tbaa !5
  %488 = getelementptr inbounds i32, ptr %487, i64 1
  %489 = load ptr, ptr %21, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %489, i32 0, i32 3
  call void @_ZNSt4pairIKN11spirv_cross7TypedIDILNS0_5TypesE0EEEjEC2IRKjS8_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 4 dereferenceable(8) %22, ptr noundef nonnull align 4 dereferenceable(4) %488, ptr noundef nonnull align 4 dereferenceable(4) %490)
  %491 = call { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE6insertEOSA_(ptr noundef nonnull align 8 dereferenceable(56) %486, ptr noundef nonnull align 4 dereferenceable(8) %22)
  %492 = getelementptr inbounds { ptr, i8 }, ptr %23, i32 0, i32 0
  %493 = extractvalue { ptr, i8 } %491, 0
  store ptr %493, ptr %492, align 8
  %494 = getelementptr inbounds { ptr, i8 }, ptr %23, i32 0, i32 1
  %495 = extractvalue { ptr, i8 } %491, 1
  store i8 %495, ptr %494, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %496

496:                                              ; preds = %484, %477
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %497

497:                                              ; preds = %496, %470
  br label %498

498:                                              ; preds = %497, %466
  br label %2707

499:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #8
  %500 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %501 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %500, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 248, ptr %25) #8
  %502 = load ptr, ptr %5, align 8, !tbaa !5
  %503 = getelementptr inbounds i32, ptr %502, i64 1
  call void @llvm.lifetime.start.p0(i64 240, ptr %26) #8
  %504 = load ptr, ptr %5, align 8, !tbaa !5
  %505 = getelementptr inbounds i32, ptr %504, i64 1
  %506 = load i32, ptr %505, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE4EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %27, i32 noundef %506)
  %507 = load ptr, ptr %5, align 8, !tbaa !5
  %508 = getelementptr inbounds i32, ptr %507, i64 0
  %509 = load i32, ptr %508, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #8
  %510 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %511 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %510, i32 0, i32 1
  %512 = load ptr, ptr %4, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %512, i32 0, i32 2
  %514 = load i32, ptr %513, align 4, !tbaa !75
  %515 = add i32 %514, 2
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(24) %511, i32 noundef %515)
  %516 = getelementptr inbounds %"class.spirv_cross::TypedID", ptr %27, i32 0, i32 0
  %517 = load i32, ptr %516, align 4
  invoke void @_ZN11spirv_cross14SPIREntryPointC2ENS_7TypedIDILNS_5TypesE4EEEN3spv14ExecutionModelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(237) %26, i32 %517, i32 noundef %509, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %518 unwind label %541

518:                                              ; preds = %499
  invoke void @_ZSt9make_pairIRKjN11spirv_cross14SPIREntryPointEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr dead_on_unwind writable sret(%"struct.std::pair.152") align 8 %25, ptr noundef nonnull align 4 dereferenceable(4) %503, ptr noundef nonnull align 8 dereferenceable(237) %26)
          to label %519 unwind label %545

519:                                              ; preds = %518
  %520 = invoke { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE6insertIS9_IjS4_EEENSt9enable_ifIXsr16is_constructibleISB_OT_EE5valueES9_INSt8__detail14_Node_iteratorISB_Lb0ELb1EEEbEE4typeESI_(ptr noundef nonnull align 8 dereferenceable(56) %501, ptr noundef nonnull align 8 dereferenceable(248) %25)
          to label %521 unwind label %549

521:                                              ; preds = %519
  store { ptr, i8 } %520, ptr %29, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %24, ptr align 8 %29, i64 9, i1 false)
  call void @_ZNSt4pairIjN11spirv_cross14SPIREntryPointEED2Ev(ptr noundef nonnull align 8 dereferenceable(248) %25) #8
  call void @_ZN11spirv_cross14SPIREntryPointD2Ev(ptr noundef nonnull align 8 dereferenceable(237) %26) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 240, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 248, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %522 = getelementptr inbounds %"struct.std::pair.147", ptr %24, i32 0, i32 0
  %523 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE4EEENS2_14SPIREntryPointEELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %522) #8
  %524 = getelementptr inbounds %"struct.std::pair.154", ptr %523, i32 0, i32 2
  store ptr %524, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %525 = load ptr, ptr %30, align 8, !tbaa !5
  %526 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %525, i32 0, i32 2
  %527 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %526) #8
  %528 = add i64 %527, 1
  %529 = add i64 %528, 3
  %530 = lshr i64 %529, 2
  %531 = trunc i64 %530 to i32
  store i32 %531, ptr %31, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %532 = load i32, ptr %31, align 4, !tbaa !16
  %533 = add i32 %532, 2
  store i32 %533, ptr %32, align 4, !tbaa !16
  br label %534

534:                                              ; preds = %563, %521
  %535 = load i32, ptr %32, align 4, !tbaa !16
  %536 = load ptr, ptr %4, align 8, !tbaa !5
  %537 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %536, i32 0, i32 3
  %538 = load i32, ptr %537, align 4, !tbaa !15
  %539 = icmp ult i32 %535, %538
  br i1 %539, label %555, label %540

540:                                              ; preds = %534
  store i32 4, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  br label %566

541:                                              ; preds = %499
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %10, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %11, align 4
  br label %554

545:                                              ; preds = %518
  %546 = landingpad { ptr, i32 }
          cleanup
  %547 = extractvalue { ptr, i32 } %546, 0
  store ptr %547, ptr %10, align 8
  %548 = extractvalue { ptr, i32 } %546, 1
  store i32 %548, ptr %11, align 4
  br label %553

549:                                              ; preds = %519
  %550 = landingpad { ptr, i32 }
          cleanup
  %551 = extractvalue { ptr, i32 } %550, 0
  store ptr %551, ptr %10, align 8
  %552 = extractvalue { ptr, i32 } %550, 1
  store i32 %552, ptr %11, align 4
  call void @_ZNSt4pairIjN11spirv_cross14SPIREntryPointEED2Ev(ptr noundef nonnull align 8 dereferenceable(248) %25) #8
  br label %553

553:                                              ; preds = %549, %545
  call void @_ZN11spirv_cross14SPIREntryPointD2Ev(ptr noundef nonnull align 8 dereferenceable(237) %26) #8
  br label %554

554:                                              ; preds = %553, %541
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 240, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 248, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #8
  br label %2711

555:                                              ; preds = %534
  %556 = load ptr, ptr %30, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %556, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %558 = load ptr, ptr %5, align 8, !tbaa !5
  %559 = load i32, ptr %32, align 4, !tbaa !16
  %560 = zext i32 %559 to i64
  %561 = getelementptr inbounds i32, ptr %558, i64 %560
  %562 = load i32, ptr %561, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %33, i32 noundef %562)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %557, ptr noundef nonnull align 4 dereferenceable(4) %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %563

563:                                              ; preds = %555
  %564 = load i32, ptr %32, align 4, !tbaa !16
  %565 = add i32 %564, 1
  store i32 %565, ptr %32, align 4, !tbaa !16
  br label %534, !llvm.loop !89

566:                                              ; preds = %540
  %567 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %568 = load ptr, ptr %5, align 8, !tbaa !5
  %569 = getelementptr inbounds i32, ptr %568, i64 1
  %570 = load i32, ptr %569, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %34, i32 noundef %570)
  %571 = load ptr, ptr %30, align 8, !tbaa !5
  %572 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %571, i32 0, i32 2
  %573 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %34, i32 0, i32 0
  %574 = load i32, ptr %573, align 4
  call void @_ZN11spirv_cross8ParsedIR8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %567, i32 %574, ptr noundef nonnull align 8 dereferenceable(32) %572)
  %575 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %576 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %575, i32 0, i32 13
  %577 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %576)
  %578 = icmp ne i32 %577, 0
  br i1 %578, label %585, label %579

579:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  %580 = load ptr, ptr %5, align 8, !tbaa !5
  %581 = getelementptr inbounds i32, ptr %580, i64 1
  %582 = load i32, ptr %581, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE4EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %35, i32 noundef %582)
  %583 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %584 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %583, i32 0, i32 13
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %584, ptr align 4 %35, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br label %585

585:                                              ; preds = %579, %566
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #8
  br label %2707

586:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %587 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %588 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %587, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  %589 = load ptr, ptr %5, align 8, !tbaa !5
  %590 = getelementptr inbounds i32, ptr %589, i64 0
  %591 = load i32, ptr %590, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE4EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef %591)
  %592 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %588, ptr noundef nonnull align 4 dereferenceable(4) %37)
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  store ptr %592, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  %593 = load ptr, ptr %5, align 8, !tbaa !5
  %594 = getelementptr inbounds i32, ptr %593, i64 1
  %595 = load i32, ptr %594, align 4, !tbaa !16
  store i32 %595, ptr %38, align 4, !tbaa !92
  %596 = load ptr, ptr %36, align 8, !tbaa !5
  %597 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %596, i32 0, i32 5
  %598 = load i32, ptr %38, align 4, !tbaa !92
  call void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %597, i32 noundef %598)
  %599 = load i32, ptr %38, align 4, !tbaa !92
  switch i32 %599, label %637 [
    i32 0, label %600
    i32 17, label %606
    i32 26, label %625
    i32 5270, label %631
  ]

600:                                              ; preds = %586
  %601 = load ptr, ptr %5, align 8, !tbaa !5
  %602 = getelementptr inbounds i32, ptr %601, i64 2
  %603 = load i32, ptr %602, align 4, !tbaa !16
  %604 = load ptr, ptr %36, align 8, !tbaa !5
  %605 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %604, i32 0, i32 7
  store i32 %603, ptr %605, align 4, !tbaa !94
  br label %638

606:                                              ; preds = %586
  %607 = load ptr, ptr %5, align 8, !tbaa !5
  %608 = getelementptr inbounds i32, ptr %607, i64 2
  %609 = load i32, ptr %608, align 4, !tbaa !16
  %610 = load ptr, ptr %36, align 8, !tbaa !5
  %611 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %610, i32 0, i32 6
  %612 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %611, i32 0, i32 0
  store i32 %609, ptr %612, align 8, !tbaa !101
  %613 = load ptr, ptr %5, align 8, !tbaa !5
  %614 = getelementptr inbounds i32, ptr %613, i64 3
  %615 = load i32, ptr %614, align 4, !tbaa !16
  %616 = load ptr, ptr %36, align 8, !tbaa !5
  %617 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %616, i32 0, i32 6
  %618 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %617, i32 0, i32 1
  store i32 %615, ptr %618, align 4, !tbaa !102
  %619 = load ptr, ptr %5, align 8, !tbaa !5
  %620 = getelementptr inbounds i32, ptr %619, i64 4
  %621 = load i32, ptr %620, align 4, !tbaa !16
  %622 = load ptr, ptr %36, align 8, !tbaa !5
  %623 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %622, i32 0, i32 6
  %624 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %623, i32 0, i32 2
  store i32 %621, ptr %624, align 8, !tbaa !103
  br label %638

625:                                              ; preds = %586
  %626 = load ptr, ptr %5, align 8, !tbaa !5
  %627 = getelementptr inbounds i32, ptr %626, i64 2
  %628 = load i32, ptr %627, align 4, !tbaa !16
  %629 = load ptr, ptr %36, align 8, !tbaa !5
  %630 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %629, i32 0, i32 8
  store i32 %628, ptr %630, align 8, !tbaa !104
  br label %638

631:                                              ; preds = %586
  %632 = load ptr, ptr %5, align 8, !tbaa !5
  %633 = getelementptr inbounds i32, ptr %632, i64 2
  %634 = load i32, ptr %633, align 4, !tbaa !16
  %635 = load ptr, ptr %36, align 8, !tbaa !5
  %636 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %635, i32 0, i32 9
  store i32 %634, ptr %636, align 4, !tbaa !105
  br label %638

637:                                              ; preds = %586
  br label %638

638:                                              ; preds = %637, %631, %625, %606, %600
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %2707

639:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %640 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %641 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %640, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %642 = load ptr, ptr %5, align 8, !tbaa !5
  %643 = getelementptr inbounds i32, ptr %642, i64 0
  %644 = load i32, ptr %643, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE4EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %40, i32 noundef %644)
  %645 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %641, ptr noundef nonnull align 4 dereferenceable(4) %40)
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  store ptr %645, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  %646 = load ptr, ptr %5, align 8, !tbaa !5
  %647 = getelementptr inbounds i32, ptr %646, i64 1
  %648 = load i32, ptr %647, align 4, !tbaa !16
  store i32 %648, ptr %41, align 4, !tbaa !92
  %649 = load ptr, ptr %39, align 8, !tbaa !5
  %650 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %649, i32 0, i32 5
  %651 = load i32, ptr %41, align 4, !tbaa !92
  call void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %650, i32 noundef %651)
  %652 = load i32, ptr %41, align 4, !tbaa !92
  %653 = icmp eq i32 %652, 38
  br i1 %653, label %654, label %673

654:                                              ; preds = %639
  %655 = load ptr, ptr %5, align 8, !tbaa !5
  %656 = getelementptr inbounds i32, ptr %655, i64 2
  %657 = load i32, ptr %656, align 4, !tbaa !16
  %658 = load ptr, ptr %39, align 8, !tbaa !5
  %659 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %658, i32 0, i32 6
  %660 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %659, i32 0, i32 3
  store i32 %657, ptr %660, align 4, !tbaa !106
  %661 = load ptr, ptr %5, align 8, !tbaa !5
  %662 = getelementptr inbounds i32, ptr %661, i64 3
  %663 = load i32, ptr %662, align 4, !tbaa !16
  %664 = load ptr, ptr %39, align 8, !tbaa !5
  %665 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %664, i32 0, i32 6
  %666 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %665, i32 0, i32 4
  store i32 %663, ptr %666, align 8, !tbaa !107
  %667 = load ptr, ptr %5, align 8, !tbaa !5
  %668 = getelementptr inbounds i32, ptr %667, i64 4
  %669 = load i32, ptr %668, align 4, !tbaa !16
  %670 = load ptr, ptr %39, align 8, !tbaa !5
  %671 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %670, i32 0, i32 6
  %672 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", ptr %671, i32 0, i32 5
  store i32 %669, ptr %672, align 4, !tbaa !108
  br label %673

673:                                              ; preds = %654, %639
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %2707

674:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  %675 = load ptr, ptr %5, align 8, !tbaa !5
  %676 = getelementptr inbounds i32, ptr %675, i64 0
  %677 = load i32, ptr %676, align 4, !tbaa !16
  store i32 %677, ptr %42, align 4, !tbaa !16
  %678 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %679 = load i32, ptr %42, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef %679)
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #8
  %680 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %681 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %680, i32 0, i32 1
  %682 = load ptr, ptr %4, align 8, !tbaa !5
  %683 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %682, i32 0, i32 2
  %684 = load i32, ptr %683, align 4, !tbaa !75
  %685 = add i32 %684, 1
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(24) %681, i32 noundef %685)
  %686 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %43, i32 0, i32 0
  %687 = load i32, ptr %686, align 4
  invoke void @_ZN11spirv_cross8ParsedIR8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %678, i32 %687, ptr noundef nonnull align 8 dereferenceable(32) %44)
          to label %688 unwind label %689

688:                                              ; preds = %674
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %2707

689:                                              ; preds = %674
  %690 = landingpad { ptr, i32 }
          cleanup
  %691 = extractvalue { ptr, i32 } %690, 0
  store ptr %691, ptr %10, align 8
  %692 = extractvalue { ptr, i32 } %690, 1
  store i32 %692, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %2711

693:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  %694 = load ptr, ptr %5, align 8, !tbaa !5
  %695 = getelementptr inbounds i32, ptr %694, i64 0
  %696 = load i32, ptr %695, align 4, !tbaa !16
  store i32 %696, ptr %45, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  %697 = load ptr, ptr %5, align 8, !tbaa !5
  %698 = getelementptr inbounds i32, ptr %697, i64 1
  %699 = load i32, ptr %698, align 4, !tbaa !16
  store i32 %699, ptr %46, align 4, !tbaa !16
  %700 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %701 = load i32, ptr %45, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %47, i32 noundef %701)
  %702 = load i32, ptr %46, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #8
  %703 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %704 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %703, i32 0, i32 1
  %705 = load ptr, ptr %4, align 8, !tbaa !5
  %706 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %705, i32 0, i32 2
  %707 = load i32, ptr %706, align 4, !tbaa !75
  %708 = add i32 %707, 2
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(24) %704, i32 noundef %708)
  %709 = getelementptr inbounds %"class.spirv_cross::TypedID.109", ptr %47, i32 0, i32 0
  %710 = load i32, ptr %709, align 4
  invoke void @_ZN11spirv_cross8ParsedIR15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %700, i32 %710, i32 noundef %702, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %711 unwind label %712

711:                                              ; preds = %693
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %2707

712:                                              ; preds = %693
  %713 = landingpad { ptr, i32 }
          cleanup
  %714 = extractvalue { ptr, i32 } %713, 0
  store ptr %714, ptr %10, align 8
  %715 = extractvalue { ptr, i32 } %713, 1
  store i32 %715, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %2711

716:                                              ; preds = %275
  br label %2707

717:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  %718 = load ptr, ptr %5, align 8, !tbaa !5
  %719 = getelementptr inbounds i32, ptr %718, i64 0
  %720 = load i32, ptr %719, align 4, !tbaa !16
  store i32 %720, ptr %49, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  %721 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %722 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %721, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %723 = load i32, ptr %49, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %51, i32 noundef %723)
  %724 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %722, ptr noundef nonnull align 4 dereferenceable(4) %51)
  %725 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %724, i32 0, i32 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  store ptr %725, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %726 = load ptr, ptr %50, align 8, !tbaa !5
  %727 = getelementptr inbounds %"struct.spirv_cross::Meta::Decoration", ptr %726, i32 0, i32 4
  store ptr %727, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  store i32 1, ptr %53, align 4, !tbaa !16
  br label %728

728:                                              ; preds = %743, %717
  %729 = load i32, ptr %53, align 4, !tbaa !16
  %730 = load i32, ptr %7, align 4, !tbaa !16
  %731 = icmp ult i32 %729, %730
  br i1 %731, label %733, label %732

732:                                              ; preds = %728
  store i32 8, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %746

733:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  %734 = load ptr, ptr %5, align 8, !tbaa !5
  %735 = load i32, ptr %53, align 4, !tbaa !16
  %736 = zext i32 %735 to i64
  %737 = getelementptr inbounds i32, ptr %734, i64 %736
  %738 = load i32, ptr %737, align 4, !tbaa !16
  store i32 %738, ptr %54, align 4, !tbaa !16
  %739 = load ptr, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %55) #8
  %740 = getelementptr inbounds %class.anon.173, ptr %55, i32 0, i32 0
  store ptr %250, ptr %740, align 8, !tbaa !109
  %741 = getelementptr inbounds %class.anon.173, ptr %55, i32 0, i32 1
  store ptr %54, ptr %741, align 8, !tbaa !5
  %742 = getelementptr inbounds %class.anon.173, ptr %55, i32 0, i32 2
  store ptr %49, ptr %742, align 8, !tbaa !5
  call void @"_ZNK11spirv_cross6Bitset12for_each_bitIZNS_6Parser5parseERKNS_11InstructionEE3$_0EEvRKT_"(ptr noundef nonnull align 8 dereferenceable(64) %739, ptr noundef nonnull align 8 dereferenceable(24) %55)
  call void @llvm.lifetime.end.p0(i64 24, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  br label %743

743:                                              ; preds = %733
  %744 = load i32, ptr %53, align 4, !tbaa !16
  %745 = add i32 %744, 1
  store i32 %745, ptr %53, align 4, !tbaa !16
  br label %728, !llvm.loop !111

746:                                              ; preds = %732
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  br label %2707

747:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #8
  %748 = load ptr, ptr %5, align 8, !tbaa !5
  %749 = getelementptr inbounds i32, ptr %748, i64 0
  %750 = load i32, ptr %749, align 4, !tbaa !16
  store i32 %750, ptr %56, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %751 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %752 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %751, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %753 = load i32, ptr %56, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %58, i32 noundef %753)
  %754 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %752, ptr noundef nonnull align 4 dereferenceable(4) %58)
  %755 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %754, i32 0, i32 0
  %756 = getelementptr inbounds %"struct.spirv_cross::Meta::Decoration", ptr %755, i32 0, i32 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  store ptr %756, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #8
  store i32 1, ptr %59, align 4, !tbaa !16
  br label %757

757:                                              ; preds = %781, %747
  %758 = load i32, ptr %59, align 4, !tbaa !16
  %759 = add i32 %758, 1
  %760 = load i32, ptr %7, align 4, !tbaa !16
  %761 = icmp ult i32 %759, %760
  br i1 %761, label %763, label %762

762:                                              ; preds = %757
  store i32 11, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #8
  br label %784

763:                                              ; preds = %757
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #8
  %764 = load ptr, ptr %5, align 8, !tbaa !5
  %765 = load i32, ptr %59, align 4, !tbaa !16
  %766 = add i32 %765, 0
  %767 = zext i32 %766 to i64
  %768 = getelementptr inbounds i32, ptr %764, i64 %767
  %769 = load i32, ptr %768, align 4, !tbaa !16
  store i32 %769, ptr %60, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #8
  %770 = load ptr, ptr %5, align 8, !tbaa !5
  %771 = load i32, ptr %59, align 4, !tbaa !16
  %772 = add i32 %771, 1
  %773 = zext i32 %772 to i64
  %774 = getelementptr inbounds i32, ptr %770, i64 %773
  %775 = load i32, ptr %774, align 4, !tbaa !16
  store i32 %775, ptr %61, align 4, !tbaa !16
  %776 = load ptr, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #8
  %777 = getelementptr inbounds %class.anon.174, ptr %62, i32 0, i32 0
  store ptr %250, ptr %777, align 8, !tbaa !112
  %778 = getelementptr inbounds %class.anon.174, ptr %62, i32 0, i32 1
  store ptr %60, ptr %778, align 8, !tbaa !5
  %779 = getelementptr inbounds %class.anon.174, ptr %62, i32 0, i32 2
  store ptr %61, ptr %779, align 8, !tbaa !5
  %780 = getelementptr inbounds %class.anon.174, ptr %62, i32 0, i32 3
  store ptr %56, ptr %780, align 8, !tbaa !5
  call void @"_ZNK11spirv_cross6Bitset12for_each_bitIZNS_6Parser5parseERKNS_11InstructionEE3$_1EEvRKT_"(ptr noundef nonnull align 8 dereferenceable(64) %776, ptr noundef nonnull align 8 dereferenceable(32) %62)
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #8
  br label %781

781:                                              ; preds = %763
  %782 = load i32, ptr %59, align 4, !tbaa !16
  %783 = add i32 %782, 2
  store i32 %783, ptr %59, align 4, !tbaa !16
  br label %757, !llvm.loop !114

784:                                              ; preds = %762
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #8
  br label %2707

785:                                              ; preds = %275, %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  %786 = load ptr, ptr %5, align 8, !tbaa !5
  %787 = getelementptr inbounds i32, ptr %786, i64 0
  %788 = load i32, ptr %787, align 4, !tbaa !16
  store i32 %788, ptr %63, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  %789 = load ptr, ptr %5, align 8, !tbaa !5
  %790 = getelementptr inbounds i32, ptr %789, i64 1
  %791 = load i32, ptr %790, align 4, !tbaa !16
  store i32 %791, ptr %64, align 4, !tbaa !115
  %792 = load i32, ptr %7, align 4, !tbaa !16
  %793 = icmp uge i32 %792, 3
  br i1 %793, label %794, label %820

794:                                              ; preds = %785
  %795 = load ptr, ptr %5, align 8, !tbaa !5
  %796 = getelementptr inbounds i32, ptr %795, i64 2
  %797 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %798 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %797, i32 0, i32 1
  %799 = call noundef ptr @_ZNSt6vectorIjSaIjEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %798) #8
  %800 = ptrtoint ptr %796 to i64
  %801 = ptrtoint ptr %799 to i64
  %802 = sub i64 %800, %801
  %803 = sdiv exact i64 %802, 4
  %804 = trunc i64 %803 to i32
  %805 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %806 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %805, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  %807 = load i32, ptr %63, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %65, i32 noundef %807)
  %808 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %806, ptr noundef nonnull align 4 dereferenceable(4) %65)
  %809 = getelementptr inbounds %"struct.spirv_cross::Meta", ptr %808, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  %810 = load i32, ptr %64, align 4, !tbaa !115
  store i32 %810, ptr %66, align 4, !tbaa !16
  %811 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %809, ptr noundef nonnull align 4 dereferenceable(4) %66)
  store i32 %804, ptr %811, align 4, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  %812 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %813 = load i32, ptr %63, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %67, i32 noundef %813)
  %814 = load i32, ptr %64, align 4, !tbaa !115
  %815 = load ptr, ptr %5, align 8, !tbaa !5
  %816 = getelementptr inbounds i32, ptr %815, i64 2
  %817 = load i32, ptr %816, align 4, !tbaa !16
  %818 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %67, i32 0, i32 0
  %819 = load i32, ptr %818, align 4
  call void @_ZN11spirv_cross8ParsedIR14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920) %812, i32 %819, i32 noundef %814, i32 noundef %817)
  br label %826

820:                                              ; preds = %785
  %821 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %822 = load i32, ptr %63, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %68, i32 noundef %822)
  %823 = load i32, ptr %64, align 4, !tbaa !115
  %824 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %68, i32 0, i32 0
  %825 = load i32, ptr %824, align 4
  call void @_ZN11spirv_cross8ParsedIR14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920) %821, i32 %825, i32 noundef %823, i32 noundef 0)
  br label %826

826:                                              ; preds = %820, %794
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  br label %2707

827:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  %828 = load ptr, ptr %5, align 8, !tbaa !5
  %829 = getelementptr inbounds i32, ptr %828, i64 0
  %830 = load i32, ptr %829, align 4, !tbaa !16
  store i32 %830, ptr %69, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #8
  %831 = load ptr, ptr %5, align 8, !tbaa !5
  %832 = getelementptr inbounds i32, ptr %831, i64 1
  %833 = load i32, ptr %832, align 4, !tbaa !16
  store i32 %833, ptr %70, align 4, !tbaa !115
  %834 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %835 = load i32, ptr %69, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %71, i32 noundef %835)
  %836 = load i32, ptr %70, align 4, !tbaa !115
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #8
  %837 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %838 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %837, i32 0, i32 1
  %839 = load ptr, ptr %4, align 8, !tbaa !5
  %840 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %839, i32 0, i32 2
  %841 = load i32, ptr %840, align 4, !tbaa !75
  %842 = add i32 %841, 2
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(24) %838, i32 noundef %842)
  %843 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %71, i32 0, i32 0
  %844 = load i32, ptr %843, align 4
  invoke void @_ZN11spirv_cross8ParsedIR21set_decoration_stringENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %834, i32 %844, i32 noundef %836, ptr noundef nonnull align 8 dereferenceable(32) %72)
          to label %845 unwind label %846

845:                                              ; preds = %827
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  br label %2707

846:                                              ; preds = %827
  %847 = landingpad { ptr, i32 }
          cleanup
  %848 = extractvalue { ptr, i32 } %847, 0
  store ptr %848, ptr %10, align 8
  %849 = extractvalue { ptr, i32 } %847, 1
  store i32 %849, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  br label %2711

850:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #8
  %851 = load ptr, ptr %5, align 8, !tbaa !5
  %852 = getelementptr inbounds i32, ptr %851, i64 0
  %853 = load i32, ptr %852, align 4, !tbaa !16
  store i32 %853, ptr %73, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #8
  %854 = load ptr, ptr %5, align 8, !tbaa !5
  %855 = getelementptr inbounds i32, ptr %854, i64 1
  %856 = load i32, ptr %855, align 4, !tbaa !16
  store i32 %856, ptr %74, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  %857 = load ptr, ptr %5, align 8, !tbaa !5
  %858 = getelementptr inbounds i32, ptr %857, i64 2
  %859 = load i32, ptr %858, align 4, !tbaa !16
  store i32 %859, ptr %75, align 4, !tbaa !115
  %860 = load i32, ptr %7, align 4, !tbaa !16
  %861 = icmp uge i32 %860, 4
  br i1 %861, label %862, label %872

862:                                              ; preds = %850
  %863 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %864 = load i32, ptr %73, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %76, i32 noundef %864)
  %865 = load i32, ptr %74, align 4, !tbaa !16
  %866 = load i32, ptr %75, align 4, !tbaa !115
  %867 = load ptr, ptr %5, align 8, !tbaa !5
  %868 = getelementptr inbounds i32, ptr %867, i64 3
  %869 = load i32, ptr %868, align 4, !tbaa !16
  %870 = getelementptr inbounds %"class.spirv_cross::TypedID.109", ptr %76, i32 0, i32 0
  %871 = load i32, ptr %870, align 4
  call void @_ZN11spirv_cross8ParsedIR21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920) %863, i32 %871, i32 noundef %865, i32 noundef %866, i32 noundef %869)
  br label %879

872:                                              ; preds = %850
  %873 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %874 = load i32, ptr %73, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %77, i32 noundef %874)
  %875 = load i32, ptr %74, align 4, !tbaa !16
  %876 = load i32, ptr %75, align 4, !tbaa !115
  %877 = getelementptr inbounds %"class.spirv_cross::TypedID.109", ptr %77, i32 0, i32 0
  %878 = load i32, ptr %877, align 4
  call void @_ZN11spirv_cross8ParsedIR21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920) %873, i32 %878, i32 noundef %875, i32 noundef %876, i32 noundef 0)
  br label %879

879:                                              ; preds = %872, %862
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  br label %2707

880:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #8
  %881 = load ptr, ptr %5, align 8, !tbaa !5
  %882 = getelementptr inbounds i32, ptr %881, i64 0
  %883 = load i32, ptr %882, align 4, !tbaa !16
  store i32 %883, ptr %78, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #8
  %884 = load ptr, ptr %5, align 8, !tbaa !5
  %885 = getelementptr inbounds i32, ptr %884, i64 1
  %886 = load i32, ptr %885, align 4, !tbaa !16
  store i32 %886, ptr %79, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #8
  %887 = load ptr, ptr %5, align 8, !tbaa !5
  %888 = getelementptr inbounds i32, ptr %887, i64 2
  %889 = load i32, ptr %888, align 4, !tbaa !16
  store i32 %889, ptr %80, align 4, !tbaa !115
  %890 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %891 = load i32, ptr %78, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %81, i32 noundef %891)
  %892 = load i32, ptr %79, align 4, !tbaa !16
  %893 = load i32, ptr %80, align 4, !tbaa !115
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #8
  %894 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %895 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %894, i32 0, i32 1
  %896 = load ptr, ptr %4, align 8, !tbaa !5
  %897 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %896, i32 0, i32 2
  %898 = load i32, ptr %897, align 4, !tbaa !75
  %899 = add i32 %898, 3
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(24) %895, i32 noundef %899)
  %900 = getelementptr inbounds %"class.spirv_cross::TypedID.109", ptr %81, i32 0, i32 0
  %901 = load i32, ptr %900, align 4
  invoke void @_ZN11spirv_cross8ParsedIR28set_member_decoration_stringENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %890, i32 %901, i32 noundef %892, i32 noundef %893, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %902 unwind label %903

902:                                              ; preds = %880
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  br label %2707

903:                                              ; preds = %880
  %904 = landingpad { ptr, i32 }
          cleanup
  %905 = extractvalue { ptr, i32 } %904, 0
  store ptr %905, ptr %10, align 8
  %906 = extractvalue { ptr, i32 } %904, 1
  store i32 %906, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  br label %2711

907:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  %908 = load ptr, ptr %5, align 8, !tbaa !5
  %909 = getelementptr inbounds i32, ptr %908, i64 0
  %910 = load i32, ptr %909, align 4, !tbaa !16
  store i32 %910, ptr %83, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #8
  %911 = load i32, ptr %83, align 4, !tbaa !16
  %912 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %911, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %912, ptr %84, align 8, !tbaa !5
  %913 = load ptr, ptr %84, align 8, !tbaa !5
  %914 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %913, i32 0, i32 2
  store i32 1, ptr %914, align 8, !tbaa !117
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  br label %2707

915:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  %916 = load ptr, ptr %5, align 8, !tbaa !5
  %917 = getelementptr inbounds i32, ptr %916, i64 0
  %918 = load i32, ptr %917, align 4, !tbaa !16
  store i32 %918, ptr %85, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #8
  %919 = load i32, ptr %85, align 4, !tbaa !16
  %920 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %919, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %920, ptr %86, align 8, !tbaa !5
  %921 = load ptr, ptr %86, align 8, !tbaa !5
  %922 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %921, i32 0, i32 2
  store i32 2, ptr %922, align 8, !tbaa !117
  %923 = load ptr, ptr %86, align 8, !tbaa !5
  %924 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %923, i32 0, i32 3
  store i32 1, ptr %924, align 4, !tbaa !136
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  br label %2707

925:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #8
  %926 = load ptr, ptr %5, align 8, !tbaa !5
  %927 = getelementptr inbounds i32, ptr %926, i64 0
  %928 = load i32, ptr %927, align 4, !tbaa !16
  store i32 %928, ptr %87, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #8
  %929 = load ptr, ptr %5, align 8, !tbaa !5
  %930 = getelementptr inbounds i32, ptr %929, i64 1
  %931 = load i32, ptr %930, align 4, !tbaa !16
  store i32 %931, ptr %88, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #8
  %932 = load i32, ptr %87, align 4, !tbaa !16
  %933 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %932, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %933, ptr %89, align 8, !tbaa !5
  %934 = load i32, ptr %88, align 4, !tbaa !16
  %935 = icmp eq i32 %934, 64
  br i1 %935, label %936, label %939

936:                                              ; preds = %925
  %937 = load ptr, ptr %89, align 8, !tbaa !5
  %938 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %937, i32 0, i32 2
  store i32 14, ptr %938, align 8, !tbaa !117
  br label %960

939:                                              ; preds = %925
  %940 = load i32, ptr %88, align 4, !tbaa !16
  %941 = icmp eq i32 %940, 32
  br i1 %941, label %942, label %945

942:                                              ; preds = %939
  %943 = load ptr, ptr %89, align 8, !tbaa !5
  %944 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %943, i32 0, i32 2
  store i32 13, ptr %944, align 8, !tbaa !117
  br label %959

945:                                              ; preds = %939
  %946 = load i32, ptr %88, align 4, !tbaa !16
  %947 = icmp eq i32 %946, 16
  br i1 %947, label %948, label %951

948:                                              ; preds = %945
  %949 = load ptr, ptr %89, align 8, !tbaa !5
  %950 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %949, i32 0, i32 2
  store i32 12, ptr %950, align 8, !tbaa !117
  br label %958

951:                                              ; preds = %945
  %952 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %952, ptr noundef @.str.19)
          to label %953 unwind label %954

953:                                              ; preds = %951
  call void @__cxa_throw(ptr %952, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

954:                                              ; preds = %951
  %955 = landingpad { ptr, i32 }
          cleanup
  %956 = extractvalue { ptr, i32 } %955, 0
  store ptr %956, ptr %10, align 8
  %957 = extractvalue { ptr, i32 } %955, 1
  store i32 %957, ptr %11, align 4
  call void @__cxa_free_exception(ptr %952) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #8
  br label %2711

958:                                              ; preds = %948
  br label %959

959:                                              ; preds = %958, %942
  br label %960

960:                                              ; preds = %959, %936
  %961 = load i32, ptr %88, align 4, !tbaa !16
  %962 = load ptr, ptr %89, align 8, !tbaa !5
  %963 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %962, i32 0, i32 3
  store i32 %961, ptr %963, align 4, !tbaa !136
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #8
  br label %2707

964:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #8
  %965 = load ptr, ptr %5, align 8, !tbaa !5
  %966 = getelementptr inbounds i32, ptr %965, i64 0
  %967 = load i32, ptr %966, align 4, !tbaa !16
  store i32 %967, ptr %90, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #8
  %968 = load ptr, ptr %5, align 8, !tbaa !5
  %969 = getelementptr inbounds i32, ptr %968, i64 1
  %970 = load i32, ptr %969, align 4, !tbaa !16
  store i32 %970, ptr %91, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %92) #8
  %971 = load ptr, ptr %5, align 8, !tbaa !5
  %972 = getelementptr inbounds i32, ptr %971, i64 2
  %973 = load i32, ptr %972, align 4, !tbaa !16
  %974 = icmp ne i32 %973, 0
  %975 = zext i1 %974 to i8
  store i8 %975, ptr %92, align 1, !tbaa !137
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  %976 = load i32, ptr %90, align 4, !tbaa !16
  %977 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %976, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %977, ptr %93, align 8, !tbaa !5
  %978 = load i8, ptr %92, align 1, !tbaa !137, !range !73, !noundef !74
  %979 = trunc i8 %978 to i1
  br i1 %979, label %980, label %983

980:                                              ; preds = %964
  %981 = load i32, ptr %91, align 4, !tbaa !16
  %982 = call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %981)
  br label %986

983:                                              ; preds = %964
  %984 = load i32, ptr %91, align 4, !tbaa !16
  %985 = call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %984)
  br label %986

986:                                              ; preds = %983, %980
  %987 = phi i32 [ %982, %980 ], [ %985, %983 ]
  %988 = load ptr, ptr %93, align 8, !tbaa !5
  %989 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %988, i32 0, i32 2
  store i32 %987, ptr %989, align 8, !tbaa !117
  %990 = load i32, ptr %91, align 4, !tbaa !16
  %991 = load ptr, ptr %93, align 8, !tbaa !5
  %992 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %991, i32 0, i32 3
  store i32 %990, ptr %992, align 4, !tbaa !136
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #8
  br label %2707

993:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #8
  %994 = load ptr, ptr %5, align 8, !tbaa !5
  %995 = getelementptr inbounds i32, ptr %994, i64 0
  %996 = load i32, ptr %995, align 4, !tbaa !16
  store i32 %996, ptr %94, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #8
  %997 = load ptr, ptr %5, align 8, !tbaa !5
  %998 = getelementptr inbounds i32, ptr %997, i64 2
  %999 = load i32, ptr %998, align 4, !tbaa !16
  store i32 %999, ptr %95, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #8
  %1000 = load ptr, ptr %5, align 8, !tbaa !5
  %1001 = getelementptr inbounds i32, ptr %1000, i64 1
  %1002 = load i32, ptr %1001, align 4, !tbaa !16
  %1003 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1002)
  store ptr %1003, ptr %96, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #8
  %1004 = load i32, ptr %94, align 4, !tbaa !16
  %1005 = load ptr, ptr %96, align 8, !tbaa !5
  %1006 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1004, ptr noundef nonnull align 8 dereferenceable(336) %1005)
  store ptr %1006, ptr %97, align 8, !tbaa !5
  %1007 = load i32, ptr %6, align 4, !tbaa !13
  %1008 = load ptr, ptr %97, align 8, !tbaa !5
  %1009 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1008, i32 0, i32 1
  store i32 %1007, ptr %1009, align 4, !tbaa !138
  %1010 = load i32, ptr %95, align 4, !tbaa !16
  %1011 = load ptr, ptr %97, align 8, !tbaa !5
  %1012 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1011, i32 0, i32 4
  store i32 %1010, ptr %1012, align 8, !tbaa !139
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #8
  %1013 = load i32, ptr %94, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %98, i32 noundef %1013)
  %1014 = load ptr, ptr %97, align 8, !tbaa !5
  %1015 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1014, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1015, ptr align 4 %98, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #8
  %1016 = load ptr, ptr %5, align 8, !tbaa !5
  %1017 = getelementptr inbounds i32, ptr %1016, i64 1
  %1018 = load i32, ptr %1017, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %99, i32 noundef %1018)
  %1019 = load ptr, ptr %97, align 8, !tbaa !5
  %1020 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1019, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1020, ptr align 4 %99, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #8
  br label %2707

1021:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #8
  %1022 = load ptr, ptr %5, align 8, !tbaa !5
  %1023 = getelementptr inbounds i32, ptr %1022, i64 0
  %1024 = load i32, ptr %1023, align 4, !tbaa !16
  store i32 %1024, ptr %100, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #8
  %1025 = load ptr, ptr %5, align 8, !tbaa !5
  %1026 = getelementptr inbounds i32, ptr %1025, i64 2
  %1027 = load i32, ptr %1026, align 4, !tbaa !16
  store i32 %1027, ptr %101, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #8
  %1028 = load ptr, ptr %5, align 8, !tbaa !5
  %1029 = getelementptr inbounds i32, ptr %1028, i64 1
  %1030 = load i32, ptr %1029, align 4, !tbaa !16
  %1031 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1030)
  store ptr %1031, ptr %102, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #8
  %1032 = load i32, ptr %100, align 4, !tbaa !16
  %1033 = load ptr, ptr %102, align 8, !tbaa !5
  %1034 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1032, ptr noundef nonnull align 8 dereferenceable(336) %1033)
  store ptr %1034, ptr %103, align 8, !tbaa !5
  %1035 = load i32, ptr %6, align 4, !tbaa !13
  %1036 = load ptr, ptr %103, align 8, !tbaa !5
  %1037 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1036, i32 0, i32 1
  store i32 %1035, ptr %1037, align 4, !tbaa !138
  %1038 = load i32, ptr %101, align 4, !tbaa !16
  %1039 = load ptr, ptr %103, align 8, !tbaa !5
  %1040 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1039, i32 0, i32 5
  store i32 %1038, ptr %1040, align 4, !tbaa !140
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #8
  %1041 = load i32, ptr %100, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %104, i32 noundef %1041)
  %1042 = load ptr, ptr %103, align 8, !tbaa !5
  %1043 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1042, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1043, ptr align 4 %104, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #8
  %1044 = load ptr, ptr %5, align 8, !tbaa !5
  %1045 = getelementptr inbounds i32, ptr %1044, i64 1
  %1046 = load i32, ptr %1045, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %105, i32 noundef %1046)
  %1047 = load ptr, ptr %103, align 8, !tbaa !5
  %1048 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1047, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1048, ptr align 4 %105, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #8
  br label %2707

1049:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #8
  %1050 = load ptr, ptr %5, align 8, !tbaa !5
  %1051 = getelementptr inbounds i32, ptr %1050, i64 0
  %1052 = load i32, ptr %1051, align 4, !tbaa !16
  store i32 %1052, ptr %106, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #8
  %1053 = load ptr, ptr %5, align 8, !tbaa !5
  %1054 = getelementptr inbounds i32, ptr %1053, i64 1
  %1055 = load i32, ptr %1054, align 4, !tbaa !16
  store i32 %1055, ptr %107, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #8
  %1056 = load i32, ptr %107, align 4, !tbaa !16
  %1057 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1056)
  store ptr %1057, ptr %108, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #8
  %1058 = load i32, ptr %106, align 4, !tbaa !16
  %1059 = load ptr, ptr %108, align 8, !tbaa !5
  %1060 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1058, ptr noundef nonnull align 8 dereferenceable(336) %1059)
  store ptr %1060, ptr %109, align 8, !tbaa !5
  %1061 = load i32, ptr %6, align 4, !tbaa !13
  %1062 = load ptr, ptr %109, align 8, !tbaa !5
  %1063 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1062, i32 0, i32 1
  store i32 %1061, ptr %1063, align 4, !tbaa !138
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #8
  %1064 = load i32, ptr %107, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %110, i32 noundef %1064)
  %1065 = load ptr, ptr %109, align 8, !tbaa !5
  %1066 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1065, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1066, ptr align 4 %110, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #8
  %1067 = load ptr, ptr %5, align 8, !tbaa !5
  %1068 = getelementptr inbounds i32, ptr %1067, i64 2
  %1069 = load i32, ptr %1068, align 4, !tbaa !16
  store i32 %1069, ptr %111, align 4, !tbaa !16
  %1070 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %1071 = load i32, ptr %111, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %112, i32 noundef %1071)
  %1072 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %112, i32 0, i32 0
  %1073 = load i32, ptr %1072, align 4
  call void @_ZN11spirv_cross8ParsedIR25mark_used_as_array_lengthENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %1070, i32 %1073)
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #8
  %1074 = load i32, ptr %111, align 4, !tbaa !16
  %1075 = call noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1074)
  store ptr %1075, ptr %113, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %114) #8
  %1076 = load ptr, ptr %113, align 8, !tbaa !5
  %1077 = icmp ne ptr %1076, null
  br i1 %1077, label %1078, label %1084

1078:                                             ; preds = %1049
  %1079 = load ptr, ptr %113, align 8, !tbaa !5
  %1080 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1079, i32 0, i32 3
  %1081 = load i8, ptr %1080, align 8, !tbaa !141, !range !73, !noundef !74
  %1082 = trunc i8 %1081 to i1
  %1083 = xor i1 %1082, true
  br label %1084

1084:                                             ; preds = %1078, %1049
  %1085 = phi i1 [ false, %1049 ], [ %1083, %1078 ]
  %1086 = zext i1 %1085 to i8
  store i8 %1086, ptr %114, align 1, !tbaa !137
  %1087 = load ptr, ptr %108, align 8, !tbaa !5
  %1088 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1087, i32 0, i32 10
  %1089 = load i8, ptr %1088, align 1, !tbaa !147, !range !73, !noundef !74
  %1090 = trunc i8 %1089 to i1
  br i1 %1090, label %1091, label %1093

1091:                                             ; preds = %1084
  %1092 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #8
  call void @_ZNSt4pairIjjEC2IRjS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %115, ptr noundef nonnull align 4 dereferenceable(4) %106, ptr noundef nonnull align 4 dereferenceable(4) %107)
  call void @_ZN11spirv_cross11SmallVectorISt4pairIjjELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(88) %1092, ptr noundef nonnull align 4 dereferenceable(8) %115) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #8
  br label %1093

1093:                                             ; preds = %1091, %1084
  %1094 = load ptr, ptr %109, align 8, !tbaa !5
  %1095 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1094, i32 0, i32 7
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backERKb(ptr noundef nonnull align 8 dereferenceable(32) %1095, ptr noundef nonnull align 1 dereferenceable(1) %114) #8
  %1096 = load ptr, ptr %109, align 8, !tbaa !5
  %1097 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1096, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #8
  %1098 = load i8, ptr %114, align 1, !tbaa !137, !range !73, !noundef !74
  %1099 = trunc i8 %1098 to i1
  br i1 %1099, label %1100, label %1103

1100:                                             ; preds = %1093
  %1101 = load ptr, ptr %113, align 8, !tbaa !5
  %1102 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %1101, i32 noundef 0, i32 noundef 0)
  br label %1105

1103:                                             ; preds = %1093
  %1104 = load i32, ptr %111, align 4, !tbaa !16
  br label %1105

1105:                                             ; preds = %1103, %1100
  %1106 = phi i32 [ %1102, %1100 ], [ %1104, %1103 ]
  store i32 %1106, ptr %116, align 4, !tbaa !16
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %1097, ptr noundef nonnull align 4 dereferenceable(4) %116) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #8
  %1107 = load ptr, ptr %108, align 8, !tbaa !5
  %1108 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1107, i32 0, i32 1
  %1109 = load ptr, ptr %109, align 8, !tbaa !5
  %1110 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1109, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1110, ptr align 8 %1108, i64 4, i1 false), !tbaa.struct !91
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #8
  br label %2707

1111:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %117) #8
  %1112 = load ptr, ptr %5, align 8, !tbaa !5
  %1113 = getelementptr inbounds i32, ptr %1112, i64 0
  %1114 = load i32, ptr %1113, align 4, !tbaa !16
  store i32 %1114, ptr %117, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #8
  %1115 = load ptr, ptr %5, align 8, !tbaa !5
  %1116 = getelementptr inbounds i32, ptr %1115, i64 1
  %1117 = load i32, ptr %1116, align 4, !tbaa !16
  %1118 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1117)
  store ptr %1118, ptr %118, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #8
  %1119 = load i32, ptr %117, align 4, !tbaa !16
  %1120 = load ptr, ptr %118, align 8, !tbaa !5
  %1121 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1119, ptr noundef nonnull align 8 dereferenceable(336) %1120)
  store ptr %1121, ptr %119, align 8, !tbaa !5
  %1122 = load ptr, ptr %118, align 8, !tbaa !5
  %1123 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1122, i32 0, i32 10
  %1124 = load i8, ptr %1123, align 1, !tbaa !147, !range !73, !noundef !74
  %1125 = trunc i8 %1124 to i1
  br i1 %1125, label %1126, label %1130

1126:                                             ; preds = %1111
  %1127 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #8
  %1128 = load ptr, ptr %5, align 8, !tbaa !5
  %1129 = getelementptr inbounds i32, ptr %1128, i64 1
  call void @_ZNSt4pairIjjEC2IRjRKjTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS6_S7_EEEbE4typeELb1EEEOS6_OS7_(ptr noundef nonnull align 4 dereferenceable(8) %120, ptr noundef nonnull align 4 dereferenceable(4) %117, ptr noundef nonnull align 4 dereferenceable(4) %1129)
  call void @_ZN11spirv_cross11SmallVectorISt4pairIjjELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(88) %1127, ptr noundef nonnull align 4 dereferenceable(8) %120) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #8
  br label %1130

1130:                                             ; preds = %1126, %1111
  %1131 = load i32, ptr %6, align 4, !tbaa !13
  %1132 = load ptr, ptr %119, align 8, !tbaa !5
  %1133 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1132, i32 0, i32 1
  store i32 %1131, ptr %1133, align 4, !tbaa !138
  %1134 = load ptr, ptr %119, align 8, !tbaa !5
  %1135 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1134, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %121) #8
  store i32 0, ptr %121, align 4, !tbaa !16
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %1135, ptr noundef nonnull align 4 dereferenceable(4) %121) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %121) #8
  %1136 = load ptr, ptr %119, align 8, !tbaa !5
  %1137 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1136, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 1, ptr %122) #8
  store i8 1, ptr %122, align 1, !tbaa !137
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %1137, ptr noundef nonnull align 1 dereferenceable(1) %122) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %122) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #8
  %1138 = load ptr, ptr %5, align 8, !tbaa !5
  %1139 = getelementptr inbounds i32, ptr %1138, i64 1
  %1140 = load i32, ptr %1139, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %123, i32 noundef %1140)
  %1141 = load ptr, ptr %119, align 8, !tbaa !5
  %1142 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1141, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1142, ptr align 4 %123, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #8
  %1143 = load ptr, ptr %118, align 8, !tbaa !5
  %1144 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1143, i32 0, i32 1
  %1145 = load ptr, ptr %119, align 8, !tbaa !5
  %1146 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1145, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1146, ptr align 8 %1144, i64 4, i1 false), !tbaa.struct !91
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %117) #8
  br label %2707

1147:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #8
  %1148 = load ptr, ptr %5, align 8, !tbaa !5
  %1149 = getelementptr inbounds i32, ptr %1148, i64 0
  %1150 = load i32, ptr %1149, align 4, !tbaa !16
  store i32 %1150, ptr %124, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #8
  %1151 = load i32, ptr %124, align 4, !tbaa !16
  %1152 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1151, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %1152, ptr %125, align 8, !tbaa !5
  %1153 = load ptr, ptr %125, align 8, !tbaa !5
  %1154 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1153, i32 0, i32 2
  store i32 16, ptr %1154, align 8, !tbaa !117
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #8
  %1155 = load ptr, ptr %5, align 8, !tbaa !5
  %1156 = getelementptr inbounds i32, ptr %1155, i64 1
  %1157 = load i32, ptr %1156, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %126, i32 noundef %1157)
  %1158 = load ptr, ptr %125, align 8, !tbaa !5
  %1159 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1158, i32 0, i32 14
  %1160 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1159, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1160, ptr align 4 %126, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #8
  %1161 = load ptr, ptr %5, align 8, !tbaa !5
  %1162 = getelementptr inbounds i32, ptr %1161, i64 2
  %1163 = load i32, ptr %1162, align 4, !tbaa !16
  %1164 = load ptr, ptr %125, align 8, !tbaa !5
  %1165 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1164, i32 0, i32 14
  %1166 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1165, i32 0, i32 1
  store i32 %1163, ptr %1166, align 4, !tbaa !148
  %1167 = load ptr, ptr %5, align 8, !tbaa !5
  %1168 = getelementptr inbounds i32, ptr %1167, i64 3
  %1169 = load i32, ptr %1168, align 4, !tbaa !16
  %1170 = icmp eq i32 %1169, 1
  %1171 = load ptr, ptr %125, align 8, !tbaa !5
  %1172 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1171, i32 0, i32 14
  %1173 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1172, i32 0, i32 2
  %1174 = zext i1 %1170 to i8
  store i8 %1174, ptr %1173, align 8, !tbaa !149
  %1175 = load ptr, ptr %5, align 8, !tbaa !5
  %1176 = getelementptr inbounds i32, ptr %1175, i64 4
  %1177 = load i32, ptr %1176, align 4, !tbaa !16
  %1178 = icmp ne i32 %1177, 0
  %1179 = load ptr, ptr %125, align 8, !tbaa !5
  %1180 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1179, i32 0, i32 14
  %1181 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1180, i32 0, i32 3
  %1182 = zext i1 %1178 to i8
  store i8 %1182, ptr %1181, align 1, !tbaa !150
  %1183 = load ptr, ptr %5, align 8, !tbaa !5
  %1184 = getelementptr inbounds i32, ptr %1183, i64 5
  %1185 = load i32, ptr %1184, align 4, !tbaa !16
  %1186 = icmp ne i32 %1185, 0
  %1187 = load ptr, ptr %125, align 8, !tbaa !5
  %1188 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1187, i32 0, i32 14
  %1189 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1188, i32 0, i32 4
  %1190 = zext i1 %1186 to i8
  store i8 %1190, ptr %1189, align 2, !tbaa !151
  %1191 = load ptr, ptr %5, align 8, !tbaa !5
  %1192 = getelementptr inbounds i32, ptr %1191, i64 6
  %1193 = load i32, ptr %1192, align 4, !tbaa !16
  %1194 = load ptr, ptr %125, align 8, !tbaa !5
  %1195 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1194, i32 0, i32 14
  %1196 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1195, i32 0, i32 5
  store i32 %1193, ptr %1196, align 4, !tbaa !152
  %1197 = load ptr, ptr %5, align 8, !tbaa !5
  %1198 = getelementptr inbounds i32, ptr %1197, i64 7
  %1199 = load i32, ptr %1198, align 4, !tbaa !16
  %1200 = load ptr, ptr %125, align 8, !tbaa !5
  %1201 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1200, i32 0, i32 14
  %1202 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1201, i32 0, i32 6
  store i32 %1199, ptr %1202, align 8, !tbaa !153
  %1203 = load i32, ptr %7, align 4, !tbaa !16
  %1204 = icmp uge i32 %1203, 9
  br i1 %1204, label %1205, label %1209

1205:                                             ; preds = %1147
  %1206 = load ptr, ptr %5, align 8, !tbaa !5
  %1207 = getelementptr inbounds i32, ptr %1206, i64 8
  %1208 = load i32, ptr %1207, align 4, !tbaa !16
  br label %1210

1209:                                             ; preds = %1147
  br label %1210

1210:                                             ; preds = %1209, %1205
  %1211 = phi i32 [ %1208, %1205 ], [ 2147483647, %1209 ]
  %1212 = load ptr, ptr %125, align 8, !tbaa !5
  %1213 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1212, i32 0, i32 14
  %1214 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %1213, i32 0, i32 7
  store i32 %1211, ptr %1214, align 4, !tbaa !154
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #8
  br label %2707

1215:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #8
  %1216 = load ptr, ptr %5, align 8, !tbaa !5
  %1217 = getelementptr inbounds i32, ptr %1216, i64 0
  %1218 = load i32, ptr %1217, align 4, !tbaa !16
  store i32 %1218, ptr %127, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %128) #8
  %1219 = load ptr, ptr %5, align 8, !tbaa !5
  %1220 = getelementptr inbounds i32, ptr %1219, i64 1
  %1221 = load i32, ptr %1220, align 4, !tbaa !16
  store i32 %1221, ptr %128, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #8
  %1222 = load i32, ptr %127, align 4, !tbaa !16
  %1223 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1222, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %1223, ptr %129, align 8, !tbaa !5
  %1224 = load i32, ptr %128, align 4, !tbaa !16
  %1225 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1224)
  %1226 = load ptr, ptr %129, align 8, !tbaa !5
  %1227 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %1226, ptr noundef nonnull align 8 dereferenceable(336) %1225)
  %1228 = load ptr, ptr %129, align 8, !tbaa !5
  %1229 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1228, i32 0, i32 2
  store i32 17, ptr %1229, align 8, !tbaa !117
  call void @llvm.lifetime.start.p0(i64 4, ptr %130) #8
  %1230 = load i32, ptr %127, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %130, i32 noundef %1230)
  %1231 = load ptr, ptr %129, align 8, !tbaa !5
  %1232 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1231, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1232, ptr align 4 %130, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #8
  br label %2707

1233:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %131) #8
  %1234 = load ptr, ptr %5, align 8, !tbaa !5
  %1235 = getelementptr inbounds i32, ptr %1234, i64 0
  %1236 = load i32, ptr %1235, align 4, !tbaa !16
  store i32 %1236, ptr %131, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #8
  %1237 = load i32, ptr %131, align 4, !tbaa !16
  %1238 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1237, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %1238, ptr %132, align 8, !tbaa !5
  %1239 = load ptr, ptr %132, align 8, !tbaa !5
  %1240 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1239, i32 0, i32 2
  store i32 18, ptr %1240, align 8, !tbaa !117
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %131) #8
  br label %2707

1241:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %133) #8
  %1242 = load ptr, ptr %5, align 8, !tbaa !5
  %1243 = getelementptr inbounds i32, ptr %1242, i64 0
  %1244 = load i32, ptr %1243, align 4, !tbaa !16
  store i32 %1244, ptr %133, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #8
  %1245 = load ptr, ptr %5, align 8, !tbaa !5
  %1246 = getelementptr inbounds i32, ptr %1245, i64 2
  %1247 = load i32, ptr %1246, align 4, !tbaa !16
  %1248 = call noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_8SPIRTypeEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1247)
  store ptr %1248, ptr %134, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #8
  %1249 = load i32, ptr %133, align 4, !tbaa !16
  %1250 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1249, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %1250, ptr %135, align 8, !tbaa !5
  %1251 = load ptr, ptr %134, align 8, !tbaa !5
  %1252 = icmp ne ptr %1251, null
  br i1 %1252, label %1253, label %1260

1253:                                             ; preds = %1241
  %1254 = load ptr, ptr %134, align 8, !tbaa !5
  %1255 = load ptr, ptr %135, align 8, !tbaa !5
  %1256 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %1255, ptr noundef nonnull align 8 dereferenceable(336) %1254)
  %1257 = load i32, ptr %6, align 4, !tbaa !13
  %1258 = load ptr, ptr %135, align 8, !tbaa !5
  %1259 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1258, i32 0, i32 1
  store i32 %1257, ptr %1259, align 4, !tbaa !138
  br label %1260

1260:                                             ; preds = %1253, %1241
  %1261 = load ptr, ptr %135, align 8, !tbaa !5
  %1262 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1261, i32 0, i32 9
  store i8 1, ptr %1262, align 4, !tbaa !155
  %1263 = load ptr, ptr %135, align 8, !tbaa !5
  %1264 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1263, i32 0, i32 8
  %1265 = load i32, ptr %1264, align 8, !tbaa !156
  %1266 = add i32 %1265, 1
  store i32 %1266, ptr %1264, align 8, !tbaa !156
  %1267 = load ptr, ptr %5, align 8, !tbaa !5
  %1268 = getelementptr inbounds i32, ptr %1267, i64 1
  %1269 = load i32, ptr %1268, align 4, !tbaa !16
  %1270 = load ptr, ptr %135, align 8, !tbaa !5
  %1271 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1270, i32 0, i32 11
  store i32 %1269, ptr %1271, align 8, !tbaa !157
  %1272 = load ptr, ptr %135, align 8, !tbaa !5
  %1273 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1272, i32 0, i32 11
  %1274 = load i32, ptr %1273, align 8, !tbaa !157
  %1275 = icmp eq i32 %1274, 10
  br i1 %1275, label %1276, label %1279

1276:                                             ; preds = %1260
  %1277 = load ptr, ptr %135, align 8, !tbaa !5
  %1278 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1277, i32 0, i32 2
  store i32 11, ptr %1278, align 8, !tbaa !117
  br label %1279

1279:                                             ; preds = %1276, %1260
  %1280 = load ptr, ptr %134, align 8, !tbaa !5
  %1281 = icmp ne ptr %1280, null
  br i1 %1281, label %1282, label %1291

1282:                                             ; preds = %1279
  %1283 = load ptr, ptr %134, align 8, !tbaa !5
  %1284 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1283, i32 0, i32 10
  %1285 = load i8, ptr %1284, align 1, !tbaa !147, !range !73, !noundef !74
  %1286 = trunc i8 %1285 to i1
  br i1 %1286, label %1287, label %1291

1287:                                             ; preds = %1282
  %1288 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #8
  %1289 = load ptr, ptr %5, align 8, !tbaa !5
  %1290 = getelementptr inbounds i32, ptr %1289, i64 2
  call void @_ZNSt4pairIjjEC2IRjRKjTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS6_S7_EEEbE4typeELb1EEEOS6_OS7_(ptr noundef nonnull align 4 dereferenceable(8) %136, ptr noundef nonnull align 4 dereferenceable(4) %133, ptr noundef nonnull align 4 dereferenceable(4) %1290)
  call void @_ZN11spirv_cross11SmallVectorISt4pairIjjELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(88) %1288, ptr noundef nonnull align 4 dereferenceable(8) %136) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #8
  br label %1291

1291:                                             ; preds = %1287, %1282, %1279
  call void @llvm.lifetime.start.p0(i64 4, ptr %137) #8
  %1292 = load ptr, ptr %5, align 8, !tbaa !5
  %1293 = getelementptr inbounds i32, ptr %1292, i64 2
  %1294 = load i32, ptr %1293, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %137, i32 noundef %1294)
  %1295 = load ptr, ptr %135, align 8, !tbaa !5
  %1296 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1295, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1296, ptr align 4 %137, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %137) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #8
  br label %2707

1297:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %138) #8
  %1298 = load ptr, ptr %5, align 8, !tbaa !5
  %1299 = getelementptr inbounds i32, ptr %1298, i64 0
  %1300 = load i32, ptr %1299, align 4, !tbaa !16
  store i32 %1300, ptr %138, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #8
  %1301 = load i32, ptr %138, align 4, !tbaa !16
  %1302 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1301, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %1302, ptr %139, align 8, !tbaa !5
  %1303 = load ptr, ptr %139, align 8, !tbaa !5
  %1304 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1303, i32 0, i32 9
  store i8 1, ptr %1304, align 4, !tbaa !155
  %1305 = load ptr, ptr %139, align 8, !tbaa !5
  %1306 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1305, i32 0, i32 8
  %1307 = load i32, ptr %1306, align 8, !tbaa !156
  %1308 = add i32 %1307, 1
  store i32 %1308, ptr %1306, align 8, !tbaa !156
  %1309 = load ptr, ptr %5, align 8, !tbaa !5
  %1310 = getelementptr inbounds i32, ptr %1309, i64 1
  %1311 = load i32, ptr %1310, align 4, !tbaa !16
  %1312 = load ptr, ptr %139, align 8, !tbaa !5
  %1313 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1312, i32 0, i32 11
  store i32 %1311, ptr %1313, align 8, !tbaa !157
  %1314 = load ptr, ptr %139, align 8, !tbaa !5
  %1315 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1314, i32 0, i32 10
  store i8 1, ptr %1315, align 1, !tbaa !147
  %1316 = load ptr, ptr %139, align 8, !tbaa !5
  %1317 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1316, i32 0, i32 11
  %1318 = load i32, ptr %1317, align 8, !tbaa !157
  %1319 = icmp eq i32 %1318, 10
  br i1 %1319, label %1320, label %1323

1320:                                             ; preds = %1297
  %1321 = load ptr, ptr %139, align 8, !tbaa !5
  %1322 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1321, i32 0, i32 2
  store i32 11, ptr %1322, align 8, !tbaa !117
  br label %1323

1323:                                             ; preds = %1320, %1297
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %138) #8
  br label %2707

1324:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %140) #8
  %1325 = load ptr, ptr %5, align 8, !tbaa !5
  %1326 = getelementptr inbounds i32, ptr %1325, i64 0
  %1327 = load i32, ptr %1326, align 4, !tbaa !16
  store i32 %1327, ptr %140, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #8
  %1328 = load i32, ptr %140, align 4, !tbaa !16
  %1329 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1328, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %1329, ptr %141, align 8, !tbaa !5
  %1330 = load ptr, ptr %141, align 8, !tbaa !5
  %1331 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1330, i32 0, i32 2
  store i32 15, ptr %1331, align 8, !tbaa !117
  call void @llvm.lifetime.start.p0(i64 4, ptr %142) #8
  store i32 1, ptr %142, align 4, !tbaa !16
  br label %1332

1332:                                             ; preds = %1345, %1324
  %1333 = load i32, ptr %142, align 4, !tbaa !16
  %1334 = load i32, ptr %7, align 4, !tbaa !16
  %1335 = icmp ult i32 %1333, %1334
  br i1 %1335, label %1337, label %1336

1336:                                             ; preds = %1332
  store i32 14, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #8
  br label %1348

1337:                                             ; preds = %1332
  %1338 = load ptr, ptr %141, align 8, !tbaa !5
  %1339 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1338, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 4, ptr %143) #8
  %1340 = load ptr, ptr %5, align 8, !tbaa !5
  %1341 = load i32, ptr %142, align 4, !tbaa !16
  %1342 = zext i32 %1341 to i64
  %1343 = getelementptr inbounds i32, ptr %1340, i64 %1342
  %1344 = load i32, ptr %1343, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %143, i32 noundef %1344)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1339, ptr noundef nonnull align 4 dereferenceable(4) %143) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #8
  br label %1345

1345:                                             ; preds = %1337
  %1346 = load i32, ptr %142, align 4, !tbaa !16
  %1347 = add i32 %1346, 1
  store i32 %1347, ptr %142, align 4, !tbaa !16
  br label %1332, !llvm.loop !158

1348:                                             ; preds = %1336
  call void @llvm.lifetime.start.p0(i64 1, ptr %144) #8
  %1349 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %1350 = load ptr, ptr %141, align 8, !tbaa !5
  %1351 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1350, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %145, ptr align 8 %1351, i64 4, i1 false), !tbaa.struct !91
  %1352 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %145, i32 0, i32 0
  %1353 = load i32, ptr %1352, align 4
  %1354 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8ParsedIR8get_nameB5cxx11ENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %1349, i32 %1353)
  %1355 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %1354) #8
  %1356 = xor i1 %1355, true
  %1357 = zext i1 %1356 to i8
  store i8 %1357, ptr %144, align 1, !tbaa !137
  %1358 = load i8, ptr %144, align 1, !tbaa !137, !range !73, !noundef !74
  %1359 = trunc i8 %1358 to i1
  br i1 %1359, label %1360, label %1414

1360:                                             ; preds = %1348
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #8
  %1361 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 4
  store ptr %1361, ptr %146, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #8
  %1362 = load ptr, ptr %146, align 8, !tbaa !5
  %1363 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1362) #8
  store ptr %1363, ptr %147, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #8
  %1364 = load ptr, ptr %146, align 8, !tbaa !5
  %1365 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1364) #8
  store ptr %1365, ptr %148, align 8, !tbaa !5
  br label %1366

1366:                                             ; preds = %1401, %1360
  %1367 = load ptr, ptr %147, align 8, !tbaa !5
  %1368 = load ptr, ptr %148, align 8, !tbaa !5
  %1369 = icmp ne ptr %1367, %1368
  br i1 %1369, label %1371, label %1370

1370:                                             ; preds = %1366
  store i32 17, ptr %8, align 4
  br label %1404

1371:                                             ; preds = %1366
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #8
  %1372 = load ptr, ptr %147, align 8, !tbaa !5
  store ptr %1372, ptr %149, align 8, !tbaa !5
  %1373 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %1374 = load ptr, ptr %141, align 8, !tbaa !5
  %1375 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1374, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %150, ptr align 8 %1375, i64 4, i1 false), !tbaa.struct !91
  %1376 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %150, i32 0, i32 0
  %1377 = load i32, ptr %1376, align 4
  %1378 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8ParsedIR8get_nameB5cxx11ENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %1373, i32 %1377)
  %1379 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %1380 = load ptr, ptr %149, align 8, !tbaa !5
  %1381 = load i32, ptr %1380, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %151, i32 noundef %1381)
  %1382 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %151, i32 0, i32 0
  %1383 = load i32, ptr %1382, align 4
  %1384 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8ParsedIR8get_nameB5cxx11ENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %1379, i32 %1383)
  %1385 = call noundef zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(ptr noundef nonnull align 8 dereferenceable(32) %1378, ptr noundef nonnull align 8 dereferenceable(32) %1384) #8
  br i1 %1385, label %1386, label %1397

1386:                                             ; preds = %1371
  %1387 = load ptr, ptr %141, align 8, !tbaa !5
  %1388 = load ptr, ptr %149, align 8, !tbaa !5
  %1389 = load i32, ptr %1388, align 4, !tbaa !16
  %1390 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1389)
  %1391 = call noundef zeroext i1 @_ZNK11spirv_cross6Parser30types_are_logically_equivalentERKNS_8SPIRTypeES3_(ptr noundef nonnull align 8 dereferenceable(2088) %250, ptr noundef nonnull align 8 dereferenceable(336) %1387, ptr noundef nonnull align 8 dereferenceable(336) %1390)
  br i1 %1391, label %1392, label %1397

1392:                                             ; preds = %1386
  call void @llvm.lifetime.start.p0(i64 4, ptr %152) #8
  %1393 = load ptr, ptr %149, align 8, !tbaa !5
  %1394 = load i32, ptr %1393, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %152, i32 noundef %1394)
  %1395 = load ptr, ptr %141, align 8, !tbaa !5
  %1396 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1395, i32 0, i32 15
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1396, ptr align 4 %152, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %152) #8
  store i32 17, ptr %8, align 4
  br label %1398

1397:                                             ; preds = %1386, %1371
  store i32 0, ptr %8, align 4
  br label %1398

1398:                                             ; preds = %1397, %1392
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #8
  %1399 = load i32, ptr %8, align 4
  switch i32 %1399, label %1404 [
    i32 0, label %1400
  ]

1400:                                             ; preds = %1398
  br label %1401

1401:                                             ; preds = %1400
  %1402 = load ptr, ptr %147, align 8, !tbaa !5
  %1403 = getelementptr inbounds i32, ptr %1402, i32 1
  store ptr %1403, ptr %147, align 8, !tbaa !5
  br label %1366

1404:                                             ; preds = %1398, %1370
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #8
  br label %1405

1405:                                             ; preds = %1404
  %1406 = load ptr, ptr %141, align 8, !tbaa !5
  %1407 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1406, i32 0, i32 15
  %1408 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1407)
  call void @llvm.lifetime.start.p0(i64 4, ptr %153) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %153, i32 noundef 0)
  %1409 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %153)
  %1410 = icmp eq i32 %1408, %1409
  call void @llvm.lifetime.end.p0(i64 4, ptr %153) #8
  br i1 %1410, label %1411, label %1413

1411:                                             ; preds = %1405
  %1412 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 4
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %1412, ptr noundef nonnull align 4 dereferenceable(4) %140) #8
  br label %1413

1413:                                             ; preds = %1411, %1405
  br label %1414

1414:                                             ; preds = %1413, %1348
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %144) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %140) #8
  br label %2707

1415:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %154) #8
  %1416 = load ptr, ptr %5, align 8, !tbaa !5
  %1417 = getelementptr inbounds i32, ptr %1416, i64 0
  %1418 = load i32, ptr %1417, align 4, !tbaa !16
  store i32 %1418, ptr %154, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %155) #8
  %1419 = load ptr, ptr %5, align 8, !tbaa !5
  %1420 = getelementptr inbounds i32, ptr %1419, i64 1
  %1421 = load i32, ptr %1420, align 4, !tbaa !16
  store i32 %1421, ptr %155, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %156) #8
  %1422 = load i32, ptr %154, align 4, !tbaa !16
  %1423 = call noundef nonnull align 8 dereferenceable(72) ptr @_ZN11spirv_cross6Parser3setINS_21SPIRFunctionPrototypeEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1422, ptr noundef nonnull align 4 dereferenceable(4) %155)
  store ptr %1423, ptr %156, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %157) #8
  store i32 2, ptr %157, align 4, !tbaa !16
  br label %1424

1424:                                             ; preds = %1436, %1415
  %1425 = load i32, ptr %157, align 4, !tbaa !16
  %1426 = load i32, ptr %7, align 4, !tbaa !16
  %1427 = icmp ult i32 %1425, %1426
  br i1 %1427, label %1429, label %1428

1428:                                             ; preds = %1424
  store i32 19, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #8
  br label %1439

1429:                                             ; preds = %1424
  %1430 = load ptr, ptr %156, align 8, !tbaa !5
  %1431 = getelementptr inbounds %"struct.spirv_cross::SPIRFunctionPrototype", ptr %1430, i32 0, i32 2
  %1432 = load ptr, ptr %5, align 8, !tbaa !5
  %1433 = load i32, ptr %157, align 4, !tbaa !16
  %1434 = zext i32 %1433 to i64
  %1435 = getelementptr inbounds i32, ptr %1432, i64 %1434
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %1431, ptr noundef nonnull align 4 dereferenceable(4) %1435) #8
  br label %1436

1436:                                             ; preds = %1429
  %1437 = load i32, ptr %157, align 4, !tbaa !16
  %1438 = add i32 %1437, 1
  store i32 %1438, ptr %157, align 4, !tbaa !16
  br label %1424, !llvm.loop !159

1439:                                             ; preds = %1428
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #8
  br label %2707

1440:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %158) #8
  %1441 = load ptr, ptr %5, align 8, !tbaa !5
  %1442 = getelementptr inbounds i32, ptr %1441, i64 0
  %1443 = load i32, ptr %1442, align 4, !tbaa !16
  store i32 %1443, ptr %158, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #8
  %1444 = load i32, ptr %158, align 4, !tbaa !16
  %1445 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1444, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %1445, ptr %159, align 8, !tbaa !5
  %1446 = load ptr, ptr %159, align 8, !tbaa !5
  %1447 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1446, i32 0, i32 2
  store i32 19, ptr %1447, align 8, !tbaa !117
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %158) #8
  br label %2707

1448:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %160) #8
  %1449 = load ptr, ptr %5, align 8, !tbaa !5
  %1450 = getelementptr inbounds i32, ptr %1449, i64 0
  %1451 = load i32, ptr %1450, align 4, !tbaa !16
  store i32 %1451, ptr %160, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #8
  %1452 = load i32, ptr %160, align 4, !tbaa !16
  %1453 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1452, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store ptr %1453, ptr %161, align 8, !tbaa !5
  %1454 = load ptr, ptr %161, align 8, !tbaa !5
  %1455 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1454, i32 0, i32 2
  store i32 20, ptr %1455, align 8, !tbaa !117
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %160) #8
  br label %2707

1456:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %162) #8
  %1457 = load ptr, ptr %5, align 8, !tbaa !5
  %1458 = getelementptr inbounds i32, ptr %1457, i64 0
  %1459 = load i32, ptr %1458, align 4, !tbaa !16
  store i32 %1459, ptr %162, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %163) #8
  %1460 = load ptr, ptr %5, align 8, !tbaa !5
  %1461 = getelementptr inbounds i32, ptr %1460, i64 1
  %1462 = load i32, ptr %1461, align 4, !tbaa !16
  store i32 %1462, ptr %163, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %164) #8
  %1463 = load ptr, ptr %5, align 8, !tbaa !5
  %1464 = getelementptr inbounds i32, ptr %1463, i64 2
  %1465 = load i32, ptr %1464, align 4, !tbaa !16
  store i32 %1465, ptr %164, align 4, !tbaa !160
  call void @llvm.lifetime.start.p0(i64 4, ptr %165) #8
  %1466 = load i32, ptr %7, align 4, !tbaa !16
  %1467 = icmp eq i32 %1466, 4
  br i1 %1467, label %1468, label %1472

1468:                                             ; preds = %1456
  %1469 = load ptr, ptr %5, align 8, !tbaa !5
  %1470 = getelementptr inbounds i32, ptr %1469, i64 3
  %1471 = load i32, ptr %1470, align 4, !tbaa !16
  br label %1473

1472:                                             ; preds = %1456
  br label %1473

1473:                                             ; preds = %1472, %1468
  %1474 = phi i32 [ %1471, %1468 ], [ 0, %1472 ]
  store i32 %1474, ptr %165, align 4, !tbaa !16
  %1475 = load i32, ptr %164, align 4, !tbaa !160
  %1476 = icmp eq i32 %1475, 7
  br i1 %1476, label %1477, label %1494

1477:                                             ; preds = %1473
  %1478 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1479 = load ptr, ptr %1478, align 8, !tbaa !161
  %1480 = icmp ne ptr %1479, null
  br i1 %1480, label %1488, label %1481

1481:                                             ; preds = %1477
  %1482 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1482, ptr noundef @.str.20)
          to label %1483 unwind label %1484

1483:                                             ; preds = %1481
  call void @__cxa_throw(ptr %1482, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1484:                                             ; preds = %1481
  %1485 = landingpad { ptr, i32 }
          cleanup
  %1486 = extractvalue { ptr, i32 } %1485, 0
  store ptr %1486, ptr %10, align 8
  %1487 = extractvalue { ptr, i32 } %1485, 1
  store i32 %1487, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1482) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #8
  br label %2711

1488:                                             ; preds = %1477
  %1489 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1490 = load ptr, ptr %1489, align 8, !tbaa !161
  %1491 = load i32, ptr %163, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %166, i32 noundef %1491)
  %1492 = getelementptr inbounds %"class.spirv_cross::TypedID.156", ptr %166, i32 0, i32 0
  %1493 = load i32, ptr %1492, align 4
  call void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %1490, i32 %1493)
  br label %1494

1494:                                             ; preds = %1488, %1473
  %1495 = load i32, ptr %163, align 4, !tbaa !16
  %1496 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjRN3spv12StorageClassES3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1495, ptr noundef nonnull align 4 dereferenceable(4) %162, ptr noundef nonnull align 4 dereferenceable(4) %164, ptr noundef nonnull align 4 dereferenceable(4) %165)
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #8
  br label %2707

1497:                                             ; preds = %275
  %1498 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1499 = load ptr, ptr %1498, align 8, !tbaa !161
  %1500 = icmp ne ptr %1499, null
  br i1 %1500, label %1508, label %1501

1501:                                             ; preds = %1497
  %1502 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1502, ptr noundef @.str.20)
          to label %1503 unwind label %1504

1503:                                             ; preds = %1501
  call void @__cxa_throw(ptr %1502, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1504:                                             ; preds = %1501
  %1505 = landingpad { ptr, i32 }
          cleanup
  %1506 = extractvalue { ptr, i32 } %1505, 0
  store ptr %1506, ptr %10, align 8
  %1507 = extractvalue { ptr, i32 } %1505, 1
  store i32 %1507, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1502) #8
  br label %2711

1508:                                             ; preds = %1497
  %1509 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1510 = load ptr, ptr %1509, align 8, !tbaa !84
  %1511 = icmp ne ptr %1510, null
  br i1 %1511, label %1519, label %1512

1512:                                             ; preds = %1508
  %1513 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1513, ptr noundef @.str.21)
          to label %1514 unwind label %1515

1514:                                             ; preds = %1512
  call void @__cxa_throw(ptr %1513, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1515:                                             ; preds = %1512
  %1516 = landingpad { ptr, i32 }
          cleanup
  %1517 = extractvalue { ptr, i32 } %1516, 0
  store ptr %1517, ptr %10, align 8
  %1518 = extractvalue { ptr, i32 } %1516, 1
  store i32 %1518, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1513) #8
  br label %2711

1519:                                             ; preds = %1508
  call void @llvm.lifetime.start.p0(i64 4, ptr %167) #8
  %1520 = load ptr, ptr %5, align 8, !tbaa !5
  %1521 = getelementptr inbounds i32, ptr %1520, i64 0
  %1522 = load i32, ptr %1521, align 4, !tbaa !16
  store i32 %1522, ptr %167, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %168) #8
  %1523 = load ptr, ptr %5, align 8, !tbaa !5
  %1524 = getelementptr inbounds i32, ptr %1523, i64 1
  %1525 = load i32, ptr %1524, align 4, !tbaa !16
  store i32 %1525, ptr %168, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #8
  %1526 = load i32, ptr %168, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %170) #8
  store i32 7, ptr %170, align 4, !tbaa !160
  %1527 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1526, ptr noundef nonnull align 4 dereferenceable(4) %167, ptr noundef nonnull align 4 dereferenceable(4) %170)
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #8
  store ptr %1527, ptr %169, align 8, !tbaa !5
  %1528 = load ptr, ptr %169, align 8, !tbaa !5
  %1529 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1528, i32 0, i32 12
  store i8 1, ptr %1529, align 1, !tbaa !162
  %1530 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1531 = load ptr, ptr %1530, align 8, !tbaa !161
  %1532 = load i32, ptr %168, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %171, i32 noundef %1532)
  %1533 = getelementptr inbounds %"class.spirv_cross::TypedID.156", ptr %171, i32 0, i32 0
  %1534 = load i32, ptr %1533, align 4
  call void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %1531, i32 %1534)
  call void @llvm.lifetime.start.p0(i64 4, ptr %172) #8
  store i32 2, ptr %172, align 4, !tbaa !16
  br label %1535

1535:                                             ; preds = %1560, %1519
  %1536 = load i32, ptr %172, align 4, !tbaa !16
  %1537 = add i32 %1536, 2
  %1538 = load i32, ptr %7, align 4, !tbaa !16
  %1539 = icmp ule i32 %1537, %1538
  br i1 %1539, label %1541, label %1540

1540:                                             ; preds = %1535
  store i32 22, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %172) #8
  br label %1563

1541:                                             ; preds = %1535
  %1542 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1543 = load ptr, ptr %1542, align 8, !tbaa !84
  %1544 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1543, i32 0, i32 14
  call void @llvm.lifetime.start.p0(i64 12, ptr %173) #8
  %1545 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %173, i32 0, i32 0
  %1546 = load ptr, ptr %5, align 8, !tbaa !5
  %1547 = load i32, ptr %172, align 4, !tbaa !16
  %1548 = zext i32 %1547 to i64
  %1549 = getelementptr inbounds i32, ptr %1546, i64 %1548
  %1550 = load i32, ptr %1549, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %1545, i32 noundef %1550)
  %1551 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %173, i32 0, i32 1
  %1552 = load ptr, ptr %5, align 8, !tbaa !5
  %1553 = load i32, ptr %172, align 4, !tbaa !16
  %1554 = add i32 %1553, 1
  %1555 = zext i32 %1554 to i64
  %1556 = getelementptr inbounds i32, ptr %1552, i64 %1555
  %1557 = load i32, ptr %1556, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %1551, i32 noundef %1557)
  %1558 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %173, i32 0, i32 2
  %1559 = load i32, ptr %168, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %1558, i32 noundef %1559)
  call void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(120) %1544, ptr noundef nonnull align 4 dereferenceable(12) %173) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr %173) #8
  br label %1560

1560:                                             ; preds = %1541
  %1561 = load i32, ptr %172, align 4, !tbaa !16
  %1562 = add i32 %1561, 2
  store i32 %1562, ptr %172, align 4, !tbaa !16
  br label %1535, !llvm.loop !166

1563:                                             ; preds = %1540
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %167) #8
  br label %2707

1564:                                             ; preds = %275, %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %174) #8
  %1565 = load ptr, ptr %5, align 8, !tbaa !5
  %1566 = getelementptr inbounds i32, ptr %1565, i64 1
  %1567 = load i32, ptr %1566, align 4, !tbaa !16
  store i32 %1567, ptr %174, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %175) #8
  %1568 = load ptr, ptr %5, align 8, !tbaa !5
  %1569 = getelementptr inbounds i32, ptr %1568, i64 0
  %1570 = load i32, ptr %1569, align 4, !tbaa !16
  %1571 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1570)
  store ptr %1571, ptr %175, align 8, !tbaa !5
  %1572 = load ptr, ptr %175, align 8, !tbaa !5
  %1573 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1572, i32 0, i32 3
  %1574 = load i32, ptr %1573, align 4, !tbaa !136
  %1575 = icmp ugt i32 %1574, 32
  br i1 %1575, label %1576, label %1594

1576:                                             ; preds = %1564
  %1577 = load i32, ptr %174, align 4, !tbaa !16
  %1578 = load ptr, ptr %5, align 8, !tbaa !5
  %1579 = getelementptr inbounds i32, ptr %1578, i64 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %176) #8
  %1580 = load ptr, ptr %5, align 8, !tbaa !5
  %1581 = getelementptr inbounds i32, ptr %1580, i64 2
  %1582 = load i32, ptr %1581, align 4, !tbaa !16
  %1583 = zext i32 %1582 to i64
  %1584 = load ptr, ptr %5, align 8, !tbaa !5
  %1585 = getelementptr inbounds i32, ptr %1584, i64 3
  %1586 = load i32, ptr %1585, align 4, !tbaa !16
  %1587 = zext i32 %1586 to i64
  %1588 = shl i64 %1587, 32
  %1589 = or i64 %1583, %1588
  store i64 %1589, ptr %176, align 8, !tbaa !167
  call void @llvm.lifetime.start.p0(i64 1, ptr %177) #8
  %1590 = load i32, ptr %6, align 4, !tbaa !13
  %1591 = icmp eq i32 %1590, 50
  %1592 = zext i1 %1591 to i8
  store i8 %1592, ptr %177, align 1, !tbaa !137
  %1593 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRKjmbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1577, ptr noundef nonnull align 4 dereferenceable(4) %1579, ptr noundef nonnull align 8 dereferenceable(8) %176, ptr noundef nonnull align 1 dereferenceable(1) %177)
  call void @llvm.lifetime.end.p0(i64 1, ptr %177) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %176) #8
  br label %1604

1594:                                             ; preds = %1564
  %1595 = load i32, ptr %174, align 4, !tbaa !16
  %1596 = load ptr, ptr %5, align 8, !tbaa !5
  %1597 = getelementptr inbounds i32, ptr %1596, i64 0
  %1598 = load ptr, ptr %5, align 8, !tbaa !5
  %1599 = getelementptr inbounds i32, ptr %1598, i64 2
  call void @llvm.lifetime.start.p0(i64 1, ptr %178) #8
  %1600 = load i32, ptr %6, align 4, !tbaa !13
  %1601 = icmp eq i32 %1600, 50
  %1602 = zext i1 %1601 to i8
  store i8 %1602, ptr %178, align 1, !tbaa !137
  %1603 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRKjS4_bEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1595, ptr noundef nonnull align 4 dereferenceable(4) %1597, ptr noundef nonnull align 4 dereferenceable(4) %1599, ptr noundef nonnull align 1 dereferenceable(1) %178)
  call void @llvm.lifetime.end.p0(i64 1, ptr %178) #8
  br label %1604

1604:                                             ; preds = %1594, %1576
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %174) #8
  br label %2707

1605:                                             ; preds = %275, %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %179) #8
  %1606 = load ptr, ptr %5, align 8, !tbaa !5
  %1607 = getelementptr inbounds i32, ptr %1606, i64 1
  %1608 = load i32, ptr %1607, align 4, !tbaa !16
  store i32 %1608, ptr %179, align 4, !tbaa !16
  %1609 = load i32, ptr %179, align 4, !tbaa !16
  %1610 = load ptr, ptr %5, align 8, !tbaa !5
  %1611 = getelementptr inbounds i32, ptr %1610, i64 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %180) #8
  store i32 0, ptr %180, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %181) #8
  %1612 = load i32, ptr %6, align 4, !tbaa !13
  %1613 = icmp eq i32 %1612, 49
  %1614 = zext i1 %1613 to i8
  store i8 %1614, ptr %181, align 1, !tbaa !137
  %1615 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRKjjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1609, ptr noundef nonnull align 4 dereferenceable(4) %1611, ptr noundef nonnull align 4 dereferenceable(4) %180, ptr noundef nonnull align 1 dereferenceable(1) %181)
  call void @llvm.lifetime.end.p0(i64 1, ptr %181) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %180) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %179) #8
  br label %2707

1616:                                             ; preds = %275, %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %182) #8
  %1617 = load ptr, ptr %5, align 8, !tbaa !5
  %1618 = getelementptr inbounds i32, ptr %1617, i64 1
  %1619 = load i32, ptr %1618, align 4, !tbaa !16
  store i32 %1619, ptr %182, align 4, !tbaa !16
  %1620 = load i32, ptr %182, align 4, !tbaa !16
  %1621 = load ptr, ptr %5, align 8, !tbaa !5
  %1622 = getelementptr inbounds i32, ptr %1621, i64 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %183) #8
  store i32 1, ptr %183, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %184) #8
  %1623 = load i32, ptr %6, align 4, !tbaa !13
  %1624 = icmp eq i32 %1623, 48
  %1625 = zext i1 %1624 to i8
  store i8 %1625, ptr %184, align 1, !tbaa !137
  %1626 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRKjjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1620, ptr noundef nonnull align 4 dereferenceable(4) %1622, ptr noundef nonnull align 4 dereferenceable(4) %183, ptr noundef nonnull align 1 dereferenceable(1) %184)
  call void @llvm.lifetime.end.p0(i64 1, ptr %184) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %183) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %182) #8
  br label %2707

1627:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %185) #8
  %1628 = load ptr, ptr %5, align 8, !tbaa !5
  %1629 = getelementptr inbounds i32, ptr %1628, i64 1
  %1630 = load i32, ptr %1629, align 4, !tbaa !16
  store i32 %1630, ptr %185, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %186) #8
  %1631 = load ptr, ptr %5, align 8, !tbaa !5
  %1632 = getelementptr inbounds i32, ptr %1631, i64 0
  %1633 = load i32, ptr %1632, align 4, !tbaa !16
  store i32 %1633, ptr %186, align 4, !tbaa !16
  %1634 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %1635 = load i32, ptr %185, align 4, !tbaa !16
  %1636 = load i32, ptr %186, align 4, !tbaa !16
  call void @_ZN11spirv_cross8ParsedIR18make_constant_nullEjjb(ptr noundef nonnull align 8 dereferenceable(1920) %1634, i32 noundef %1635, i32 noundef %1636, i1 noundef zeroext true)
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %186) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %185) #8
  br label %2707

1637:                                             ; preds = %275, %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %187) #8
  %1638 = load ptr, ptr %5, align 8, !tbaa !5
  %1639 = getelementptr inbounds i32, ptr %1638, i64 1
  %1640 = load i32, ptr %1639, align 4, !tbaa !16
  store i32 %1640, ptr %187, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %188) #8
  %1641 = load ptr, ptr %5, align 8, !tbaa !5
  %1642 = getelementptr inbounds i32, ptr %1641, i64 0
  %1643 = load i32, ptr %1642, align 4, !tbaa !16
  store i32 %1643, ptr %188, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %189) #8
  %1644 = load i32, ptr %188, align 4, !tbaa !16
  %1645 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1644)
  store ptr %1645, ptr %189, align 8, !tbaa !5
  %1646 = load ptr, ptr %189, align 8, !tbaa !5
  %1647 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1646, i32 0, i32 2
  %1648 = load i32, ptr %1647, align 8, !tbaa !117
  %1649 = icmp eq i32 %1648, 15
  br i1 %1649, label %1654, label %1650

1650:                                             ; preds = %1637
  %1651 = load ptr, ptr %189, align 8, !tbaa !5
  %1652 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1651, i32 0, i32 6
  %1653 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1652) #8
  br i1 %1653, label %1664, label %1654

1654:                                             ; preds = %1650, %1637
  %1655 = load i32, ptr %187, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %190) #8
  %1656 = load ptr, ptr %5, align 8, !tbaa !5
  %1657 = getelementptr inbounds i32, ptr %1656, i64 2
  store ptr %1657, ptr %190, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %191) #8
  %1658 = load i32, ptr %7, align 4, !tbaa !16
  %1659 = sub i32 %1658, 2
  store i32 %1659, ptr %191, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %192) #8
  %1660 = load i32, ptr %6, align 4, !tbaa !13
  %1661 = icmp eq i32 %1660, 51
  %1662 = zext i1 %1661 to i8
  store i8 %1662, ptr %192, align 1, !tbaa !137
  %1663 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRjPKjjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1655, ptr noundef nonnull align 4 dereferenceable(4) %188, ptr noundef nonnull align 8 dereferenceable(8) %190, ptr noundef nonnull align 4 dereferenceable(4) %191, ptr noundef nonnull align 1 dereferenceable(1) %192)
  call void @llvm.lifetime.end.p0(i64 1, ptr %192) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %191) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #8
  br label %1843

1664:                                             ; preds = %1650
  call void @llvm.lifetime.start.p0(i64 4, ptr %193) #8
  %1665 = load i32, ptr %7, align 4, !tbaa !16
  %1666 = sub i32 %1665, 2
  store i32 %1666, ptr %193, align 4, !tbaa !16
  %1667 = load i32, ptr %193, align 4, !tbaa !16
  %1668 = icmp ugt i32 %1667, 4
  br i1 %1668, label %1669, label %1676

1669:                                             ; preds = %1664
  %1670 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1670, ptr noundef @.str.22)
          to label %1671 unwind label %1672

1671:                                             ; preds = %1669
  call void @__cxa_throw(ptr %1670, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1672:                                             ; preds = %1669
  %1673 = landingpad { ptr, i32 }
          cleanup
  %1674 = extractvalue { ptr, i32 } %1673, 0
  store ptr %1674, ptr %10, align 8
  %1675 = extractvalue { ptr, i32 } %1673, 1
  store i32 %1675, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1670) #8
  br label %1842

1676:                                             ; preds = %1664
  call void @llvm.lifetime.start.p0(i64 1440, ptr %194) #8
  %1677 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i32 0, i32 0
  %1678 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1677, i64 4
  br label %1679

1679:                                             ; preds = %1681, %1676
  %1680 = phi ptr [ %1677, %1676 ], [ %1682, %1681 ]
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %1680)
          to label %1681 unwind label %1690

1681:                                             ; preds = %1679
  %1682 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1680, i64 1
  %1683 = icmp eq ptr %1682, %1678
  br i1 %1683, label %1684, label %1679

1684:                                             ; preds = %1681
  call void @llvm.lifetime.start.p0(i64 32, ptr %195) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %196) #8
  store i32 0, ptr %196, align 4, !tbaa !16
  br label %1685

1685:                                             ; preds = %1810, %1684
  %1686 = load i32, ptr %196, align 4, !tbaa !16
  %1687 = load i32, ptr %193, align 4, !tbaa !16
  %1688 = icmp ult i32 %1686, %1687
  br i1 %1688, label %1700, label %1689

1689:                                             ; preds = %1685
  store i32 25, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %196) #8
  br label %1815

1690:                                             ; preds = %1679
  %1691 = landingpad { ptr, i32 }
          cleanup
  %1692 = extractvalue { ptr, i32 } %1691, 0
  store ptr %1692, ptr %10, align 8
  %1693 = extractvalue { ptr, i32 } %1691, 1
  store i32 %1693, ptr %11, align 4
  %1694 = icmp eq ptr %1677, %1680
  br i1 %1694, label %1699, label %1695

1695:                                             ; preds = %1695, %1690
  %1696 = phi ptr [ %1680, %1690 ], [ %1697, %1695 ]
  %1697 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1696, i64 -1
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %1697) #8
  %1698 = icmp eq ptr %1697, %1677
  br i1 %1698, label %1699, label %1695

1699:                                             ; preds = %1695, %1690
  br label %1841

1700:                                             ; preds = %1685
  call void @llvm.lifetime.start.p0(i64 8, ptr %197) #8
  %1701 = load ptr, ptr %5, align 8, !tbaa !5
  %1702 = load i32, ptr %196, align 4, !tbaa !16
  %1703 = add i32 2, %1702
  %1704 = zext i32 %1703 to i64
  %1705 = getelementptr inbounds i32, ptr %1701, i64 %1704
  %1706 = load i32, ptr %1705, align 4, !tbaa !16
  %1707 = invoke noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_14SPIRConstantOpEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1706)
          to label %1708 unwind label %1725

1708:                                             ; preds = %1700
  store ptr %1707, ptr %197, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %198) #8
  %1709 = load ptr, ptr %5, align 8, !tbaa !5
  %1710 = load i32, ptr %196, align 4, !tbaa !16
  %1711 = add i32 2, %1710
  %1712 = zext i32 %1711 to i64
  %1713 = getelementptr inbounds i32, ptr %1709, i64 %1712
  %1714 = load i32, ptr %1713, align 4, !tbaa !16
  %1715 = invoke noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_9SPIRUndefEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1714)
          to label %1716 unwind label %1729

1716:                                             ; preds = %1708
  store ptr %1715, ptr %198, align 8, !tbaa !5
  %1717 = load ptr, ptr %197, align 8, !tbaa !5
  %1718 = icmp ne ptr %1717, null
  br i1 %1718, label %1719, label %1770

1719:                                             ; preds = %1716
  %1720 = load i32, ptr %6, align 4, !tbaa !13
  %1721 = icmp eq i32 %1720, 44
  br i1 %1721, label %1722, label %1737

1722:                                             ; preds = %1719
  %1723 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1723, ptr noundef @.str.23)
          to label %1724 unwind label %1733

1724:                                             ; preds = %1722
  invoke void @__cxa_throw(ptr %1723, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %2717 unwind label %1729

1725:                                             ; preds = %1700
  %1726 = landingpad { ptr, i32 }
          cleanup
  %1727 = extractvalue { ptr, i32 } %1726, 0
  store ptr %1727, ptr %10, align 8
  %1728 = extractvalue { ptr, i32 } %1726, 1
  store i32 %1728, ptr %11, align 4
  br label %1814

1729:                                             ; preds = %1796, %1782, %1780, %1773, %1746, %1744, %1737, %1724, %1708
  %1730 = landingpad { ptr, i32 }
          cleanup
  %1731 = extractvalue { ptr, i32 } %1730, 0
  store ptr %1731, ptr %10, align 8
  %1732 = extractvalue { ptr, i32 } %1730, 1
  store i32 %1732, ptr %11, align 4
  br label %1813

1733:                                             ; preds = %1722
  %1734 = landingpad { ptr, i32 }
          cleanup
  %1735 = extractvalue { ptr, i32 } %1734, 0
  store ptr %1735, ptr %10, align 8
  %1736 = extractvalue { ptr, i32 } %1734, 1
  store i32 %1736, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1723) #8
  br label %1813

1737:                                             ; preds = %1719
  %1738 = load i32, ptr %196, align 4, !tbaa !16
  %1739 = zext i32 %1738 to i64
  %1740 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i64 0, i64 %1739
  %1741 = load ptr, ptr %197, align 8, !tbaa !5
  %1742 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %1741, i32 0, i32 3
  %1743 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1742)
          to label %1744 unwind label %1729

1744:                                             ; preds = %1737
  %1745 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1743)
          to label %1746 unwind label %1729

1746:                                             ; preds = %1744
  invoke void @_ZN11spirv_cross12SPIRConstant9make_nullERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(360) %1740, ptr noundef nonnull align 8 dereferenceable(336) %1745)
          to label %1747 unwind label %1729

1747:                                             ; preds = %1746
  %1748 = load ptr, ptr %197, align 8, !tbaa !5
  %1749 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1748, i32 0, i32 1
  %1750 = load i32, ptr %196, align 4, !tbaa !16
  %1751 = zext i32 %1750 to i64
  %1752 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i64 0, i64 %1751
  %1753 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1752, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1753, ptr align 8 %1749, i64 4, i1 false), !tbaa.struct !91
  %1754 = load ptr, ptr %197, align 8, !tbaa !5
  %1755 = getelementptr inbounds %"struct.spirv_cross::SPIRConstantOp", ptr %1754, i32 0, i32 3
  %1756 = load i32, ptr %196, align 4, !tbaa !16
  %1757 = zext i32 %1756 to i64
  %1758 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i64 0, i64 %1757
  %1759 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1758, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1759, ptr align 8 %1755, i64 4, i1 false), !tbaa.struct !91
  %1760 = load i32, ptr %196, align 4, !tbaa !16
  %1761 = zext i32 %1760 to i64
  %1762 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i64 0, i64 %1761
  %1763 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1762, i32 0, i32 3
  store i8 1, ptr %1763, align 8, !tbaa !141
  %1764 = load i32, ptr %196, align 4, !tbaa !16
  %1765 = zext i32 %1764 to i64
  %1766 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i64 0, i64 %1765
  %1767 = load i32, ptr %196, align 4, !tbaa !16
  %1768 = zext i32 %1767 to i64
  %1769 = getelementptr inbounds [4 x ptr], ptr %195, i64 0, i64 %1768
  store ptr %1766, ptr %1769, align 8, !tbaa !5
  br label %1809

1770:                                             ; preds = %1716
  %1771 = load ptr, ptr %198, align 8, !tbaa !5
  %1772 = icmp ne ptr %1771, null
  br i1 %1772, label %1773, label %1796

1773:                                             ; preds = %1770
  %1774 = load i32, ptr %196, align 4, !tbaa !16
  %1775 = zext i32 %1774 to i64
  %1776 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i64 0, i64 %1775
  %1777 = load ptr, ptr %198, align 8, !tbaa !5
  %1778 = getelementptr inbounds %"struct.spirv_cross::SPIRUndef", ptr %1777, i32 0, i32 1
  %1779 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1778)
          to label %1780 unwind label %1729

1780:                                             ; preds = %1773
  %1781 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1779)
          to label %1782 unwind label %1729

1782:                                             ; preds = %1780
  invoke void @_ZN11spirv_cross12SPIRConstant9make_nullERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(360) %1776, ptr noundef nonnull align 8 dereferenceable(336) %1781)
          to label %1783 unwind label %1729

1783:                                             ; preds = %1782
  %1784 = load ptr, ptr %198, align 8, !tbaa !5
  %1785 = getelementptr inbounds %"struct.spirv_cross::SPIRUndef", ptr %1784, i32 0, i32 1
  %1786 = load i32, ptr %196, align 4, !tbaa !16
  %1787 = zext i32 %1786 to i64
  %1788 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i64 0, i64 %1787
  %1789 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1788, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1789, ptr align 4 %1785, i64 4, i1 false), !tbaa.struct !91
  %1790 = load i32, ptr %196, align 4, !tbaa !16
  %1791 = zext i32 %1790 to i64
  %1792 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i64 0, i64 %1791
  %1793 = load i32, ptr %196, align 4, !tbaa !16
  %1794 = zext i32 %1793 to i64
  %1795 = getelementptr inbounds [4 x ptr], ptr %195, i64 0, i64 %1794
  store ptr %1792, ptr %1795, align 8, !tbaa !5
  br label %1808

1796:                                             ; preds = %1770
  %1797 = load ptr, ptr %5, align 8, !tbaa !5
  %1798 = load i32, ptr %196, align 4, !tbaa !16
  %1799 = add i32 2, %1798
  %1800 = zext i32 %1799 to i64
  %1801 = getelementptr inbounds i32, ptr %1797, i64 %1800
  %1802 = load i32, ptr %1801, align 4, !tbaa !16
  %1803 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1802)
          to label %1804 unwind label %1729

1804:                                             ; preds = %1796
  %1805 = load i32, ptr %196, align 4, !tbaa !16
  %1806 = zext i32 %1805 to i64
  %1807 = getelementptr inbounds [4 x ptr], ptr %195, i64 0, i64 %1806
  store ptr %1803, ptr %1807, align 8, !tbaa !5
  br label %1808

1808:                                             ; preds = %1804, %1783
  br label %1809

1809:                                             ; preds = %1808, %1747
  call void @llvm.lifetime.end.p0(i64 8, ptr %198) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #8
  br label %1810

1810:                                             ; preds = %1809
  %1811 = load i32, ptr %196, align 4, !tbaa !16
  %1812 = add i32 %1811, 1
  store i32 %1812, ptr %196, align 4, !tbaa !16
  br label %1685, !llvm.loop !168

1813:                                             ; preds = %1733, %1729
  call void @llvm.lifetime.end.p0(i64 8, ptr %198) #8
  br label %1814

1814:                                             ; preds = %1813, %1725
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %196) #8
  br label %1833

1815:                                             ; preds = %1689
  %1816 = load i32, ptr %187, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %199) #8
  %1817 = load i32, ptr %6, align 4, !tbaa !13
  %1818 = icmp eq i32 %1817, 51
  %1819 = zext i1 %1818 to i8
  store i8 %1819, ptr %199, align 1, !tbaa !137
  %1820 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRjRA4_PKS2_S3_bEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1816, ptr noundef nonnull align 4 dereferenceable(4) %188, ptr noundef nonnull align 8 dereferenceable(32) %195, ptr noundef nonnull align 4 dereferenceable(4) %193, ptr noundef nonnull align 1 dereferenceable(1) %199)
          to label %1821 unwind label %1829

1821:                                             ; preds = %1815
  call void @llvm.lifetime.end.p0(i64 1, ptr %199) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %195) #8
  %1822 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i32 0, i32 0
  %1823 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1822, i64 4
  br label %1824

1824:                                             ; preds = %1824, %1821
  %1825 = phi ptr [ %1823, %1821 ], [ %1826, %1824 ]
  %1826 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1825, i64 -1
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %1826) #8
  %1827 = icmp eq ptr %1826, %1822
  br i1 %1827, label %1828, label %1824

1828:                                             ; preds = %1824
  call void @llvm.lifetime.end.p0(i64 1440, ptr %194) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %193) #8
  br label %1843

1829:                                             ; preds = %1815
  %1830 = landingpad { ptr, i32 }
          cleanup
  %1831 = extractvalue { ptr, i32 } %1830, 0
  store ptr %1831, ptr %10, align 8
  %1832 = extractvalue { ptr, i32 } %1830, 1
  store i32 %1832, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %199) #8
  br label %1833

1833:                                             ; preds = %1829, %1814
  call void @llvm.lifetime.end.p0(i64 32, ptr %195) #8
  %1834 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %194, i32 0, i32 0
  %1835 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1834, i64 4
  br label %1836

1836:                                             ; preds = %1836, %1833
  %1837 = phi ptr [ %1835, %1833 ], [ %1838, %1836 ]
  %1838 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %1837, i64 -1
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %1838) #8
  %1839 = icmp eq ptr %1838, %1834
  br i1 %1839, label %1840, label %1836

1840:                                             ; preds = %1836
  br label %1841

1841:                                             ; preds = %1840, %1699
  call void @llvm.lifetime.end.p0(i64 1440, ptr %194) #8
  br label %1842

1842:                                             ; preds = %1841, %1672
  call void @llvm.lifetime.end.p0(i64 4, ptr %193) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %188) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #8
  br label %2711

1843:                                             ; preds = %1828, %1654
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %188) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #8
  br label %2707

1844:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %200) #8
  %1845 = load ptr, ptr %5, align 8, !tbaa !5
  %1846 = getelementptr inbounds i32, ptr %1845, i64 0
  %1847 = load i32, ptr %1846, align 4, !tbaa !16
  store i32 %1847, ptr %200, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %201) #8
  %1848 = load ptr, ptr %5, align 8, !tbaa !5
  %1849 = getelementptr inbounds i32, ptr %1848, i64 1
  %1850 = load i32, ptr %1849, align 4, !tbaa !16
  store i32 %1850, ptr %201, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %202) #8
  %1851 = load ptr, ptr %5, align 8, !tbaa !5
  %1852 = getelementptr inbounds i32, ptr %1851, i64 3
  %1853 = load i32, ptr %1852, align 4, !tbaa !16
  store i32 %1853, ptr %202, align 4, !tbaa !16
  %1854 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1855 = load ptr, ptr %1854, align 8, !tbaa !161
  %1856 = icmp ne ptr %1855, null
  br i1 %1856, label %1857, label %1864

1857:                                             ; preds = %1844
  %1858 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1858, ptr noundef @.str.24)
          to label %1859 unwind label %1860

1859:                                             ; preds = %1857
  call void @__cxa_throw(ptr %1858, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1860:                                             ; preds = %1857
  %1861 = landingpad { ptr, i32 }
          cleanup
  %1862 = extractvalue { ptr, i32 } %1861, 0
  store ptr %1862, ptr %10, align 8
  %1863 = extractvalue { ptr, i32 } %1861, 1
  store i32 %1863, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1858) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %202) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %201) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %200) #8
  br label %2711

1864:                                             ; preds = %1844
  %1865 = load i32, ptr %201, align 4, !tbaa !16
  %1866 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRFunctionEJRjS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1865, ptr noundef nonnull align 4 dereferenceable(4) %200, ptr noundef nonnull align 4 dereferenceable(4) %202)
  %1867 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  store ptr %1866, ptr %1867, align 8, !tbaa !161
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %202) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %201) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %200) #8
  br label %2707

1868:                                             ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %203) #8
  %1869 = load ptr, ptr %5, align 8, !tbaa !5
  %1870 = getelementptr inbounds i32, ptr %1869, i64 0
  %1871 = load i32, ptr %1870, align 4, !tbaa !16
  store i32 %1871, ptr %203, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %204) #8
  %1872 = load ptr, ptr %5, align 8, !tbaa !5
  %1873 = getelementptr inbounds i32, ptr %1872, i64 1
  %1874 = load i32, ptr %1873, align 4, !tbaa !16
  store i32 %1874, ptr %204, align 4, !tbaa !16
  %1875 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1876 = load ptr, ptr %1875, align 8, !tbaa !161
  %1877 = icmp ne ptr %1876, null
  br i1 %1877, label %1885, label %1878

1878:                                             ; preds = %1868
  %1879 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1879, ptr noundef @.str.25)
          to label %1880 unwind label %1881

1880:                                             ; preds = %1878
  call void @__cxa_throw(ptr %1879, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1881:                                             ; preds = %1878
  %1882 = landingpad { ptr, i32 }
          cleanup
  %1883 = extractvalue { ptr, i32 } %1882, 0
  store ptr %1883, ptr %10, align 8
  %1884 = extractvalue { ptr, i32 } %1882, 1
  store i32 %1884, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1879) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %204) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %203) #8
  br label %2711

1885:                                             ; preds = %1868
  %1886 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1887 = load ptr, ptr %1886, align 8, !tbaa !161
  %1888 = load i32, ptr %203, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %205, i32 noundef %1888)
  %1889 = load i32, ptr %204, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %206, i32 noundef %1889)
  %1890 = getelementptr inbounds %"class.spirv_cross::TypedID.109", ptr %205, i32 0, i32 0
  %1891 = load i32, ptr %1890, align 4
  %1892 = getelementptr inbounds %"class.spirv_cross::TypedID.102", ptr %206, i32 0, i32 0
  %1893 = load i32, ptr %1892, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %1887, i32 %1891, i32 %1893, i1 noundef zeroext false)
  %1894 = load i32, ptr %204, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %207) #8
  store i32 7, ptr %207, align 4, !tbaa !160
  %1895 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1894, ptr noundef nonnull align 4 dereferenceable(4) %203, ptr noundef nonnull align 4 dereferenceable(4) %207)
  call void @llvm.lifetime.end.p0(i64 4, ptr %207) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %204) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %203) #8
  br label %2707

1896:                                             ; preds = %275
  %1897 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1898 = load ptr, ptr %1897, align 8, !tbaa !84
  %1899 = icmp ne ptr %1898, null
  br i1 %1899, label %1900, label %1907

1900:                                             ; preds = %1896
  %1901 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1901, ptr noundef @.str.26)
          to label %1902 unwind label %1903

1902:                                             ; preds = %1900
  call void @__cxa_throw(ptr %1901, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1903:                                             ; preds = %1900
  %1904 = landingpad { ptr, i32 }
          cleanup
  %1905 = extractvalue { ptr, i32 } %1904, 0
  store ptr %1905, ptr %10, align 8
  %1906 = extractvalue { ptr, i32 } %1904, 1
  store i32 %1906, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1901) #8
  br label %2711

1907:                                             ; preds = %1896
  %1908 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  store ptr null, ptr %1908, align 8, !tbaa !161
  br label %2707

1909:                                             ; preds = %275
  %1910 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1911 = load ptr, ptr %1910, align 8, !tbaa !161
  %1912 = icmp ne ptr %1911, null
  br i1 %1912, label %1920, label %1913

1913:                                             ; preds = %1909
  %1914 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1914, ptr noundef @.str.27)
          to label %1915 unwind label %1916

1915:                                             ; preds = %1913
  call void @__cxa_throw(ptr %1914, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1916:                                             ; preds = %1913
  %1917 = landingpad { ptr, i32 }
          cleanup
  %1918 = extractvalue { ptr, i32 } %1917, 0
  store ptr %1918, ptr %10, align 8
  %1919 = extractvalue { ptr, i32 } %1917, 1
  store i32 %1919, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1914) #8
  br label %2711

1920:                                             ; preds = %1909
  call void @llvm.lifetime.start.p0(i64 4, ptr %208) #8
  %1921 = load ptr, ptr %5, align 8, !tbaa !5
  %1922 = getelementptr inbounds i32, ptr %1921, i64 0
  %1923 = load i32, ptr %1922, align 4, !tbaa !16
  store i32 %1923, ptr %208, align 4, !tbaa !16
  %1924 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1925 = load ptr, ptr %1924, align 8, !tbaa !161
  %1926 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1925, i32 0, i32 9
  call void @llvm.lifetime.start.p0(i64 4, ptr %209) #8
  %1927 = load i32, ptr %208, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %209, i32 noundef %1927)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE6EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1926, ptr noundef nonnull align 4 dereferenceable(4) %209) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %209) #8
  %1928 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1929 = load ptr, ptr %1928, align 8, !tbaa !161
  %1930 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1929, i32 0, i32 7
  %1931 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1930)
  %1932 = icmp ne i32 %1931, 0
  br i1 %1932, label %1938, label %1933

1933:                                             ; preds = %1920
  call void @llvm.lifetime.start.p0(i64 4, ptr %210) #8
  %1934 = load i32, ptr %208, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %210, i32 noundef %1934)
  %1935 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %1936 = load ptr, ptr %1935, align 8, !tbaa !161
  %1937 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1936, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1937, ptr align 4 %210, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %210) #8
  br label %1938

1938:                                             ; preds = %1933, %1920
  %1939 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1940 = load ptr, ptr %1939, align 8, !tbaa !84
  %1941 = icmp ne ptr %1940, null
  br i1 %1941, label %1942, label %1949

1942:                                             ; preds = %1938
  %1943 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1943, ptr noundef @.str.28)
          to label %1944 unwind label %1945

1944:                                             ; preds = %1942
  call void @__cxa_throw(ptr %1943, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1945:                                             ; preds = %1942
  %1946 = landingpad { ptr, i32 }
          cleanup
  %1947 = extractvalue { ptr, i32 } %1946, 0
  store ptr %1947, ptr %10, align 8
  %1948 = extractvalue { ptr, i32 } %1946, 1
  store i32 %1948, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1943) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %208) #8
  br label %2711

1949:                                             ; preds = %1938
  %1950 = load i32, ptr %208, align 4, !tbaa !16
  %1951 = call noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross6Parser3setINS_9SPIRBlockEJEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %1950)
  %1952 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr %1951, ptr %1952, align 8, !tbaa !84
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %208) #8
  br label %2707

1953:                                             ; preds = %275
  %1954 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1955 = load ptr, ptr %1954, align 8, !tbaa !84
  %1956 = icmp ne ptr %1955, null
  br i1 %1956, label %1964, label %1957

1957:                                             ; preds = %1953
  %1958 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1958, ptr noundef @.str.29)
          to label %1959 unwind label %1960

1959:                                             ; preds = %1957
  call void @__cxa_throw(ptr %1958, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1960:                                             ; preds = %1957
  %1961 = landingpad { ptr, i32 }
          cleanup
  %1962 = extractvalue { ptr, i32 } %1961, 0
  store ptr %1962, ptr %10, align 8
  %1963 = extractvalue { ptr, i32 } %1961, 1
  store i32 %1963, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1958) #8
  br label %2711

1964:                                             ; preds = %1953
  call void @llvm.lifetime.start.p0(i64 4, ptr %211) #8
  %1965 = load ptr, ptr %5, align 8, !tbaa !5
  %1966 = getelementptr inbounds i32, ptr %1965, i64 0
  %1967 = load i32, ptr %1966, align 4, !tbaa !16
  store i32 %1967, ptr %211, align 4, !tbaa !16
  %1968 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1969 = load ptr, ptr %1968, align 8, !tbaa !84
  %1970 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1969, i32 0, i32 1
  store i32 1, ptr %1970, align 4, !tbaa !169
  call void @llvm.lifetime.start.p0(i64 4, ptr %212) #8
  %1971 = load i32, ptr %211, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %212, i32 noundef %1971)
  %1972 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1973 = load ptr, ptr %1972, align 8, !tbaa !84
  %1974 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1973, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1974, ptr align 4 %212, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %212) #8
  %1975 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %1975, align 8, !tbaa !84
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %211) #8
  br label %2707

1976:                                             ; preds = %275
  %1977 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1978 = load ptr, ptr %1977, align 8, !tbaa !84
  %1979 = icmp ne ptr %1978, null
  br i1 %1979, label %1987, label %1980

1980:                                             ; preds = %1976
  %1981 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1981, ptr noundef @.str.29)
          to label %1982 unwind label %1983

1982:                                             ; preds = %1980
  call void @__cxa_throw(ptr %1981, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1983:                                             ; preds = %1980
  %1984 = landingpad { ptr, i32 }
          cleanup
  %1985 = extractvalue { ptr, i32 } %1984, 0
  store ptr %1985, ptr %10, align 8
  %1986 = extractvalue { ptr, i32 } %1984, 1
  store i32 %1986, ptr %11, align 4
  call void @__cxa_free_exception(ptr %1981) #8
  br label %2711

1987:                                             ; preds = %1976
  call void @llvm.lifetime.start.p0(i64 4, ptr %213) #8
  %1988 = load ptr, ptr %5, align 8, !tbaa !5
  %1989 = getelementptr inbounds i32, ptr %1988, i64 0
  %1990 = load i32, ptr %1989, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %213, i32 noundef %1990)
  %1991 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1992 = load ptr, ptr %1991, align 8, !tbaa !84
  %1993 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1992, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1993, ptr align 4 %213, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %213) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %214) #8
  %1994 = load ptr, ptr %5, align 8, !tbaa !5
  %1995 = getelementptr inbounds i32, ptr %1994, i64 1
  %1996 = load i32, ptr %1995, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %214, i32 noundef %1996)
  %1997 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %1998 = load ptr, ptr %1997, align 8, !tbaa !84
  %1999 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1998, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1999, ptr align 4 %214, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %214) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %215) #8
  %2000 = load ptr, ptr %5, align 8, !tbaa !5
  %2001 = getelementptr inbounds i32, ptr %2000, i64 2
  %2002 = load i32, ptr %2001, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %215, i32 noundef %2002)
  %2003 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2004 = load ptr, ptr %2003, align 8, !tbaa !84
  %2005 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2004, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2005, ptr align 4 %215, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %215) #8
  %2006 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2007 = load ptr, ptr %2006, align 8, !tbaa !84
  %2008 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2007, i32 0, i32 1
  store i32 2, ptr %2008, align 4, !tbaa !169
  %2009 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2010 = load ptr, ptr %2009, align 8, !tbaa !84
  %2011 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2010, i32 0, i32 9
  %2012 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2011)
  %2013 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2014 = load ptr, ptr %2013, align 8, !tbaa !84
  %2015 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2014, i32 0, i32 10
  %2016 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2015)
  %2017 = icmp eq i32 %2012, %2016
  br i1 %2017, label %2018, label %2156

2018:                                             ; preds = %1987
  %2019 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2020 = load ptr, ptr %2019, align 8, !tbaa !84
  %2021 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2020, i32 0, i32 9
  %2022 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2021)
  %2023 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2024 = load ptr, ptr %2023, align 8, !tbaa !84
  %2025 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2024, i32 0, i32 4
  %2026 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2025)
  %2027 = icmp ne i32 %2022, %2026
  br i1 %2027, label %2028, label %2084

2028:                                             ; preds = %2018
  %2029 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2030 = load ptr, ptr %2029, align 8, !tbaa !84
  %2031 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2030, i32 0, i32 2
  %2032 = load i32, ptr %2031, align 8, !tbaa !187
  %2033 = icmp eq i32 %2032, 2
  br i1 %2033, label %2034, label %2084

2034:                                             ; preds = %2028
  call void @llvm.lifetime.start.p0(i64 4, ptr %216) #8
  %2035 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2036 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %2035, i32 noundef 2)
  store i32 %2036, ptr %216, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %217) #8
  %2037 = load i32, ptr %216, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %218) #8
  store i32 21, ptr %218, align 4, !tbaa !13
  %2038 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %2037, ptr noundef nonnull align 4 dereferenceable(4) %218)
  call void @llvm.lifetime.end.p0(i64 4, ptr %218) #8
  store ptr %2038, ptr %217, align 8, !tbaa !5
  %2039 = load ptr, ptr %217, align 8, !tbaa !5
  %2040 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2039, i32 0, i32 2
  store i32 7, ptr %2040, align 8, !tbaa !117
  %2041 = load ptr, ptr %217, align 8, !tbaa !5
  %2042 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2041, i32 0, i32 3
  store i32 32, ptr %2042, align 4, !tbaa !136
  call void @llvm.lifetime.start.p0(i64 8, ptr %219) #8
  %2043 = load i32, ptr %216, align 4, !tbaa !16
  %2044 = add i32 %2043, 1
  %2045 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %2044, ptr noundef nonnull align 4 dereferenceable(4) %216)
  store ptr %2045, ptr %219, align 8, !tbaa !5
  %2046 = load ptr, ptr %219, align 8, !tbaa !5
  %2047 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2046, i32 0, i32 1
  %2048 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2049 = load ptr, ptr %2048, align 8, !tbaa !84
  %2050 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2049, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2050, ptr align 8 %2047, i64 4, i1 false), !tbaa.struct !91
  %2051 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2052 = load ptr, ptr %2051, align 8, !tbaa !84
  %2053 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2052, i32 0, i32 9
  %2054 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2055 = load ptr, ptr %2054, align 8, !tbaa !84
  %2056 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2055, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2056, ptr align 4 %2053, i64 4, i1 false), !tbaa.struct !91
  %2057 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2058 = load ptr, ptr %2057, align 8, !tbaa !84
  %2059 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2058, i32 0, i32 1
  store i32 3, ptr %2059, align 4, !tbaa !169
  %2060 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2061 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2060, i32 0, i32 10
  %2062 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2063 = load ptr, ptr %2062, align 8, !tbaa !84
  %2064 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2063, i32 0, i32 4
  %2065 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2064)
  %2066 = zext i32 %2065 to i64
  %2067 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2061, i64 noundef %2066) #8
  %2068 = load i8, ptr %2067, align 1, !tbaa !188
  %2069 = zext i8 %2068 to i32
  %2070 = and i32 %2069, -9
  %2071 = trunc i32 %2070 to i8
  store i8 %2071, ptr %2067, align 1, !tbaa !188
  %2072 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2073 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2072, i32 0, i32 10
  %2074 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2075 = load ptr, ptr %2074, align 8, !tbaa !84
  %2076 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2075, i32 0, i32 4
  %2077 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2076)
  %2078 = zext i32 %2077 to i64
  %2079 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2073, i64 noundef %2078) #8
  %2080 = load i8, ptr %2079, align 1, !tbaa !188
  %2081 = zext i8 %2080 to i32
  %2082 = or i32 %2081, 16
  %2083 = trunc i32 %2082 to i8
  store i8 %2083, ptr %2079, align 1, !tbaa !188
  call void @llvm.lifetime.end.p0(i64 8, ptr %219) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %217) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %216) #8
  br label %2155

2084:                                             ; preds = %2028, %2018
  call void @llvm.lifetime.start.p0(i64 1, ptr %220) #8
  %2085 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2086 = load ptr, ptr %2085, align 8, !tbaa !84
  %2087 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2086, i32 0, i32 9
  %2088 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2087)
  %2089 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2090 = load ptr, ptr %2089, align 8, !tbaa !84
  %2091 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2090, i32 0, i32 5
  %2092 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2091)
  %2093 = icmp eq i32 %2088, %2092
  br i1 %2093, label %2094, label %2100

2094:                                             ; preds = %2084
  %2095 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2096 = load ptr, ptr %2095, align 8, !tbaa !84
  %2097 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2096, i32 0, i32 2
  %2098 = load i32, ptr %2097, align 8, !tbaa !187
  %2099 = icmp eq i32 %2098, 1
  br label %2100

2100:                                             ; preds = %2094, %2084
  %2101 = phi i1 [ false, %2084 ], [ %2099, %2094 ]
  %2102 = zext i1 %2101 to i8
  store i8 %2102, ptr %220, align 1, !tbaa !137
  %2103 = load i8, ptr %220, align 1, !tbaa !137, !range !73, !noundef !74
  %2104 = trunc i8 %2103 to i1
  br i1 %2104, label %2105, label %2130

2105:                                             ; preds = %2100
  %2106 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2107 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2106, i32 0, i32 10
  %2108 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2109 = load ptr, ptr %2108, align 8, !tbaa !84
  %2110 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2109, i32 0, i32 5
  %2111 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2110)
  %2112 = zext i32 %2111 to i64
  %2113 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2107, i64 noundef %2112) #8
  %2114 = load i8, ptr %2113, align 1, !tbaa !188
  %2115 = zext i8 %2114 to i32
  %2116 = and i32 %2115, -5
  %2117 = trunc i32 %2116 to i8
  store i8 %2117, ptr %2113, align 1, !tbaa !188
  %2118 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2119 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2118, i32 0, i32 10
  %2120 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2121 = load ptr, ptr %2120, align 8, !tbaa !84
  %2122 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2121, i32 0, i32 6
  %2123 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2122)
  %2124 = zext i32 %2123 to i64
  %2125 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2119, i64 noundef %2124) #8
  %2126 = load i8, ptr %2125, align 1, !tbaa !188
  %2127 = zext i8 %2126 to i32
  %2128 = and i32 %2127, -3
  %2129 = trunc i32 %2128 to i8
  store i8 %2129, ptr %2125, align 1, !tbaa !188
  br label %2130

2130:                                             ; preds = %2105, %2100
  %2131 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2132 = load ptr, ptr %2131, align 8, !tbaa !84
  %2133 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2132, i32 0, i32 9
  %2134 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2135 = load ptr, ptr %2134, align 8, !tbaa !84
  %2136 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2135, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2136, ptr align 4 %2133, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.start.p0(i64 4, ptr %221) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %221, i32 noundef 0)
  %2137 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2138 = load ptr, ptr %2137, align 8, !tbaa !84
  %2139 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2138, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2139, ptr align 4 %221, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %221) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %222) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %222, i32 noundef 0)
  %2140 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2141 = load ptr, ptr %2140, align 8, !tbaa !84
  %2142 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2141, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2142, ptr align 4 %222, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %222) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %223) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %223, i32 noundef 0)
  %2143 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2144 = load ptr, ptr %2143, align 8, !tbaa !84
  %2145 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2144, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2145, ptr align 4 %223, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %223) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %224) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %224, i32 noundef 0)
  %2146 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2147 = load ptr, ptr %2146, align 8, !tbaa !84
  %2148 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2147, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2148, ptr align 4 %224, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %224) #8
  %2149 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2150 = load ptr, ptr %2149, align 8, !tbaa !84
  %2151 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2150, i32 0, i32 2
  store i32 0, ptr %2151, align 8, !tbaa !187
  %2152 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2153 = load ptr, ptr %2152, align 8, !tbaa !84
  %2154 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2153, i32 0, i32 1
  store i32 1, ptr %2154, align 4, !tbaa !169
  call void @llvm.lifetime.end.p0(i64 1, ptr %220) #8
  br label %2155

2155:                                             ; preds = %2130, %2034
  br label %2156

2156:                                             ; preds = %2155, %1987
  %2157 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2157, align 8, !tbaa !84
  br label %2707

2158:                                             ; preds = %275
  %2159 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2160 = load ptr, ptr %2159, align 8, !tbaa !84
  %2161 = icmp ne ptr %2160, null
  br i1 %2161, label %2169, label %2162

2162:                                             ; preds = %2158
  %2163 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2163, ptr noundef @.str.29)
          to label %2164 unwind label %2165

2164:                                             ; preds = %2162
  call void @__cxa_throw(ptr %2163, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2165:                                             ; preds = %2162
  %2166 = landingpad { ptr, i32 }
          cleanup
  %2167 = extractvalue { ptr, i32 } %2166, 0
  store ptr %2167, ptr %10, align 8
  %2168 = extractvalue { ptr, i32 } %2166, 1
  store i32 %2168, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2163) #8
  br label %2711

2169:                                             ; preds = %2158
  %2170 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2171 = load ptr, ptr %2170, align 8, !tbaa !84
  %2172 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2171, i32 0, i32 1
  store i32 3, ptr %2172, align 4, !tbaa !169
  call void @llvm.lifetime.start.p0(i64 4, ptr %225) #8
  %2173 = load ptr, ptr %5, align 8, !tbaa !5
  %2174 = getelementptr inbounds i32, ptr %2173, i64 0
  %2175 = load i32, ptr %2174, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %225, i32 noundef %2175)
  %2176 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2177 = load ptr, ptr %2176, align 8, !tbaa !84
  %2178 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2177, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2178, ptr align 4 %225, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %225) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %226) #8
  %2179 = load ptr, ptr %5, align 8, !tbaa !5
  %2180 = getelementptr inbounds i32, ptr %2179, i64 1
  %2181 = load i32, ptr %2180, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %226, i32 noundef %2181)
  %2182 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2183 = load ptr, ptr %2182, align 8, !tbaa !84
  %2184 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2183, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2184, ptr align 4 %226, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %226) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %227) #8
  %2185 = load i32, ptr %7, align 4, !tbaa !16
  %2186 = sub i32 %2185, 2
  store i32 %2186, ptr %227, align 4, !tbaa !16
  %2187 = load i32, ptr %227, align 4, !tbaa !16
  %2188 = urem i32 %2187, 2
  %2189 = icmp eq i32 %2188, 0
  br i1 %2189, label %2190, label %2219

2190:                                             ; preds = %2169
  call void @llvm.lifetime.start.p0(i64 4, ptr %228) #8
  store i32 2, ptr %228, align 4, !tbaa !16
  br label %2191

2191:                                             ; preds = %2215, %2190
  %2192 = load i32, ptr %228, align 4, !tbaa !16
  %2193 = add i32 %2192, 2
  %2194 = load i32, ptr %7, align 4, !tbaa !16
  %2195 = icmp ule i32 %2193, %2194
  br i1 %2195, label %2197, label %2196

2196:                                             ; preds = %2191
  store i32 28, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %228) #8
  br label %2218

2197:                                             ; preds = %2191
  %2198 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2199 = load ptr, ptr %2198, align 8, !tbaa !84
  %2200 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2199, i32 0, i32 17
  call void @llvm.lifetime.start.p0(i64 16, ptr %229) #8
  %2201 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %229, i32 0, i32 0
  %2202 = load ptr, ptr %5, align 8, !tbaa !5
  %2203 = load i32, ptr %228, align 4, !tbaa !16
  %2204 = zext i32 %2203 to i64
  %2205 = getelementptr inbounds i32, ptr %2202, i64 %2204
  %2206 = load i32, ptr %2205, align 4, !tbaa !16
  %2207 = zext i32 %2206 to i64
  store i64 %2207, ptr %2201, align 8, !tbaa !189
  %2208 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %229, i32 0, i32 1
  %2209 = load ptr, ptr %5, align 8, !tbaa !5
  %2210 = load i32, ptr %228, align 4, !tbaa !16
  %2211 = add i32 %2210, 1
  %2212 = zext i32 %2211 to i64
  %2213 = getelementptr inbounds i32, ptr %2209, i64 %2212
  %2214 = load i32, ptr %2213, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %2208, i32 noundef %2214)
  call void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(152) %2200, ptr noundef nonnull align 8 dereferenceable(12) %229) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %229) #8
  br label %2215

2215:                                             ; preds = %2197
  %2216 = load i32, ptr %228, align 4, !tbaa !16
  %2217 = add i32 %2216, 2
  store i32 %2217, ptr %228, align 4, !tbaa !16
  br label %2191, !llvm.loop !191

2218:                                             ; preds = %2196
  br label %2219

2219:                                             ; preds = %2218, %2169
  %2220 = load i32, ptr %227, align 4, !tbaa !16
  %2221 = urem i32 %2220, 3
  %2222 = icmp eq i32 %2221, 0
  br i1 %2222, label %2223, label %2262

2223:                                             ; preds = %2219
  call void @llvm.lifetime.start.p0(i64 4, ptr %230) #8
  store i32 2, ptr %230, align 4, !tbaa !16
  br label %2224

2224:                                             ; preds = %2258, %2223
  %2225 = load i32, ptr %230, align 4, !tbaa !16
  %2226 = add i32 %2225, 3
  %2227 = load i32, ptr %7, align 4, !tbaa !16
  %2228 = icmp ule i32 %2226, %2227
  br i1 %2228, label %2230, label %2229

2229:                                             ; preds = %2224
  store i32 31, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %230) #8
  br label %2261

2230:                                             ; preds = %2224
  call void @llvm.lifetime.start.p0(i64 8, ptr %231) #8
  %2231 = load ptr, ptr %5, align 8, !tbaa !5
  %2232 = load i32, ptr %230, align 4, !tbaa !16
  %2233 = add i32 %2232, 1
  %2234 = zext i32 %2233 to i64
  %2235 = getelementptr inbounds i32, ptr %2231, i64 %2234
  %2236 = load i32, ptr %2235, align 4, !tbaa !16
  %2237 = zext i32 %2236 to i64
  %2238 = shl i64 %2237, 32
  %2239 = load ptr, ptr %5, align 8, !tbaa !5
  %2240 = load i32, ptr %230, align 4, !tbaa !16
  %2241 = zext i32 %2240 to i64
  %2242 = getelementptr inbounds i32, ptr %2239, i64 %2241
  %2243 = load i32, ptr %2242, align 4, !tbaa !16
  %2244 = zext i32 %2243 to i64
  %2245 = or i64 %2238, %2244
  store i64 %2245, ptr %231, align 8, !tbaa !167
  %2246 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2247 = load ptr, ptr %2246, align 8, !tbaa !84
  %2248 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2247, i32 0, i32 18
  call void @llvm.lifetime.start.p0(i64 16, ptr %232) #8
  %2249 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %232, i32 0, i32 0
  %2250 = load i64, ptr %231, align 8, !tbaa !167
  store i64 %2250, ptr %2249, align 8, !tbaa !189
  %2251 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %232, i32 0, i32 1
  %2252 = load ptr, ptr %5, align 8, !tbaa !5
  %2253 = load i32, ptr %230, align 4, !tbaa !16
  %2254 = add i32 %2253, 2
  %2255 = zext i32 %2254 to i64
  %2256 = getelementptr inbounds i32, ptr %2252, i64 %2255
  %2257 = load i32, ptr %2256, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %2251, i32 noundef %2257)
  call void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(152) %2248, ptr noundef nonnull align 8 dereferenceable(12) %232) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %232) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %231) #8
  br label %2258

2258:                                             ; preds = %2230
  %2259 = load i32, ptr %230, align 4, !tbaa !16
  %2260 = add i32 %2259, 3
  store i32 %2260, ptr %230, align 4, !tbaa !16
  br label %2224, !llvm.loop !192

2261:                                             ; preds = %2229
  br label %2262

2262:                                             ; preds = %2261, %2219
  %2263 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2264 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2263, i32 0, i32 10
  %2265 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2266 = load ptr, ptr %2265, align 8, !tbaa !84
  %2267 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2266, i32 0, i32 4
  %2268 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2267)
  %2269 = zext i32 %2268 to i64
  %2270 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2264, i64 noundef %2269) #8
  %2271 = load i8, ptr %2270, align 1, !tbaa !188
  %2272 = zext i8 %2271 to i32
  %2273 = or i32 %2272, 16
  %2274 = trunc i32 %2273 to i8
  store i8 %2274, ptr %2270, align 1, !tbaa !188
  %2275 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2275, align 8, !tbaa !84
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %227) #8
  br label %2707

2276:                                             ; preds = %275, %275
  %2277 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2278 = load ptr, ptr %2277, align 8, !tbaa !84
  %2279 = icmp ne ptr %2278, null
  br i1 %2279, label %2287, label %2280

2280:                                             ; preds = %2276
  %2281 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2281, ptr noundef @.str.29)
          to label %2282 unwind label %2283

2282:                                             ; preds = %2280
  call void @__cxa_throw(ptr %2281, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2283:                                             ; preds = %2280
  %2284 = landingpad { ptr, i32 }
          cleanup
  %2285 = extractvalue { ptr, i32 } %2284, 0
  store ptr %2285, ptr %10, align 8
  %2286 = extractvalue { ptr, i32 } %2284, 1
  store i32 %2286, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2281) #8
  br label %2711

2287:                                             ; preds = %2276
  %2288 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2289 = load ptr, ptr %2288, align 8, !tbaa !84
  %2290 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2289, i32 0, i32 1
  store i32 6, ptr %2290, align 4, !tbaa !169
  %2291 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2291, align 8, !tbaa !84
  br label %2707

2292:                                             ; preds = %275
  %2293 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2294 = load ptr, ptr %2293, align 8, !tbaa !84
  %2295 = icmp ne ptr %2294, null
  br i1 %2295, label %2303, label %2296

2296:                                             ; preds = %2292
  %2297 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2297, ptr noundef @.str.29)
          to label %2298 unwind label %2299

2298:                                             ; preds = %2296
  call void @__cxa_throw(ptr %2297, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2299:                                             ; preds = %2296
  %2300 = landingpad { ptr, i32 }
          cleanup
  %2301 = extractvalue { ptr, i32 } %2300, 0
  store ptr %2301, ptr %10, align 8
  %2302 = extractvalue { ptr, i32 } %2300, 1
  store i32 %2302, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2297) #8
  br label %2711

2303:                                             ; preds = %2292
  %2304 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2305 = load ptr, ptr %2304, align 8, !tbaa !84
  %2306 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2305, i32 0, i32 1
  store i32 8, ptr %2306, align 4, !tbaa !169
  %2307 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2307, align 8, !tbaa !84
  br label %2707

2308:                                             ; preds = %275
  %2309 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2310 = load ptr, ptr %2309, align 8, !tbaa !84
  %2311 = icmp ne ptr %2310, null
  br i1 %2311, label %2319, label %2312

2312:                                             ; preds = %2308
  %2313 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2313, ptr noundef @.str.29)
          to label %2314 unwind label %2315

2314:                                             ; preds = %2312
  call void @__cxa_throw(ptr %2313, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2315:                                             ; preds = %2312
  %2316 = landingpad { ptr, i32 }
          cleanup
  %2317 = extractvalue { ptr, i32 } %2316, 0
  store ptr %2317, ptr %10, align 8
  %2318 = extractvalue { ptr, i32 } %2316, 1
  store i32 %2318, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2313) #8
  br label %2711

2319:                                             ; preds = %2308
  %2320 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2321 = load ptr, ptr %2320, align 8, !tbaa !84
  %2322 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2321, i32 0, i32 1
  store i32 7, ptr %2322, align 4, !tbaa !169
  %2323 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2323, align 8, !tbaa !84
  br label %2707

2324:                                             ; preds = %275
  %2325 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2326 = load ptr, ptr %2325, align 8, !tbaa !84
  %2327 = icmp ne ptr %2326, null
  br i1 %2327, label %2335, label %2328

2328:                                             ; preds = %2324
  %2329 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2329, ptr noundef @.str.29)
          to label %2330 unwind label %2331

2330:                                             ; preds = %2328
  call void @__cxa_throw(ptr %2329, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2331:                                             ; preds = %2328
  %2332 = landingpad { ptr, i32 }
          cleanup
  %2333 = extractvalue { ptr, i32 } %2332, 0
  store ptr %2333, ptr %10, align 8
  %2334 = extractvalue { ptr, i32 } %2332, 1
  store i32 %2334, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2329) #8
  br label %2711

2335:                                             ; preds = %2324
  %2336 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2337 = load ptr, ptr %2336, align 8, !tbaa !84
  %2338 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2337, i32 0, i32 1
  store i32 9, ptr %2338, align 4, !tbaa !169
  call void @llvm.lifetime.start.p0(i64 4, ptr %233) #8
  store i32 0, ptr %233, align 4, !tbaa !16
  br label %2339

2339:                                             ; preds = %2356, %2335
  %2340 = load i32, ptr %233, align 4, !tbaa !16
  %2341 = icmp ult i32 %2340, 3
  br i1 %2341, label %2343, label %2342

2342:                                             ; preds = %2339
  store i32 34, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %233) #8
  br label %2359

2343:                                             ; preds = %2339
  call void @llvm.lifetime.start.p0(i64 4, ptr %234) #8
  %2344 = load ptr, ptr %5, align 8, !tbaa !5
  %2345 = load i32, ptr %233, align 4, !tbaa !16
  %2346 = zext i32 %2345 to i64
  %2347 = getelementptr inbounds i32, ptr %2344, i64 %2346
  %2348 = load i32, ptr %2347, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %234, i32 noundef %2348)
  %2349 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2350 = load ptr, ptr %2349, align 8, !tbaa !84
  %2351 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2350, i32 0, i32 12
  %2352 = getelementptr inbounds %struct.anon, ptr %2351, i32 0, i32 0
  %2353 = load i32, ptr %233, align 4, !tbaa !16
  %2354 = zext i32 %2353 to i64
  %2355 = getelementptr inbounds [3 x %"class.spirv_cross::TypedID.102"], ptr %2352, i64 0, i64 %2354
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2355, ptr align 4 %234, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %234) #8
  br label %2356

2356:                                             ; preds = %2343
  %2357 = load i32, ptr %233, align 4, !tbaa !16
  %2358 = add i32 %2357, 1
  store i32 %2358, ptr %233, align 4, !tbaa !16
  br label %2339, !llvm.loop !193

2359:                                             ; preds = %2342
  call void @llvm.lifetime.start.p0(i64 4, ptr %235) #8
  %2360 = load i32, ptr %7, align 4, !tbaa !16
  %2361 = icmp uge i32 %2360, 4
  br i1 %2361, label %2362, label %2366

2362:                                             ; preds = %2359
  %2363 = load ptr, ptr %5, align 8, !tbaa !5
  %2364 = getelementptr inbounds i32, ptr %2363, i64 3
  %2365 = load i32, ptr %2364, align 4, !tbaa !16
  br label %2367

2366:                                             ; preds = %2359
  br label %2367

2367:                                             ; preds = %2366, %2362
  %2368 = phi i32 [ %2365, %2362 ], [ 0, %2366 ]
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %235, i32 noundef %2368)
  %2369 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2370 = load ptr, ptr %2369, align 8, !tbaa !84
  %2371 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2370, i32 0, i32 12
  %2372 = getelementptr inbounds %struct.anon, ptr %2371, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2372, ptr align 4 %235, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %235) #8
  %2373 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2373, align 8, !tbaa !84
  %2374 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 3
  store i8 1, ptr %2374, align 8, !tbaa !17
  br label %2707

2375:                                             ; preds = %275
  %2376 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2377 = load ptr, ptr %2376, align 8, !tbaa !84
  %2378 = icmp ne ptr %2377, null
  br i1 %2378, label %2386, label %2379

2379:                                             ; preds = %2375
  %2380 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2380, ptr noundef @.str.29)
          to label %2381 unwind label %2382

2381:                                             ; preds = %2379
  call void @__cxa_throw(ptr %2380, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2382:                                             ; preds = %2379
  %2383 = landingpad { ptr, i32 }
          cleanup
  %2384 = extractvalue { ptr, i32 } %2383, 0
  store ptr %2384, ptr %10, align 8
  %2385 = extractvalue { ptr, i32 } %2383, 1
  store i32 %2385, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2380) #8
  br label %2711

2386:                                             ; preds = %2375
  %2387 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2388 = load ptr, ptr %2387, align 8, !tbaa !84
  %2389 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2388, i32 0, i32 1
  store i32 4, ptr %2389, align 4, !tbaa !169
  %2390 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2390, align 8, !tbaa !84
  br label %2707

2391:                                             ; preds = %275
  %2392 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2393 = load ptr, ptr %2392, align 8, !tbaa !84
  %2394 = icmp ne ptr %2393, null
  br i1 %2394, label %2402, label %2395

2395:                                             ; preds = %2391
  %2396 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2396, ptr noundef @.str.29)
          to label %2397 unwind label %2398

2397:                                             ; preds = %2395
  call void @__cxa_throw(ptr %2396, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2398:                                             ; preds = %2395
  %2399 = landingpad { ptr, i32 }
          cleanup
  %2400 = extractvalue { ptr, i32 } %2399, 0
  store ptr %2400, ptr %10, align 8
  %2401 = extractvalue { ptr, i32 } %2399, 1
  store i32 %2401, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2396) #8
  br label %2711

2402:                                             ; preds = %2391
  %2403 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2404 = load ptr, ptr %2403, align 8, !tbaa !84
  %2405 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2404, i32 0, i32 1
  store i32 4, ptr %2405, align 4, !tbaa !169
  call void @llvm.lifetime.start.p0(i64 4, ptr %236) #8
  %2406 = load ptr, ptr %5, align 8, !tbaa !5
  %2407 = getelementptr inbounds i32, ptr %2406, i64 0
  %2408 = load i32, ptr %2407, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %236, i32 noundef %2408)
  %2409 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2410 = load ptr, ptr %2409, align 8, !tbaa !84
  %2411 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2410, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2411, ptr align 4 %236, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %236) #8
  %2412 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2412, align 8, !tbaa !84
  br label %2707

2413:                                             ; preds = %275
  %2414 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2415 = load ptr, ptr %2414, align 8, !tbaa !84
  %2416 = icmp ne ptr %2415, null
  br i1 %2416, label %2424, label %2417

2417:                                             ; preds = %2413
  %2418 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2418, ptr noundef @.str.29)
          to label %2419 unwind label %2420

2419:                                             ; preds = %2417
  call void @__cxa_throw(ptr %2418, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2420:                                             ; preds = %2417
  %2421 = landingpad { ptr, i32 }
          cleanup
  %2422 = extractvalue { ptr, i32 } %2421, 0
  store ptr %2422, ptr %10, align 8
  %2423 = extractvalue { ptr, i32 } %2421, 1
  store i32 %2423, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2418) #8
  br label %2711

2424:                                             ; preds = %2413
  %2425 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2426 = load ptr, ptr %2425, align 8, !tbaa !84
  %2427 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2426, i32 0, i32 1
  store i32 5, ptr %2427, align 4, !tbaa !169
  %2428 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  store ptr null, ptr %2428, align 8, !tbaa !84
  br label %2707

2429:                                             ; preds = %275
  %2430 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2431 = load ptr, ptr %2430, align 8, !tbaa !84
  %2432 = icmp ne ptr %2431, null
  br i1 %2432, label %2440, label %2433

2433:                                             ; preds = %2429
  %2434 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2434, ptr noundef @.str.30)
          to label %2435 unwind label %2436

2435:                                             ; preds = %2433
  call void @__cxa_throw(ptr %2434, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2436:                                             ; preds = %2433
  %2437 = landingpad { ptr, i32 }
          cleanup
  %2438 = extractvalue { ptr, i32 } %2437, 0
  store ptr %2438, ptr %10, align 8
  %2439 = extractvalue { ptr, i32 } %2437, 1
  store i32 %2439, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2434) #8
  br label %2711

2440:                                             ; preds = %2429
  call void @llvm.lifetime.start.p0(i64 4, ptr %237) #8
  %2441 = load ptr, ptr %5, align 8, !tbaa !5
  %2442 = getelementptr inbounds i32, ptr %2441, i64 0
  %2443 = load i32, ptr %2442, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %237, i32 noundef %2443)
  %2444 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2445 = load ptr, ptr %2444, align 8, !tbaa !84
  %2446 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2445, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2446, ptr align 4 %237, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %237) #8
  %2447 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2448 = load ptr, ptr %2447, align 8, !tbaa !84
  %2449 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2448, i32 0, i32 2
  store i32 2, ptr %2449, align 8, !tbaa !187
  %2450 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2451 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2450, i32 0, i32 10
  %2452 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2453 = load ptr, ptr %2452, align 8, !tbaa !84
  %2454 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2453, i32 0, i32 4
  %2455 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2454)
  %2456 = zext i32 %2455 to i64
  %2457 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2451, i64 noundef %2456) #8
  %2458 = load i8, ptr %2457, align 1, !tbaa !188
  %2459 = zext i8 %2458 to i32
  %2460 = or i32 %2459, 8
  %2461 = trunc i32 %2460 to i8
  store i8 %2461, ptr %2457, align 1, !tbaa !188
  %2462 = load i32, ptr %7, align 4, !tbaa !16
  %2463 = icmp uge i32 %2462, 2
  br i1 %2463, label %2464, label %2486

2464:                                             ; preds = %2440
  %2465 = load ptr, ptr %5, align 8, !tbaa !5
  %2466 = getelementptr inbounds i32, ptr %2465, i64 1
  %2467 = load i32, ptr %2466, align 4, !tbaa !16
  %2468 = and i32 %2467, 1
  %2469 = icmp ne i32 %2468, 0
  br i1 %2469, label %2470, label %2474

2470:                                             ; preds = %2464
  %2471 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2472 = load ptr, ptr %2471, align 8, !tbaa !84
  %2473 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2472, i32 0, i32 3
  store i32 3, ptr %2473, align 4, !tbaa !194
  br label %2485

2474:                                             ; preds = %2464
  %2475 = load ptr, ptr %5, align 8, !tbaa !5
  %2476 = getelementptr inbounds i32, ptr %2475, i64 1
  %2477 = load i32, ptr %2476, align 4, !tbaa !16
  %2478 = and i32 %2477, 2
  %2479 = icmp ne i32 %2478, 0
  br i1 %2479, label %2480, label %2484

2480:                                             ; preds = %2474
  %2481 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2482 = load ptr, ptr %2481, align 8, !tbaa !84
  %2483 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2482, i32 0, i32 3
  store i32 4, ptr %2483, align 4, !tbaa !194
  br label %2484

2484:                                             ; preds = %2480, %2474
  br label %2485

2485:                                             ; preds = %2484, %2470
  br label %2486

2486:                                             ; preds = %2485, %2440
  br label %2707

2487:                                             ; preds = %275
  %2488 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2489 = load ptr, ptr %2488, align 8, !tbaa !84
  %2490 = icmp ne ptr %2489, null
  br i1 %2490, label %2498, label %2491

2491:                                             ; preds = %2487
  %2492 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2492, ptr noundef @.str.30)
          to label %2493 unwind label %2494

2493:                                             ; preds = %2491
  call void @__cxa_throw(ptr %2492, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2494:                                             ; preds = %2491
  %2495 = landingpad { ptr, i32 }
          cleanup
  %2496 = extractvalue { ptr, i32 } %2495, 0
  store ptr %2496, ptr %10, align 8
  %2497 = extractvalue { ptr, i32 } %2495, 1
  store i32 %2497, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2492) #8
  br label %2711

2498:                                             ; preds = %2487
  call void @llvm.lifetime.start.p0(i64 4, ptr %238) #8
  %2499 = load ptr, ptr %5, align 8, !tbaa !5
  %2500 = getelementptr inbounds i32, ptr %2499, i64 0
  %2501 = load i32, ptr %2500, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %238, i32 noundef %2501)
  %2502 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2503 = load ptr, ptr %2502, align 8, !tbaa !84
  %2504 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2503, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2504, ptr align 4 %238, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %238) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %239) #8
  %2505 = load ptr, ptr %5, align 8, !tbaa !5
  %2506 = getelementptr inbounds i32, ptr %2505, i64 1
  %2507 = load i32, ptr %2506, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %239, i32 noundef %2507)
  %2508 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2509 = load ptr, ptr %2508, align 8, !tbaa !84
  %2510 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2509, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2510, ptr align 4 %239, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %239) #8
  %2511 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2512 = load ptr, ptr %2511, align 8, !tbaa !84
  %2513 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2512, i32 0, i32 2
  store i32 1, ptr %2513, align 8, !tbaa !187
  %2514 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2515 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2514, i32 0, i32 10
  %2516 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2517 = load ptr, ptr %2516, align 8, !tbaa !84
  %2518 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2517, i32 0, i32 1
  %2519 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2518)
  %2520 = zext i32 %2519 to i64
  %2521 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2515, i64 noundef %2520) #8
  %2522 = load i8, ptr %2521, align 1, !tbaa !188
  %2523 = zext i8 %2522 to i32
  %2524 = or i32 %2523, 1
  %2525 = trunc i32 %2524 to i8
  store i8 %2525, ptr %2521, align 1, !tbaa !188
  %2526 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2527 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2526, i32 0, i32 10
  %2528 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2529 = load ptr, ptr %2528, align 8, !tbaa !84
  %2530 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2529, i32 0, i32 5
  %2531 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2530)
  %2532 = zext i32 %2531 to i64
  %2533 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2527, i64 noundef %2532) #8
  %2534 = load i8, ptr %2533, align 1, !tbaa !188
  %2535 = zext i8 %2534 to i32
  %2536 = or i32 %2535, 4
  %2537 = trunc i32 %2536 to i8
  store i8 %2537, ptr %2533, align 1, !tbaa !188
  call void @llvm.lifetime.start.p0(i64 4, ptr %240) #8
  %2538 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2539 = load ptr, ptr %2538, align 8, !tbaa !84
  %2540 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2539, i32 0, i32 1
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %240, ptr noundef nonnull align 4 dereferenceable(4) %2540)
  %2541 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2542 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2541, i32 0, i32 11
  %2543 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2544 = load ptr, ptr %2543, align 8, !tbaa !84
  %2545 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2544, i32 0, i32 6
  %2546 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(56) %2542, ptr noundef nonnull align 4 dereferenceable(4) %2545)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2546, ptr align 4 %240, i64 4, i1 false), !tbaa.struct !91
  call void @llvm.lifetime.end.p0(i64 4, ptr %240) #8
  %2547 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2548 = load ptr, ptr %2547, align 8, !tbaa !84
  %2549 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2548, i32 0, i32 6
  %2550 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2549)
  call void @llvm.lifetime.start.p0(i64 4, ptr %241) #8
  %2551 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2552 = load ptr, ptr %2551, align 8, !tbaa !84
  %2553 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2552, i32 0, i32 1
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %241, ptr noundef nonnull align 4 dereferenceable(4) %2553)
  %2554 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %241)
  %2555 = icmp ne i32 %2550, %2554
  call void @llvm.lifetime.end.p0(i64 4, ptr %241) #8
  br i1 %2555, label %2556, label %2569

2556:                                             ; preds = %2498
  %2557 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2558 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2557, i32 0, i32 10
  %2559 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2560 = load ptr, ptr %2559, align 8, !tbaa !84
  %2561 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2560, i32 0, i32 6
  %2562 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2561)
  %2563 = zext i32 %2562 to i64
  %2564 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2558, i64 noundef %2563) #8
  %2565 = load i8, ptr %2564, align 1, !tbaa !188
  %2566 = zext i8 %2565 to i32
  %2567 = or i32 %2566, 2
  %2568 = trunc i32 %2567 to i8
  store i8 %2568, ptr %2564, align 1, !tbaa !188
  br label %2569

2569:                                             ; preds = %2556, %2498
  %2570 = load i32, ptr %7, align 4, !tbaa !16
  %2571 = icmp uge i32 %2570, 3
  br i1 %2571, label %2572, label %2594

2572:                                             ; preds = %2569
  %2573 = load ptr, ptr %5, align 8, !tbaa !5
  %2574 = getelementptr inbounds i32, ptr %2573, i64 2
  %2575 = load i32, ptr %2574, align 4, !tbaa !16
  %2576 = and i32 %2575, 1
  %2577 = icmp ne i32 %2576, 0
  br i1 %2577, label %2578, label %2582

2578:                                             ; preds = %2572
  %2579 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2580 = load ptr, ptr %2579, align 8, !tbaa !84
  %2581 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2580, i32 0, i32 3
  store i32 1, ptr %2581, align 4, !tbaa !194
  br label %2593

2582:                                             ; preds = %2572
  %2583 = load ptr, ptr %5, align 8, !tbaa !5
  %2584 = getelementptr inbounds i32, ptr %2583, i64 2
  %2585 = load i32, ptr %2584, align 4, !tbaa !16
  %2586 = and i32 %2585, 2
  %2587 = icmp ne i32 %2586, 0
  br i1 %2587, label %2588, label %2592

2588:                                             ; preds = %2582
  %2589 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2590 = load ptr, ptr %2589, align 8, !tbaa !84
  %2591 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2590, i32 0, i32 3
  store i32 2, ptr %2591, align 4, !tbaa !194
  br label %2592

2592:                                             ; preds = %2588, %2582
  br label %2593

2593:                                             ; preds = %2592, %2578
  br label %2594

2594:                                             ; preds = %2593, %2569
  br label %2707

2595:                                             ; preds = %275
  %2596 = load i32, ptr %7, align 4, !tbaa !16
  %2597 = icmp ult i32 %2596, 3
  br i1 %2597, label %2598, label %2605

2598:                                             ; preds = %2595
  %2599 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2599, ptr noundef @.str.31)
          to label %2600 unwind label %2601

2600:                                             ; preds = %2598
  call void @__cxa_throw(ptr %2599, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2601:                                             ; preds = %2598
  %2602 = landingpad { ptr, i32 }
          cleanup
  %2603 = extractvalue { ptr, i32 } %2602, 0
  store ptr %2603, ptr %10, align 8
  %2604 = extractvalue { ptr, i32 } %2602, 1
  store i32 %2604, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2599) #8
  br label %2711

2605:                                             ; preds = %2595
  call void @llvm.lifetime.start.p0(i64 4, ptr %242) #8
  %2606 = load ptr, ptr %5, align 8, !tbaa !5
  %2607 = getelementptr inbounds i32, ptr %2606, i64 0
  %2608 = load i32, ptr %2607, align 4, !tbaa !16
  store i32 %2608, ptr %242, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %243) #8
  %2609 = load ptr, ptr %5, align 8, !tbaa !5
  %2610 = getelementptr inbounds i32, ptr %2609, i64 1
  %2611 = load i32, ptr %2610, align 4, !tbaa !16
  store i32 %2611, ptr %243, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %244) #8
  %2612 = load ptr, ptr %5, align 8, !tbaa !5
  %2613 = getelementptr inbounds i32, ptr %2612, i64 2
  %2614 = load i32, ptr %2613, align 4, !tbaa !16
  store i32 %2614, ptr %244, align 4, !tbaa !13
  %2615 = load i32, ptr %243, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %245) #8
  %2616 = load ptr, ptr %5, align 8, !tbaa !5
  %2617 = getelementptr inbounds i32, ptr %2616, i64 3
  store ptr %2617, ptr %245, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %246) #8
  %2618 = load i32, ptr %7, align 4, !tbaa !16
  %2619 = sub i32 %2618, 3
  store i32 %2619, ptr %246, align 4, !tbaa !16
  %2620 = call noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross6Parser3setINS_14SPIRConstantOpEJRjRN3spv2OpEPKjjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %2615, ptr noundef nonnull align 4 dereferenceable(4) %242, ptr noundef nonnull align 4 dereferenceable(4) %244, ptr noundef nonnull align 8 dereferenceable(8) %245, ptr noundef nonnull align 4 dereferenceable(4) %246)
  call void @llvm.lifetime.end.p0(i64 4, ptr %246) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #8
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %244) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %243) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %242) #8
  br label %2707

2621:                                             ; preds = %275
  %2622 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2623 = load ptr, ptr %2622, align 8, !tbaa !84
  %2624 = icmp ne ptr %2623, null
  br i1 %2624, label %2625, label %2630

2625:                                             ; preds = %2621
  %2626 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2627 = load ptr, ptr %2626, align 8, !tbaa !84
  %2628 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2627, i32 0, i32 13
  %2629 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %2628, ptr noundef nonnull align 4 dereferenceable(12) %2629) #8
  br label %2630

2630:                                             ; preds = %2625, %2621
  %2631 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %2632 = load ptr, ptr %2631, align 8, !tbaa !161
  %2633 = icmp ne ptr %2632, null
  br i1 %2633, label %2634, label %2657

2634:                                             ; preds = %2630
  %2635 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %2636 = load ptr, ptr %2635, align 8, !tbaa !161
  %2637 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %2636, i32 0, i32 11
  %2638 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::EntryLine", ptr %2637, i32 0, i32 0
  %2639 = load i32, ptr %2638, align 8, !tbaa !195
  %2640 = icmp eq i32 %2639, 0
  br i1 %2640, label %2641, label %2656

2641:                                             ; preds = %2634
  %2642 = load ptr, ptr %5, align 8, !tbaa !5
  %2643 = getelementptr inbounds i32, ptr %2642, i64 0
  %2644 = load i32, ptr %2643, align 4, !tbaa !16
  %2645 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %2646 = load ptr, ptr %2645, align 8, !tbaa !161
  %2647 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %2646, i32 0, i32 11
  %2648 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::EntryLine", ptr %2647, i32 0, i32 0
  store i32 %2644, ptr %2648, align 8, !tbaa !195
  %2649 = load ptr, ptr %5, align 8, !tbaa !5
  %2650 = getelementptr inbounds i32, ptr %2649, i64 1
  %2651 = load i32, ptr %2650, align 4, !tbaa !16
  %2652 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 1
  %2653 = load ptr, ptr %2652, align 8, !tbaa !161
  %2654 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %2653, i32 0, i32 11
  %2655 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::EntryLine", ptr %2654, i32 0, i32 1
  store i32 %2651, ptr %2655, align 4, !tbaa !210
  br label %2656

2656:                                             ; preds = %2641, %2634
  br label %2657

2657:                                             ; preds = %2656, %2630
  br label %2707

2658:                                             ; preds = %275
  %2659 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2660 = load ptr, ptr %2659, align 8, !tbaa !84
  %2661 = icmp ne ptr %2660, null
  br i1 %2661, label %2662, label %2667

2662:                                             ; preds = %2658
  %2663 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2664 = load ptr, ptr %2663, align 8, !tbaa !84
  %2665 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2664, i32 0, i32 13
  %2666 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %2665, ptr noundef nonnull align 4 dereferenceable(12) %2666) #8
  br label %2667

2667:                                             ; preds = %2662, %2658
  br label %2707

2668:                                             ; preds = %275
  %2669 = load i32, ptr %7, align 4, !tbaa !16
  %2670 = icmp uge i32 %2669, 2
  br i1 %2670, label %2671, label %2691

2671:                                             ; preds = %2668
  call void @llvm.lifetime.start.p0(i64 8, ptr %247) #8
  %2672 = load ptr, ptr %5, align 8, !tbaa !5
  %2673 = getelementptr inbounds i32, ptr %2672, i64 0
  %2674 = load i32, ptr %2673, align 4, !tbaa !16
  %2675 = call noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_8SPIRTypeEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %250, i32 noundef %2674)
  store ptr %2675, ptr %247, align 8, !tbaa !5
  %2676 = load ptr, ptr %247, align 8, !tbaa !5
  %2677 = icmp ne ptr %2676, null
  br i1 %2677, label %2678, label %2690

2678:                                             ; preds = %2671
  %2679 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 0
  %2680 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2679, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 8, ptr %248) #8
  %2681 = load ptr, ptr %5, align 8, !tbaa !5
  %2682 = getelementptr inbounds i32, ptr %2681, i64 1
  %2683 = load ptr, ptr %247, align 8, !tbaa !5
  %2684 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2683, i32 0, i32 3
  call void @_ZNSt4pairIKN11spirv_cross7TypedIDILNS0_5TypesE0EEEjEC2IRKjS8_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 4 dereferenceable(8) %248, ptr noundef nonnull align 4 dereferenceable(4) %2682, ptr noundef nonnull align 4 dereferenceable(4) %2684)
  %2685 = call { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE6insertEOSA_(ptr noundef nonnull align 8 dereferenceable(56) %2680, ptr noundef nonnull align 4 dereferenceable(8) %248)
  %2686 = getelementptr inbounds { ptr, i8 }, ptr %249, i32 0, i32 0
  %2687 = extractvalue { ptr, i8 } %2685, 0
  store ptr %2687, ptr %2686, align 8
  %2688 = getelementptr inbounds { ptr, i8 }, ptr %249, i32 0, i32 1
  %2689 = extractvalue { ptr, i8 } %2685, 1
  store i8 %2689, ptr %2688, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %248) #8
  br label %2690

2690:                                             ; preds = %2678, %2671
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #8
  br label %2691

2691:                                             ; preds = %2690, %2668
  %2692 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2693 = load ptr, ptr %2692, align 8, !tbaa !84
  %2694 = icmp ne ptr %2693, null
  br i1 %2694, label %2702, label %2695

2695:                                             ; preds = %2691
  %2696 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2696, ptr noundef @.str.32)
          to label %2697 unwind label %2698

2697:                                             ; preds = %2695
  call void @__cxa_throw(ptr %2696, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

2698:                                             ; preds = %2695
  %2699 = landingpad { ptr, i32 }
          cleanup
  %2700 = extractvalue { ptr, i32 } %2699, 0
  store ptr %2700, ptr %10, align 8
  %2701 = extractvalue { ptr, i32 } %2699, 1
  store i32 %2701, ptr %11, align 4
  call void @__cxa_free_exception(ptr %2696) #8
  br label %2711

2702:                                             ; preds = %2691
  %2703 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %250, i32 0, i32 2
  %2704 = load ptr, ptr %2703, align 8, !tbaa !84
  %2705 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2704, i32 0, i32 13
  %2706 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %2705, ptr noundef nonnull align 4 dereferenceable(12) %2706) #8
  br label %2707

2707:                                             ; preds = %2702, %2667, %2657, %2605, %2594, %2486, %2424, %2402, %2386, %2367, %2319, %2303, %2287, %2262, %2156, %1964, %1949, %1907, %1885, %1864, %1843, %1627, %1616, %1605, %1604, %1563, %1494, %1448, %1440, %1439, %1414, %1323, %1291, %1233, %1215, %1210, %1130, %1105, %1021, %993, %986, %960, %915, %907, %902, %879, %845, %826, %784, %746, %716, %711, %688, %673, %638, %585, %498, %465, %397, %391, %377, %359, %294, %289, %277
  store i32 0, ptr %8, align 4
  br label %2708

2708:                                             ; preds = %2707, %273
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  %2709 = load i32, ptr %8, align 4
  switch i32 %2709, label %2717 [
    i32 0, label %2710
    i32 1, label %2710
  ]

2710:                                             ; preds = %2708, %2708
  ret void

2711:                                             ; preds = %2698, %2601, %2494, %2436, %2420, %2398, %2382, %2331, %2315, %2299, %2283, %2165, %1983, %1960, %1945, %1916, %1903, %1881, %1860, %1842, %1515, %1504, %1484, %954, %903, %846, %712, %689, %554, %418, %387, %290
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  br label %2712

2712:                                             ; preds = %2711
  %2713 = load ptr, ptr %10, align 8
  %2714 = load i32, ptr %11, align 4
  %2715 = insertvalue { ptr, i32 } poison, ptr %2713, 0
  %2716 = insertvalue { ptr, i32 } %2715, i32 %2714, 1
  resume { ptr, i32 } %2716

2717:                                             ; preds = %2708, %1724
  unreachable
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK11spirv_cross6Parser6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(2088), ptr noundef nonnull align 4 dereferenceable(12)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN11spirv_cross6Parser3setINS_10SPIRStringEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #1

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross6Parser3setINS_9SPIRUndefEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #5

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross6Parser3setINS_13SPIRExtensionEJRNS2_9ExtensionEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE6insertEOSA_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(8)) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE6insertIS9_IjS4_EEENSt9enable_ifIXsr16is_constructibleISB_OT_EE5valueES9_INSt8__detail14_Node_iteratorISB_Lb0ELb1EEEbEE4typeESI_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(248)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIRKjN11spirv_cross14SPIREntryPointEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.152") align 8, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(237)) #1

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

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

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

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

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

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

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

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

declare void @_ZN11spirv_cross8ParsedIR8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920), i32, ptr noundef nonnull align 8 dereferenceable(32)) #6

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) #7 align 2

declare void @_ZN11spirv_cross8ParsedIR15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #6

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNK11spirv_cross6Bitset12for_each_bitIZNS_6Parser5parseERKNS_11InstructionEE3$_0EEvRKT_"(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

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

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

declare void @_ZN11spirv_cross8ParsedIR14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, i32 noundef) #6

declare void @_ZN11spirv_cross8ParsedIR21set_decoration_stringENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #6

declare void @_ZN11spirv_cross8ParsedIR21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, i32 noundef, i32 noundef) #6

declare void @_ZN11spirv_cross8ParsedIR28set_member_decoration_stringENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #6

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

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

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

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

declare void @_ZN11spirv_cross8ParsedIR25mark_used_as_array_lengthENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920), i32) #6

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

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

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

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

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8ParsedIR8get_nameB5cxx11ENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920), i32) #6

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Parser30types_are_logically_equivalentERKNS_8SPIRTypeES3_(ptr noundef nonnull align 8 dereferenceable(2088), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(72) ptr @_ZN11spirv_cross6Parser3setINS_21SPIRFunctionPrototypeEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795), i32) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjRN3spv12StorageClassES3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 4 dereferenceable(12)) #3 align 2

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

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

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

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

declare void @_ZN11spirv_cross8ParsedIR18make_constant_nullEjjb(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef, i32 noundef, i1 noundef zeroext) #6

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRjRA4_PKS2_S3_bEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRFunctionEJRjS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795), i32, i32, i1 noundef zeroext) #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross6Parser3setINS_9SPIRBlockEJEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef) #1 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(12)) #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross6Parser3setINS_14SPIRConstantOpEJRjRN3spv2OpEPKjjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

!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, !11, i64 0}
!10 = !{!"_ZTSN11spirv_cross11InstructionE", !11, i64 0, !11, i64 2, !12, i64 4, !12, i64 8}
!11 = !{!"short", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!15 = !{!10, !12, i64 8}
!16 = !{!12, !12, i64 0}
!17 = !{!18, !59, i64 1936}
!18 = !{!"_ZTSN11spirv_cross6ParserE", !19, i64 0, !6, i64 1920, !6, i64 1928, !59, i64 1936, !67, i64 1944, !70, i64 2000}
!19 = !{!"_ZTSN11spirv_cross8ParsedIRE", !20, i64 0, !26, i64 8, !30, i64 32, !34, i64 248, !7, i64 304, !39, i64 1088, !39, i64 1144, !42, i64 1200, !44, i64 1256, !47, i64 1312, !50, i64 1592, !53, i64 1624, !55, i64 1680, !57, i64 1736, !58, i64 1740, !60, i64 1748, !61, i64 1752, !12, i64 1756, !12, i64 1760, !62, i64 1768, !64, i64 1800, !65, i64 1864}
!20 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !22, i64 0}
!22 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !24, i64 0}
!24 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !25, i64 0}
!25 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!26 = !{!"_ZTSSt6vectorIjSaIjEE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!30 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !31, i64 0, !32, i64 16, !33, i64 24}
!31 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !32, i64 8}
!32 = !{!"long", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!34 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !35, i64 0}
!35 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !32, i64 8, !36, i64 16, !32, i64 24, !37, i64 32, !6, i64 48}
!36 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!37 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !38, i64 0, !32, i64 8}
!38 = !{!"float", !7, i64 0}
!39 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !40, i64 0, !32, i64 16, !41, i64 24}
!40 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !32, i64 8}
!41 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!42 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !43, i64 0}
!43 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !32, i64 8, !36, i64 16, !32, i64 24, !37, i64 32, !6, i64 48}
!44 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !45, i64 0, !32, i64 16, !46, i64 24}
!45 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !32, i64 8}
!46 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!47 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !48, i64 0, !32, i64 16, !49, i64 24}
!48 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !32, i64 8}
!49 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!50 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !51, i64 0, !32, i64 16, !52, i64 24}
!51 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !32, i64 8}
!52 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!53 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !54, i64 0}
!54 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !32, i64 8, !36, i64 16, !32, i64 24, !37, i64 32, !6, i64 48}
!55 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !56, i64 0}
!56 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !32, i64 8, !36, i64 16, !32, i64 24, !37, i64 32, !6, i64 48}
!57 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !12, i64 0}
!58 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !12, i64 0, !59, i64 4, !59, i64 5, !59, i64 6}
!59 = !{!"bool", !7, i64 0}
!60 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!61 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!62 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !63, i64 0, !32, i64 8, !7, i64 16}
!63 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!64 = !{!"_ZTSN11spirv_cross6BitsetE", !32, i64 0, !65, i64 8}
!65 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !66, i64 0}
!66 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !32, i64 8, !36, i64 16, !32, i64 24, !37, i64 32, !6, i64 48}
!67 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !68, i64 0, !32, i64 16, !69, i64 24}
!68 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !32, i64 8}
!69 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!70 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !71, i64 0, !32, i64 16, !72, i64 24}
!71 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !6, i64 0, !32, i64 8}
!72 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !7, i64 0}
!73 = !{i8 0, i8 2}
!74 = !{}
!75 = !{!10, !12, i64 4}
!76 = !{!18, !60, i64 1748}
!77 = !{!18, !61, i64 1752}
!78 = !{!79, !79, i64 0}
!79 = !{!"_ZTSN3spv14SourceLanguageE", !7, i64 0}
!80 = !{!18, !59, i64 1744}
!81 = !{!18, !12, i64 1740}
!82 = !{!18, !59, i64 1745}
!83 = !{!18, !59, i64 1746}
!84 = !{!18, !6, i64 1928}
!85 = !{!86, !86, i64 0}
!86 = !{!"_ZTSN3spv10CapabilityE", !7, i64 0}
!87 = !{!88, !88, i64 0}
!88 = !{!"_ZTSN11spirv_cross13SPIRExtension9ExtensionE", !7, i64 0}
!89 = distinct !{!89, !90}
!90 = !{!"llvm.loop.mustprogress"}
!91 = !{i64 0, i64 4, !16}
!92 = !{!93, !93, i64 0}
!93 = !{!"_ZTSN3spv13ExecutionModeE", !7, i64 0}
!94 = !{!95, !12, i64 220}
!95 = !{!"_ZTSN11spirv_cross14SPIREntryPointE", !57, i64 0, !62, i64 8, !62, i64 40, !96, i64 72, !64, i64 128, !99, i64 192, !12, i64 220, !12, i64 224, !12, i64 228, !100, i64 232, !59, i64 236}
!96 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !97, i64 0, !32, i64 16, !98, i64 24}
!97 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !6, i64 0, !32, i64 8}
!98 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !7, i64 0}
!99 = !{!"_ZTSN11spirv_cross14SPIREntryPoint13WorkgroupSizeE", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24}
!100 = !{!"_ZTSN3spv14ExecutionModelE", !7, i64 0}
!101 = !{!95, !12, i64 192}
!102 = !{!95, !12, i64 196}
!103 = !{!95, !12, i64 200}
!104 = !{!95, !12, i64 224}
!105 = !{!95, !12, i64 228}
!106 = !{!95, !12, i64 204}
!107 = !{!95, !12, i64 208}
!108 = !{!95, !12, i64 212}
!109 = !{!110, !6, i64 0}
!110 = !{!"_ZTSZN11spirv_cross6Parser5parseERKNS_11InstructionEE3$_0", !6, i64 0, !6, i64 8, !6, i64 16}
!111 = distinct !{!111, !90}
!112 = !{!113, !6, i64 0}
!113 = !{!"_ZTSZN11spirv_cross6Parser5parseERKNS_11InstructionEE3$_1", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!114 = distinct !{!114, !90}
!115 = !{!116, !116, i64 0}
!116 = !{!"_ZTSN3spv10DecorationE", !7, i64 0}
!117 = !{!118, !121, i64 16}
!118 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !119, i64 0, !14, i64 12, !121, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !67, i64 32, !122, i64 88, !12, i64 120, !59, i64 124, !59, i64 125, !125, i64 128, !126, i64 136, !67, i64 192, !129, i64 248, !130, i64 272, !130, i64 276, !134, i64 280}
!119 = !{!"_ZTSN11spirv_cross8IVariantE", !120, i64 8}
!120 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !12, i64 0}
!121 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!122 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !123, i64 0, !32, i64 16, !124, i64 24}
!123 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !32, i64 8}
!124 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!125 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!126 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !127, i64 0, !32, i64 16, !128, i64 24}
!127 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !32, i64 8}
!128 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!129 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !130, i64 0, !131, i64 4, !59, i64 8, !59, i64 9, !59, i64 10, !12, i64 12, !132, i64 16, !133, i64 20}
!130 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !12, i64 0}
!131 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!132 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!133 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!134 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !135, i64 0}
!135 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !32, i64 8, !36, i64 16, !32, i64 24, !37, i64 32, !6, i64 48}
!136 = !{!118, !12, i64 20}
!137 = !{!59, !59, i64 0}
!138 = !{!118, !14, i64 12}
!139 = !{!118, !12, i64 24}
!140 = !{!118, !12, i64 28}
!141 = !{!142, !59, i64 264}
!142 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !119, i64 0, !130, i64 12, !143, i64 16, !59, i64 264, !59, i64 265, !59, i64 266, !144, i64 272, !62, i64 328}
!143 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !12, i64 240}
!144 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !145, i64 0, !32, i64 16, !146, i64 24}
!145 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !6, i64 0, !32, i64 8}
!146 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!147 = !{!118, !59, i64 125}
!148 = !{!118, !131, i64 252}
!149 = !{!118, !59, i64 256}
!150 = !{!118, !59, i64 257}
!151 = !{!118, !59, i64 258}
!152 = !{!118, !12, i64 260}
!153 = !{!118, !132, i64 264}
!154 = !{!118, !133, i64 268}
!155 = !{!118, !59, i64 124}
!156 = !{!118, !12, i64 120}
!157 = !{!118, !125, i64 128}
!158 = distinct !{!158, !90}
!159 = distinct !{!159, !90}
!160 = !{!125, !125, i64 0}
!161 = !{!18, !6, i64 1920}
!162 = !{!163, !59, i64 153}
!163 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !119, i64 0, !130, i64 12, !125, i64 16, !12, i64 20, !120, i64 24, !164, i64 28, !67, i64 32, !59, i64 88, !59, i64 89, !120, i64 92, !39, i64 96, !59, i64 152, !59, i64 153, !59, i64 154, !59, i64 155, !12, i64 156, !165, i64 160, !59, i64 164, !59, i64 165, !59, i64 166, !6, i64 168}
!164 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !12, i64 0}
!165 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !12, i64 0}
!166 = distinct !{!166, !90}
!167 = !{!32, !32, i64 0}
!168 = distinct !{!168, !90}
!169 = !{!170, !171, i64 12}
!170 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !119, i64 0, !171, i64 12, !172, i64 16, !173, i64 20, !165, i64 24, !165, i64 28, !165, i64 32, !120, i64 36, !120, i64 40, !165, i64 44, !165, i64 48, !165, i64 52, !174, i64 56, !175, i64 72, !178, i64 192, !181, i64 312, !181, i64 400, !184, i64 488, !184, i64 640, !59, i64 792, !59, i64 793, !59, i64 794, !165, i64 796, !165, i64 800, !96, i64 808, !96, i64 864, !39, i64 920}
!171 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !7, i64 0}
!172 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !7, i64 0}
!173 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !7, i64 0}
!174 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !7, i64 0, !120, i64 12}
!175 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !176, i64 0, !32, i64 16, !177, i64 24}
!176 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !6, i64 0, !32, i64 8}
!177 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !7, i64 0}
!178 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !179, i64 0, !32, i64 16, !180, i64 24}
!179 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !6, i64 0, !32, i64 8}
!180 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !7, i64 0}
!181 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !182, i64 0, !32, i64 16, !183, i64 24}
!182 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !6, i64 0, !32, i64 8}
!183 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !7, i64 0}
!184 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !185, i64 0, !32, i64 16, !186, i64 24}
!185 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !6, i64 0, !32, i64 8}
!186 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !7, i64 0}
!187 = !{!170, !172, i64 16}
!188 = !{!7, !7, i64 0}
!189 = !{!190, !32, i64 0}
!190 = !{!"_ZTSN11spirv_cross9SPIRBlock4CaseE", !32, i64 0, !165, i64 8}
!191 = distinct !{!191, !90}
!192 = distinct !{!192, !90}
!193 = distinct !{!193, !90}
!194 = !{!170, !173, i64 20}
!195 = !{!196, !12, i64 664}
!196 = !{!"_ZTSN11spirv_cross12SPIRFunctionE", !119, i64 0, !130, i64 12, !130, i64 16, !197, i64 24, !197, i64 208, !96, i64 392, !165, i64 448, !200, i64 456, !203, i64 512, !206, i64 664, !207, i64 672, !207, i64 704, !39, i64 736, !59, i64 792, !59, i64 793, !59, i64 794}
!197 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12SPIRFunction9ParameterELm8EEE", !198, i64 0, !32, i64 16, !199, i64 24}
!198 = !{!"_ZTSN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEEE", !6, i64 0, !32, i64 8}
!199 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12SPIRFunction9ParameterELm8EEE", !7, i64 0}
!200 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE6EEELm8EEE", !201, i64 0, !32, i64 16, !202, i64 24}
!201 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEEE", !6, i64 0, !32, i64 8}
!202 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE6EEELm8EEE", !7, i64 0}
!203 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12SPIRFunction29CombinedImageSamplerParameterELm8EEE", !204, i64 0, !32, i64 16, !205, i64 24}
!204 = !{!"_ZTSN11spirv_cross10VectorViewINS_12SPIRFunction29CombinedImageSamplerParameterEEE", !6, i64 0, !32, i64 8}
!205 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12SPIRFunction29CombinedImageSamplerParameterELm8EEE", !7, i64 0}
!206 = !{!"_ZTSN11spirv_cross12SPIRFunction9EntryLineE", !12, i64 0, !12, i64 4}
!207 = !{!"_ZTSN11spirv_cross11SmallVectorISt8functionIFvvEELm0EEE", !208, i64 0, !32, i64 16, !209, i64 24}
!208 = !{!"_ZTSN11spirv_cross10VectorViewISt8functionIFvvEEEE", !6, i64 0, !32, i64 8}
!209 = !{!"_ZTSN11spirv_cross13AlignedBufferISt8functionIFvvEELm0EEE"}
!210 = !{!196, !12, i64 668}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::pair.145" = type { %"class.spirv_cross::TypedID.102", i32 }
%"class.spirv_cross::TypedID.102" = type { i32 }
%"struct.std::pair.147" = type <{ %"struct.std::__detail::_Node_iterator.149", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator.149" = type { %"struct.std::__detail::_Node_iterator_base.150" }
%"struct.std::__detail::_Node_iterator_base.150" = type { ptr }
%"struct.std::pair.152" = type { i32, [4 x i8], %"struct.spirv_cross::SPIREntryPoint" }
%"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.140", %"class.spirv_cross::Bitset", %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", i32, i32, i32, i32, i8, [3 x i8] }>
%"class.spirv_cross::TypedID" = type { i32 }
%"class.spirv_cross::SmallVector.140" = type { %"class.spirv_cross::VectorView.141", i64, %"class.spirv_cross::AlignedBuffer.142" }
%"class.spirv_cross::VectorView.141" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.142" = type { [32 x i8] }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.spirv_cross::SPIREntryPoint::WorkgroupSize" = type { i32, i32, i32, i32, i32, i32, i32 }
%"class.spirv_cross::TypedID.156" = type { i32 }
%"class.spirv_cross::TypedID.109" = type { i32 }
%class.anon.173 = type { ptr, ptr, ptr }
%class.anon.174 = type { ptr, ptr, ptr, ptr }
%"struct.std::pair" = type { i32, i32 }
%"struct.spirv_cross::SPIRBlock::Phi" = type { %"class.spirv_cross::TypedID.102", %"class.spirv_cross::TypedID.130", %"class.spirv_cross::TypedID.156" }
%"class.spirv_cross::TypedID.130" = type { i32 }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.109", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.175", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.102" }>
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.102"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.102"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.175" = type { %"class.spirv_cross::VectorView.176", i64, %"class.spirv_cross::AlignedBuffer.177" }
%"class.spirv_cross::VectorView.176" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.177" = type { [32 x i8] }
%"struct.spirv_cross::SPIRBlock::Case" = type <{ i64, %"class.spirv_cross::TypedID.130", [4 x i8] }>

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.9 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [151 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [37 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

declare i32 @__gxx_personality_v0(...)

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross6Parser5parseERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(2088) %0, ptr noundef nonnull align 4 dereferenceable(12) %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"struct.std::pair.145", align 4
  %11 = alloca %"struct.std::pair.147", align 8
  %12 = alloca %"struct.std::pair.152", align 8
  %13 = alloca %"struct.spirv_cross::SPIREntryPoint", align 8
  %14 = alloca %"class.spirv_cross::TypedID", align 4
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.spirv_cross::TypedID.156", align 4
  %17 = alloca %"class.spirv_cross::TypedID.102", align 4
  %18 = alloca %"class.spirv_cross::TypedID", align 4
  %19 = alloca %"class.spirv_cross::TypedID", align 4
  %20 = alloca %"class.spirv_cross::TypedID", align 4
  %21 = alloca %"class.spirv_cross::TypedID.102", align 4
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.spirv_cross::TypedID.109", align 4
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca i32, align 4
  %26 = alloca %"class.spirv_cross::TypedID.102", align 4
  %27 = alloca i32, align 4
  %28 = alloca %class.anon.173, align 8
  %29 = alloca i32, align 4
  %30 = alloca %"class.spirv_cross::TypedID.102", align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca %class.anon.174, align 8
  %34 = alloca %"class.spirv_cross::TypedID.102", align 4
  %35 = alloca i32, align 4
  %36 = alloca %"class.spirv_cross::TypedID.102", align 4
  %37 = alloca %"class.spirv_cross::TypedID.102", align 4
  %38 = alloca %"class.spirv_cross::TypedID.102", align 4
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.spirv_cross::TypedID.109", align 4
  %41 = alloca %"class.spirv_cross::TypedID.109", align 4
  %42 = alloca %"class.spirv_cross::TypedID.109", align 4
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.spirv_cross::TypedID.102", align 4
  %45 = alloca %"class.spirv_cross::TypedID.109", align 4
  %46 = alloca %"class.spirv_cross::TypedID.102", align 4
  %47 = alloca %"class.spirv_cross::TypedID.109", align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca %"class.spirv_cross::TypedID.109", align 4
  %51 = alloca %"class.spirv_cross::TypedID.102", align 4
  %52 = alloca i8, align 1
  %53 = alloca %"struct.std::pair", align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca %"struct.std::pair", align 4
  %57 = alloca i32, align 4
  %58 = alloca i8, align 1
  %59 = alloca %"class.spirv_cross::TypedID.109", align 4
  %60 = alloca %"class.spirv_cross::TypedID.109", align 4
  %61 = alloca %"class.spirv_cross::TypedID.102", align 4
  %62 = alloca i32, align 4
  %63 = alloca %"struct.std::pair", align 4
  %64 = alloca %"class.spirv_cross::TypedID.109", align 4
  %65 = alloca i32, align 4
  %66 = alloca %"class.spirv_cross::TypedID.109", align 4
  %67 = alloca %"class.spirv_cross::TypedID.102", align 4
  %68 = alloca %"class.spirv_cross::TypedID.109", align 4
  %69 = alloca %"class.spirv_cross::TypedID.109", align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca %"class.spirv_cross::TypedID.156", align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca %"class.spirv_cross::TypedID.156", align 4
  %78 = alloca %"struct.spirv_cross::SPIRBlock::Phi", align 4
  %79 = alloca i64, align 8
  %80 = alloca i8, align 1
  %81 = alloca i8, align 1
  %82 = alloca i32, align 4
  %83 = alloca i8, align 1
  %84 = alloca i32, align 4
  %85 = alloca i8, align 1
  %86 = alloca i32, align 4
  %87 = alloca ptr, align 8
  %88 = alloca i32, align 4
  %89 = alloca i8, align 1
  %90 = alloca i32, align 4
  %91 = alloca [4 x %"struct.spirv_cross::SPIRConstant"], align 16
  %92 = alloca [4 x ptr], align 16
  %93 = alloca i8, align 1
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca i32, align 4
  %97 = alloca %"class.spirv_cross::TypedID.109", align 4
  %98 = alloca %"class.spirv_cross::TypedID.102", align 4
  %99 = alloca i32, align 4
  %100 = alloca %"class.spirv_cross::TypedID.130", align 4
  %101 = alloca %"class.spirv_cross::TypedID.130", align 4
  %102 = alloca %"class.spirv_cross::TypedID.130", align 4
  %103 = alloca %"class.spirv_cross::TypedID.102", align 4
  %104 = alloca %"class.spirv_cross::TypedID.130", align 4
  %105 = alloca %"class.spirv_cross::TypedID.130", align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca %"class.spirv_cross::TypedID.102", align 4
  %109 = alloca %"class.spirv_cross::TypedID.130", align 4
  %110 = alloca %"class.spirv_cross::TypedID.130", align 4
  %111 = alloca %"class.spirv_cross::TypedID.130", align 4
  %112 = alloca %"class.spirv_cross::TypedID.102", align 4
  %113 = alloca %"class.spirv_cross::TypedID.130", align 4
  %114 = alloca %"struct.spirv_cross::SPIRBlock::Case", align 8
  %115 = alloca %"struct.spirv_cross::SPIRBlock::Case", align 8
  %116 = alloca %"class.spirv_cross::TypedID.102", align 4
  %117 = alloca %"class.spirv_cross::TypedID.102", align 4
  %118 = alloca %"class.spirv_cross::TypedID.102", align 4
  %119 = alloca %"class.spirv_cross::TypedID.130", align 4
  %120 = alloca %"class.spirv_cross::TypedID.130", align 4
  %121 = alloca %"class.spirv_cross::TypedID.130", align 4
  %122 = alloca %"class.spirv_cross::TypedID.130", align 4
  %123 = alloca %"class.spirv_cross::TypedID.130", align 4
  %124 = alloca i32, align 4
  %125 = alloca i32, align 4
  %126 = alloca ptr, align 8
  %127 = alloca i32, align 4
  %128 = alloca %"struct.std::pair.145", align 4
  %129 = tail call noundef ptr @_ZNK11spirv_cross6Parser6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(2088) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #7
  %130 = load i16, ptr %1, align 4, !tbaa !5
  %131 = zext i16 %130 to i32
  store i32 %131, ptr %3, align 4, !tbaa !11
  %132 = getelementptr inbounds i8, ptr %1, i64 8
  %133 = load i32, ptr %132, align 4, !tbaa !13
  %134 = getelementptr inbounds i8, ptr %0, i64 1936
  %135 = load i8, ptr %134, align 8, !tbaa !14, !range !71, !noundef !72
  %136 = trunc nuw i8 %135 to i1
  br i1 %136, label %137, label %138

137:                                              ; preds = %2
  store i8 0, ptr %134, align 8, !tbaa !14
  switch i16 %130, label %138 [
    i16 255, label %1455
    i16 253, label %1455
    i16 249, label %1455
  ]

138:                                              ; preds = %137, %2
  switch i16 %130, label %1435 [
    i16 2, label %1455
    i16 4, label %1455
    i16 0, label %1455
    i16 330, label %1455
    i16 7, label %139
    i16 14, label %149
    i16 3, label %152
    i16 1, label %175
    i16 17, label %185
    i16 10, label %195
    i16 11, label %200
    i16 12, label %238
    i16 15, label %252
    i16 16, label %299
    i16 331, label %328
    i16 5, label %346
    i16 6, label %356
    i16 73, label %1455
    i16 74, label %368
    i16 75, label %379
    i16 71, label %399
    i16 332, label %399
    i16 5632, label %421
    i16 72, label %433
    i16 5633, label %446
    i16 19, label %460
    i16 20, label %464
    i16 22, label %469
    i16 21, label %484
    i16 23, label %499
    i16 24, label %514
    i16 28, label %529
    i16 29, label %565
    i16 25, label %587
    i16 27, label %626
    i16 26, label %636
    i16 32, label %640
    i16 39, label %672
    i16 30, label %686
    i16 33, label %722
    i16 5341, label %731
    i16 4472, label %735
    i16 59, label %739
    i16 245, label %764
    i16 50, label %802
    i16 43, label %802
    i16 49, label %821
    i16 42, label %821
    i16 48, label %827
    i16 41, label %827
    i16 46, label %833
    i16 51, label %837
    i16 44, label %837
    i16 54, label %935
    i16 55, label %950
    i16 56, label %965
    i16 248, label %975
    i16 249, label %1003
    i16 250, label %1017
    i16 251, label %1132
    i16 252, label %1199
    i16 4416, label %1199
    i16 4449, label %1209
    i16 4448, label %1219
    i16 5294, label %1229
    i16 253, label %1262
    i16 254, label %1272
    i16 255, label %1286
    i16 247, label %1296
    i16 246, label %1329
    i16 52, label %1397
    i16 8, label %1413
    i16 317, label %1430
  ]

139:                                              ; preds = %138
  %140 = load i32, ptr %129, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #7
  %141 = getelementptr inbounds i8, ptr %0, i64 8
  %142 = getelementptr inbounds i8, ptr %1, i64 4
  %143 = load i32, ptr %142, align 4, !tbaa !74
  %144 = add i32 %143, 1
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %4, ptr noundef nonnull align 8 dereferenceable(24) %141, i32 noundef %144)
  %145 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN11spirv_cross6Parser3setINS_10SPIRStringEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %140, ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %146 unwind label %147

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

147:                                              ; preds = %139
  %148 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #7
  br label %1456

149:                                              ; preds = %138
  %150 = getelementptr inbounds i8, ptr %0, i64 1748
  %151 = load <2 x i32>, ptr %129, align 4, !tbaa !73
  store <2 x i32> %151, ptr %150, align 4, !tbaa !75
  br label %1455

152:                                              ; preds = %138
  %153 = load i32, ptr %129, align 4, !tbaa !73
  switch i32 %153, label %173 [
    i32 1, label %154
    i32 2, label %161
    i32 5, label %168
  ]

154:                                              ; preds = %152
  %155 = getelementptr inbounds i8, ptr %0, i64 1740
  %156 = getelementptr inbounds i8, ptr %0, i64 1744
  store i8 1, ptr %156, align 8, !tbaa !76
  %157 = getelementptr inbounds i8, ptr %129, i64 4
  %158 = load i32, ptr %157, align 4, !tbaa !73
  store i32 %158, ptr %155, align 4, !tbaa !77
  %159 = getelementptr inbounds i8, ptr %0, i64 1745
  store i8 1, ptr %159, align 1, !tbaa !78
  %160 = getelementptr inbounds i8, ptr %0, i64 1746
  store i8 0, ptr %160, align 2, !tbaa !79
  br label %1455

161:                                              ; preds = %152
  %162 = getelementptr inbounds i8, ptr %0, i64 1740
  %163 = getelementptr inbounds i8, ptr %0, i64 1744
  store i8 0, ptr %163, align 8, !tbaa !76
  %164 = getelementptr inbounds i8, ptr %129, i64 4
  %165 = load i32, ptr %164, align 4, !tbaa !73
  store i32 %165, ptr %162, align 4, !tbaa !77
  %166 = getelementptr inbounds i8, ptr %0, i64 1745
  store i8 1, ptr %166, align 1, !tbaa !78
  %167 = getelementptr inbounds i8, ptr %0, i64 1746
  store i8 0, ptr %167, align 2, !tbaa !79
  br label %1455

168:                                              ; preds = %152
  %169 = getelementptr inbounds i8, ptr %0, i64 1740
  %170 = getelementptr inbounds i8, ptr %0, i64 1744
  store i8 0, ptr %170, align 8, !tbaa !76
  store i32 450, ptr %169, align 4, !tbaa !77
  %171 = getelementptr inbounds i8, ptr %0, i64 1745
  store i8 1, ptr %171, align 1, !tbaa !78
  %172 = getelementptr inbounds i8, ptr %0, i64 1746
  store i8 1, ptr %172, align 2, !tbaa !79
  br label %1455

173:                                              ; preds = %152
  %174 = getelementptr inbounds i8, ptr %0, i64 1745
  store i8 0, ptr %174, align 1, !tbaa !78
  br label %1455

175:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  %176 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %176, ptr %5, align 4, !tbaa !73
  %177 = getelementptr inbounds i8, ptr %129, i64 4
  %178 = load i32, ptr %177, align 4, !tbaa !73
  %179 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross6Parser3setINS_9SPIRUndefEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %178, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %180 = getelementptr inbounds i8, ptr %0, i64 1928
  %181 = load ptr, ptr %180, align 8, !tbaa !80
  %.not575 = icmp eq ptr %181, null
  br i1 %.not575, label %184, label %182

182:                                              ; preds = %175
  %183 = getelementptr inbounds i8, ptr %181, i64 72
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %183, ptr noundef nonnull align 4 dereferenceable(12) %1) #7
  br label %184

184:                                              ; preds = %182, %175
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  br label %1455

185:                                              ; preds = %138
  %186 = load i32, ptr %129, align 4, !tbaa !73
  %187 = icmp eq i32 %186, 6
  br i1 %187, label %188, label %193

188:                                              ; preds = %185
  %189 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %189, ptr noundef nonnull @.str.9)
          to label %190 unwind label %191

190:                                              ; preds = %188
  tail call void @__cxa_throw(ptr nonnull %189, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

191:                                              ; preds = %188
  %192 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %189) #7
  br label %1456

193:                                              ; preds = %185
  %194 = getelementptr inbounds i8, ptr %0, i64 1256
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #7
  store i32 %186, ptr %6, align 4, !tbaa !81
  call void @_ZN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(56) %194, ptr noundef nonnull align 4 dereferenceable(4) %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  br label %1455

195:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  %196 = getelementptr inbounds i8, ptr %0, i64 8
  %197 = getelementptr inbounds i8, ptr %1, i64 4
  %198 = load i32, ptr %197, align 4, !tbaa !74
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(24) %196, i32 noundef %198)
  %199 = getelementptr inbounds i8, ptr %0, i64 1312
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %199, ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %1455

200:                                              ; preds = %138
  %201 = load i32, ptr %129, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  store i32 0, ptr %8, align 4, !tbaa !83
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  %202 = getelementptr inbounds i8, ptr %0, i64 8
  %203 = getelementptr inbounds i8, ptr %1, i64 4
  %204 = load i32, ptr %203, align 4, !tbaa !74
  %205 = add i32 %204, 1
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(24) %202, i32 noundef %205)
  %206 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.10)
  br i1 %206, label %207, label %210

207:                                              ; preds = %200
  store i32 1, ptr %8, align 4, !tbaa !83
  br label %235

208:                                              ; preds = %235
  %209 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  br label %1456

210:                                              ; preds = %200
  %211 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.11)
  br i1 %211, label %212, label %213

212:                                              ; preds = %210
  store i32 2, ptr %8, align 4, !tbaa !83
  br label %235

213:                                              ; preds = %210
  %214 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.12)
  br i1 %214, label %215, label %216

215:                                              ; preds = %213
  store i32 3, ptr %8, align 4, !tbaa !83
  br label %235

216:                                              ; preds = %213
  %217 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.13)
  br i1 %217, label %218, label %219

218:                                              ; preds = %216
  store i32 4, ptr %8, align 4, !tbaa !83
  br label %235

219:                                              ; preds = %216
  %220 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.14)
  br i1 %220, label %221, label %222

221:                                              ; preds = %219
  store i32 5, ptr %8, align 4, !tbaa !83
  br label %235

222:                                              ; preds = %219
  %223 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.15)
  br i1 %223, label %224, label %225

224:                                              ; preds = %222
  store i32 6, ptr %8, align 4, !tbaa !83
  br label %235

225:                                              ; preds = %222
  %226 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.16)
  br i1 %226, label %227, label %228

227:                                              ; preds = %225
  store i32 7, ptr %8, align 4, !tbaa !83
  br label %235

228:                                              ; preds = %225
  %229 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.17)
  br i1 %229, label %230, label %231

230:                                              ; preds = %228
  store i32 8, ptr %8, align 4, !tbaa !83
  br label %235

231:                                              ; preds = %228
  %232 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcm(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.18, i64 noundef 0) #7
  %233 = icmp eq i64 %232, 0
  br i1 %233, label %234, label %235

234:                                              ; preds = %231
  store i32 9, ptr %8, align 4, !tbaa !83
  br label %235

235:                                              ; preds = %212, %218, %224, %230, %234, %231, %227, %221, %215, %207
  %236 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross6Parser3setINS_13SPIRExtensionEJRNS2_9ExtensionEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %201, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %237 unwind label %208

237:                                              ; preds = %235
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  br label %1455

238:                                              ; preds = %138
  %239 = getelementptr inbounds i8, ptr %0, i64 1928
  %240 = load ptr, ptr %239, align 8, !tbaa !80
  %.not573 = icmp eq ptr %240, null
  br i1 %.not573, label %1455, label %241

241:                                              ; preds = %238
  %242 = getelementptr inbounds i8, ptr %240, i64 72
  tail call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %242, ptr noundef nonnull align 4 dereferenceable(12) %1) #7
  %243 = icmp ugt i32 %133, 1
  br i1 %243, label %244, label %1455

244:                                              ; preds = %241
  %245 = load i32, ptr %129, align 4, !tbaa !73
  %246 = tail call noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_8SPIRTypeEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %245)
  %.not574 = icmp eq ptr %246, null
  br i1 %.not574, label %1455, label %247

247:                                              ; preds = %244
  %248 = getelementptr inbounds i8, ptr %0, i64 1200
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %249 = getelementptr inbounds i8, ptr %129, i64 4
  %250 = getelementptr inbounds i8, ptr %246, i64 20
  call void @_ZNSt4pairIKN11spirv_cross7TypedIDILNS0_5TypesE0EEEjEC2IRKjS8_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 4 dereferenceable(8) %10, ptr noundef nonnull align 4 dereferenceable(4) %249, ptr noundef nonnull align 4 dereferenceable(4) %250)
  %251 = call { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE6insertEOSA_(ptr noundef nonnull align 8 dereferenceable(56) %248, ptr noundef nonnull align 4 dereferenceable(8) %10)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br label %1455

252:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #7
  %253 = getelementptr inbounds i8, ptr %0, i64 1680
  call void @llvm.lifetime.start.p0(i64 248, ptr nonnull %12) #7
  %254 = getelementptr inbounds i8, ptr %129, i64 4
  call void @llvm.lifetime.start.p0(i64 240, ptr nonnull %13) #7
  %255 = load i32, ptr %254, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE4EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %14, i32 noundef %255)
  %256 = load i32, ptr %129, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  %257 = getelementptr inbounds i8, ptr %0, i64 8
  %258 = getelementptr inbounds i8, ptr %1, i64 4
  %259 = load i32, ptr %258, align 4, !tbaa !74
  %260 = add i32 %259, 2
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(24) %257, i32 noundef %260)
  %261 = load i32, ptr %14, align 4
  invoke void @_ZN11spirv_cross14SPIREntryPointC2ENS_7TypedIDILNS_5TypesE4EEEN3spv14ExecutionModelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(237) %13, i32 %261, i32 noundef %256, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %262 unwind label %281

262:                                              ; preds = %252
  invoke void @_ZSt9make_pairIRKjN11spirv_cross14SPIREntryPointEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.152") align 8 %12, ptr noundef nonnull align 4 dereferenceable(4) %254, ptr noundef nonnull align 8 dereferenceable(237) %13)
          to label %263 unwind label %283

263:                                              ; preds = %262
  %264 = invoke { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE6insertIS9_IjS4_EEENSt9enable_ifIXsr16is_constructibleISB_OT_EE5valueES9_INSt8__detail14_Node_iteratorISB_Lb0ELb1EEEbEE4typeESI_(ptr noundef nonnull align 8 dereferenceable(56) %253, ptr noundef nonnull align 8 dereferenceable(248) %12)
          to label %265 unwind label %285

265:                                              ; preds = %263
  %.fca.0.extract = extractvalue { ptr, i8 } %264, 0
  %.fca.1.extract = extractvalue { ptr, i8 } %264, 1
  store ptr %.fca.0.extract, ptr %11, align 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %11, i64 8
  store i8 %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  call void @_ZNSt4pairIjN11spirv_cross14SPIREntryPointEED2Ev(ptr noundef nonnull align 8 dereferenceable(248) %12) #7
  call void @_ZN11spirv_cross14SPIREntryPointD2Ev(ptr noundef nonnull align 8 dereferenceable(237) %13) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 240, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 248, ptr nonnull %12) #7
  %266 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE4EEENS2_14SPIREntryPointEELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  %267 = getelementptr inbounds i8, ptr %266, i64 16
  %268 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %267) #7
  %269 = add i64 %268, 4
  %270 = lshr i64 %269, 2
  %271 = trunc i64 %270 to i32
  %272 = add i32 %271, 2
  %273 = load i32, ptr %132, align 4, !tbaa !13
  %274 = icmp ult i32 %272, %273
  br i1 %274, label %.lr.ph627, label %._crit_edge628

.lr.ph627:                                        ; preds = %265
  %275 = getelementptr inbounds i8, ptr %266, i64 80
  %276 = zext i32 %272 to i64
  br label %289

._crit_edge628:                                   ; preds = %289, %265
  %277 = load i32, ptr %254, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %17, i32 noundef %277)
  %278 = load i32, ptr %17, align 4
  call void @_ZN11spirv_cross8ParsedIR8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %278, ptr noundef nonnull align 8 dereferenceable(32) %267)
  %279 = getelementptr inbounds i8, ptr %0, i64 1736
  %280 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %279)
  %.not572 = icmp eq i32 %280, 0
  br i1 %.not572, label %295, label %298

281:                                              ; preds = %252
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %288

283:                                              ; preds = %262
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %287

285:                                              ; preds = %263
  %286 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIjN11spirv_cross14SPIREntryPointEED2Ev(ptr noundef nonnull align 8 dereferenceable(248) %12) #7
  br label %287

287:                                              ; preds = %285, %283
  %.pn569 = phi { ptr, i32 } [ %286, %285 ], [ %284, %283 ]
  call void @_ZN11spirv_cross14SPIREntryPointD2Ev(ptr noundef nonnull align 8 dereferenceable(237) %13) #7
  br label %288

288:                                              ; preds = %287, %281
  %.pn569.pn = phi { ptr, i32 } [ %.pn569, %287 ], [ %282, %281 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 240, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 248, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  br label %1456

289:                                              ; preds = %.lr.ph627, %289
  %indvars.iv650 = phi i64 [ %276, %.lr.ph627 ], [ %indvars.iv.next651, %289 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  %290 = getelementptr inbounds i32, ptr %129, i64 %indvars.iv650
  %291 = load i32, ptr %290, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %16, i32 noundef %291)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %275, ptr noundef nonnull align 4 dereferenceable(4) %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  %indvars.iv.next651 = add nuw nsw i64 %indvars.iv650, 1
  %292 = load i32, ptr %132, align 4, !tbaa !13
  %293 = zext i32 %292 to i64
  %294 = icmp ult i64 %indvars.iv.next651, %293
  br i1 %294, label %289, label %._crit_edge628, !llvm.loop !85

295:                                              ; preds = %._crit_edge628
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #7
  %296 = load i32, ptr %254, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE4EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %18, i32 noundef %296)
  %297 = load i32, ptr %18, align 4, !tbaa !73
  store i32 %297, ptr %279, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  br label %298

298:                                              ; preds = %295, %._crit_edge628
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  br label %1455

299:                                              ; preds = %138
  %300 = getelementptr inbounds i8, ptr %0, i64 1680
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  %301 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE4EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef %301)
  %302 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %300, ptr noundef nonnull align 4 dereferenceable(4) %19)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  %303 = getelementptr inbounds i8, ptr %129, i64 4
  %304 = load i32, ptr %303, align 4, !tbaa !73
  %305 = getelementptr inbounds i8, ptr %302, i64 128
  call void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %305, i32 noundef %304)
  switch i32 %304, label %1455 [
    i32 0, label %306
    i32 17, label %310
    i32 26, label %320
    i32 5270, label %324
  ]

306:                                              ; preds = %299
  %307 = getelementptr inbounds i8, ptr %129, i64 8
  %308 = load i32, ptr %307, align 4, !tbaa !73
  %309 = getelementptr inbounds i8, ptr %302, i64 220
  store i32 %308, ptr %309, align 4, !tbaa !87
  br label %1455

310:                                              ; preds = %299
  %311 = getelementptr inbounds i8, ptr %129, i64 8
  %312 = load i32, ptr %311, align 4, !tbaa !73
  %313 = getelementptr inbounds i8, ptr %302, i64 192
  store i32 %312, ptr %313, align 8, !tbaa !94
  %314 = getelementptr inbounds i8, ptr %129, i64 12
  %315 = load i32, ptr %314, align 4, !tbaa !73
  %316 = getelementptr inbounds i8, ptr %302, i64 196
  store i32 %315, ptr %316, align 4, !tbaa !95
  %317 = getelementptr inbounds i8, ptr %129, i64 16
  %318 = load i32, ptr %317, align 4, !tbaa !73
  %319 = getelementptr inbounds i8, ptr %302, i64 200
  store i32 %318, ptr %319, align 8, !tbaa !96
  br label %1455

320:                                              ; preds = %299
  %321 = getelementptr inbounds i8, ptr %129, i64 8
  %322 = load i32, ptr %321, align 4, !tbaa !73
  %323 = getelementptr inbounds i8, ptr %302, i64 224
  store i32 %322, ptr %323, align 8, !tbaa !97
  br label %1455

324:                                              ; preds = %299
  %325 = getelementptr inbounds i8, ptr %129, i64 8
  %326 = load i32, ptr %325, align 4, !tbaa !73
  %327 = getelementptr inbounds i8, ptr %302, i64 228
  store i32 %326, ptr %327, align 4, !tbaa !98
  br label %1455

328:                                              ; preds = %138
  %329 = getelementptr inbounds i8, ptr %0, i64 1680
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #7
  %330 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE4EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef %330)
  %331 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %329, ptr noundef nonnull align 4 dereferenceable(4) %20)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  %332 = getelementptr inbounds i8, ptr %129, i64 4
  %333 = load i32, ptr %332, align 4, !tbaa !73
  %334 = getelementptr inbounds i8, ptr %331, i64 128
  call void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64) %334, i32 noundef %333)
  %335 = icmp eq i32 %333, 38
  br i1 %335, label %336, label %1455

336:                                              ; preds = %328
  %337 = getelementptr inbounds i8, ptr %129, i64 8
  %338 = load i32, ptr %337, align 4, !tbaa !73
  %339 = getelementptr inbounds i8, ptr %331, i64 204
  store i32 %338, ptr %339, align 4, !tbaa !99
  %340 = getelementptr inbounds i8, ptr %129, i64 12
  %341 = load i32, ptr %340, align 4, !tbaa !73
  %342 = getelementptr inbounds i8, ptr %331, i64 208
  store i32 %341, ptr %342, align 8, !tbaa !100
  %343 = getelementptr inbounds i8, ptr %129, i64 16
  %344 = load i32, ptr %343, align 4, !tbaa !73
  %345 = getelementptr inbounds i8, ptr %331, i64 212
  store i32 %344, ptr %345, align 4, !tbaa !101
  br label %1455

346:                                              ; preds = %138
  %347 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef %347)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  %348 = getelementptr inbounds i8, ptr %0, i64 8
  %349 = getelementptr inbounds i8, ptr %1, i64 4
  %350 = load i32, ptr %349, align 4, !tbaa !74
  %351 = add i32 %350, 1
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(24) %348, i32 noundef %351)
  %352 = load i32, ptr %21, align 4
  invoke void @_ZN11spirv_cross8ParsedIR8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %352, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %353 unwind label %354

353:                                              ; preds = %346
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %1455

354:                                              ; preds = %346
  %355 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %1456

356:                                              ; preds = %138
  %357 = load i32, ptr %129, align 4, !tbaa !73
  %358 = getelementptr inbounds i8, ptr %129, i64 4
  %359 = load i32, ptr %358, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %23, i32 noundef %357)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  %360 = getelementptr inbounds i8, ptr %0, i64 8
  %361 = getelementptr inbounds i8, ptr %1, i64 4
  %362 = load i32, ptr %361, align 4, !tbaa !74
  %363 = add i32 %362, 2
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(24) %360, i32 noundef %363)
  %364 = load i32, ptr %23, align 4
  invoke void @_ZN11spirv_cross8ParsedIR15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %364, i32 noundef %359, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %365 unwind label %366

365:                                              ; preds = %356
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  br label %1455

366:                                              ; preds = %356
  %367 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  br label %1456

368:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #7
  %369 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %369, ptr %25, align 4, !tbaa !73
  %370 = getelementptr inbounds i8, ptr %0, i64 248
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef %369)
  %371 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %370, ptr noundef nonnull align 4 dereferenceable(4) %26)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  %372 = getelementptr inbounds i8, ptr %371, i64 128
  %373 = icmp ugt i32 %133, 1
  br i1 %373, label %.lr.ph623, label %._crit_edge624

.lr.ph623:                                        ; preds = %368
  %374 = getelementptr inbounds i8, ptr %28, i64 8
  %375 = getelementptr inbounds i8, ptr %28, i64 16
  %wide.trip.count648 = zext i32 %133 to i64
  br label %376

._crit_edge624:                                   ; preds = %376, %368
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  br label %1455

376:                                              ; preds = %.lr.ph623, %376
  %indvars.iv645 = phi i64 [ 1, %.lr.ph623 ], [ %indvars.iv.next646, %376 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #7
  %377 = getelementptr inbounds i32, ptr %129, i64 %indvars.iv645
  %378 = load i32, ptr %377, align 4, !tbaa !73
  store i32 %378, ptr %27, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %28) #7
  store ptr %0, ptr %28, align 8, !tbaa !102
  store ptr %27, ptr %374, align 8, !tbaa !104
  store ptr %25, ptr %375, align 8, !tbaa !104
  call void @"_ZNK11spirv_cross6Bitset12for_each_bitIZNS_6Parser5parseERKNS_11InstructionEE3$_0EEvRKT_"(ptr noundef nonnull align 8 dereferenceable(64) %372, ptr noundef nonnull align 8 dereferenceable(24) %28)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #7
  %indvars.iv.next646 = add nuw nsw i64 %indvars.iv645, 1
  %exitcond649.not = icmp eq i64 %indvars.iv.next646, %wide.trip.count648
  br i1 %exitcond649.not, label %._crit_edge624, label %376, !llvm.loop !105

379:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #7
  %380 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %380, ptr %29, align 4, !tbaa !73
  %381 = getelementptr inbounds i8, ptr %0, i64 248
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %30, i32 noundef %380)
  %382 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %381, ptr noundef nonnull align 4 dereferenceable(4) %30)
  %383 = getelementptr inbounds i8, ptr %382, i64 128
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #7
  %384 = icmp ugt i32 %133, 2
  br i1 %384, label %.lr.ph619, label %._crit_edge620

.lr.ph619:                                        ; preds = %379
  %385 = getelementptr inbounds i8, ptr %33, i64 8
  %386 = getelementptr inbounds i8, ptr %33, i64 16
  %387 = getelementptr inbounds i8, ptr %33, i64 24
  br label %388

._crit_edge620:                                   ; preds = %388, %379
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #7
  br label %1455

388:                                              ; preds = %.lr.ph619, %388
  %389 = phi i32 [ 2, %.lr.ph619 ], [ %397, %388 ]
  %.0483617 = phi i32 [ 1, %.lr.ph619 ], [ %396, %388 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #7
  %390 = zext i32 %.0483617 to i64
  %391 = getelementptr inbounds i32, ptr %129, i64 %390
  %392 = load i32, ptr %391, align 4, !tbaa !73
  store i32 %392, ptr %31, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #7
  %393 = zext i32 %389 to i64
  %394 = getelementptr inbounds i32, ptr %129, i64 %393
  %395 = load i32, ptr %394, align 4, !tbaa !73
  store i32 %395, ptr %32, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #7
  store ptr %0, ptr %33, align 8, !tbaa !106
  store ptr %31, ptr %385, align 8, !tbaa !104
  store ptr %32, ptr %386, align 8, !tbaa !104
  store ptr %29, ptr %387, align 8, !tbaa !104
  call void @"_ZNK11spirv_cross6Bitset12for_each_bitIZNS_6Parser5parseERKNS_11InstructionEE3$_1EEvRKT_"(ptr noundef nonnull align 8 dereferenceable(64) %383, ptr noundef nonnull align 8 dereferenceable(32) %33)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #7
  %396 = add i32 %.0483617, 2
  %397 = add i32 %.0483617, 3
  %398 = icmp ult i32 %397, %133
  br i1 %398, label %388, label %._crit_edge620, !llvm.loop !108

399:                                              ; preds = %138, %138
  %400 = load i32, ptr %129, align 4, !tbaa !73
  %401 = getelementptr inbounds i8, ptr %129, i64 4
  %402 = load i32, ptr %401, align 4, !tbaa !73
  %403 = icmp ugt i32 %133, 2
  br i1 %403, label %404, label %419

404:                                              ; preds = %399
  %405 = getelementptr inbounds i8, ptr %129, i64 8
  %406 = getelementptr inbounds i8, ptr %0, i64 8
  %407 = tail call noundef ptr @_ZNSt6vectorIjSaIjEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %406) #7
  %408 = ptrtoint ptr %405 to i64
  %409 = ptrtoint ptr %407 to i64
  %410 = sub i64 %408, %409
  %411 = lshr exact i64 %410, 2
  %412 = trunc i64 %411 to i32
  %413 = getelementptr inbounds i8, ptr %0, i64 248
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %34, i32 noundef %400)
  %414 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %413, ptr noundef nonnull align 4 dereferenceable(4) %34)
  %415 = getelementptr inbounds i8, ptr %414, i64 424
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #7
  store i32 %402, ptr %35, align 4, !tbaa !73
  %416 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %415, ptr noundef nonnull align 4 dereferenceable(4) %35)
  store i32 %412, ptr %416, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %36, i32 noundef %400)
  %417 = load i32, ptr %405, align 4, !tbaa !73
  %418 = load i32, ptr %36, align 4
  call void @_ZN11spirv_cross8ParsedIR14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %418, i32 noundef %402, i32 noundef %417)
  br label %1455

419:                                              ; preds = %399
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef %400)
  %420 = load i32, ptr %37, align 4
  call void @_ZN11spirv_cross8ParsedIR14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %420, i32 noundef %402, i32 noundef 0)
  br label %1455

421:                                              ; preds = %138
  %422 = load i32, ptr %129, align 4, !tbaa !73
  %423 = getelementptr inbounds i8, ptr %129, i64 4
  %424 = load i32, ptr %423, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %38, i32 noundef %422)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  %425 = getelementptr inbounds i8, ptr %0, i64 8
  %426 = getelementptr inbounds i8, ptr %1, i64 4
  %427 = load i32, ptr %426, align 4, !tbaa !74
  %428 = add i32 %427, 2
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(24) %425, i32 noundef %428)
  %429 = load i32, ptr %38, align 4
  invoke void @_ZN11spirv_cross8ParsedIR21set_decoration_stringENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %429, i32 noundef %424, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %430 unwind label %431

430:                                              ; preds = %421
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %1455

431:                                              ; preds = %421
  %432 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %1456

433:                                              ; preds = %138
  %434 = load i32, ptr %129, align 4, !tbaa !73
  %435 = getelementptr inbounds i8, ptr %129, i64 4
  %436 = load i32, ptr %435, align 4, !tbaa !73
  %437 = getelementptr inbounds i8, ptr %129, i64 8
  %438 = load i32, ptr %437, align 4, !tbaa !73
  %439 = icmp ugt i32 %133, 3
  br i1 %439, label %440, label %444

440:                                              ; preds = %433
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %40, i32 noundef %434)
  %441 = getelementptr inbounds i8, ptr %129, i64 12
  %442 = load i32, ptr %441, align 4, !tbaa !73
  %443 = load i32, ptr %40, align 4
  call void @_ZN11spirv_cross8ParsedIR21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %443, i32 noundef %436, i32 noundef %438, i32 noundef %442)
  br label %1455

444:                                              ; preds = %433
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %41, i32 noundef %434)
  %445 = load i32, ptr %41, align 4
  call void @_ZN11spirv_cross8ParsedIR21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %445, i32 noundef %436, i32 noundef %438, i32 noundef 0)
  br label %1455

446:                                              ; preds = %138
  %447 = load i32, ptr %129, align 4, !tbaa !73
  %448 = getelementptr inbounds i8, ptr %129, i64 4
  %449 = load i32, ptr %448, align 4, !tbaa !73
  %450 = getelementptr inbounds i8, ptr %129, i64 8
  %451 = load i32, ptr %450, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef %447)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #7
  %452 = getelementptr inbounds i8, ptr %0, i64 8
  %453 = getelementptr inbounds i8, ptr %1, i64 4
  %454 = load i32, ptr %453, align 4, !tbaa !74
  %455 = add i32 %454, 3
  call void @_ZN11spirv_crossL14extract_stringB5cxx11ERKSt6vectorIjSaIjEEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(24) %452, i32 noundef %455)
  %456 = load i32, ptr %42, align 4
  invoke void @_ZN11spirv_cross8ParsedIR28set_member_decoration_stringENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %456, i32 noundef %449, i32 noundef %451, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %457 unwind label %458

457:                                              ; preds = %446
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %1455

458:                                              ; preds = %446
  %459 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %1456

460:                                              ; preds = %138
  %461 = load i32, ptr %129, align 4, !tbaa !73
  %462 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %461, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %463 = getelementptr inbounds i8, ptr %462, i64 16
  store i32 1, ptr %463, align 8, !tbaa !109
  br label %1455

464:                                              ; preds = %138
  %465 = load i32, ptr %129, align 4, !tbaa !73
  %466 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %465, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %467 = getelementptr inbounds i8, ptr %466, i64 16
  store i32 2, ptr %467, align 8, !tbaa !109
  %468 = getelementptr inbounds i8, ptr %466, i64 20
  store i32 1, ptr %468, align 4, !tbaa !128
  br label %1455

469:                                              ; preds = %138
  %470 = load i32, ptr %129, align 4, !tbaa !73
  %471 = getelementptr inbounds i8, ptr %129, i64 4
  %472 = load i32, ptr %471, align 4, !tbaa !73
  %473 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %470, ptr noundef nonnull align 4 dereferenceable(4) %3)
  switch i32 %472, label %476 [
    i32 64, label %481
    i32 32, label %474
    i32 16, label %475
  ]

474:                                              ; preds = %469
  br label %481

475:                                              ; preds = %469
  br label %481

476:                                              ; preds = %469
  %477 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %477, ptr noundef nonnull @.str.19)
          to label %478 unwind label %479

478:                                              ; preds = %476
  call void @__cxa_throw(ptr nonnull %477, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

479:                                              ; preds = %476
  %480 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %477) #7
  br label %1456

481:                                              ; preds = %469, %474, %475
  %.sink = phi i32 [ 13, %474 ], [ 12, %475 ], [ 14, %469 ]
  %482 = getelementptr inbounds i8, ptr %473, i64 16
  store i32 %.sink, ptr %482, align 8, !tbaa !109
  %483 = getelementptr inbounds i8, ptr %473, i64 20
  store i32 %472, ptr %483, align 4, !tbaa !128
  br label %1455

484:                                              ; preds = %138
  %485 = load i32, ptr %129, align 4, !tbaa !73
  %486 = getelementptr inbounds i8, ptr %129, i64 4
  %487 = load i32, ptr %486, align 4, !tbaa !73
  %488 = getelementptr inbounds i8, ptr %129, i64 8
  %489 = load i32, ptr %488, align 4, !tbaa !73
  %.not568 = icmp eq i32 %489, 0
  %490 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %485, ptr noundef nonnull align 4 dereferenceable(4) %3)
  br i1 %.not568, label %493, label %491

491:                                              ; preds = %484
  %492 = call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %487)
  br label %495

493:                                              ; preds = %484
  %494 = call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %487)
  br label %495

495:                                              ; preds = %493, %491
  %496 = phi i32 [ %492, %491 ], [ %494, %493 ]
  %497 = getelementptr inbounds i8, ptr %490, i64 16
  store i32 %496, ptr %497, align 8, !tbaa !109
  %498 = getelementptr inbounds i8, ptr %490, i64 20
  store i32 %487, ptr %498, align 4, !tbaa !128
  br label %1455

499:                                              ; preds = %138
  %500 = load i32, ptr %129, align 4, !tbaa !73
  %501 = getelementptr inbounds i8, ptr %129, i64 8
  %502 = load i32, ptr %501, align 4, !tbaa !73
  %503 = getelementptr inbounds i8, ptr %129, i64 4
  %504 = load i32, ptr %503, align 4, !tbaa !73
  %505 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %504)
  %506 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %500, ptr noundef nonnull align 8 dereferenceable(336) %505)
  %507 = getelementptr inbounds i8, ptr %506, i64 12
  store i32 %131, ptr %507, align 4, !tbaa !129
  %508 = getelementptr inbounds i8, ptr %506, i64 24
  store i32 %502, ptr %508, align 8, !tbaa !130
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %44, i32 noundef %500)
  %509 = getelementptr inbounds i8, ptr %506, i64 8
  %510 = load i32, ptr %44, align 4, !tbaa !73
  store i32 %510, ptr %509, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %45) #7
  %511 = load i32, ptr %503, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %45, i32 noundef %511)
  %512 = getelementptr inbounds i8, ptr %506, i64 276
  %513 = load i32, ptr %45, align 4, !tbaa !73
  store i32 %513, ptr %512, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #7
  br label %1455

514:                                              ; preds = %138
  %515 = load i32, ptr %129, align 4, !tbaa !73
  %516 = getelementptr inbounds i8, ptr %129, i64 8
  %517 = load i32, ptr %516, align 4, !tbaa !73
  %518 = getelementptr inbounds i8, ptr %129, i64 4
  %519 = load i32, ptr %518, align 4, !tbaa !73
  %520 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %519)
  %521 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %515, ptr noundef nonnull align 8 dereferenceable(336) %520)
  %522 = getelementptr inbounds i8, ptr %521, i64 12
  store i32 %131, ptr %522, align 4, !tbaa !129
  %523 = getelementptr inbounds i8, ptr %521, i64 28
  store i32 %517, ptr %523, align 4, !tbaa !131
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %46) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %46, i32 noundef %515)
  %524 = getelementptr inbounds i8, ptr %521, i64 8
  %525 = load i32, ptr %46, align 4, !tbaa !73
  store i32 %525, ptr %524, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %47) #7
  %526 = load i32, ptr %518, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %47, i32 noundef %526)
  %527 = getelementptr inbounds i8, ptr %521, i64 276
  %528 = load i32, ptr %47, align 4, !tbaa !73
  store i32 %528, ptr %527, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #7
  br label %1455

529:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %48) #7
  %530 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %530, ptr %48, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %49) #7
  %531 = getelementptr inbounds i8, ptr %129, i64 4
  %532 = load i32, ptr %531, align 4, !tbaa !73
  store i32 %532, ptr %49, align 4, !tbaa !73
  %533 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %532)
  %534 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %530, ptr noundef nonnull align 8 dereferenceable(336) %533)
  %535 = getelementptr inbounds i8, ptr %534, i64 12
  store i32 %131, ptr %535, align 4, !tbaa !129
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %50) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %532)
  %536 = getelementptr inbounds i8, ptr %534, i64 276
  %537 = load i32, ptr %50, align 4, !tbaa !73
  store i32 %537, ptr %536, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %50) #7
  %538 = getelementptr inbounds i8, ptr %129, i64 8
  %539 = load i32, ptr %538, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %51, i32 noundef %539)
  %540 = load i32, ptr %51, align 4
  call void @_ZN11spirv_cross8ParsedIR25mark_used_as_array_lengthENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %540)
  %541 = call noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %539)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %52) #7
  %.not567 = icmp eq ptr %541, null
  br i1 %.not567, label %546, label %542

542:                                              ; preds = %529
  %543 = getelementptr inbounds i8, ptr %541, i64 264
  %544 = load i8, ptr %543, align 8, !tbaa !132, !range !71, !noundef !72
  %545 = xor i8 %544, 1
  br label %546

546:                                              ; preds = %542, %529
  %547 = phi i8 [ 0, %529 ], [ %545, %542 ]
  store i8 %547, ptr %52, align 1, !tbaa !138
  %548 = getelementptr inbounds i8, ptr %533, i64 125
  %549 = load i8, ptr %548, align 1, !tbaa !139, !range !71, !noundef !72
  %550 = trunc nuw i8 %549 to i1
  br i1 %550, label %551, label %553

551:                                              ; preds = %546
  %552 = getelementptr inbounds i8, ptr %0, i64 2000
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #7
  call void @_ZNSt4pairIjjEC2IRjS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %53, ptr noundef nonnull align 4 dereferenceable(4) %48, ptr noundef nonnull align 4 dereferenceable(4) %49)
  call void @_ZN11spirv_cross11SmallVectorISt4pairIjjELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(88) %552, ptr noundef nonnull align 4 dereferenceable(8) %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #7
  br label %553

553:                                              ; preds = %551, %546
  %554 = getelementptr inbounds i8, ptr %534, i64 88
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backERKb(ptr noundef nonnull align 8 dereferenceable(32) %554, ptr noundef nonnull align 1 dereferenceable(1) %52) #7
  %555 = getelementptr inbounds i8, ptr %534, i64 32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %54) #7
  %556 = load i8, ptr %52, align 1, !tbaa !138, !range !71, !noundef !72
  %557 = trunc nuw i8 %556 to i1
  br i1 %557, label %558, label %560

558:                                              ; preds = %553
  %559 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %541, i32 noundef 0, i32 noundef 0)
  br label %560

560:                                              ; preds = %553, %558
  %561 = phi i32 [ %559, %558 ], [ %539, %553 ]
  store i32 %561, ptr %54, align 4, !tbaa !73
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %555, ptr noundef nonnull align 4 dereferenceable(4) %54) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #7
  %562 = getelementptr inbounds i8, ptr %533, i64 8
  %563 = getelementptr inbounds i8, ptr %534, i64 8
  %564 = load i32, ptr %562, align 8, !tbaa !73
  store i32 %564, ptr %563, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %52) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %49) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %48) #7
  br label %1455

565:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %55) #7
  %566 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %566, ptr %55, align 4, !tbaa !73
  %567 = getelementptr inbounds i8, ptr %129, i64 4
  %568 = load i32, ptr %567, align 4, !tbaa !73
  %569 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %568)
  %570 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %566, ptr noundef nonnull align 8 dereferenceable(336) %569)
  %571 = getelementptr inbounds i8, ptr %569, i64 125
  %572 = load i8, ptr %571, align 1, !tbaa !139, !range !71, !noundef !72
  %573 = trunc nuw i8 %572 to i1
  br i1 %573, label %574, label %576

574:                                              ; preds = %565
  %575 = getelementptr inbounds i8, ptr %0, i64 2000
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #7
  call void @_ZNSt4pairIjjEC2IRjRKjTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS6_S7_EEEbE4typeELb1EEEOS6_OS7_(ptr noundef nonnull align 4 dereferenceable(8) %56, ptr noundef nonnull align 4 dereferenceable(4) %55, ptr noundef nonnull align 4 dereferenceable(4) %567)
  call void @_ZN11spirv_cross11SmallVectorISt4pairIjjELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(88) %575, ptr noundef nonnull align 4 dereferenceable(8) %56) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #7
  %.pre655 = load i32, ptr %3, align 4, !tbaa !11
  br label %576

576:                                              ; preds = %574, %565
  %577 = phi i32 [ %.pre655, %574 ], [ 29, %565 ]
  %578 = getelementptr inbounds i8, ptr %570, i64 12
  store i32 %577, ptr %578, align 4, !tbaa !129
  %579 = getelementptr inbounds i8, ptr %570, i64 32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %57) #7
  store i32 0, ptr %57, align 4, !tbaa !73
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %579, ptr noundef nonnull align 4 dereferenceable(4) %57) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %57) #7
  %580 = getelementptr inbounds i8, ptr %570, i64 88
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %58) #7
  store i8 1, ptr %58, align 1, !tbaa !138
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %580, ptr noundef nonnull align 1 dereferenceable(1) %58) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %58) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %59) #7
  %581 = load i32, ptr %567, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %59, i32 noundef %581)
  %582 = getelementptr inbounds i8, ptr %570, i64 276
  %583 = load i32, ptr %59, align 4, !tbaa !73
  store i32 %583, ptr %582, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %59) #7
  %584 = getelementptr inbounds i8, ptr %569, i64 8
  %585 = getelementptr inbounds i8, ptr %570, i64 8
  %586 = load i32, ptr %584, align 8, !tbaa !73
  store i32 %586, ptr %585, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %55) #7
  br label %1455

587:                                              ; preds = %138
  %588 = load i32, ptr %129, align 4, !tbaa !73
  %589 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %588, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %590 = getelementptr inbounds i8, ptr %589, i64 16
  store i32 16, ptr %590, align 8, !tbaa !109
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %60) #7
  %591 = getelementptr inbounds i8, ptr %129, i64 4
  %592 = load i32, ptr %591, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %60, i32 noundef %592)
  %593 = getelementptr inbounds i8, ptr %589, i64 248
  %594 = load i32, ptr %60, align 4, !tbaa !73
  store i32 %594, ptr %593, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %60) #7
  %595 = getelementptr inbounds i8, ptr %129, i64 8
  %596 = load i32, ptr %595, align 4, !tbaa !73
  %597 = getelementptr inbounds i8, ptr %589, i64 252
  store i32 %596, ptr %597, align 4, !tbaa !140
  %598 = getelementptr inbounds i8, ptr %129, i64 12
  %599 = load i32, ptr %598, align 4, !tbaa !73
  %600 = icmp eq i32 %599, 1
  %601 = getelementptr inbounds i8, ptr %589, i64 256
  %602 = zext i1 %600 to i8
  store i8 %602, ptr %601, align 8, !tbaa !141
  %603 = getelementptr inbounds i8, ptr %129, i64 16
  %604 = load i32, ptr %603, align 4, !tbaa !73
  %605 = icmp ne i32 %604, 0
  %606 = getelementptr inbounds i8, ptr %589, i64 257
  %607 = zext i1 %605 to i8
  store i8 %607, ptr %606, align 1, !tbaa !142
  %608 = getelementptr inbounds i8, ptr %129, i64 20
  %609 = load i32, ptr %608, align 4, !tbaa !73
  %610 = icmp ne i32 %609, 0
  %611 = getelementptr inbounds i8, ptr %589, i64 258
  %612 = zext i1 %610 to i8
  store i8 %612, ptr %611, align 2, !tbaa !143
  %613 = getelementptr inbounds i8, ptr %129, i64 24
  %614 = load i32, ptr %613, align 4, !tbaa !73
  %615 = getelementptr inbounds i8, ptr %589, i64 260
  store i32 %614, ptr %615, align 4, !tbaa !144
  %616 = getelementptr inbounds i8, ptr %129, i64 28
  %617 = load i32, ptr %616, align 4, !tbaa !73
  %618 = getelementptr inbounds i8, ptr %589, i64 264
  store i32 %617, ptr %618, align 8, !tbaa !145
  %619 = icmp ugt i32 %133, 8
  br i1 %619, label %620, label %623

620:                                              ; preds = %587
  %621 = getelementptr inbounds i8, ptr %129, i64 32
  %622 = load i32, ptr %621, align 4, !tbaa !73
  br label %623

623:                                              ; preds = %587, %620
  %624 = phi i32 [ %622, %620 ], [ 2147483647, %587 ]
  %625 = getelementptr inbounds i8, ptr %589, i64 268
  store i32 %624, ptr %625, align 4, !tbaa !146
  br label %1455

626:                                              ; preds = %138
  %627 = load i32, ptr %129, align 4, !tbaa !73
  %628 = getelementptr inbounds i8, ptr %129, i64 4
  %629 = load i32, ptr %628, align 4, !tbaa !73
  %630 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %627, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %631 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %629)
  %632 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %630, ptr noundef nonnull align 8 dereferenceable(336) %631)
  %633 = getelementptr inbounds i8, ptr %630, i64 16
  store i32 17, ptr %633, align 8, !tbaa !109
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %61) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %61, i32 noundef %627)
  %634 = getelementptr inbounds i8, ptr %630, i64 8
  %635 = load i32, ptr %61, align 4, !tbaa !73
  store i32 %635, ptr %634, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #7
  br label %1455

636:                                              ; preds = %138
  %637 = load i32, ptr %129, align 4, !tbaa !73
  %638 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %637, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %639 = getelementptr inbounds i8, ptr %638, i64 16
  store i32 18, ptr %639, align 8, !tbaa !109
  br label %1455

640:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %62) #7
  %641 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %641, ptr %62, align 4, !tbaa !73
  %642 = getelementptr inbounds i8, ptr %129, i64 8
  %643 = load i32, ptr %642, align 4, !tbaa !73
  %644 = tail call noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_8SPIRTypeEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %643)
  %645 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %641, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %.not566 = icmp eq ptr %644, null
  br i1 %.not566, label %650, label %646

646:                                              ; preds = %640
  %647 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %645, ptr noundef nonnull align 8 dereferenceable(336) %644)
  %648 = load i32, ptr %3, align 4, !tbaa !11
  %649 = getelementptr inbounds i8, ptr %645, i64 12
  store i32 %648, ptr %649, align 4, !tbaa !129
  br label %650

650:                                              ; preds = %646, %640
  %651 = getelementptr inbounds i8, ptr %645, i64 124
  store i8 1, ptr %651, align 4, !tbaa !147
  %652 = getelementptr inbounds i8, ptr %645, i64 120
  %653 = load i32, ptr %652, align 8, !tbaa !148
  %654 = add i32 %653, 1
  store i32 %654, ptr %652, align 8, !tbaa !148
  %655 = getelementptr inbounds i8, ptr %129, i64 4
  %656 = load i32, ptr %655, align 4, !tbaa !73
  %657 = getelementptr inbounds i8, ptr %645, i64 128
  store i32 %656, ptr %657, align 8, !tbaa !149
  %658 = icmp eq i32 %656, 10
  br i1 %658, label %659, label %661

659:                                              ; preds = %650
  %660 = getelementptr inbounds i8, ptr %645, i64 16
  store i32 11, ptr %660, align 8, !tbaa !109
  br label %661

661:                                              ; preds = %659, %650
  br i1 %.not566, label %668, label %662

662:                                              ; preds = %661
  %663 = getelementptr inbounds i8, ptr %644, i64 125
  %664 = load i8, ptr %663, align 1, !tbaa !139, !range !71, !noundef !72
  %665 = trunc nuw i8 %664 to i1
  br i1 %665, label %666, label %668

666:                                              ; preds = %662
  %667 = getelementptr inbounds i8, ptr %0, i64 2000
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #7
  call void @_ZNSt4pairIjjEC2IRjRKjTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS6_S7_EEEbE4typeELb1EEEOS6_OS7_(ptr noundef nonnull align 4 dereferenceable(8) %63, ptr noundef nonnull align 4 dereferenceable(4) %62, ptr noundef nonnull align 4 dereferenceable(4) %642)
  call void @_ZN11spirv_cross11SmallVectorISt4pairIjjELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(88) %667, ptr noundef nonnull align 4 dereferenceable(8) %63) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #7
  br label %668

668:                                              ; preds = %666, %662, %661
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %64) #7
  %669 = load i32, ptr %642, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %64, i32 noundef %669)
  %670 = getelementptr inbounds i8, ptr %645, i64 276
  %671 = load i32, ptr %64, align 4, !tbaa !73
  store i32 %671, ptr %670, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %64) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %62) #7
  br label %1455

672:                                              ; preds = %138
  %673 = load i32, ptr %129, align 4, !tbaa !73
  %674 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %673, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %675 = getelementptr inbounds i8, ptr %674, i64 124
  store i8 1, ptr %675, align 4, !tbaa !147
  %676 = getelementptr inbounds i8, ptr %674, i64 120
  %677 = load i32, ptr %676, align 8, !tbaa !148
  %678 = add i32 %677, 1
  store i32 %678, ptr %676, align 8, !tbaa !148
  %679 = getelementptr inbounds i8, ptr %129, i64 4
  %680 = load i32, ptr %679, align 4, !tbaa !73
  %681 = getelementptr inbounds i8, ptr %674, i64 128
  store i32 %680, ptr %681, align 8, !tbaa !149
  %682 = getelementptr inbounds i8, ptr %674, i64 125
  store i8 1, ptr %682, align 1, !tbaa !139
  %683 = icmp eq i32 %680, 10
  br i1 %683, label %684, label %1455

684:                                              ; preds = %672
  %685 = getelementptr inbounds i8, ptr %674, i64 16
  store i32 11, ptr %685, align 8, !tbaa !109
  br label %1455

686:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %65) #7
  %687 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %687, ptr %65, align 4, !tbaa !73
  %688 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %687, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %689 = getelementptr inbounds i8, ptr %688, i64 16
  store i32 15, ptr %689, align 8, !tbaa !109
  %690 = icmp ugt i32 %133, 1
  br i1 %690, label %.lr.ph611, label %._crit_edge612

.lr.ph611:                                        ; preds = %686
  %691 = getelementptr inbounds i8, ptr %688, i64 136
  %wide.trip.count643 = zext i32 %133 to i64
  br label %695

._crit_edge612:                                   ; preds = %695, %686
  %692 = getelementptr inbounds i8, ptr %688, i64 8
  %.sroa.095.0.copyload = load i32, ptr %692, align 8, !tbaa !73
  %693 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8ParsedIR8get_nameB5cxx11ENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %.sroa.095.0.copyload)
  %694 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %693) #7
  br i1 %694, label %721, label %698

695:                                              ; preds = %.lr.ph611, %695
  %indvars.iv640 = phi i64 [ 1, %.lr.ph611 ], [ %indvars.iv.next641, %695 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %66) #7
  %696 = getelementptr inbounds i32, ptr %129, i64 %indvars.iv640
  %697 = load i32, ptr %696, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %66, i32 noundef %697)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %691, ptr noundef nonnull align 4 dereferenceable(4) %66) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %66) #7
  %indvars.iv.next641 = add nuw nsw i64 %indvars.iv640, 1
  %exitcond644.not = icmp eq i64 %indvars.iv.next641, %wide.trip.count643
  br i1 %exitcond644.not, label %._crit_edge612, label %695, !llvm.loop !150

698:                                              ; preds = %._crit_edge612
  %699 = getelementptr inbounds i8, ptr %0, i64 1944
  %700 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %699) #7
  %701 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %699) #7
  %.not565613 = icmp eq ptr %700, %701
  br i1 %.not565613, label %.loopexit, label %.lr.ph616

.lr.ph616:                                        ; preds = %698, %714
  %.0485614 = phi ptr [ %715, %714 ], [ %700, %698 ]
  %.sroa.085.0.copyload = load i32, ptr %692, align 8, !tbaa !73
  %702 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8ParsedIR8get_nameB5cxx11ENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %.sroa.085.0.copyload)
  %703 = load i32, ptr %.0485614, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %67, i32 noundef %703)
  %704 = load i32, ptr %67, align 4
  %705 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8ParsedIR8get_nameB5cxx11ENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 %704)
  %706 = call noundef zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(ptr noundef nonnull align 8 dereferenceable(32) %702, ptr noundef nonnull align 8 dereferenceable(32) %705) #7
  br i1 %706, label %707, label %714

707:                                              ; preds = %.lr.ph616
  %708 = load i32, ptr %.0485614, align 4, !tbaa !73
  %709 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %708)
  %710 = call noundef zeroext i1 @_ZNK11spirv_cross6Parser30types_are_logically_equivalentERKNS_8SPIRTypeES3_(ptr noundef nonnull align 8 dereferenceable(2088) %0, ptr noundef nonnull align 8 dereferenceable(336) %688, ptr noundef nonnull align 8 dereferenceable(336) %709)
  br i1 %710, label %.critedge, label %714

.critedge:                                        ; preds = %707
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %68) #7
  %711 = load i32, ptr %.0485614, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %68, i32 noundef %711)
  %712 = getelementptr inbounds i8, ptr %688, i64 272
  %713 = load i32, ptr %68, align 4, !tbaa !73
  store i32 %713, ptr %712, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %68) #7
  br label %.loopexit

714:                                              ; preds = %707, %.lr.ph616
  %715 = getelementptr inbounds i8, ptr %.0485614, i64 4
  %.not565 = icmp eq ptr %715, %701
  br i1 %.not565, label %.loopexit, label %.lr.ph616

.loopexit:                                        ; preds = %714, %698, %.critedge
  %716 = getelementptr inbounds i8, ptr %688, i64 272
  %717 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %716)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %69) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %69, i32 noundef 0)
  %718 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %69)
  %719 = icmp eq i32 %717, %718
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %69) #7
  br i1 %719, label %720, label %721

720:                                              ; preds = %.loopexit
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %699, ptr noundef nonnull align 4 dereferenceable(4) %65) #7
  br label %721

721:                                              ; preds = %.loopexit, %720, %._crit_edge612
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %65) #7
  br label %1455

722:                                              ; preds = %138
  %723 = load i32, ptr %129, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %70) #7
  %724 = getelementptr inbounds i8, ptr %129, i64 4
  %725 = load i32, ptr %724, align 4, !tbaa !73
  store i32 %725, ptr %70, align 4, !tbaa !73
  %726 = call noundef nonnull align 8 dereferenceable(72) ptr @_ZN11spirv_cross6Parser3setINS_21SPIRFunctionPrototypeEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %723, ptr noundef nonnull align 4 dereferenceable(4) %70)
  %727 = icmp ugt i32 %133, 2
  br i1 %727, label %.lr.ph607, label %._crit_edge608

.lr.ph607:                                        ; preds = %722
  %728 = getelementptr inbounds i8, ptr %726, i64 16
  %wide.trip.count = zext i32 %133 to i64
  br label %729

._crit_edge608:                                   ; preds = %729, %722
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %70) #7
  br label %1455

729:                                              ; preds = %.lr.ph607, %729
  %indvars.iv637 = phi i64 [ 2, %.lr.ph607 ], [ %indvars.iv.next638, %729 ]
  %730 = getelementptr inbounds i32, ptr %129, i64 %indvars.iv637
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %728, ptr noundef nonnull align 4 dereferenceable(4) %730) #7
  %indvars.iv.next638 = add nuw nsw i64 %indvars.iv637, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next638, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge608, label %729, !llvm.loop !151

731:                                              ; preds = %138
  %732 = load i32, ptr %129, align 4, !tbaa !73
  %733 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %732, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %734 = getelementptr inbounds i8, ptr %733, i64 16
  store i32 19, ptr %734, align 8, !tbaa !109
  br label %1455

735:                                              ; preds = %138
  %736 = load i32, ptr %129, align 4, !tbaa !73
  %737 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJRN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %736, ptr noundef nonnull align 4 dereferenceable(4) %3)
  %738 = getelementptr inbounds i8, ptr %737, i64 16
  store i32 20, ptr %738, align 8, !tbaa !109
  br label %1455

739:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %71) #7
  %740 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %740, ptr %71, align 4, !tbaa !73
  %741 = getelementptr inbounds i8, ptr %129, i64 4
  %742 = load i32, ptr %741, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %72) #7
  %743 = getelementptr inbounds i8, ptr %129, i64 8
  %744 = load i32, ptr %743, align 4, !tbaa !73
  store i32 %744, ptr %72, align 4, !tbaa !152
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %73) #7
  %745 = icmp eq i32 %133, 4
  br i1 %745, label %746, label %749

746:                                              ; preds = %739
  %747 = getelementptr inbounds i8, ptr %129, i64 12
  %748 = load i32, ptr %747, align 4, !tbaa !73
  br label %749

749:                                              ; preds = %739, %746
  %750 = phi i32 [ %748, %746 ], [ 0, %739 ]
  store i32 %750, ptr %73, align 4, !tbaa !73
  %751 = icmp eq i32 %744, 7
  br i1 %751, label %752, label %762

752:                                              ; preds = %749
  %753 = getelementptr inbounds i8, ptr %0, i64 1920
  %754 = load ptr, ptr %753, align 8, !tbaa !153
  %.not564 = icmp eq ptr %754, null
  br i1 %.not564, label %755, label %760

755:                                              ; preds = %752
  %756 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %756, ptr noundef nonnull @.str.20)
          to label %757 unwind label %758

757:                                              ; preds = %755
  tail call void @__cxa_throw(ptr nonnull %756, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

758:                                              ; preds = %755
  %759 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %756) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %73) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %72) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %71) #7
  br label %1456

760:                                              ; preds = %752
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %74, i32 noundef %742)
  %761 = load i32, ptr %74, align 4
  call void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %754, i32 %761)
  br label %762

762:                                              ; preds = %760, %749
  %763 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjRN3spv12StorageClassES3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %742, ptr noundef nonnull align 4 dereferenceable(4) %71, ptr noundef nonnull align 4 dereferenceable(4) %72, ptr noundef nonnull align 4 dereferenceable(4) %73)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %73) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %72) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %71) #7
  br label %1455

764:                                              ; preds = %138
  %765 = getelementptr inbounds i8, ptr %0, i64 1920
  %766 = load ptr, ptr %765, align 8, !tbaa !153
  %.not561 = icmp eq ptr %766, null
  br i1 %.not561, label %767, label %772

767:                                              ; preds = %764
  %768 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %768, ptr noundef nonnull @.str.20)
          to label %769 unwind label %770

769:                                              ; preds = %767
  tail call void @__cxa_throw(ptr nonnull %768, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

770:                                              ; preds = %767
  %771 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %768) #7
  br label %1456

772:                                              ; preds = %764
  %773 = getelementptr inbounds i8, ptr %0, i64 1928
  %774 = load ptr, ptr %773, align 8, !tbaa !80
  %.not562 = icmp eq ptr %774, null
  br i1 %.not562, label %775, label %780

775:                                              ; preds = %772
  %776 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %776, ptr noundef nonnull @.str.21)
          to label %777 unwind label %778

777:                                              ; preds = %775
  tail call void @__cxa_throw(ptr nonnull %776, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

778:                                              ; preds = %775
  %779 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %776) #7
  br label %1456

780:                                              ; preds = %772
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %75) #7
  %781 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %781, ptr %75, align 4, !tbaa !73
  %782 = getelementptr inbounds i8, ptr %129, i64 4
  %783 = load i32, ptr %782, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %76) #7
  store i32 7, ptr %76, align 4, !tbaa !152
  %784 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %783, ptr noundef nonnull align 4 dereferenceable(4) %75, ptr noundef nonnull align 4 dereferenceable(4) %76)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %76) #7
  %785 = getelementptr inbounds i8, ptr %784, i64 153
  store i8 1, ptr %785, align 1, !tbaa !154
  %786 = load ptr, ptr %765, align 8, !tbaa !153
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %77, i32 noundef %783)
  %787 = load i32, ptr %77, align 4
  call void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795) %786, i32 %787)
  %.not563600 = icmp ult i32 %133, 4
  br i1 %.not563600, label %._crit_edge604, label %.lr.ph603

.lr.ph603:                                        ; preds = %780
  %788 = getelementptr inbounds i8, ptr %78, i64 4
  %789 = getelementptr inbounds i8, ptr %78, i64 8
  br label %790

._crit_edge604:                                   ; preds = %790, %780
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %75) #7
  br label %1455

790:                                              ; preds = %.lr.ph603, %790
  %791 = phi i32 [ 4, %.lr.ph603 ], [ %801, %790 ]
  %.0487601 = phi i32 [ 2, %.lr.ph603 ], [ %791, %790 ]
  %792 = load ptr, ptr %773, align 8, !tbaa !80
  %793 = getelementptr inbounds i8, ptr %792, i64 192
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %78) #7
  %794 = zext i32 %.0487601 to i64
  %795 = getelementptr inbounds i32, ptr %129, i64 %794
  %796 = load i32, ptr %795, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %78, i32 noundef %796)
  %797 = or disjoint i32 %.0487601, 1
  %798 = zext i32 %797 to i64
  %799 = getelementptr inbounds i32, ptr %129, i64 %798
  %800 = load i32, ptr %799, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %788, i32 noundef %800)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %789, i32 noundef %783)
  call void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(120) %793, ptr noundef nonnull align 4 dereferenceable(12) %78) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %78) #7
  %801 = add i32 %791, 2
  %.not563 = icmp ugt i32 %801, %133
  br i1 %.not563, label %._crit_edge604, label %790, !llvm.loop !158

802:                                              ; preds = %138, %138
  %803 = getelementptr inbounds i8, ptr %129, i64 4
  %804 = load i32, ptr %803, align 4, !tbaa !73
  %805 = load i32, ptr %129, align 4, !tbaa !73
  %806 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %805)
  %807 = getelementptr inbounds i8, ptr %806, i64 20
  %808 = load i32, ptr %807, align 4, !tbaa !128
  %809 = icmp ugt i32 %808, 32
  br i1 %809, label %810, label %816

810:                                              ; preds = %802
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #7
  %811 = getelementptr inbounds i8, ptr %129, i64 8
  %812 = load i64, ptr %811, align 4
  store i64 %812, ptr %79, align 8, !tbaa !159
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %80) #7
  %813 = icmp eq i16 %130, 50
  %814 = zext i1 %813 to i8
  store i8 %814, ptr %80, align 1, !tbaa !138
  %815 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRKjmbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %804, ptr noundef nonnull align 4 dereferenceable(4) %129, ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 1 dereferenceable(1) %80)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %80) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #7
  br label %1455

816:                                              ; preds = %802
  %817 = getelementptr inbounds i8, ptr %129, i64 8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %81) #7
  %818 = icmp eq i16 %130, 50
  %819 = zext i1 %818 to i8
  store i8 %819, ptr %81, align 1, !tbaa !138
  %820 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRKjS4_bEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %804, ptr noundef nonnull align 4 dereferenceable(4) %129, ptr noundef nonnull align 4 dereferenceable(4) %817, ptr noundef nonnull align 1 dereferenceable(1) %81)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %81) #7
  br label %1455

821:                                              ; preds = %138, %138
  %822 = getelementptr inbounds i8, ptr %129, i64 4
  %823 = load i32, ptr %822, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %82) #7
  store i32 0, ptr %82, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %83) #7
  %824 = icmp eq i16 %130, 49
  %825 = zext i1 %824 to i8
  store i8 %825, ptr %83, align 1, !tbaa !138
  %826 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRKjjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %823, ptr noundef nonnull align 4 dereferenceable(4) %129, ptr noundef nonnull align 4 dereferenceable(4) %82, ptr noundef nonnull align 1 dereferenceable(1) %83)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %83) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %82) #7
  br label %1455

827:                                              ; preds = %138, %138
  %828 = getelementptr inbounds i8, ptr %129, i64 4
  %829 = load i32, ptr %828, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %84) #7
  store i32 1, ptr %84, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %85) #7
  %830 = icmp eq i16 %130, 48
  %831 = zext i1 %830 to i8
  store i8 %831, ptr %85, align 1, !tbaa !138
  %832 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRKjjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %829, ptr noundef nonnull align 4 dereferenceable(4) %129, ptr noundef nonnull align 4 dereferenceable(4) %84, ptr noundef nonnull align 1 dereferenceable(1) %85)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %85) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %84) #7
  br label %1455

833:                                              ; preds = %138
  %834 = getelementptr inbounds i8, ptr %129, i64 4
  %835 = load i32, ptr %834, align 4, !tbaa !73
  %836 = load i32, ptr %129, align 4, !tbaa !73
  tail call void @_ZN11spirv_cross8ParsedIR18make_constant_nullEjjb(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 noundef %835, i32 noundef %836, i1 noundef zeroext true)
  br label %1455

837:                                              ; preds = %138, %138
  %838 = getelementptr inbounds i8, ptr %129, i64 4
  %839 = load i32, ptr %838, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %86) #7
  %840 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %840, ptr %86, align 4, !tbaa !73
  %841 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %840)
  %842 = getelementptr inbounds i8, ptr %841, i64 16
  %843 = load i32, ptr %842, align 8, !tbaa !109
  %844 = icmp eq i32 %843, 15
  br i1 %844, label %848, label %845

845:                                              ; preds = %837
  %846 = getelementptr inbounds i8, ptr %841, i64 32
  %847 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %846) #7
  br i1 %847, label %854, label %848

848:                                              ; preds = %845, %837
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %87) #7
  %849 = getelementptr inbounds i8, ptr %129, i64 8
  store ptr %849, ptr %87, align 8, !tbaa !104
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %88) #7
  %850 = add i32 %133, -2
  store i32 %850, ptr %88, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %89) #7
  %851 = icmp eq i16 %130, 51
  %852 = zext i1 %851 to i8
  store i8 %852, ptr %89, align 1, !tbaa !138
  %853 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRjPKjjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %839, ptr noundef nonnull align 4 dereferenceable(4) %86, ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull align 4 dereferenceable(4) %88, ptr noundef nonnull align 1 dereferenceable(1) %89)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %89) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %88) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #7
  br label %934

854:                                              ; preds = %845
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %90) #7
  %855 = add i32 %133, -2
  store i32 %855, ptr %90, align 4, !tbaa !73
  %856 = icmp ugt i32 %855, 4
  br i1 %856, label %857, label %862

857:                                              ; preds = %854
  %858 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %858, ptr noundef nonnull @.str.22)
          to label %859 unwind label %860

859:                                              ; preds = %857
  tail call void @__cxa_throw(ptr nonnull %858, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

860:                                              ; preds = %857
  %861 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %858) #7
  br label %933

862:                                              ; preds = %854
  call void @llvm.lifetime.start.p0(i64 1440, ptr nonnull %91) #7
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %91)
          to label %863 unwind label %872

863:                                              ; preds = %862
  %.ptr.1 = getelementptr inbounds i8, ptr %91, i64 360
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %.ptr.1)
          to label %864 unwind label %.preheader.preheader

864:                                              ; preds = %863
  %.ptr.2 = getelementptr inbounds i8, ptr %91, i64 720
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %.ptr.2)
          to label %865 unwind label %.preheader.preheader

865:                                              ; preds = %864
  %.ptr.3 = getelementptr inbounds i8, ptr %91, i64 1080
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %.ptr.3)
          to label %866 unwind label %.preheader.preheader

866:                                              ; preds = %865
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %92) #7
  %.not630 = icmp eq i32 %855, 0
  br i1 %.not630, label %._crit_edge, label %.lr.ph599.preheader

.lr.ph599.preheader:                              ; preds = %866
  %867 = zext nneg i32 %855 to i64
  br label %.lr.ph599

._crit_edge:                                      ; preds = %921, %866
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %93) #7
  %868 = load i32, ptr %3, align 4, !tbaa !11
  %869 = icmp eq i32 %868, 51
  %870 = zext i1 %869 to i8
  store i8 %870, ptr %93, align 1, !tbaa !138
  %871 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRjRA4_PKS2_S3_bEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %839, ptr noundef nonnull align 4 dereferenceable(4) %86, ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull align 4 dereferenceable(4) %90, ptr noundef nonnull align 1 dereferenceable(1) %93)
          to label %924 unwind label %928

872:                                              ; preds = %862
  %lpad.thr_comm.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit582

.preheader.preheader:                             ; preds = %863, %864, %865
  %.ptr.lcssa.ph = phi ptr [ %.ptr.3, %865 ], [ %.ptr.2, %864 ], [ %.ptr.1, %863 ]
  %lpad.thr_comm = landingpad { ptr, i32 }
          cleanup
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %873 = phi ptr [ %874, %.preheader ], [ %.ptr.lcssa.ph, %.preheader.preheader ]
  %874 = getelementptr inbounds i8, ptr %873, i64 -360
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %874) #7
  %875 = icmp eq ptr %874, %91
  br i1 %875, label %.loopexit582, label %.preheader

.lr.ph599:                                        ; preds = %.lr.ph599.preheader, %921
  %indvars.iv = phi i64 [ 0, %.lr.ph599.preheader ], [ %indvars.iv.next, %921 ]
  %876 = add nuw nsw i64 %indvars.iv, 2
  %877 = and i64 %876, 4294967295
  %878 = getelementptr inbounds i32, ptr %129, i64 %877
  %879 = load i32, ptr %878, align 4, !tbaa !73
  %880 = invoke noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_14SPIRConstantOpEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %879)
          to label %881 unwind label %891

881:                                              ; preds = %.lr.ph599
  %882 = load i32, ptr %878, align 4, !tbaa !73
  %883 = invoke noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_9SPIRUndefEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %882)
          to label %884 unwind label %.loopexit583

884:                                              ; preds = %881
  %.not553 = icmp eq ptr %880, null
  br i1 %.not553, label %908, label %885

885:                                              ; preds = %884
  %886 = load i32, ptr %3, align 4, !tbaa !11
  %887 = icmp eq i32 %886, 44
  br i1 %887, label %888, label %895

888:                                              ; preds = %885
  %889 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %889, ptr noundef nonnull @.str.23)
          to label %890 unwind label %893

890:                                              ; preds = %888
  invoke void @__cxa_throw(ptr nonnull %889, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %1457 unwind label %.loopexit.split-lp

891:                                              ; preds = %.lr.ph599
  %892 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit582.loopexit

.loopexit583:                                     ; preds = %881, %895, %900, %909, %914, %918
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit582.loopexit

.loopexit.split-lp:                               ; preds = %890
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit582.loopexit

893:                                              ; preds = %888
  %894 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %889) #7
  br label %.loopexit582.loopexit

895:                                              ; preds = %885
  %896 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %91, i64 0, i64 %indvars.iv
  %897 = getelementptr inbounds i8, ptr %880, i64 72
  %898 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %897)
  %899 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %898)
          to label %900 unwind label %.loopexit583

900:                                              ; preds = %895
  invoke void @_ZN11spirv_cross12SPIRConstant9make_nullERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(360) %896, ptr noundef nonnull align 8 dereferenceable(336) %899)
          to label %901 unwind label %.loopexit583

901:                                              ; preds = %900
  %902 = getelementptr inbounds i8, ptr %880, i64 8
  %903 = getelementptr inbounds i8, ptr %896, i64 8
  %904 = load i32, ptr %902, align 8, !tbaa !73
  store i32 %904, ptr %903, align 8, !tbaa !73
  %905 = getelementptr inbounds i8, ptr %896, i64 12
  %906 = load i32, ptr %897, align 8, !tbaa !73
  store i32 %906, ptr %905, align 4, !tbaa !73
  %907 = getelementptr inbounds i8, ptr %896, i64 264
  store i8 1, ptr %907, align 8, !tbaa !132
  br label %921

908:                                              ; preds = %884
  %.not554 = icmp eq ptr %883, null
  br i1 %.not554, label %918, label %909

909:                                              ; preds = %908
  %910 = getelementptr inbounds [4 x %"struct.spirv_cross::SPIRConstant"], ptr %91, i64 0, i64 %indvars.iv
  %911 = getelementptr inbounds i8, ptr %883, i64 12
  %912 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %911)
  %913 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %912)
          to label %914 unwind label %.loopexit583

914:                                              ; preds = %909
  invoke void @_ZN11spirv_cross12SPIRConstant9make_nullERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(360) %910, ptr noundef nonnull align 8 dereferenceable(336) %913)
          to label %915 unwind label %.loopexit583

915:                                              ; preds = %914
  %916 = getelementptr inbounds i8, ptr %910, i64 12
  %917 = load i32, ptr %911, align 4, !tbaa !73
  store i32 %917, ptr %916, align 4, !tbaa !73
  br label %921

918:                                              ; preds = %908
  %919 = load i32, ptr %878, align 4, !tbaa !73
  %920 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %919)
          to label %921 unwind label %.loopexit583

921:                                              ; preds = %918, %915, %901
  %.sink663 = phi ptr [ %910, %915 ], [ %896, %901 ], [ %920, %918 ]
  %922 = getelementptr inbounds [4 x ptr], ptr %92, i64 0, i64 %indvars.iv
  store ptr %.sink663, ptr %922, align 8, !tbaa !104
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %923 = icmp ult i64 %indvars.iv.next, %867
  br i1 %923, label %.lr.ph599, label %._crit_edge, !llvm.loop !160

924:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %93) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #7
  %925 = getelementptr inbounds i8, ptr %91, i64 1080
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %925) #7
  %926 = getelementptr inbounds i8, ptr %91, i64 720
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %926) #7
  %927 = getelementptr inbounds i8, ptr %91, i64 360
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %927) #7
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %91) #7
  call void @llvm.lifetime.end.p0(i64 1440, ptr nonnull %91) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %90) #7
  br label %934

928:                                              ; preds = %._crit_edge
  %929 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %93) #7
  br label %.loopexit582.loopexit

.loopexit582.loopexit:                            ; preds = %.loopexit583, %.loopexit.split-lp, %891, %893, %928
  %.pn.pn.pn = phi { ptr, i32 } [ %929, %928 ], [ %892, %891 ], [ %894, %893 ], [ %lpad.loopexit, %.loopexit583 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #7
  %930 = getelementptr inbounds i8, ptr %91, i64 1080
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %930) #7
  %931 = getelementptr inbounds i8, ptr %91, i64 720
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %931) #7
  %932 = getelementptr inbounds i8, ptr %91, i64 360
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %932) #7
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %91) #7
  br label %.loopexit582

.loopexit582:                                     ; preds = %.preheader, %872, %.loopexit582.loopexit
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %lpad.thr_comm.split-lp, %872 ], [ %.pn.pn.pn, %.loopexit582.loopexit ], [ %lpad.thr_comm, %.preheader ]
  call void @llvm.lifetime.end.p0(i64 1440, ptr nonnull %91) #7
  br label %933

933:                                              ; preds = %.loopexit582, %860
  %.pn559 = phi { ptr, i32 } [ %861, %860 ], [ %.pn.pn.pn.pn, %.loopexit582 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %90) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %86) #7
  br label %1456

934:                                              ; preds = %924, %848
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %86) #7
  br label %1455

935:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %94) #7
  %936 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %936, ptr %94, align 4, !tbaa !73
  %937 = getelementptr inbounds i8, ptr %129, i64 4
  %938 = load i32, ptr %937, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %95) #7
  %939 = getelementptr inbounds i8, ptr %129, i64 12
  %940 = load i32, ptr %939, align 4, !tbaa !73
  store i32 %940, ptr %95, align 4, !tbaa !73
  %941 = getelementptr inbounds i8, ptr %0, i64 1920
  %942 = load ptr, ptr %941, align 8, !tbaa !153
  %.not551 = icmp eq ptr %942, null
  br i1 %.not551, label %948, label %943

943:                                              ; preds = %935
  %944 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %944, ptr noundef nonnull @.str.24)
          to label %945 unwind label %946

945:                                              ; preds = %943
  tail call void @__cxa_throw(ptr nonnull %944, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

946:                                              ; preds = %943
  %947 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %944) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %95) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %94) #7
  br label %1456

948:                                              ; preds = %935
  %949 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRFunctionEJRjS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %938, ptr noundef nonnull align 4 dereferenceable(4) %94, ptr noundef nonnull align 4 dereferenceable(4) %95)
  store ptr %949, ptr %941, align 8, !tbaa !153
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %95) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %94) #7
  br label %1455

950:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %96) #7
  %951 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %951, ptr %96, align 4, !tbaa !73
  %952 = getelementptr inbounds i8, ptr %0, i64 1920
  %953 = load ptr, ptr %952, align 8, !tbaa !153
  %.not550 = icmp eq ptr %953, null
  br i1 %.not550, label %954, label %959

954:                                              ; preds = %950
  %955 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %955, ptr noundef nonnull @.str.25)
          to label %956 unwind label %957

956:                                              ; preds = %954
  tail call void @__cxa_throw(ptr nonnull %955, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

957:                                              ; preds = %954
  %958 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %955) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %96) #7
  br label %1456

959:                                              ; preds = %950
  %960 = getelementptr inbounds i8, ptr %129, i64 4
  %961 = load i32, ptr %960, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %97, i32 noundef %951)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %98, i32 noundef %961)
  %962 = load i32, ptr %97, align 4
  %963 = load i32, ptr %98, align 4
  call void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795) %953, i32 %962, i32 %963, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %99) #7
  store i32 7, ptr %99, align 4, !tbaa !152
  %964 = call noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %961, ptr noundef nonnull align 4 dereferenceable(4) %96, ptr noundef nonnull align 4 dereferenceable(4) %99)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %99) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %96) #7
  br label %1455

965:                                              ; preds = %138
  %966 = getelementptr inbounds i8, ptr %0, i64 1928
  %967 = load ptr, ptr %966, align 8, !tbaa !80
  %.not549 = icmp eq ptr %967, null
  br i1 %.not549, label %973, label %968

968:                                              ; preds = %965
  %969 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %969, ptr noundef nonnull @.str.26)
          to label %970 unwind label %971

970:                                              ; preds = %968
  tail call void @__cxa_throw(ptr nonnull %969, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

971:                                              ; preds = %968
  %972 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %969) #7
  br label %1456

973:                                              ; preds = %965
  %974 = getelementptr inbounds i8, ptr %0, i64 1920
  store ptr null, ptr %974, align 8, !tbaa !153
  br label %1455

975:                                              ; preds = %138
  %976 = getelementptr inbounds i8, ptr %0, i64 1920
  %977 = load ptr, ptr %976, align 8, !tbaa !153
  %.not546 = icmp eq ptr %977, null
  br i1 %.not546, label %978, label %983

978:                                              ; preds = %975
  %979 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %979, ptr noundef nonnull @.str.27)
          to label %980 unwind label %981

980:                                              ; preds = %978
  tail call void @__cxa_throw(ptr nonnull %979, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

981:                                              ; preds = %978
  %982 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %979) #7
  br label %1456

983:                                              ; preds = %975
  %984 = load i32, ptr %129, align 4, !tbaa !73
  %985 = getelementptr inbounds i8, ptr %977, i64 456
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %100) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %100, i32 noundef %984)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE6EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %985, ptr noundef nonnull align 4 dereferenceable(4) %100) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %100) #7
  %986 = load ptr, ptr %976, align 8, !tbaa !153
  %987 = getelementptr inbounds i8, ptr %986, i64 448
  %988 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %987)
  %.not547 = icmp eq i32 %988, 0
  br i1 %.not547, label %989, label %993

989:                                              ; preds = %983
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %101) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %101, i32 noundef %984)
  %990 = load ptr, ptr %976, align 8, !tbaa !153
  %991 = getelementptr inbounds i8, ptr %990, i64 448
  %992 = load i32, ptr %101, align 4, !tbaa !73
  store i32 %992, ptr %991, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %101) #7
  br label %993

993:                                              ; preds = %989, %983
  %994 = getelementptr inbounds i8, ptr %0, i64 1928
  %995 = load ptr, ptr %994, align 8, !tbaa !80
  %.not548 = icmp eq ptr %995, null
  br i1 %.not548, label %1001, label %996

996:                                              ; preds = %993
  %997 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %997, ptr noundef nonnull @.str.28)
          to label %998 unwind label %999

998:                                              ; preds = %996
  call void @__cxa_throw(ptr nonnull %997, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

999:                                              ; preds = %996
  %1000 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %997) #7
  br label %1456

1001:                                             ; preds = %993
  %1002 = call noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross6Parser3setINS_9SPIRBlockEJEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %984)
  store ptr %1002, ptr %994, align 8, !tbaa !80
  br label %1455

1003:                                             ; preds = %138
  %1004 = getelementptr inbounds i8, ptr %0, i64 1928
  %1005 = load ptr, ptr %1004, align 8, !tbaa !80
  %.not545 = icmp eq ptr %1005, null
  br i1 %.not545, label %1006, label %1011

1006:                                             ; preds = %1003
  %1007 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1007, ptr noundef nonnull @.str.29)
          to label %1008 unwind label %1009

1008:                                             ; preds = %1006
  tail call void @__cxa_throw(ptr nonnull %1007, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1009:                                             ; preds = %1006
  %1010 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1007) #7
  br label %1456

1011:                                             ; preds = %1003
  %1012 = load i32, ptr %129, align 4, !tbaa !73
  %1013 = getelementptr inbounds i8, ptr %1005, i64 12
  store i32 1, ptr %1013, align 4, !tbaa !161
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %102) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %102, i32 noundef %1012)
  %1014 = load ptr, ptr %1004, align 8, !tbaa !80
  %1015 = getelementptr inbounds i8, ptr %1014, i64 24
  %1016 = load i32, ptr %102, align 4, !tbaa !73
  store i32 %1016, ptr %1015, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %102) #7
  store ptr null, ptr %1004, align 8, !tbaa !80
  br label %1455

1017:                                             ; preds = %138
  %1018 = getelementptr inbounds i8, ptr %0, i64 1928
  %1019 = load ptr, ptr %1018, align 8, !tbaa !80
  %.not543 = icmp eq ptr %1019, null
  br i1 %.not543, label %1020, label %1025

1020:                                             ; preds = %1017
  %1021 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1021, ptr noundef nonnull @.str.29)
          to label %1022 unwind label %1023

1022:                                             ; preds = %1020
  tail call void @__cxa_throw(ptr nonnull %1021, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1023:                                             ; preds = %1020
  %1024 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1021) #7
  br label %1456

1025:                                             ; preds = %1017
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %103) #7
  %1026 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %103, i32 noundef %1026)
  %1027 = load ptr, ptr %1018, align 8, !tbaa !80
  %1028 = getelementptr inbounds i8, ptr %1027, i64 40
  %1029 = load i32, ptr %103, align 4, !tbaa !73
  store i32 %1029, ptr %1028, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %103) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %104) #7
  %1030 = getelementptr inbounds i8, ptr %129, i64 4
  %1031 = load i32, ptr %1030, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %104, i32 noundef %1031)
  %1032 = load ptr, ptr %1018, align 8, !tbaa !80
  %1033 = getelementptr inbounds i8, ptr %1032, i64 44
  %1034 = load i32, ptr %104, align 4, !tbaa !73
  store i32 %1034, ptr %1033, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %104) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %105) #7
  %1035 = getelementptr inbounds i8, ptr %129, i64 8
  %1036 = load i32, ptr %1035, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %105, i32 noundef %1036)
  %1037 = load ptr, ptr %1018, align 8, !tbaa !80
  %1038 = getelementptr inbounds i8, ptr %1037, i64 48
  %1039 = load i32, ptr %105, align 4, !tbaa !73
  store i32 %1039, ptr %1038, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %105) #7
  %1040 = getelementptr inbounds i8, ptr %1037, i64 12
  store i32 2, ptr %1040, align 4, !tbaa !161
  %1041 = getelementptr inbounds i8, ptr %1037, i64 44
  %1042 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1041)
  %1043 = load ptr, ptr %1018, align 8, !tbaa !80
  %1044 = getelementptr inbounds i8, ptr %1043, i64 48
  %1045 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1044)
  %1046 = icmp eq i32 %1042, %1045
  br i1 %1046, label %1047, label %1131

1047:                                             ; preds = %1025
  %1048 = load ptr, ptr %1018, align 8, !tbaa !80
  %1049 = getelementptr inbounds i8, ptr %1048, i64 44
  %1050 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1049)
  %1051 = load ptr, ptr %1018, align 8, !tbaa !80
  %1052 = getelementptr inbounds i8, ptr %1051, i64 24
  %1053 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1052)
  %.not544 = icmp eq i32 %1050, %1053
  %.pre = load ptr, ptr %1018, align 8, !tbaa !80
  br i1 %.not544, label %1087, label %1054

1054:                                             ; preds = %1047
  %1055 = getelementptr inbounds i8, ptr %.pre, i64 16
  %1056 = load i32, ptr %1055, align 8, !tbaa !179
  %1057 = icmp eq i32 %1056, 2
  br i1 %1057, label %1058, label %1087

1058:                                             ; preds = %1054
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %106) #7
  %1059 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 noundef 2)
  store i32 %1059, ptr %106, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %107) #7
  store i32 21, ptr %107, align 4, !tbaa !11
  %1060 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3setINS_8SPIRTypeEJN3spv2OpEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %1059, ptr noundef nonnull align 4 dereferenceable(4) %107)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %107) #7
  %1061 = getelementptr inbounds i8, ptr %1060, i64 16
  store i32 7, ptr %1061, align 8, !tbaa !109
  %1062 = getelementptr inbounds i8, ptr %1060, i64 20
  store i32 32, ptr %1062, align 4, !tbaa !128
  %1063 = add i32 %1059, 1
  %1064 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRConstantEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %1063, ptr noundef nonnull align 4 dereferenceable(4) %106)
  %1065 = getelementptr inbounds i8, ptr %1064, i64 8
  %1066 = load ptr, ptr %1018, align 8, !tbaa !80
  %1067 = getelementptr inbounds i8, ptr %1066, i64 40
  %1068 = load i32, ptr %1065, align 8, !tbaa !73
  store i32 %1068, ptr %1067, align 8, !tbaa !73
  %1069 = getelementptr inbounds i8, ptr %1066, i64 44
  %1070 = getelementptr inbounds i8, ptr %1066, i64 52
  %1071 = load i32, ptr %1069, align 4, !tbaa !73
  store i32 %1071, ptr %1070, align 4, !tbaa !73
  %1072 = getelementptr inbounds i8, ptr %1066, i64 12
  store i32 3, ptr %1072, align 4, !tbaa !161
  %1073 = getelementptr inbounds i8, ptr %0, i64 1592
  %1074 = getelementptr inbounds i8, ptr %1066, i64 24
  %1075 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1074)
  %1076 = zext i32 %1075 to i64
  %1077 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1073, i64 noundef %1076) #7
  %1078 = load i8, ptr %1077, align 1, !tbaa !75
  %1079 = and i8 %1078, -9
  store i8 %1079, ptr %1077, align 1, !tbaa !75
  %1080 = load ptr, ptr %1018, align 8, !tbaa !80
  %1081 = getelementptr inbounds i8, ptr %1080, i64 24
  %1082 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1081)
  %1083 = zext i32 %1082 to i64
  %1084 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1073, i64 noundef %1083) #7
  %1085 = load i8, ptr %1084, align 1, !tbaa !75
  %1086 = or i8 %1085, 16
  store i8 %1086, ptr %1084, align 1, !tbaa !75
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %106) #7
  br label %1131

1087:                                             ; preds = %1054, %1047
  %1088 = getelementptr inbounds i8, ptr %.pre, i64 44
  %1089 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1088)
  %1090 = load ptr, ptr %1018, align 8, !tbaa !80
  %1091 = getelementptr inbounds i8, ptr %1090, i64 28
  %1092 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1091)
  %1093 = icmp eq i32 %1089, %1092
  %.pre654 = load ptr, ptr %1018, align 8, !tbaa !80
  br i1 %1093, label %1094, label %.critedge581

1094:                                             ; preds = %1087
  %1095 = getelementptr inbounds i8, ptr %.pre654, i64 16
  %1096 = load i32, ptr %1095, align 8, !tbaa !179
  %1097 = icmp eq i32 %1096, 1
  br i1 %1097, label %1098, label %.critedge581

1098:                                             ; preds = %1094
  %1099 = getelementptr inbounds i8, ptr %0, i64 1592
  %1100 = getelementptr inbounds i8, ptr %.pre654, i64 28
  %1101 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1100)
  %1102 = zext i32 %1101 to i64
  %1103 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1099, i64 noundef %1102) #7
  %1104 = load i8, ptr %1103, align 1, !tbaa !75
  %1105 = and i8 %1104, -5
  store i8 %1105, ptr %1103, align 1, !tbaa !75
  %1106 = load ptr, ptr %1018, align 8, !tbaa !80
  %1107 = getelementptr inbounds i8, ptr %1106, i64 32
  %1108 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1107)
  %1109 = zext i32 %1108 to i64
  %1110 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1099, i64 noundef %1109) #7
  %1111 = load i8, ptr %1110, align 1, !tbaa !75
  %1112 = and i8 %1111, -3
  store i8 %1112, ptr %1110, align 1, !tbaa !75
  %.pre653 = load ptr, ptr %1018, align 8, !tbaa !80
  br label %.critedge581

.critedge581:                                     ; preds = %1087, %1098, %1094
  %1113 = phi ptr [ %.pre654, %1087 ], [ %.pre653, %1098 ], [ %.pre654, %1094 ]
  %1114 = getelementptr inbounds i8, ptr %1113, i64 44
  %1115 = getelementptr inbounds i8, ptr %1113, i64 24
  %1116 = load i32, ptr %1114, align 4, !tbaa !73
  store i32 %1116, ptr %1115, align 8, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %108) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %108, i32 noundef 0)
  %1117 = load ptr, ptr %1018, align 8, !tbaa !80
  %1118 = getelementptr inbounds i8, ptr %1117, i64 40
  %1119 = load i32, ptr %108, align 4, !tbaa !73
  store i32 %1119, ptr %1118, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %108) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %109) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %109, i32 noundef 0)
  %1120 = load ptr, ptr %1018, align 8, !tbaa !80
  %1121 = getelementptr inbounds i8, ptr %1120, i64 44
  %1122 = load i32, ptr %109, align 4, !tbaa !73
  store i32 %1122, ptr %1121, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %109) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %110) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %110, i32 noundef 0)
  %1123 = load ptr, ptr %1018, align 8, !tbaa !80
  %1124 = getelementptr inbounds i8, ptr %1123, i64 48
  %1125 = load i32, ptr %110, align 4, !tbaa !73
  store i32 %1125, ptr %1124, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %110) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %111) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %111, i32 noundef 0)
  %1126 = load ptr, ptr %1018, align 8, !tbaa !80
  %1127 = getelementptr inbounds i8, ptr %1126, i64 28
  %1128 = load i32, ptr %111, align 4, !tbaa !73
  store i32 %1128, ptr %1127, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %111) #7
  %1129 = getelementptr inbounds i8, ptr %1126, i64 16
  store i32 0, ptr %1129, align 8, !tbaa !179
  %1130 = getelementptr inbounds i8, ptr %1126, i64 12
  store i32 1, ptr %1130, align 4, !tbaa !161
  br label %1131

1131:                                             ; preds = %1058, %.critedge581, %1025
  store ptr null, ptr %1018, align 8, !tbaa !80
  br label %1455

1132:                                             ; preds = %138
  %1133 = getelementptr inbounds i8, ptr %0, i64 1928
  %1134 = load ptr, ptr %1133, align 8, !tbaa !80
  %.not540 = icmp eq ptr %1134, null
  br i1 %.not540, label %1135, label %1140

1135:                                             ; preds = %1132
  %1136 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1136, ptr noundef nonnull @.str.29)
          to label %1137 unwind label %1138

1137:                                             ; preds = %1135
  tail call void @__cxa_throw(ptr nonnull %1136, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1138:                                             ; preds = %1135
  %1139 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1136) #7
  br label %1456

1140:                                             ; preds = %1132
  %1141 = getelementptr inbounds i8, ptr %1134, i64 12
  store i32 3, ptr %1141, align 4, !tbaa !161
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %112) #7
  %1142 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %112, i32 noundef %1142)
  %1143 = load ptr, ptr %1133, align 8, !tbaa !80
  %1144 = getelementptr inbounds i8, ptr %1143, i64 40
  %1145 = load i32, ptr %112, align 4, !tbaa !73
  store i32 %1145, ptr %1144, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %112) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %113) #7
  %1146 = getelementptr inbounds i8, ptr %129, i64 4
  %1147 = load i32, ptr %1146, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %113, i32 noundef %1147)
  %1148 = load ptr, ptr %1133, align 8, !tbaa !80
  %1149 = getelementptr inbounds i8, ptr %1148, i64 52
  %1150 = load i32, ptr %113, align 4, !tbaa !73
  store i32 %1150, ptr %1149, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %113) #7
  %1151 = add i32 %133, -2
  %1152 = and i32 %133, 1
  %1153 = icmp ne i32 %1152, 0
  %.not541593 = icmp ult i32 %133, 4
  %or.cond = or i1 %1153, %.not541593
  br i1 %or.cond, label %.loopexit588, label %.lr.ph

.lr.ph:                                           ; preds = %1140
  %1154 = getelementptr inbounds i8, ptr %114, i64 8
  br label %1155

1155:                                             ; preds = %.lr.ph, %1155
  %1156 = phi i32 [ 4, %.lr.ph ], [ %1167, %1155 ]
  %.0482594 = phi i32 [ 2, %.lr.ph ], [ %1156, %1155 ]
  %1157 = load ptr, ptr %1133, align 8, !tbaa !80
  %1158 = getelementptr inbounds i8, ptr %1157, i64 488
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %114) #7
  %1159 = zext i32 %.0482594 to i64
  %1160 = getelementptr inbounds i32, ptr %129, i64 %1159
  %1161 = load i32, ptr %1160, align 4, !tbaa !73
  %1162 = zext i32 %1161 to i64
  store i64 %1162, ptr %114, align 8, !tbaa !180
  %1163 = or disjoint i32 %.0482594, 1
  %1164 = zext i32 %1163 to i64
  %1165 = getelementptr inbounds i32, ptr %129, i64 %1164
  %1166 = load i32, ptr %1165, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %1154, i32 noundef %1166)
  call void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(152) %1158, ptr noundef nonnull align 8 dereferenceable(12) %114) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %114) #7
  %1167 = add i32 %1156, 2
  %.not541 = icmp ugt i32 %1167, %133
  br i1 %.not541, label %.loopexit588, label %1155, !llvm.loop !182

.loopexit588:                                     ; preds = %1155, %1140
  %1168 = urem i32 %1151, 3
  %1169 = icmp ne i32 %1168, 0
  %.not542595 = icmp ult i32 %133, 5
  %or.cond629 = select i1 %1169, i1 true, i1 %.not542595
  br i1 %or.cond629, label %.loopexit586, label %.lr.ph597

.lr.ph597:                                        ; preds = %.loopexit588
  %1170 = getelementptr inbounds i8, ptr %115, i64 8
  br label %1171

1171:                                             ; preds = %.lr.ph597, %1171
  %1172 = phi i32 [ 5, %.lr.ph597 ], [ %1190, %1171 ]
  %.0481596 = phi i32 [ 2, %.lr.ph597 ], [ %1172, %1171 ]
  %1173 = add i32 %.0481596, 1
  %1174 = zext i32 %1173 to i64
  %1175 = getelementptr inbounds i32, ptr %129, i64 %1174
  %1176 = load i32, ptr %1175, align 4, !tbaa !73
  %1177 = zext i32 %1176 to i64
  %1178 = shl nuw i64 %1177, 32
  %1179 = zext i32 %.0481596 to i64
  %1180 = getelementptr inbounds i32, ptr %129, i64 %1179
  %1181 = load i32, ptr %1180, align 4, !tbaa !73
  %1182 = zext i32 %1181 to i64
  %1183 = or disjoint i64 %1178, %1182
  %1184 = load ptr, ptr %1133, align 8, !tbaa !80
  %1185 = getelementptr inbounds i8, ptr %1184, i64 640
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %115) #7
  store i64 %1183, ptr %115, align 8, !tbaa !180
  %1186 = add i32 %.0481596, 2
  %1187 = zext i32 %1186 to i64
  %1188 = getelementptr inbounds i32, ptr %129, i64 %1187
  %1189 = load i32, ptr %1188, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %1170, i32 noundef %1189)
  call void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(152) %1185, ptr noundef nonnull align 8 dereferenceable(12) %115) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %115) #7
  %1190 = add i32 %1172, 3
  %.not542 = icmp ugt i32 %1190, %133
  br i1 %.not542, label %.loopexit586, label %1171, !llvm.loop !183

.loopexit586:                                     ; preds = %1171, %.loopexit588
  %1191 = getelementptr inbounds i8, ptr %0, i64 1592
  %1192 = load ptr, ptr %1133, align 8, !tbaa !80
  %1193 = getelementptr inbounds i8, ptr %1192, i64 24
  %1194 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1193)
  %1195 = zext i32 %1194 to i64
  %1196 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1191, i64 noundef %1195) #7
  %1197 = load i8, ptr %1196, align 1, !tbaa !75
  %1198 = or i8 %1197, 16
  store i8 %1198, ptr %1196, align 1, !tbaa !75
  store ptr null, ptr %1133, align 8, !tbaa !80
  br label %1455

1199:                                             ; preds = %138, %138
  %1200 = getelementptr inbounds i8, ptr %0, i64 1928
  %1201 = load ptr, ptr %1200, align 8, !tbaa !80
  %.not539 = icmp eq ptr %1201, null
  br i1 %.not539, label %1202, label %1207

1202:                                             ; preds = %1199
  %1203 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1203, ptr noundef nonnull @.str.29)
          to label %1204 unwind label %1205

1204:                                             ; preds = %1202
  tail call void @__cxa_throw(ptr nonnull %1203, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1205:                                             ; preds = %1202
  %1206 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1203) #7
  br label %1456

1207:                                             ; preds = %1199
  %1208 = getelementptr inbounds i8, ptr %1201, i64 12
  store i32 6, ptr %1208, align 4, !tbaa !161
  store ptr null, ptr %1200, align 8, !tbaa !80
  br label %1455

1209:                                             ; preds = %138
  %1210 = getelementptr inbounds i8, ptr %0, i64 1928
  %1211 = load ptr, ptr %1210, align 8, !tbaa !80
  %.not538 = icmp eq ptr %1211, null
  br i1 %.not538, label %1212, label %1217

1212:                                             ; preds = %1209
  %1213 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1213, ptr noundef nonnull @.str.29)
          to label %1214 unwind label %1215

1214:                                             ; preds = %1212
  tail call void @__cxa_throw(ptr nonnull %1213, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1215:                                             ; preds = %1212
  %1216 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1213) #7
  br label %1456

1217:                                             ; preds = %1209
  %1218 = getelementptr inbounds i8, ptr %1211, i64 12
  store i32 8, ptr %1218, align 4, !tbaa !161
  store ptr null, ptr %1210, align 8, !tbaa !80
  br label %1455

1219:                                             ; preds = %138
  %1220 = getelementptr inbounds i8, ptr %0, i64 1928
  %1221 = load ptr, ptr %1220, align 8, !tbaa !80
  %.not537 = icmp eq ptr %1221, null
  br i1 %.not537, label %1222, label %1227

1222:                                             ; preds = %1219
  %1223 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1223, ptr noundef nonnull @.str.29)
          to label %1224 unwind label %1225

1224:                                             ; preds = %1222
  tail call void @__cxa_throw(ptr nonnull %1223, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1225:                                             ; preds = %1222
  %1226 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1223) #7
  br label %1456

1227:                                             ; preds = %1219
  %1228 = getelementptr inbounds i8, ptr %1221, i64 12
  store i32 7, ptr %1228, align 4, !tbaa !161
  store ptr null, ptr %1220, align 8, !tbaa !80
  br label %1455

1229:                                             ; preds = %138
  %1230 = getelementptr inbounds i8, ptr %0, i64 1928
  %1231 = load ptr, ptr %1230, align 8, !tbaa !80
  %.not536 = icmp eq ptr %1231, null
  br i1 %.not536, label %1232, label %1237

1232:                                             ; preds = %1229
  %1233 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1233, ptr noundef nonnull @.str.29)
          to label %1234 unwind label %1235

1234:                                             ; preds = %1232
  tail call void @__cxa_throw(ptr nonnull %1233, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1235:                                             ; preds = %1232
  %1236 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1233) #7
  br label %1456

1237:                                             ; preds = %1229
  %1238 = getelementptr inbounds i8, ptr %1231, i64 12
  store i32 9, ptr %1238, align 4, !tbaa !161
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %116) #7
  %1239 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %116, i32 noundef %1239)
  %1240 = load ptr, ptr %1230, align 8, !tbaa !80
  %1241 = getelementptr inbounds i8, ptr %1240, i64 56
  %1242 = load i32, ptr %116, align 4, !tbaa !73
  store i32 %1242, ptr %1241, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %116) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %116) #7
  %1243 = getelementptr inbounds i8, ptr %129, i64 4
  %1244 = load i32, ptr %1243, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %116, i32 noundef %1244)
  %1245 = load ptr, ptr %1230, align 8, !tbaa !80
  %1246 = getelementptr inbounds i8, ptr %1245, i64 60
  %1247 = load i32, ptr %116, align 4, !tbaa !73
  store i32 %1247, ptr %1246, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %116) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %116) #7
  %1248 = getelementptr inbounds i8, ptr %129, i64 8
  %1249 = load i32, ptr %1248, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %116, i32 noundef %1249)
  %1250 = load ptr, ptr %1230, align 8, !tbaa !80
  %1251 = getelementptr inbounds i8, ptr %1250, i64 64
  %1252 = load i32, ptr %116, align 4, !tbaa !73
  store i32 %1252, ptr %1251, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %116) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %117) #7
  %1253 = icmp ugt i32 %133, 3
  br i1 %1253, label %1254, label %1257

1254:                                             ; preds = %1237
  %1255 = getelementptr inbounds i8, ptr %129, i64 12
  %1256 = load i32, ptr %1255, align 4, !tbaa !73
  br label %1257

1257:                                             ; preds = %1237, %1254
  %1258 = phi i32 [ %1256, %1254 ], [ 0, %1237 ]
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %117, i32 noundef %1258)
  %1259 = load ptr, ptr %1230, align 8, !tbaa !80
  %1260 = getelementptr inbounds i8, ptr %1259, i64 68
  %1261 = load i32, ptr %117, align 4, !tbaa !73
  store i32 %1261, ptr %1260, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %117) #7
  store ptr null, ptr %1230, align 8, !tbaa !80
  store i8 1, ptr %134, align 8, !tbaa !14
  br label %1455

1262:                                             ; preds = %138
  %1263 = getelementptr inbounds i8, ptr %0, i64 1928
  %1264 = load ptr, ptr %1263, align 8, !tbaa !80
  %.not535 = icmp eq ptr %1264, null
  br i1 %.not535, label %1265, label %1270

1265:                                             ; preds = %1262
  %1266 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1266, ptr noundef nonnull @.str.29)
          to label %1267 unwind label %1268

1267:                                             ; preds = %1265
  tail call void @__cxa_throw(ptr nonnull %1266, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1268:                                             ; preds = %1265
  %1269 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1266) #7
  br label %1456

1270:                                             ; preds = %1262
  %1271 = getelementptr inbounds i8, ptr %1264, i64 12
  store i32 4, ptr %1271, align 4, !tbaa !161
  store ptr null, ptr %1263, align 8, !tbaa !80
  br label %1455

1272:                                             ; preds = %138
  %1273 = getelementptr inbounds i8, ptr %0, i64 1928
  %1274 = load ptr, ptr %1273, align 8, !tbaa !80
  %.not534 = icmp eq ptr %1274, null
  br i1 %.not534, label %1275, label %1280

1275:                                             ; preds = %1272
  %1276 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1276, ptr noundef nonnull @.str.29)
          to label %1277 unwind label %1278

1277:                                             ; preds = %1275
  tail call void @__cxa_throw(ptr nonnull %1276, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1278:                                             ; preds = %1275
  %1279 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1276) #7
  br label %1456

1280:                                             ; preds = %1272
  %1281 = getelementptr inbounds i8, ptr %1274, i64 12
  store i32 4, ptr %1281, align 4, !tbaa !161
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %118) #7
  %1282 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %118, i32 noundef %1282)
  %1283 = load ptr, ptr %1273, align 8, !tbaa !80
  %1284 = getelementptr inbounds i8, ptr %1283, i64 36
  %1285 = load i32, ptr %118, align 4, !tbaa !73
  store i32 %1285, ptr %1284, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %118) #7
  store ptr null, ptr %1273, align 8, !tbaa !80
  br label %1455

1286:                                             ; preds = %138
  %1287 = getelementptr inbounds i8, ptr %0, i64 1928
  %1288 = load ptr, ptr %1287, align 8, !tbaa !80
  %.not533 = icmp eq ptr %1288, null
  br i1 %.not533, label %1289, label %1294

1289:                                             ; preds = %1286
  %1290 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1290, ptr noundef nonnull @.str.29)
          to label %1291 unwind label %1292

1291:                                             ; preds = %1289
  tail call void @__cxa_throw(ptr nonnull %1290, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1292:                                             ; preds = %1289
  %1293 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1290) #7
  br label %1456

1294:                                             ; preds = %1286
  %1295 = getelementptr inbounds i8, ptr %1288, i64 12
  store i32 5, ptr %1295, align 4, !tbaa !161
  store ptr null, ptr %1287, align 8, !tbaa !80
  br label %1455

1296:                                             ; preds = %138
  %1297 = getelementptr inbounds i8, ptr %0, i64 1928
  %1298 = load ptr, ptr %1297, align 8, !tbaa !80
  %.not530 = icmp eq ptr %1298, null
  br i1 %.not530, label %1299, label %1304

1299:                                             ; preds = %1296
  %1300 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1300, ptr noundef nonnull @.str.30)
          to label %1301 unwind label %1302

1301:                                             ; preds = %1299
  tail call void @__cxa_throw(ptr nonnull %1300, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1302:                                             ; preds = %1299
  %1303 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1300) #7
  br label %1456

1304:                                             ; preds = %1296
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %119) #7
  %1305 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %119, i32 noundef %1305)
  %1306 = load ptr, ptr %1297, align 8, !tbaa !80
  %1307 = getelementptr inbounds i8, ptr %1306, i64 24
  %1308 = load i32, ptr %119, align 4, !tbaa !73
  store i32 %1308, ptr %1307, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %119) #7
  %1309 = getelementptr inbounds i8, ptr %1306, i64 16
  store i32 2, ptr %1309, align 8, !tbaa !179
  %1310 = getelementptr inbounds i8, ptr %0, i64 1592
  %1311 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1307)
  %1312 = zext i32 %1311 to i64
  %1313 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1310, i64 noundef %1312) #7
  %1314 = load i8, ptr %1313, align 1, !tbaa !75
  %1315 = or i8 %1314, 8
  store i8 %1315, ptr %1313, align 1, !tbaa !75
  %1316 = icmp ugt i32 %133, 1
  br i1 %1316, label %1317, label %1455

1317:                                             ; preds = %1304
  %1318 = getelementptr inbounds i8, ptr %129, i64 4
  %1319 = load i32, ptr %1318, align 4, !tbaa !73
  %1320 = and i32 %1319, 1
  %.not531 = icmp eq i32 %1320, 0
  br i1 %.not531, label %1324, label %1321

1321:                                             ; preds = %1317
  %1322 = load ptr, ptr %1297, align 8, !tbaa !80
  %1323 = getelementptr inbounds i8, ptr %1322, i64 20
  store i32 3, ptr %1323, align 4, !tbaa !184
  br label %1455

1324:                                             ; preds = %1317
  %1325 = and i32 %1319, 2
  %.not532 = icmp eq i32 %1325, 0
  br i1 %.not532, label %1455, label %1326

1326:                                             ; preds = %1324
  %1327 = load ptr, ptr %1297, align 8, !tbaa !80
  %1328 = getelementptr inbounds i8, ptr %1327, i64 20
  store i32 4, ptr %1328, align 4, !tbaa !184
  br label %1455

1329:                                             ; preds = %138
  %1330 = getelementptr inbounds i8, ptr %0, i64 1928
  %1331 = load ptr, ptr %1330, align 8, !tbaa !80
  %.not526 = icmp eq ptr %1331, null
  br i1 %.not526, label %1332, label %1337

1332:                                             ; preds = %1329
  %1333 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1333, ptr noundef nonnull @.str.30)
          to label %1334 unwind label %1335

1334:                                             ; preds = %1332
  tail call void @__cxa_throw(ptr nonnull %1333, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1335:                                             ; preds = %1332
  %1336 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1333) #7
  br label %1456

1337:                                             ; preds = %1329
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %120) #7
  %1338 = load i32, ptr %129, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %120, i32 noundef %1338)
  %1339 = load ptr, ptr %1330, align 8, !tbaa !80
  %1340 = getelementptr inbounds i8, ptr %1339, i64 28
  %1341 = load i32, ptr %120, align 4, !tbaa !73
  store i32 %1341, ptr %1340, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %120) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %121) #7
  %1342 = getelementptr inbounds i8, ptr %129, i64 4
  %1343 = load i32, ptr %1342, align 4, !tbaa !73
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %121, i32 noundef %1343)
  %1344 = load ptr, ptr %1330, align 8, !tbaa !80
  %1345 = getelementptr inbounds i8, ptr %1344, i64 32
  %1346 = load i32, ptr %121, align 4, !tbaa !73
  store i32 %1346, ptr %1345, align 8, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %121) #7
  %1347 = getelementptr inbounds i8, ptr %1344, i64 16
  store i32 1, ptr %1347, align 8, !tbaa !179
  %1348 = getelementptr inbounds i8, ptr %0, i64 1592
  %1349 = getelementptr inbounds i8, ptr %1344, i64 8
  %1350 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1349)
  %1351 = zext i32 %1350 to i64
  %1352 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1348, i64 noundef %1351) #7
  %1353 = load i8, ptr %1352, align 1, !tbaa !75
  %1354 = or i8 %1353, 1
  store i8 %1354, ptr %1352, align 1, !tbaa !75
  %1355 = load ptr, ptr %1330, align 8, !tbaa !80
  %1356 = getelementptr inbounds i8, ptr %1355, i64 28
  %1357 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1356)
  %1358 = zext i32 %1357 to i64
  %1359 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1348, i64 noundef %1358) #7
  %1360 = load i8, ptr %1359, align 1, !tbaa !75
  %1361 = or i8 %1360, 4
  store i8 %1361, ptr %1359, align 1, !tbaa !75
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %122) #7
  %1362 = load ptr, ptr %1330, align 8, !tbaa !80
  %1363 = getelementptr inbounds i8, ptr %1362, i64 8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %122, ptr noundef nonnull align 4 dereferenceable(4) %1363)
  %1364 = getelementptr inbounds i8, ptr %0, i64 1624
  %1365 = load ptr, ptr %1330, align 8, !tbaa !80
  %1366 = getelementptr inbounds i8, ptr %1365, i64 32
  %1367 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(56) %1364, ptr noundef nonnull align 4 dereferenceable(4) %1366)
  %1368 = load i32, ptr %122, align 4, !tbaa !73
  store i32 %1368, ptr %1367, align 4, !tbaa !73
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %122) #7
  %1369 = load ptr, ptr %1330, align 8, !tbaa !80
  %1370 = getelementptr inbounds i8, ptr %1369, i64 32
  %1371 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1370)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %123) #7
  %1372 = load ptr, ptr %1330, align 8, !tbaa !80
  %1373 = getelementptr inbounds i8, ptr %1372, i64 8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %123, ptr noundef nonnull align 4 dereferenceable(4) %1373)
  %1374 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %123)
  %.not527 = icmp eq i32 %1371, %1374
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %123) #7
  br i1 %.not527, label %1383, label %1375

1375:                                             ; preds = %1337
  %1376 = load ptr, ptr %1330, align 8, !tbaa !80
  %1377 = getelementptr inbounds i8, ptr %1376, i64 32
  %1378 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1377)
  %1379 = zext i32 %1378 to i64
  %1380 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIhEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1348, i64 noundef %1379) #7
  %1381 = load i8, ptr %1380, align 1, !tbaa !75
  %1382 = or i8 %1381, 2
  store i8 %1382, ptr %1380, align 1, !tbaa !75
  br label %1383

1383:                                             ; preds = %1375, %1337
  %1384 = icmp ugt i32 %133, 2
  br i1 %1384, label %1385, label %1455

1385:                                             ; preds = %1383
  %1386 = getelementptr inbounds i8, ptr %129, i64 8
  %1387 = load i32, ptr %1386, align 4, !tbaa !73
  %1388 = and i32 %1387, 1
  %.not528 = icmp eq i32 %1388, 0
  br i1 %.not528, label %1392, label %1389

1389:                                             ; preds = %1385
  %1390 = load ptr, ptr %1330, align 8, !tbaa !80
  %1391 = getelementptr inbounds i8, ptr %1390, i64 20
  store i32 1, ptr %1391, align 4, !tbaa !184
  br label %1455

1392:                                             ; preds = %1385
  %1393 = and i32 %1387, 2
  %.not529 = icmp eq i32 %1393, 0
  br i1 %.not529, label %1455, label %1394

1394:                                             ; preds = %1392
  %1395 = load ptr, ptr %1330, align 8, !tbaa !80
  %1396 = getelementptr inbounds i8, ptr %1395, i64 20
  store i32 2, ptr %1396, align 4, !tbaa !184
  br label %1455

1397:                                             ; preds = %138
  %1398 = icmp ult i32 %133, 3
  br i1 %1398, label %1399, label %1404

1399:                                             ; preds = %1397
  %1400 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1400, ptr noundef nonnull @.str.31)
          to label %1401 unwind label %1402

1401:                                             ; preds = %1399
  tail call void @__cxa_throw(ptr nonnull %1400, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1402:                                             ; preds = %1399
  %1403 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %1400) #7
  br label %1456

1404:                                             ; preds = %1397
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %124) #7
  %1405 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %1405, ptr %124, align 4, !tbaa !73
  %1406 = getelementptr inbounds i8, ptr %129, i64 4
  %1407 = load i32, ptr %1406, align 4, !tbaa !73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %125) #7
  %1408 = getelementptr inbounds i8, ptr %129, i64 8
  %1409 = load i32, ptr %1408, align 4, !tbaa !73
  store i32 %1409, ptr %125, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %126) #7
  %1410 = getelementptr inbounds i8, ptr %129, i64 12
  store ptr %1410, ptr %126, align 8, !tbaa !104
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %127) #7
  %1411 = add i32 %133, -3
  store i32 %1411, ptr %127, align 4, !tbaa !73
  %1412 = call noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross6Parser3setINS_14SPIRConstantOpEJRjRN3spv2OpEPKjjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %1407, ptr noundef nonnull align 4 dereferenceable(4) %124, ptr noundef nonnull align 4 dereferenceable(4) %125, ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull align 4 dereferenceable(4) %127)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %127) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %125) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %124) #7
  br label %1455

1413:                                             ; preds = %138
  %1414 = getelementptr inbounds i8, ptr %0, i64 1928
  %1415 = load ptr, ptr %1414, align 8, !tbaa !80
  %.not524 = icmp eq ptr %1415, null
  br i1 %.not524, label %1418, label %1416

1416:                                             ; preds = %1413
  %1417 = getelementptr inbounds i8, ptr %1415, i64 72
  tail call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %1417, ptr noundef nonnull align 4 dereferenceable(12) %1) #7
  br label %1418

1418:                                             ; preds = %1416, %1413
  %1419 = getelementptr inbounds i8, ptr %0, i64 1920
  %1420 = load ptr, ptr %1419, align 8, !tbaa !153
  %.not525 = icmp eq ptr %1420, null
  br i1 %.not525, label %1455, label %1421

1421:                                             ; preds = %1418
  %1422 = getelementptr inbounds i8, ptr %1420, i64 664
  %1423 = load i32, ptr %1422, align 8, !tbaa !185
  %1424 = icmp eq i32 %1423, 0
  br i1 %1424, label %1425, label %1455

1425:                                             ; preds = %1421
  %1426 = load i32, ptr %129, align 4, !tbaa !73
  store i32 %1426, ptr %1422, align 8, !tbaa !185
  %1427 = getelementptr inbounds i8, ptr %129, i64 4
  %1428 = load i32, ptr %1427, align 4, !tbaa !73
  %1429 = getelementptr inbounds i8, ptr %1420, i64 668
  store i32 %1428, ptr %1429, align 4, !tbaa !200
  br label %1455

1430:                                             ; preds = %138
  %1431 = getelementptr inbounds i8, ptr %0, i64 1928
  %1432 = load ptr, ptr %1431, align 8, !tbaa !80
  %.not = icmp eq ptr %1432, null
  br i1 %.not, label %1455, label %1433

1433:                                             ; preds = %1430
  %1434 = getelementptr inbounds i8, ptr %1432, i64 72
  tail call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %1434, ptr noundef nonnull align 4 dereferenceable(12) %1) #7
  br label %1455

1435:                                             ; preds = %138
  %1436 = icmp ugt i32 %133, 1
  br i1 %1436, label %1437, label %1445

1437:                                             ; preds = %1435
  %1438 = load i32, ptr %129, align 4, !tbaa !73
  %1439 = tail call noundef ptr @_ZN11spirv_cross6Parser9maybe_getINS_8SPIRTypeEEEPT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %1438)
  %.not576 = icmp eq ptr %1439, null
  br i1 %.not576, label %1445, label %1440

1440:                                             ; preds = %1437
  %1441 = getelementptr inbounds i8, ptr %0, i64 1200
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %128) #7
  %1442 = getelementptr inbounds i8, ptr %129, i64 4
  %1443 = getelementptr inbounds i8, ptr %1439, i64 20
  call void @_ZNSt4pairIKN11spirv_cross7TypedIDILNS0_5TypesE0EEEjEC2IRKjS8_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 4 dereferenceable(8) %128, ptr noundef nonnull align 4 dereferenceable(4) %1442, ptr noundef nonnull align 4 dereferenceable(4) %1443)
  %1444 = call { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE6insertEOSA_(ptr noundef nonnull align 8 dereferenceable(56) %1441, ptr noundef nonnull align 4 dereferenceable(8) %128)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %128) #7
  br label %1445

1445:                                             ; preds = %1437, %1440, %1435
  %1446 = getelementptr inbounds i8, ptr %0, i64 1928
  %1447 = load ptr, ptr %1446, align 8, !tbaa !80
  %.not577 = icmp eq ptr %1447, null
  br i1 %.not577, label %1448, label %1453

1448:                                             ; preds = %1445
  %1449 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1449, ptr noundef nonnull @.str.32)
          to label %1450 unwind label %1451

1450:                                             ; preds = %1448
  call void @__cxa_throw(ptr nonnull %1449, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

1451:                                             ; preds = %1448
  %1452 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %1449) #7
  br label %1456

1453:                                             ; preds = %1445
  %1454 = getelementptr inbounds i8, ptr %1447, i64 72
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %1454, ptr noundef nonnull align 4 dereferenceable(12) %1) #7
  br label %1455

1455:                                             ; preds = %146, %149, %184, %193, %195, %237, %298, %353, %365, %._crit_edge624, %._crit_edge620, %430, %457, %460, %464, %481, %495, %499, %514, %560, %576, %623, %626, %636, %668, %721, %._crit_edge608, %731, %735, %762, %._crit_edge604, %821, %827, %833, %934, %948, %959, %973, %1001, %1011, %1131, %.loopexit586, %1207, %1217, %1227, %1257, %1270, %1280, %1294, %1404, %1453, %138, %138, %138, %138, %241, %238, %138, %1321, %1326, %1324, %1304, %1389, %1394, %1392, %1383, %1421, %1425, %1418, %1433, %1430, %173, %168, %161, %154, %247, %244, %299, %324, %320, %310, %306, %336, %328, %419, %404, %444, %440, %684, %672, %816, %810, %137, %137, %137
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #7
  ret void

1456:                                             ; preds = %1451, %1402, %1335, %1302, %1292, %1278, %1268, %1235, %1225, %1215, %1205, %1138, %1023, %1009, %999, %981, %971, %957, %946, %933, %778, %770, %758, %479, %458, %431, %366, %354, %288, %208, %191, %147
  %.pn578 = phi { ptr, i32 } [ %1452, %1451 ], [ %1403, %1402 ], [ %1336, %1335 ], [ %1303, %1302 ], [ %1293, %1292 ], [ %1279, %1278 ], [ %1269, %1268 ], [ %1236, %1235 ], [ %1226, %1225 ], [ %1216, %1215 ], [ %1206, %1205 ], [ %1139, %1138 ], [ %1024, %1023 ], [ %1010, %1009 ], [ %1000, %999 ], [ %982, %981 ], [ %972, %971 ], [ %958, %957 ], [ %947, %946 ], [ %.pn559, %933 ], [ %779, %778 ], [ %771, %770 ], [ %759, %758 ], [ %480, %479 ], [ %459, %458 ], [ %432, %431 ], [ %367, %366 ], [ %355, %354 ], [ %.pn569.pn, %288 ], [ %209, %208 ], [ %192, %191 ], [ %148, %147 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #7
  resume { ptr, i32 } %.pn578

1457:                                             ; preds = %890
  unreachable
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK11spirv_cross6Parser6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(2088), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross6Parser3setINS_9SPIRUndefEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross6Parser3setINS_13SPIRExtensionEJRNS2_9ExtensionEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE6insertIS9_IjS4_EEENSt9enable_ifIXsr16is_constructibleISB_OT_EE5valueES9_INSt8__detail14_Node_iteratorISB_Lb0ELb1EEEbEE4typeESI_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(248)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIRKjN11spirv_cross14SPIREntryPointEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.152") align 8, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(237)) local_unnamed_addr #1

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

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

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

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

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

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

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

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

declare void @_ZN11spirv_cross8ParsedIR8set_nameENS_7TypedIDILNS_5TypesE0EEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920), i32, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross6Bitset3setEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) local_unnamed_addr #6 align 2

declare void @_ZN11spirv_cross8ParsedIR15set_member_nameENS_7TypedIDILNS_5TypesE1EEEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNK11spirv_cross6Bitset12for_each_bitIZNS_6Parser5parseERKNS_11InstructionEE3$_0EEvRKT_"(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

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

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

declare void @_ZN11spirv_cross8ParsedIR14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, i32 noundef) local_unnamed_addr #5

declare void @_ZN11spirv_cross8ParsedIR21set_decoration_stringENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

declare void @_ZN11spirv_cross8ParsedIR21set_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #5

declare void @_ZN11spirv_cross8ParsedIR28set_member_decoration_stringENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(1920), i32, i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

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

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

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

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

declare void @_ZN11spirv_cross8ParsedIR25mark_used_as_array_lengthENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920), i32) local_unnamed_addr #5

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8SPIRTypeaSERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6 align 2

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

declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNK11spirv_cross8ParsedIR8get_nameB5cxx11ENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(1920), i32) local_unnamed_addr #5

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(72) ptr @_ZN11spirv_cross6Parser3setINS_21SPIRFunctionPrototypeEJRjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRFunction18add_local_variableENS_7TypedIDILNS_5TypesE2EEE(ptr noundef nonnull align 8 dereferenceable(795), i32) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjRN3spv12StorageClassES3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRVariableEJRjN3spv12StorageClassEEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

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

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

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

declare void @_ZN11spirv_cross8ParsedIR18make_constant_nullEjjb(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #5

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12SPIRConstant9make_nullERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(360), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross6Parser3setINS_12SPIRFunctionEJRjS3_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross12SPIRFunction13add_parameterENS_7TypedIDILNS_5TypesE1EEENS1_ILS2_0EEEb(ptr noundef nonnull align 8 dereferenceable(795), i32, i32, i1 noundef zeroext) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross6Parser3setINS_9SPIRBlockEJEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #3 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 #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(76) ptr @_ZN11spirv_cross6Parser3setINS_14SPIRConstantOpEJRjRN3spv2OpEPKjjEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(2088), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSN11spirv_cross11InstructionE", !7, i64 0, !7, i64 2, !10, i64 4, !10, i64 8}
!7 = !{!"short", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_ZTSN3spv2OpE", !8, i64 0}
!13 = !{!6, !10, i64 8}
!14 = !{!15, !57, i64 1936}
!15 = !{!"_ZTSN11spirv_cross6ParserE", !16, i64 0, !23, i64 1920, !23, i64 1928, !57, i64 1936, !65, i64 1944, !68, i64 2000}
!16 = !{!"_ZTSN11spirv_cross8ParsedIRE", !17, i64 0, !24, i64 8, !28, i64 32, !32, i64 248, !8, i64 304, !37, i64 1088, !37, i64 1144, !40, i64 1200, !42, i64 1256, !45, i64 1312, !48, i64 1592, !51, i64 1624, !53, i64 1680, !55, i64 1736, !56, i64 1740, !58, i64 1748, !59, i64 1752, !10, i64 1756, !10, i64 1760, !60, i64 1768, !62, i64 1800, !63, i64 1864}
!17 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !18, i64 0}
!18 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !19, i64 0}
!19 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !20, i64 0}
!20 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !21, i64 0}
!21 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !22, i64 0}
!22 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !23, i64 0}
!23 = !{!"any pointer", !8, i64 0}
!24 = !{!"_ZTSSt6vectorIjSaIjEE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !23, i64 0, !23, i64 8, !23, i64 16}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !29, i64 0, !30, i64 16, !31, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !23, i64 0, !30, i64 8}
!30 = !{!"long", !8, i64 0}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !8, i64 0}
!32 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !33, i64 0}
!33 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !23, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !23, i64 48}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !23, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !36, i64 0, !30, i64 8}
!36 = !{!"float", !8, i64 0}
!37 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !38, i64 0, !30, i64 16, !39, i64 24}
!38 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !23, i64 0, !30, i64 8}
!39 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !8, i64 0}
!40 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !41, i64 0}
!41 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !23, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !23, i64 48}
!42 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !43, i64 0, !30, i64 16, !44, i64 24}
!43 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !23, i64 0, !30, i64 8}
!44 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !8, i64 0}
!45 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !46, i64 0, !30, i64 16, !47, i64 24}
!46 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !23, i64 0, !30, i64 8}
!47 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !8, i64 0}
!48 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !49, i64 0, !30, i64 16, !50, i64 24}
!49 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !23, i64 0, !30, i64 8}
!50 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !8, i64 0}
!51 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !52, i64 0}
!52 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !23, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !23, i64 48}
!53 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !54, i64 0}
!54 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !23, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !23, i64 48}
!55 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !10, i64 0}
!56 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !10, i64 0, !57, i64 4, !57, i64 5, !57, i64 6}
!57 = !{!"bool", !8, i64 0}
!58 = !{!"_ZTSN3spv15AddressingModelE", !8, i64 0}
!59 = !{!"_ZTSN3spv11MemoryModelE", !8, i64 0}
!60 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !61, i64 0, !30, i64 8, !8, i64 16}
!61 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !23, i64 0}
!62 = !{!"_ZTSN11spirv_cross6BitsetE", !30, i64 0, !63, i64 8}
!63 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !64, i64 0}
!64 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !23, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !23, i64 48}
!65 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !66, i64 0, !30, i64 16, !67, i64 24}
!66 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !23, i64 0, !30, i64 8}
!67 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !8, i64 0}
!68 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !69, i64 0, !30, i64 16, !70, i64 24}
!69 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !23, i64 0, !30, i64 8}
!70 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !8, i64 0}
!71 = !{i8 0, i8 2}
!72 = !{}
!73 = !{!10, !10, i64 0}
!74 = !{!6, !10, i64 4}
!75 = !{!8, !8, i64 0}
!76 = !{!15, !57, i64 1744}
!77 = !{!15, !10, i64 1740}
!78 = !{!15, !57, i64 1745}
!79 = !{!15, !57, i64 1746}
!80 = !{!15, !23, i64 1928}
!81 = !{!82, !82, i64 0}
!82 = !{!"_ZTSN3spv10CapabilityE", !8, i64 0}
!83 = !{!84, !84, i64 0}
!84 = !{!"_ZTSN11spirv_cross13SPIRExtension9ExtensionE", !8, i64 0}
!85 = distinct !{!85, !86}
!86 = !{!"llvm.loop.mustprogress"}
!87 = !{!88, !10, i64 220}
!88 = !{!"_ZTSN11spirv_cross14SPIREntryPointE", !55, i64 0, !60, i64 8, !60, i64 40, !89, i64 72, !62, i64 128, !92, i64 192, !10, i64 220, !10, i64 224, !10, i64 228, !93, i64 232, !57, i64 236}
!89 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !90, i64 0, !30, i64 16, !91, i64 24}
!90 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !23, i64 0, !30, i64 8}
!91 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !8, i64 0}
!92 = !{!"_ZTSN11spirv_cross14SPIREntryPoint13WorkgroupSizeE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24}
!93 = !{!"_ZTSN3spv14ExecutionModelE", !8, i64 0}
!94 = !{!88, !10, i64 192}
!95 = !{!88, !10, i64 196}
!96 = !{!88, !10, i64 200}
!97 = !{!88, !10, i64 224}
!98 = !{!88, !10, i64 228}
!99 = !{!88, !10, i64 204}
!100 = !{!88, !10, i64 208}
!101 = !{!88, !10, i64 212}
!102 = !{!103, !23, i64 0}
!103 = !{!"_ZTSZN11spirv_cross6Parser5parseERKNS_11InstructionEE3$_0", !23, i64 0, !23, i64 8, !23, i64 16}
!104 = !{!23, !23, i64 0}
!105 = distinct !{!105, !86}
!106 = !{!107, !23, i64 0}
!107 = !{!"_ZTSZN11spirv_cross6Parser5parseERKNS_11InstructionEE3$_1", !23, i64 0, !23, i64 8, !23, i64 16, !23, i64 24}
!108 = distinct !{!108, !86}
!109 = !{!110, !113, i64 16}
!110 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !111, i64 0, !12, i64 12, !113, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !65, i64 32, !114, i64 88, !10, i64 120, !57, i64 124, !57, i64 125, !117, i64 128, !118, i64 136, !65, i64 192, !121, i64 248, !122, i64 272, !122, i64 276, !126, i64 280}
!111 = !{!"_ZTSN11spirv_cross8IVariantE", !112, i64 8}
!112 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!113 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !8, i64 0}
!114 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !115, i64 0, !30, i64 16, !116, i64 24}
!115 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !23, i64 0, !30, i64 8}
!116 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !8, i64 0}
!117 = !{!"_ZTSN3spv12StorageClassE", !8, i64 0}
!118 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !119, i64 0, !30, i64 16, !120, i64 24}
!119 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !23, i64 0, !30, i64 8}
!120 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !8, i64 0}
!121 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !122, i64 0, !123, i64 4, !57, i64 8, !57, i64 9, !57, i64 10, !10, i64 12, !124, i64 16, !125, i64 20}
!122 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!123 = !{!"_ZTSN3spv3DimE", !8, i64 0}
!124 = !{!"_ZTSN3spv11ImageFormatE", !8, i64 0}
!125 = !{!"_ZTSN3spv15AccessQualifierE", !8, i64 0}
!126 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !127, i64 0}
!127 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !23, i64 0, !30, i64 8, !34, i64 16, !30, i64 24, !35, i64 32, !23, i64 48}
!128 = !{!110, !10, i64 20}
!129 = !{!110, !12, i64 12}
!130 = !{!110, !10, i64 24}
!131 = !{!110, !10, i64 28}
!132 = !{!133, !57, i64 264}
!133 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !111, i64 0, !122, i64 12, !134, i64 16, !57, i64 264, !57, i64 265, !57, i64 266, !135, i64 272, !60, i64 328}
!134 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !8, i64 0, !8, i64 224, !10, i64 240}
!135 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !136, i64 0, !30, i64 16, !137, i64 24}
!136 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !23, i64 0, !30, i64 8}
!137 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !8, i64 0}
!138 = !{!57, !57, i64 0}
!139 = !{!110, !57, i64 125}
!140 = !{!110, !123, i64 252}
!141 = !{!110, !57, i64 256}
!142 = !{!110, !57, i64 257}
!143 = !{!110, !57, i64 258}
!144 = !{!110, !10, i64 260}
!145 = !{!110, !124, i64 264}
!146 = !{!110, !125, i64 268}
!147 = !{!110, !57, i64 124}
!148 = !{!110, !10, i64 120}
!149 = !{!110, !117, i64 128}
!150 = distinct !{!150, !86}
!151 = distinct !{!151, !86}
!152 = !{!117, !117, i64 0}
!153 = !{!15, !23, i64 1920}
!154 = !{!155, !57, i64 153}
!155 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !111, i64 0, !122, i64 12, !117, i64 16, !10, i64 20, !112, i64 24, !156, i64 28, !65, i64 32, !57, i64 88, !57, i64 89, !112, i64 92, !37, i64 96, !57, i64 152, !57, i64 153, !57, i64 154, !57, i64 155, !10, i64 156, !157, i64 160, !57, i64 164, !57, i64 165, !57, i64 166, !23, i64 168}
!156 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !10, i64 0}
!157 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !10, i64 0}
!158 = distinct !{!158, !86}
!159 = !{!30, !30, i64 0}
!160 = distinct !{!160, !86}
!161 = !{!162, !163, i64 12}
!162 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !111, i64 0, !163, i64 12, !164, i64 16, !165, i64 20, !157, i64 24, !157, i64 28, !157, i64 32, !112, i64 36, !112, i64 40, !157, i64 44, !157, i64 48, !157, i64 52, !166, i64 56, !167, i64 72, !170, i64 192, !173, i64 312, !173, i64 400, !176, i64 488, !176, i64 640, !57, i64 792, !57, i64 793, !57, i64 794, !157, i64 796, !157, i64 800, !89, i64 808, !89, i64 864, !37, i64 920}
!163 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !8, i64 0}
!164 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !8, i64 0}
!165 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !8, i64 0}
!166 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !8, i64 0, !112, i64 12}
!167 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !168, i64 0, !30, i64 16, !169, i64 24}
!168 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !23, i64 0, !30, i64 8}
!169 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !8, i64 0}
!170 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !171, i64 0, !30, i64 16, !172, i64 24}
!171 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !23, i64 0, !30, i64 8}
!172 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !8, i64 0}
!173 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !174, i64 0, !30, i64 16, !175, i64 24}
!174 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !23, i64 0, !30, i64 8}
!175 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !8, i64 0}
!176 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !177, i64 0, !30, i64 16, !178, i64 24}
!177 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !23, i64 0, !30, i64 8}
!178 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !8, i64 0}
!179 = !{!162, !164, i64 16}
!180 = !{!181, !30, i64 0}
!181 = !{!"_ZTSN11spirv_cross9SPIRBlock4CaseE", !30, i64 0, !157, i64 8}
!182 = distinct !{!182, !86}
!183 = distinct !{!183, !86}
!184 = !{!162, !165, i64 20}
!185 = !{!186, !10, i64 664}
!186 = !{!"_ZTSN11spirv_cross12SPIRFunctionE", !111, i64 0, !122, i64 12, !122, i64 16, !187, i64 24, !187, i64 208, !89, i64 392, !157, i64 448, !190, i64 456, !193, i64 512, !196, i64 664, !197, i64 672, !197, i64 704, !37, i64 736, !57, i64 792, !57, i64 793, !57, i64 794}
!187 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12SPIRFunction9ParameterELm8EEE", !188, i64 0, !30, i64 16, !189, i64 24}
!188 = !{!"_ZTSN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEEE", !23, i64 0, !30, i64 8}
!189 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12SPIRFunction9ParameterELm8EEE", !8, i64 0}
!190 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE6EEELm8EEE", !191, i64 0, !30, i64 16, !192, i64 24}
!191 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEEE", !23, i64 0, !30, i64 8}
!192 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE6EEELm8EEE", !8, i64 0}
!193 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12SPIRFunction29CombinedImageSamplerParameterELm8EEE", !194, i64 0, !30, i64 16, !195, i64 24}
!194 = !{!"_ZTSN11spirv_cross10VectorViewINS_12SPIRFunction29CombinedImageSamplerParameterEEE", !23, i64 0, !30, i64 8}
!195 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12SPIRFunction29CombinedImageSamplerParameterELm8EEE", !8, i64 0}
!196 = !{!"_ZTSN11spirv_cross12SPIRFunction9EntryLineE", !10, i64 0, !10, i64 4}
!197 = !{!"_ZTSN11spirv_cross11SmallVectorISt8functionIFvvEELm0EEE", !198, i64 0, !30, i64 16, !199, i64 24}
!198 = !{!"_ZTSN11spirv_cross10VectorViewISt8functionIFvvEEEE", !23, i64 0, !30, i64 8}
!199 = !{!"_ZTSN11spirv_cross13AlignedBufferISt8functionIFvvEELm0EEE"}
!200 = !{!186, !10, i64 668}


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