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

; 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.__gnu_cxx::__normal_iterator" = type { ptr }
%class.anon = type { i8 }
%"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] }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"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 }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::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 }
%"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.std::pair" = type { i32, i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.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" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.102" }>
%"class.spirv_cross::TypedID.102" = type { i32 }
%"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.spirv_cross::TypedID.109" = type { 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.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.102", [4 x i8] }>

@.str = external hidden unnamed_addr constant [22 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.1 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [46 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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross6Parser5parseEv(ptr noundef nonnull align 8 dereferenceable(2088) %0) #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %class.anon, align 1
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %"class.spirv_cross::SmallVector.99", align 8
  %17 = alloca %"struct.spirv_cross::Instruction", align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %28 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #7
  %29 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %28, i32 0, i32 0
  %30 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %29, i32 0, i32 1
  store ptr %30, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  %31 = load ptr, ptr %3, align 8, !tbaa !5
  %32 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %31) #7
  store i64 %32, ptr %4, align 8, !tbaa !9
  %33 = load i64, ptr %4, align 8, !tbaa !9
  %34 = icmp ult i64 %33, 5
  br i1 %34, label %35, label %42

35:                                               ; preds = %1
  %36 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %36, ptr noundef @.str)
          to label %37 unwind label %38

37:                                               ; preds = %35
  call void @__cxa_throw(ptr %36, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
  unreachable

38:                                               ; preds = %35
  %39 = landingpad { ptr, i32 }
          cleanup
  %40 = extractvalue { ptr, i32 } %39, 0
  store ptr %40, ptr %5, align 8
  %41 = extractvalue { ptr, i32 } %39, 1
  store i32 %41, ptr %6, align 4
  call void @__cxa_free_exception(ptr %36) #7
  br label %285

42:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = call noundef ptr @_ZNSt6vectorIjSaIjEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %43) #7
  store ptr %44, ptr %7, align 8, !tbaa !5
  %45 = load ptr, ptr %7, align 8, !tbaa !5
  %46 = getelementptr inbounds i32, ptr %45, i64 0
  %47 = load i32, ptr %46, align 4, !tbaa !11
  %48 = call noundef i32 @_ZN11spirv_crossL11swap_endianEj(i32 noundef 119734787)
  %49 = icmp eq i32 %47, %48
  br i1 %49, label %50, label %68

50:                                               ; preds = %42
  %51 = load ptr, ptr %3, align 8, !tbaa !5
  %52 = call ptr @_ZSt5beginISt6vectorIjSaIjEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24) %51)
  %53 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %8, i32 0, i32 0
  store ptr %52, ptr %53, align 8
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = call ptr @_ZSt3endISt6vectorIjSaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24) %54)
  %56 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %9, i32 0, i32 0
  store ptr %55, ptr %56, align 8
  %57 = load ptr, ptr %3, align 8, !tbaa !5
  %58 = call ptr @_ZSt5beginISt6vectorIjSaIjEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24) %57)
  %59 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %10, i32 0, i32 0
  store ptr %58, ptr %59, align 8
  %60 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %8, i32 0, i32 0
  %61 = load ptr, ptr %60, align 8
  %62 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %9, i32 0, i32 0
  %63 = load ptr, ptr %62, align 8
  %64 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %10, i32 0, i32 0
  %65 = load ptr, ptr %64, align 8
  %66 = call ptr @"_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEES6_ZN11spirv_cross6Parser5parseEvE3$_0ET0_T_SB_SA_T1_"(ptr %61, ptr %63, ptr %65)
  %67 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  store ptr %66, ptr %67, align 8
  br label %68

68:                                               ; preds = %50, %42
  %69 = load ptr, ptr %7, align 8, !tbaa !5
  %70 = getelementptr inbounds i32, ptr %69, i64 0
  %71 = load i32, ptr %70, align 4, !tbaa !11
  %72 = icmp ne i32 %71, 119734787
  br i1 %72, label %78, label %73

73:                                               ; preds = %68
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = getelementptr inbounds i32, ptr %74, i64 1
  %76 = load i32, ptr %75, align 4, !tbaa !11
  %77 = call noundef zeroext i1 @_ZN11spirv_crossL22is_valid_spirv_versionEj(i32 noundef %76)
  br i1 %77, label %85, label %78

78:                                               ; preds = %73, %68
  %79 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %79, ptr noundef @.str.1)
          to label %80 unwind label %81

80:                                               ; preds = %78
  call void @__cxa_throw(ptr %79, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
  unreachable

81:                                               ; preds = %78
  %82 = landingpad { ptr, i32 }
          cleanup
  %83 = extractvalue { ptr, i32 } %82, 0
  store ptr %83, ptr %5, align 8
  %84 = extractvalue { ptr, i32 } %82, 1
  store i32 %84, ptr %6, align 4
  call void @__cxa_free_exception(ptr %79) #7
  br label %284

85:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = getelementptr inbounds i32, ptr %86, i64 3
  %88 = load i32, ptr %87, align 4, !tbaa !11
  store i32 %88, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  store i32 4194303, ptr %14, align 4, !tbaa !11
  %89 = load i32, ptr %13, align 4, !tbaa !11
  %90 = icmp ugt i32 %89, 4194303
  br i1 %90, label %91, label %98

91:                                               ; preds = %85
  %92 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %92, ptr noundef @.str.2)
          to label %93 unwind label %94

93:                                               ; preds = %91
  call void @__cxa_throw(ptr %92, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
  unreachable

94:                                               ; preds = %91
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %5, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %6, align 4
  call void @__cxa_free_exception(ptr %92) #7
  br label %283

98:                                               ; preds = %85
  %99 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %28, i32 0, i32 0
  %100 = load i32, ptr %13, align 4, !tbaa !11
  call void @_ZN11spirv_cross8ParsedIR13set_id_boundsEj(ptr noundef nonnull align 8 dereferenceable(1920) %99, i32 noundef %100)
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  store i32 5, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 120, ptr %16) #7
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %16) #7
  br label %101

101:                                              ; preds = %169, %98
  %102 = load i32, ptr %15, align 4, !tbaa !11
  %103 = zext i32 %102 to i64
  %104 = load i64, ptr %4, align 8, !tbaa !9
  %105 = icmp ult i64 %103, %104
  br i1 %105, label %106, label %171

106:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 12, ptr %17) #7
  %107 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 0
  store i16 0, ptr %107, align 4, !tbaa !13
  %108 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 1
  store i16 0, ptr %108, align 2, !tbaa !16
  %109 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 2
  store i32 0, ptr %109, align 4, !tbaa !17
  %110 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 3
  store i32 0, ptr %110, align 4, !tbaa !18
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = load i32, ptr %15, align 4, !tbaa !11
  %113 = zext i32 %112 to i64
  %114 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %111, i64 noundef %113) #7
  %115 = load i32, ptr %114, align 4, !tbaa !11
  %116 = and i32 %115, 65535
  %117 = trunc i32 %116 to i16
  %118 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 0
  store i16 %117, ptr %118, align 4, !tbaa !13
  %119 = load ptr, ptr %3, align 8, !tbaa !5
  %120 = load i32, ptr %15, align 4, !tbaa !11
  %121 = zext i32 %120 to i64
  %122 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %119, i64 noundef %121) #7
  %123 = load i32, ptr %122, align 4, !tbaa !11
  %124 = lshr i32 %123, 16
  %125 = and i32 %124, 65535
  %126 = trunc i32 %125 to i16
  %127 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 1
  store i16 %126, ptr %127, align 2, !tbaa !16
  %128 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 1
  %129 = load i16, ptr %128, align 2, !tbaa !16
  %130 = zext i16 %129 to i32
  %131 = icmp eq i32 %130, 0
  br i1 %131, label %132, label %143

132:                                              ; preds = %106
  %133 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %133, ptr noundef @.str.3)
          to label %134 unwind label %135

134:                                              ; preds = %132
  invoke void @__cxa_throw(ptr %133, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %291 unwind label %139

135:                                              ; preds = %132
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %5, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %6, align 4
  call void @__cxa_free_exception(ptr %133) #7
  br label %170

139:                                              ; preds = %164, %134
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %5, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %6, align 4
  br label %170

143:                                              ; preds = %106
  %144 = load i32, ptr %15, align 4, !tbaa !11
  %145 = add i32 %144, 1
  %146 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 2
  store i32 %145, ptr %146, align 4, !tbaa !17
  %147 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 1
  %148 = load i16, ptr %147, align 2, !tbaa !16
  %149 = zext i16 %148 to i32
  %150 = sub nsw i32 %149, 1
  %151 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 3
  store i32 %150, ptr %151, align 4, !tbaa !18
  %152 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %17, i32 0, i32 1
  %153 = load i16, ptr %152, align 2, !tbaa !16
  %154 = zext i16 %153 to i32
  %155 = load i32, ptr %15, align 4, !tbaa !11
  %156 = add i32 %155, %154
  store i32 %156, ptr %15, align 4, !tbaa !11
  %157 = load i32, ptr %15, align 4, !tbaa !11
  %158 = zext i32 %157 to i64
  %159 = load ptr, ptr %3, align 8, !tbaa !5
  %160 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %159) #7
  %161 = icmp ugt i64 %158, %160
  br i1 %161, label %162, label %169

162:                                              ; preds = %143
  %163 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %163, ptr noundef @.str.4)
          to label %164 unwind label %165

164:                                              ; preds = %162
  invoke void @__cxa_throw(ptr %163, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %291 unwind label %139

165:                                              ; preds = %162
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %5, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %6, align 4
  call void @__cxa_free_exception(ptr %163) #7
  br label %170

169:                                              ; preds = %143
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %16, ptr noundef nonnull align 4 dereferenceable(12) %17) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #7
  br label %101, !llvm.loop !19

170:                                              ; preds = %165, %139, %135
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #7
  br label %282

171:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  store ptr %16, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %172 = load ptr, ptr %18, align 8, !tbaa !5
  %173 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_11InstructionEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %172) #7
  store ptr %173, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %174 = load ptr, ptr %18, align 8, !tbaa !5
  %175 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_11InstructionEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %174) #7
  store ptr %175, ptr %20, align 8, !tbaa !5
  br label %176

176:                                              ; preds = %185, %171
  %177 = load ptr, ptr %19, align 8, !tbaa !5
  %178 = load ptr, ptr %20, align 8, !tbaa !5
  %179 = icmp ne ptr %177, %178
  br i1 %179, label %181, label %180

180:                                              ; preds = %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %192

181:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %182 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %182, ptr %21, align 8, !tbaa !5
  %183 = load ptr, ptr %21, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross6Parser5parseERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(2088) %28, ptr noundef nonnull align 4 dereferenceable(12) %183)
          to label %184 unwind label %188

184:                                              ; preds = %181
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  br label %185

185:                                              ; preds = %184
  %186 = load ptr, ptr %19, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %186, i32 1
  store ptr %187, ptr %19, align 8, !tbaa !5
  br label %176

188:                                              ; preds = %181
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %5, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %282

192:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %193 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %28, i32 0, i32 5
  store ptr %193, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %194 = load ptr, ptr %22, align 8, !tbaa !5
  %195 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairIjjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %194) #7
  store ptr %195, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %196 = load ptr, ptr %22, align 8, !tbaa !5
  %197 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairIjjEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %196) #7
  store ptr %197, ptr %24, align 8, !tbaa !5
  br label %198

198:                                              ; preds = %229, %192
  %199 = load ptr, ptr %23, align 8, !tbaa !5
  %200 = load ptr, ptr %24, align 8, !tbaa !5
  %201 = icmp ne ptr %199, %200
  br i1 %201, label %203, label %202

202:                                              ; preds = %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %241

203:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %204 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %204, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %205 = load ptr, ptr %25, align 8, !tbaa !5
  %206 = getelementptr inbounds %"struct.std::pair", ptr %205, i32 0, i32 0
  %207 = load i32, ptr %206, align 4, !tbaa !21
  %208 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %28, i32 noundef %207)
          to label %209 unwind label %232

209:                                              ; preds = %203
  store ptr %208, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %210 = load ptr, ptr %25, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.std::pair", ptr %210, i32 0, i32 1
  %212 = load i32, ptr %211, align 4, !tbaa !23
  %213 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %28, i32 noundef %212)
          to label %214 unwind label %236

214:                                              ; preds = %209
  store ptr %213, ptr %27, align 8, !tbaa !5
  %215 = load ptr, ptr %27, align 8, !tbaa !5
  %216 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %215, i32 0, i32 12
  %217 = load ptr, ptr %26, align 8, !tbaa !5
  %218 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %217, i32 0, i32 12
  %219 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56) %218, ptr noundef nonnull align 8 dereferenceable(56) %216) #7
  %220 = load ptr, ptr %27, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %220, i32 0, i32 2
  %222 = load i32, ptr %221, align 8, !tbaa !24
  %223 = load ptr, ptr %26, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %223, i32 0, i32 2
  store i32 %222, ptr %224, align 8, !tbaa !24
  %225 = load ptr, ptr %27, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %225, i32 0, i32 1
  %227 = load ptr, ptr %26, align 8, !tbaa !5
  %228 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %227, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %228, ptr align 8 %226, i64 4, i1 false), !tbaa.struct !51
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %229

229:                                              ; preds = %214
  %230 = load ptr, ptr %23, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.std::pair", ptr %230, i32 1
  store ptr %231, ptr %23, align 8, !tbaa !5
  br label %198

232:                                              ; preds = %203
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %5, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %6, align 4
  br label %240

236:                                              ; preds = %209
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %5, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %240

240:                                              ; preds = %236, %232
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %282

241:                                              ; preds = %202
  %242 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %28, i32 0, i32 5
  call void @_ZN11spirv_cross11SmallVectorISt4pairIjjELm8EE5clearEv(ptr noundef nonnull align 8 dereferenceable(88) %242) #7
  %243 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %28, i32 0, i32 1
  %244 = load ptr, ptr %243, align 8, !tbaa !52
  %245 = icmp ne ptr %244, null
  br i1 %245, label %246, label %257

246:                                              ; preds = %241
  %247 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %247, ptr noundef @.str.5)
          to label %248 unwind label %249

248:                                              ; preds = %246
  invoke void @__cxa_throw(ptr %247, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %291 unwind label %253

249:                                              ; preds = %246
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %5, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %6, align 4
  call void @__cxa_free_exception(ptr %247) #7
  br label %282

253:                                              ; preds = %276, %268, %263, %248
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %5, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %6, align 4
  br label %282

257:                                              ; preds = %241
  %258 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %28, i32 0, i32 2
  %259 = load ptr, ptr %258, align 8, !tbaa !100
  %260 = icmp ne ptr %259, null
  br i1 %260, label %261, label %268

261:                                              ; preds = %257
  %262 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %262, ptr noundef @.str.6)
          to label %263 unwind label %264

263:                                              ; preds = %261
  invoke void @__cxa_throw(ptr %262, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %291 unwind label %253

264:                                              ; preds = %261
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %5, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %6, align 4
  call void @__cxa_free_exception(ptr %262) #7
  br label %282

268:                                              ; preds = %257
  %269 = getelementptr inbounds %"class.spirv_cross::Parser", ptr %28, i32 0, i32 0
  %270 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %269, i32 0, i32 13
  %271 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %270)
          to label %272 unwind label %253

272:                                              ; preds = %268
  %273 = icmp eq i32 %271, 0
  br i1 %273, label %274, label %281

274:                                              ; preds = %272
  %275 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %275, ptr noundef @.str.7)
          to label %276 unwind label %277

276:                                              ; preds = %274
  invoke void @__cxa_throw(ptr %275, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #8
          to label %291 unwind label %253

277:                                              ; preds = %274
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %5, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %6, align 4
  call void @__cxa_free_exception(ptr %275) #7
  br label %282

281:                                              ; preds = %272
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(120) %16) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #7
  ret void

282:                                              ; preds = %277, %264, %253, %249, %240, %188, %170
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(120) %16) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %283

283:                                              ; preds = %282, %94
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %284

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

285:                                              ; preds = %284, %38
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #7
  br label %286

286:                                              ; preds = %285
  %287 = load ptr, ptr %5, align 8
  %288 = load i32, ptr %6, align 4
  %289 = insertvalue { ptr, i32 } poison, ptr %287, 0
  %290 = insertvalue { ptr, i32 } %289, i32 %288, 1
  resume { ptr, i32 } %290

291:                                              ; preds = %276, %263, %248, %164, %134
  unreachable
}

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

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 #3

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)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN11spirv_crossL11swap_endianEj(i32 noundef) #4

; Function Attrs: mustprogress uwtable
declare hidden ptr @"_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEES6_ZN11spirv_cross6Parser5parseEvE3$_0ET0_T_SB_SA_T1_"(ptr, ptr, ptr) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt5beginISt6vectorIjSaIjEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt3endISt6vectorIjSaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24)) #4

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22is_valid_spirv_versionEj(i32 noundef) #2

declare void @_ZN11spirv_cross8ParsedIR13set_id_boundsEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) #5

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

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

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

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

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

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

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

; 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: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) #2 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) #6

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !15, i64 0}
!14 = !{!"_ZTSN11spirv_cross11InstructionE", !15, i64 0, !15, i64 2, !12, i64 4, !12, i64 8}
!15 = !{!"short", !7, i64 0}
!16 = !{!14, !15, i64 2}
!17 = !{!14, !12, i64 4}
!18 = !{!14, !12, i64 8}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !12, i64 0}
!22 = !{!"_ZTSSt4pairIjjE", !12, i64 0, !12, i64 4}
!23 = !{!22, !12, i64 4}
!24 = !{!25, !29, i64 16}
!25 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !26, i64 0, !28, i64 12, !29, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !30, i64 32, !33, i64 88, !12, i64 120, !36, i64 124, !36, i64 125, !37, i64 128, !38, i64 136, !30, i64 192, !41, i64 248, !42, i64 272, !42, i64 276, !46, i64 280}
!26 = !{!"_ZTSN11spirv_cross8IVariantE", !27, i64 8}
!27 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !12, i64 0}
!28 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!30 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !31, i64 0, !10, i64 16, !32, i64 24}
!31 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !10, i64 8}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !34, i64 0, !10, i64 16, !35, i64 24}
!34 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !10, i64 8}
!35 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!36 = !{!"bool", !7, i64 0}
!37 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!38 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !39, i64 0, !10, i64 16, !40, i64 24}
!39 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !10, i64 8}
!40 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!41 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !42, i64 0, !43, i64 4, !36, i64 8, !36, i64 9, !36, i64 10, !12, i64 12, !44, i64 16, !45, i64 20}
!42 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !12, i64 0}
!43 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!44 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!45 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!46 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !47, i64 0}
!47 = !{!"_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, !10, i64 8, !48, i64 16, !10, i64 24, !49, i64 32, !6, i64 48}
!48 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!49 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !50, i64 0, !10, i64 8}
!50 = !{!"float", !7, i64 0}
!51 = !{i64 0, i64 4, !11}
!52 = !{!53, !6, i64 1920}
!53 = !{!"_ZTSN11spirv_cross6ParserE", !54, i64 0, !6, i64 1920, !6, i64 1928, !36, i64 1936, !30, i64 1944, !97, i64 2000}
!54 = !{!"_ZTSN11spirv_cross8ParsedIRE", !55, i64 0, !61, i64 8, !65, i64 32, !68, i64 248, !7, i64 304, !70, i64 1088, !70, i64 1144, !73, i64 1200, !75, i64 1256, !78, i64 1312, !81, i64 1592, !84, i64 1624, !86, i64 1680, !88, i64 1736, !89, i64 1740, !90, i64 1748, !91, i64 1752, !12, i64 1756, !12, i64 1760, !92, i64 1768, !94, i64 1800, !95, i64 1864}
!55 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !56, i64 0}
!56 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !57, i64 0}
!57 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !58, i64 0}
!58 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !59, i64 0}
!59 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !60, i64 0}
!60 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!61 = !{!"_ZTSSt6vectorIjSaIjEE", !62, i64 0}
!62 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !63, i64 0}
!63 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!65 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !66, i64 0, !10, i64 16, !67, i64 24}
!66 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !10, i64 8}
!67 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!68 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !69, i64 0}
!69 = !{!"_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, !10, i64 8, !48, i64 16, !10, i64 24, !49, i64 32, !6, i64 48}
!70 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !71, i64 0, !10, i64 16, !72, i64 24}
!71 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !10, i64 8}
!72 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!73 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !74, i64 0}
!74 = !{!"_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, !10, i64 8, !48, i64 16, !10, i64 24, !49, i64 32, !6, i64 48}
!75 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !76, i64 0, !10, i64 16, !77, i64 24}
!76 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !10, i64 8}
!77 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!78 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !79, i64 0, !10, i64 16, !80, i64 24}
!79 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !10, i64 8}
!80 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!81 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !82, i64 0, !10, i64 16, !83, i64 24}
!82 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !10, i64 8}
!83 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!84 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !85, i64 0}
!85 = !{!"_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, !10, i64 8, !48, i64 16, !10, i64 24, !49, i64 32, !6, i64 48}
!86 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !87, i64 0}
!87 = !{!"_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, !10, i64 8, !48, i64 16, !10, i64 24, !49, i64 32, !6, i64 48}
!88 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !12, i64 0}
!89 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !12, i64 0, !36, i64 4, !36, i64 5, !36, i64 6}
!90 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!91 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!92 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !93, i64 0, !10, i64 8, !7, i64 16}
!93 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!94 = !{!"_ZTSN11spirv_cross6BitsetE", !10, i64 0, !95, i64 8}
!95 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !96, i64 0}
!96 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !10, i64 8, !48, i64 16, !10, i64 24, !49, i64 32, !6, i64 48}
!97 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !98, i64 0, !10, i64 16, !99, i64 24}
!98 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !6, i64 0, !10, i64 8}
!99 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !7, i64 0}
!100 = !{!53, !6, i64 1928}


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

%"class.spirv_cross::SmallVector.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] }
%"struct.spirv_cross::Instruction" = type { i16, i16, i32, i32 }

@.str = external hidden unnamed_addr constant [22 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.1 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [46 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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross6Parser5parseEv(ptr noundef nonnull align 8 dereferenceable(2088) %0) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.spirv_cross::SmallVector.99", align 8
  %3 = alloca %"struct.spirv_cross::Instruction", align 4
  %4 = getelementptr inbounds i8, ptr %0, i64 8
  %5 = tail call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #7
  %6 = icmp ult i64 %5, 5
  br i1 %6, label %7, label %12

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

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

10:                                               ; preds = %7
  %11 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %8) #7
  br label %133

12:                                               ; preds = %1
  %13 = tail call noundef ptr @_ZNSt6vectorIjSaIjEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #7
  %14 = load i32, ptr %13, align 4, !tbaa !5
  %15 = tail call noundef i32 @_ZN11spirv_crossL11swap_endianEj(i32 noundef 119734787)
  %16 = icmp eq i32 %14, %15
  br i1 %16, label %17, label %22

17:                                               ; preds = %12
  %18 = tail call ptr @_ZSt5beginISt6vectorIjSaIjEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %19 = tail call ptr @_ZSt3endISt6vectorIjSaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %20 = tail call ptr @_ZSt5beginISt6vectorIjSaIjEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %21 = tail call ptr @"_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEES6_ZN11spirv_cross6Parser5parseEvE3$_0ET0_T_SB_SA_T1_"(ptr %18, ptr %19, ptr %20)
  br label %22

22:                                               ; preds = %17, %12
  %23 = load i32, ptr %13, align 4, !tbaa !5
  %.not = icmp eq i32 %23, 119734787
  br i1 %.not, label %24, label %28

24:                                               ; preds = %22
  %25 = getelementptr inbounds i8, ptr %13, i64 4
  %26 = load i32, ptr %25, align 4, !tbaa !5
  %27 = tail call noundef zeroext i1 @_ZN11spirv_crossL22is_valid_spirv_versionEj(i32 noundef %26)
  br i1 %27, label %33, label %28

28:                                               ; preds = %24, %22
  %29 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull @.str.1)
          to label %30 unwind label %31

30:                                               ; preds = %28
  tail call void @__cxa_throw(ptr nonnull %29, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

31:                                               ; preds = %28
  %32 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %29) #7
  br label %133

33:                                               ; preds = %24
  %34 = getelementptr inbounds i8, ptr %13, i64 12
  %35 = load i32, ptr %34, align 4, !tbaa !5
  %36 = icmp ugt i32 %35, 4194303
  br i1 %36, label %37, label %42

37:                                               ; preds = %33
  %38 = tail call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull @.str.2)
          to label %39 unwind label %40

39:                                               ; preds = %37
  tail call void @__cxa_throw(ptr nonnull %38, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
  unreachable

40:                                               ; preds = %37
  %41 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %38) #7
  br label %133

42:                                               ; preds = %33
  tail call void @_ZN11spirv_cross8ParsedIR13set_id_boundsEj(ptr noundef nonnull align 8 dereferenceable(1920) %0, i32 noundef %35)
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %2) #7
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %2) #7
  %.not85 = icmp eq i64 %5, 5
  br i1 %.not85, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %42
  %43 = getelementptr inbounds i8, ptr %3, i64 2
  %44 = getelementptr inbounds i8, ptr %3, i64 4
  %45 = getelementptr inbounds i8, ptr %3, i64 8
  br label %46

46:                                               ; preds = %.lr.ph, %74
  %47 = phi i64 [ 5, %.lr.ph ], [ %66, %74 ]
  %.05474 = phi i32 [ 5, %.lr.ph ], [ %65, %74 ]
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %3) #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %3, i8 0, i64 12, i1 false)
  %48 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %47) #7
  %49 = load i32, ptr %48, align 4, !tbaa !5
  %50 = trunc i32 %49 to i16
  store i16 %50, ptr %3, align 4, !tbaa !9
  %51 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %47) #7
  %52 = load i32, ptr %51, align 4, !tbaa !5
  %53 = lshr i32 %52, 16
  %54 = trunc nuw i32 %53 to i16
  store i16 %54, ptr %43, align 2, !tbaa !12
  %55 = icmp ult i32 %52, 65536
  br i1 %55, label %56, label %62

56:                                               ; preds = %46
  %57 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %57, ptr noundef nonnull @.str.3)
          to label %.invoke unwind label %58

58:                                               ; preds = %56
  %59 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %57) #7
  br label %76

60:                                               ; preds = %.invoke
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %76

62:                                               ; preds = %46
  %63 = add i32 %.05474, 1
  store i32 %63, ptr %44, align 4, !tbaa !13
  %64 = add nsw i32 %53, -1
  store i32 %64, ptr %45, align 4, !tbaa !14
  %65 = add i32 %53, %.05474
  %66 = zext i32 %65 to i64
  %67 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #7
  %68 = icmp ult i64 %67, %66
  br i1 %68, label %69, label %74

69:                                               ; preds = %62
  %70 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %70, ptr noundef nonnull @.str.4)
          to label %.invoke unwind label %72

.invoke:                                          ; preds = %56, %69
  %71 = phi ptr [ %70, %69 ], [ %57, %56 ]
  invoke void @__cxa_throw(ptr nonnull %71, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont unwind label %60

.cont:                                            ; preds = %.invoke
  unreachable

72:                                               ; preds = %69
  %73 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %70) #7
  br label %76

74:                                               ; preds = %62
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(120) %2, ptr noundef nonnull align 4 dereferenceable(12) %3) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #7
  %75 = icmp ugt i64 %5, %66
  br i1 %75, label %46, label %._crit_edge, !llvm.loop !15

76:                                               ; preds = %72, %60, %58
  %.pn65 = phi { ptr, i32 } [ %61, %60 ], [ %59, %58 ], [ %73, %72 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #7
  br label %132

._crit_edge:                                      ; preds = %74, %42
  %77 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_11InstructionEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %2) #7
  %78 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_11InstructionEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %2) #7
  %.not6075 = icmp eq ptr %77, %78
  br i1 %.not6075, label %._crit_edge79, label %.lr.ph78

._crit_edge79:                                    ; preds = %82, %._crit_edge
  %79 = getelementptr inbounds i8, ptr %0, i64 2000
  %80 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairIjjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %79) #7
  %81 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairIjjEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %79) #7
  %.not6180 = icmp eq ptr %80, %81
  br i1 %.not6180, label %._crit_edge84, label %.lr.ph83

.lr.ph78:                                         ; preds = %._crit_edge, %82
  %.05576 = phi ptr [ %83, %82 ], [ %77, %._crit_edge ]
  invoke void @_ZN11spirv_cross6Parser5parseERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(2088) %0, ptr noundef nonnull align 4 dereferenceable(12) %.05576)
          to label %82 unwind label %84

82:                                               ; preds = %.lr.ph78
  %83 = getelementptr inbounds i8, ptr %.05576, i64 12
  %.not60 = icmp eq ptr %83, %78
  br i1 %.not60, label %._crit_edge79, label %.lr.ph78

84:                                               ; preds = %.lr.ph78
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %132

._crit_edge84:                                    ; preds = %94, %._crit_edge79
  call void @_ZN11spirv_cross11SmallVectorISt4pairIjjELm8EE5clearEv(ptr noundef nonnull align 8 dereferenceable(88) %79) #7
  %86 = getelementptr inbounds i8, ptr %0, i64 1920
  %87 = load ptr, ptr %86, align 8, !tbaa !17
  %.not62 = icmp eq ptr %87, null
  br i1 %.not62, label %115, label %109

.lr.ph83:                                         ; preds = %._crit_edge79, %94
  %.05681 = phi ptr [ %104, %94 ], [ %80, %._crit_edge79 ]
  %88 = load i32, ptr %.05681, align 4, !tbaa !74
  %89 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %88)
          to label %90 unwind label %105

90:                                               ; preds = %.lr.ph83
  %91 = getelementptr inbounds i8, ptr %.05681, i64 4
  %92 = load i32, ptr %91, align 4, !tbaa !76
  %93 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross6Parser3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(2088) %0, i32 noundef %92)
          to label %94 unwind label %107

94:                                               ; preds = %90
  %95 = getelementptr inbounds i8, ptr %93, i64 136
  %96 = getelementptr inbounds i8, ptr %89, i64 136
  %97 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56) %96, ptr noundef nonnull align 8 dereferenceable(56) %95) #7
  %98 = getelementptr inbounds i8, ptr %93, i64 16
  %99 = load i32, ptr %98, align 8, !tbaa !77
  %100 = getelementptr inbounds i8, ptr %89, i64 16
  store i32 %99, ptr %100, align 8, !tbaa !77
  %101 = getelementptr inbounds i8, ptr %93, i64 8
  %102 = getelementptr inbounds i8, ptr %89, i64 8
  %103 = load i32, ptr %101, align 8, !tbaa !5
  store i32 %103, ptr %102, align 8, !tbaa !5
  %104 = getelementptr inbounds i8, ptr %.05681, i64 8
  %.not61 = icmp eq ptr %104, %81
  br i1 %.not61, label %._crit_edge84, label %.lr.ph83

105:                                              ; preds = %.lr.ph83
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %132

107:                                              ; preds = %90
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %132

109:                                              ; preds = %._crit_edge84
  %110 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %110, ptr noundef nonnull @.str.5)
          to label %.invoke86 unwind label %111

111:                                              ; preds = %109
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %110) #7
  br label %132

113:                                              ; preds = %.invoke86
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %132

115:                                              ; preds = %._crit_edge84
  %116 = getelementptr inbounds i8, ptr %0, i64 1928
  %117 = load ptr, ptr %116, align 8, !tbaa !97
  %.not63 = icmp eq ptr %117, null
  br i1 %.not63, label %122, label %118

118:                                              ; preds = %115
  %119 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %119, ptr noundef nonnull @.str.6)
          to label %.invoke86 unwind label %120

120:                                              ; preds = %118
  %121 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %119) #7
  br label %132

122:                                              ; preds = %115
  %123 = getelementptr inbounds i8, ptr %0, i64 1736
  %124 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %123)
  %125 = icmp eq i32 %124, 0
  br i1 %125, label %126, label %131

126:                                              ; preds = %122
  %127 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %127, ptr noundef nonnull @.str.7)
          to label %.invoke86 unwind label %129

.invoke86:                                        ; preds = %109, %126, %118
  %128 = phi ptr [ %119, %118 ], [ %127, %126 ], [ %110, %109 ]
  invoke void @__cxa_throw(ptr nonnull %128, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont87 unwind label %113

.cont87:                                          ; preds = %.invoke86
  unreachable

129:                                              ; preds = %126
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %127) #7
  br label %132

131:                                              ; preds = %122
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(120) %2) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %2) #7
  ret void

132:                                              ; preds = %105, %107, %129, %120, %113, %111, %84, %76
  %.pn65.pn = phi { ptr, i32 } [ %.pn65, %76 ], [ %85, %84 ], [ %114, %113 ], [ %112, %111 ], [ %121, %120 ], [ %130, %129 ], [ %108, %107 ], [ %106, %105 ]
  call void @_ZN11spirv_cross11SmallVectorINS_11InstructionELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(120) %2) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %2) #7
  br label %133

133:                                              ; preds = %31, %132, %40, %10
  %.pn72 = phi { ptr, i32 } [ %11, %10 ], [ %32, %31 ], [ %41, %40 ], [ %.pn65.pn, %132 ]
  resume { ptr, i32 } %.pn72
}

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

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 #3

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 #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN11spirv_crossL11swap_endianEj(i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare hidden ptr @"_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEES6_ZN11spirv_cross6Parser5parseEvE3$_0ET0_T_SB_SA_T1_"(ptr, ptr, ptr) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt5beginISt6vectorIjSaIjEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt3endISt6vectorIjSaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22is_valid_spirv_versionEj(i32 noundef) local_unnamed_addr #2

declare void @_ZN11spirv_cross8ParsedIR13set_id_boundsEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) local_unnamed_addr #5

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

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

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

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

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

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

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

; 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 nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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, !6, i64 0}
!6 = !{!"int", !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, !6, i64 4, !6, i64 8}
!11 = !{!"short", !7, i64 0}
!12 = !{!10, !11, i64 2}
!13 = !{!10, !6, i64 4}
!14 = !{!10, !6, i64 8}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !26, i64 1920}
!18 = !{!"_ZTSN11spirv_cross6ParserE", !19, i64 0, !26, i64 1920, !26, i64 1928, !60, i64 1936, !68, i64 1944, !71, i64 2000}
!19 = !{!"_ZTSN11spirv_cross8ParsedIRE", !20, i64 0, !27, i64 8, !31, i64 32, !35, i64 248, !7, i64 304, !40, i64 1088, !40, i64 1144, !43, i64 1200, !45, i64 1256, !48, i64 1312, !51, i64 1592, !54, i64 1624, !56, i64 1680, !58, i64 1736, !59, i64 1740, !61, i64 1748, !62, i64 1752, !6, i64 1756, !6, i64 1760, !63, i64 1768, !65, i64 1800, !66, 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", !26, i64 0}
!26 = !{!"any pointer", !7, i64 0}
!27 = !{!"_ZTSSt6vectorIjSaIjEE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !26, i64 0, !26, i64 8, !26, i64 16}
!31 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !32, i64 0, !33, i64 16, !34, i64 24}
!32 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !26, i64 0, !33, i64 8}
!33 = !{!"long", !7, i64 0}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!35 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !36, i64 0}
!36 = !{!"_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", !26, i64 0, !33, i64 8, !37, i64 16, !33, i64 24, !38, i64 32, !26, i64 48}
!37 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !26, i64 0}
!38 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !39, i64 0, !33, i64 8}
!39 = !{!"float", !7, i64 0}
!40 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !41, i64 0, !33, i64 16, !42, i64 24}
!41 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !26, i64 0, !33, i64 8}
!42 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!43 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !44, i64 0}
!44 = !{!"_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", !26, i64 0, !33, i64 8, !37, i64 16, !33, i64 24, !38, i64 32, !26, i64 48}
!45 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !46, i64 0, !33, i64 16, !47, i64 24}
!46 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !26, i64 0, !33, i64 8}
!47 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!48 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !49, i64 0, !33, i64 16, !50, i64 24}
!49 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !26, i64 0, !33, i64 8}
!50 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!51 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !52, i64 0, !33, i64 16, !53, i64 24}
!52 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !26, i64 0, !33, i64 8}
!53 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!54 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !55, i64 0}
!55 = !{!"_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", !26, i64 0, !33, i64 8, !37, i64 16, !33, i64 24, !38, i64 32, !26, i64 48}
!56 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !57, i64 0}
!57 = !{!"_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", !26, i64 0, !33, i64 8, !37, i64 16, !33, i64 24, !38, i64 32, !26, i64 48}
!58 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !6, i64 0}
!59 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !6, i64 0, !60, i64 4, !60, i64 5, !60, i64 6}
!60 = !{!"bool", !7, i64 0}
!61 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!62 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!63 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !64, i64 0, !33, i64 8, !7, i64 16}
!64 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !26, i64 0}
!65 = !{!"_ZTSN11spirv_cross6BitsetE", !33, i64 0, !66, i64 8}
!66 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !67, i64 0}
!67 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !26, i64 0, !33, i64 8, !37, i64 16, !33, i64 24, !38, i64 32, !26, i64 48}
!68 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !69, i64 0, !33, i64 16, !70, i64 24}
!69 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !26, i64 0, !33, i64 8}
!70 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!71 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairIjjELm8EEE", !72, i64 0, !33, i64 16, !73, i64 24}
!72 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairIjjEEE", !26, i64 0, !33, i64 8}
!73 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairIjjELm8EEE", !7, i64 0}
!74 = !{!75, !6, i64 0}
!75 = !{!"_ZTSSt4pairIjjE", !6, i64 0, !6, i64 4}
!76 = !{!75, !6, i64 4}
!77 = !{!78, !82, i64 16}
!78 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !79, i64 0, !81, i64 12, !82, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !68, i64 32, !83, i64 88, !6, i64 120, !60, i64 124, !60, i64 125, !86, i64 128, !87, i64 136, !68, i64 192, !90, i64 248, !91, i64 272, !91, i64 276, !95, i64 280}
!79 = !{!"_ZTSN11spirv_cross8IVariantE", !80, i64 8}
!80 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !6, i64 0}
!81 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!82 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!83 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !84, i64 0, !33, i64 16, !85, i64 24}
!84 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !26, i64 0, !33, i64 8}
!85 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!86 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!87 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !88, i64 0, !33, i64 16, !89, i64 24}
!88 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !26, i64 0, !33, i64 8}
!89 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!90 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !91, i64 0, !92, i64 4, !60, i64 8, !60, i64 9, !60, i64 10, !6, i64 12, !93, i64 16, !94, i64 20}
!91 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !6, i64 0}
!92 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!93 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!94 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!95 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !96, i64 0}
!96 = !{!"_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", !26, i64 0, !33, i64 8, !37, i64 16, !33, i64 24, !38, i64 32, !26, i64 48}
!97 = !{!18, !26, i64 1928}


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