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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.282" = type { i32 }
%class.anon.384 = type { %"class.spirv_cross::TypedID.282" }
%class.anon.385 = type { %"class.spirv_cross::TypedID.282" }
%class.anon.386 = type { i8, i8, %"class.spirv_cross::TypedID.282", %"class.spirv_cross::TypedID.282" }
%class.anon.387 = type { %"class.spirv_cross::TypedID.282", %"class.spirv_cross::TypedID.282" }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"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::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.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.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::SPIRFunction" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", [4 x i8], %"class.spirv_cross::SmallVector.298", %"class.spirv_cross::SmallVector.298", %"class.spirv_cross::SmallVector.293", %"class.spirv_cross::TypedID.283", [4 x i8], %"class.spirv_cross::SmallVector.301", %"class.spirv_cross::SmallVector.304", %"struct.spirv_cross::SPIRFunction::EntryLine", %"class.spirv_cross::SmallVector.307", %"class.spirv_cross::SmallVector.307", %"class.spirv_cross::SmallVector.7", i8, i8, i8, [5 x i8] }>
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"class.spirv_cross::SmallVector.298" = type { %"class.spirv_cross::VectorView.299", i64, %"class.spirv_cross::AlignedBuffer.300" }
%"class.spirv_cross::VectorView.299" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.300" = type { [160 x i8] }
%"class.spirv_cross::SmallVector.293" = type { %"class.spirv_cross::VectorView.294", i64, %"class.spirv_cross::AlignedBuffer.295" }
%"class.spirv_cross::VectorView.294" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.295" = type { [32 x i8] }
%"class.spirv_cross::TypedID.283" = type { i32 }
%"class.spirv_cross::SmallVector.301" = type { %"class.spirv_cross::VectorView.302", i64, %"class.spirv_cross::AlignedBuffer.303" }
%"class.spirv_cross::VectorView.302" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.303" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.304" = type { %"class.spirv_cross::VectorView.305", i64, %"class.spirv_cross::AlignedBuffer.306" }
%"class.spirv_cross::VectorView.305" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.306" = type { [128 x i8] }
%"struct.spirv_cross::SPIRFunction::EntryLine" = type { i32, i32 }
%"class.spirv_cross::SmallVector.307" = type <{ %"class.spirv_cross::VectorView.308", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.308" = type { ptr, i64 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 x i8] }>
%"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter" = type <{ %"class.spirv_cross::TypedID.282", %"class.spirv_cross::TypedID.282", %"class.spirv_cross::TypedID.282", i8, i8, i8, i8 }>
%"struct.spirv_cross::CombinedImageSampler" = type { %"class.spirv_cross::TypedID.282", %"class.spirv_cross::TypedID.282", %"class.spirv_cross::TypedID.282" }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.1058 = external hidden unnamed_addr constant [122 x i8], align 1
@.str.1059 = external hidden unnamed_addr constant [112 x i8], align 1

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

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

declare 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 i32 @__gxx_personality_v0(...)

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 void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL25to_combined_image_samplerB5cxx11ENS_7TypedIDILNS_5TypesE2EEES3_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 %2, i32 %3) #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca %"class.spirv_cross::TypedID.282", align 4
  %7 = alloca %"class.spirv_cross::TypedID.282", align 4
  %8 = alloca ptr, align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca i64, align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca %"class.spirv_cross::TypedID.282", align 4
  %19 = alloca %"class.spirv_cross::TypedID.282", align 4
  %20 = alloca ptr, align 8
  %21 = alloca %class.anon.384, align 4
  %22 = alloca ptr, align 8
  %23 = alloca %class.anon.385, align 4
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca %"class.spirv_cross::TypedID.282", align 4
  %27 = alloca %"class.spirv_cross::TypedID.282", align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca %class.anon.386, align 4
  %31 = alloca { i64, i32 }, align 4
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca %class.anon.387, align 4
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %5, align 8
  %38 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %6, i32 0, i32 0
  store i32 %2, ptr %38, align 4
  %39 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %7, i32 0, i32 0
  store i32 %3, ptr %39, align 4
  store ptr %1, ptr %8, align 8, !tbaa !5
  %40 = load ptr, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #8
  %41 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %6)
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %40, i32 noundef %41)
  call void @llvm.lifetime.start.p0(i64 32, ptr %10) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %42 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %9, i8 noundef signext 91, i64 noundef 0) #8
  store i64 %42, ptr %11, align 8, !tbaa !9
  %43 = load i64, ptr %11, align 8, !tbaa !9
  %44 = icmp ne i64 %43, -1
  br i1 %44, label %45, label %53

45:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 32, ptr %12) #8
  %46 = load i64, ptr %11, align 8, !tbaa !9
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(32) %9, i64 noundef %46, i64 noundef -1)
          to label %47 unwind label %49

47:                                               ; preds = %45
  %48 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #8
  br label %53

49:                                               ; preds = %45
  %50 = landingpad { ptr, i32 }
          cleanup
  %51 = extractvalue { ptr, i32 } %50, 0
  store ptr %51, ptr %13, align 8
  %52 = extractvalue { ptr, i32 } %50, 1
  store i32 %52, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #8
  br label %314

53:                                               ; preds = %47, %4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %54 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %40, i32 0, i32 4
  %55 = load ptr, ptr %54, align 8, !tbaa !11
  %56 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %55, i32 0, i32 4
  store ptr %56, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %57 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %58 unwind label %73

58:                                               ; preds = %53
  %59 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %57)
          to label %60 unwind label %73

60:                                               ; preds = %58
  store ptr %59, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %61 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %62 unwind label %77

62:                                               ; preds = %60
  %63 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %61)
          to label %64 unwind label %77

64:                                               ; preds = %62
  store ptr %63, ptr %17, align 8, !tbaa !5
  %65 = load ptr, ptr %16, align 8, !tbaa !5
  %66 = icmp ne ptr %65, null
  br i1 %66, label %67, label %85

67:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %68 = load ptr, ptr %16, align 8, !tbaa !5
  %69 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %68, i32 0, i32 1
  %70 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %69)
          to label %71 unwind label %81

71:                                               ; preds = %67
  %72 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %18, i32 0, i32 0
  store i32 %70, ptr %72, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %6, ptr align 4 %18, i64 4, i1 false), !tbaa.struct !77
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %85

73:                                               ; preds = %58, %53
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %13, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %14, align 4
  br label %313

77:                                               ; preds = %62, %60
  %78 = landingpad { ptr, i32 }
          cleanup
  %79 = extractvalue { ptr, i32 } %78, 0
  store ptr %79, ptr %13, align 8
  %80 = extractvalue { ptr, i32 } %78, 1
  store i32 %80, ptr %14, align 4
  br label %312

81:                                               ; preds = %67
  %82 = landingpad { ptr, i32 }
          cleanup
  %83 = extractvalue { ptr, i32 } %82, 0
  store ptr %83, ptr %13, align 8
  %84 = extractvalue { ptr, i32 } %82, 1
  store i32 %84, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %312

85:                                               ; preds = %71, %64
  %86 = load ptr, ptr %17, align 8, !tbaa !5
  %87 = icmp ne ptr %86, null
  br i1 %87, label %88, label %98

88:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  %89 = load ptr, ptr %17, align 8, !tbaa !5
  %90 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %89, i32 0, i32 1
  %91 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %90)
          to label %92 unwind label %94

92:                                               ; preds = %88
  %93 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %19, i32 0, i32 0
  store i32 %91, ptr %93, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %7, ptr align 4 %19, i64 4, i1 false), !tbaa.struct !77
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  br label %98

94:                                               ; preds = %88
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %13, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  br label %312

98:                                               ; preds = %92, %85
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %99 = load ptr, ptr %15, align 8, !tbaa !5
  %100 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184) %99)
          to label %101 unwind label %214

101:                                              ; preds = %98
  %102 = load ptr, ptr %15, align 8, !tbaa !5
  %103 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %102)
          to label %104 unwind label %214

104:                                              ; preds = %101
  %105 = getelementptr inbounds %class.anon.384, ptr %21, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %105, ptr align 4 %6, i64 4, i1 false), !tbaa.struct !77
  %106 = getelementptr inbounds %class.anon.384, ptr %21, i32 0, i32 0
  %107 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %106, i32 0, i32 0
  %108 = load i32, ptr %107, align 4
  %109 = invoke noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction9ParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_0ET_S9_S9_T0_"(ptr noundef %100, ptr noundef %103, i32 %108)
          to label %110 unwind label %214

110:                                              ; preds = %104
  store ptr %109, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %111 = load ptr, ptr %15, align 8, !tbaa !5
  %112 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184) %111)
          to label %113 unwind label %218

113:                                              ; preds = %110
  %114 = load ptr, ptr %15, align 8, !tbaa !5
  %115 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %114)
          to label %116 unwind label %218

116:                                              ; preds = %113
  %117 = getelementptr inbounds %class.anon.385, ptr %23, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %117, ptr align 4 %7, i64 4, i1 false), !tbaa.struct !77
  %118 = getelementptr inbounds %class.anon.385, ptr %23, i32 0, i32 0
  %119 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %118, i32 0, i32 0
  %120 = load i32, ptr %119, align 4
  %121 = invoke noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction9ParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_1ET_S9_S9_T0_"(ptr noundef %112, ptr noundef %115, i32 %120)
          to label %122 unwind label %218

122:                                              ; preds = %116
  store ptr %121, ptr %22, align 8, !tbaa !5
  %123 = load ptr, ptr %20, align 8, !tbaa !5
  %124 = load ptr, ptr %15, align 8, !tbaa !5
  %125 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %124)
          to label %126 unwind label %218

126:                                              ; preds = %122
  %127 = icmp ne ptr %123, %125
  br i1 %127, label %134, label %128

128:                                              ; preds = %126
  %129 = load ptr, ptr %22, align 8, !tbaa !5
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %130)
          to label %132 unwind label %218

132:                                              ; preds = %128
  %133 = icmp ne ptr %129, %131
  br i1 %133, label %134, label %263

134:                                              ; preds = %132, %126
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #8
  %135 = load ptr, ptr %20, align 8, !tbaa !5
  %136 = load ptr, ptr %15, align 8, !tbaa !5
  %137 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %136)
          to label %138 unwind label %222

138:                                              ; preds = %134
  %139 = icmp eq ptr %135, %137
  %140 = zext i1 %139 to i8
  store i8 %140, ptr %24, align 1, !tbaa !79
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #8
  %141 = load ptr, ptr %22, align 8, !tbaa !5
  %142 = load ptr, ptr %15, align 8, !tbaa !5
  %143 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %142)
          to label %144 unwind label %226

144:                                              ; preds = %138
  %145 = icmp eq ptr %141, %143
  %146 = zext i1 %145 to i8
  store i8 %146, ptr %25, align 1, !tbaa !79
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  %147 = load i8, ptr %24, align 1, !tbaa !79, !range !80, !noundef !81
  %148 = trunc i8 %147 to i1
  br i1 %148, label %149, label %150

149:                                              ; preds = %144
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %26, ptr align 4 %6, i64 4, i1 false), !tbaa.struct !77
  br label %161

150:                                              ; preds = %144
  %151 = load ptr, ptr %20, align 8, !tbaa !5
  %152 = load ptr, ptr %15, align 8, !tbaa !5
  %153 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184) %152)
          to label %154 unwind label %230

154:                                              ; preds = %150
  %155 = ptrtoint ptr %151 to i64
  %156 = ptrtoint ptr %153 to i64
  %157 = sub i64 %155, %156
  %158 = sdiv exact i64 %157, 20
  %159 = trunc i64 %158 to i32
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef %159)
          to label %160 unwind label %230

160:                                              ; preds = %154
  br label %161

161:                                              ; preds = %160, %149
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %162 = load i8, ptr %25, align 1, !tbaa !79, !range !80, !noundef !81
  %163 = trunc i8 %162 to i1
  br i1 %163, label %164, label %165

164:                                              ; preds = %161
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 4 %7, i64 4, i1 false), !tbaa.struct !77
  br label %176

165:                                              ; preds = %161
  %166 = load ptr, ptr %22, align 8, !tbaa !5
  %167 = load ptr, ptr %15, align 8, !tbaa !5
  %168 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184) %167)
          to label %169 unwind label %234

169:                                              ; preds = %165
  %170 = ptrtoint ptr %166 to i64
  %171 = ptrtoint ptr %168 to i64
  %172 = sub i64 %170, %171
  %173 = sdiv exact i64 %172, 20
  %174 = trunc i64 %173 to i32
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %27, i32 noundef %174)
          to label %175 unwind label %234

175:                                              ; preds = %169
  br label %176

176:                                              ; preds = %175, %164
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %177 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %40, i32 0, i32 4
  %178 = load ptr, ptr %177, align 8, !tbaa !11
  %179 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %178, i32 0, i32 10
  store ptr %179, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %180 = load ptr, ptr %28, align 8, !tbaa !5
  %181 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(152) %180)
          to label %182 unwind label %238

182:                                              ; preds = %176
  %183 = load ptr, ptr %28, align 8, !tbaa !5
  %184 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(152) %183)
          to label %185 unwind label %238

185:                                              ; preds = %182
  %186 = getelementptr inbounds %class.anon.386, ptr %30, i32 0, i32 0
  %187 = load i8, ptr %24, align 1, !tbaa !79, !range !80, !noundef !81
  %188 = trunc i8 %187 to i1
  %189 = zext i1 %188 to i8
  store i8 %189, ptr %186, align 4, !tbaa !82
  %190 = getelementptr inbounds %class.anon.386, ptr %30, i32 0, i32 1
  %191 = load i8, ptr %25, align 1, !tbaa !79, !range !80, !noundef !81
  %192 = trunc i8 %191 to i1
  %193 = zext i1 %192 to i8
  store i8 %193, ptr %190, align 1, !tbaa !85
  %194 = getelementptr inbounds %class.anon.386, ptr %30, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %194, ptr align 4 %26, i64 4, i1 false), !tbaa.struct !77
  %195 = getelementptr inbounds %class.anon.386, ptr %30, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %195, ptr align 4 %27, i64 4, i1 false), !tbaa.struct !77
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 4 %30, i64 12, i1 false)
  %196 = getelementptr inbounds { i64, i32 }, ptr %31, i32 0, i32 0
  %197 = load i64, ptr %196, align 4
  %198 = getelementptr inbounds { i64, i32 }, ptr %31, i32 0, i32 1
  %199 = load i32, ptr %198, align 4
  %200 = invoke noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction29CombinedImageSamplerParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_2ET_S9_S9_T0_"(ptr noundef %181, ptr noundef %184, i64 %197, i32 %199)
          to label %201 unwind label %238

201:                                              ; preds = %185
  store ptr %200, ptr %29, align 8, !tbaa !5
  %202 = load ptr, ptr %29, align 8, !tbaa !5
  %203 = load ptr, ptr %28, align 8, !tbaa !5
  %204 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(152) %203)
          to label %205 unwind label %238

205:                                              ; preds = %201
  %206 = icmp ne ptr %202, %204
  br i1 %206, label %207, label %251

207:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #8
  %208 = load ptr, ptr %29, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter", ptr %208, i32 0, i32 0
  %210 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %209)
          to label %211 unwind label %242

211:                                              ; preds = %207
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(9848) %40, i32 noundef %210, i1 noundef zeroext true)
          to label %212 unwind label %242

212:                                              ; preds = %211
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %213 unwind label %246

213:                                              ; preds = %212
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  store i32 1, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  br label %309

214:                                              ; preds = %104, %101, %98
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %13, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %14, align 4
  br label %311

218:                                              ; preds = %128, %122, %116, %113, %110
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %13, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %14, align 4
  br label %310

222:                                              ; preds = %134
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %13, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %14, align 4
  br label %262

226:                                              ; preds = %138
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %13, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %14, align 4
  br label %261

230:                                              ; preds = %154, %150
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %13, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %14, align 4
  br label %260

234:                                              ; preds = %169, %165
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %13, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %14, align 4
  br label %259

238:                                              ; preds = %253, %201, %185, %182, %176
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %13, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %14, align 4
  br label %258

242:                                              ; preds = %211, %207
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %13, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %14, align 4
  br label %250

246:                                              ; preds = %212
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %13, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %250

250:                                              ; preds = %246, %242
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  br label %258

251:                                              ; preds = %205
  %252 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %252, ptr noundef @.str.1058)
          to label %253 unwind label %254

253:                                              ; preds = %251
  invoke void @__cxa_throw(ptr %252, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %320 unwind label %238

254:                                              ; preds = %251
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %13, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %14, align 4
  call void @__cxa_free_exception(ptr %252) #8
  br label %258

258:                                              ; preds = %254, %250, %238
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %259

259:                                              ; preds = %258, %234
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %260

260:                                              ; preds = %259, %230
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  br label %261

261:                                              ; preds = %260, %226
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  br label %262

262:                                              ; preds = %261, %222
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  br label %310

263:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %264 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %40, i32 0, i32 12
  store ptr %264, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %265 = load ptr, ptr %34, align 8, !tbaa !5
  %266 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(120) %265)
          to label %267 unwind label %288

267:                                              ; preds = %263
  %268 = load ptr, ptr %34, align 8, !tbaa !5
  %269 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(120) %268)
          to label %270 unwind label %288

270:                                              ; preds = %267
  %271 = getelementptr inbounds %class.anon.387, ptr %36, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %271, ptr align 4 %6, i64 4, i1 false), !tbaa.struct !77
  %272 = getelementptr inbounds %class.anon.387, ptr %36, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %272, ptr align 4 %7, i64 4, i1 false), !tbaa.struct !77
  %273 = load i64, ptr %36, align 4
  %274 = invoke noundef ptr @"_ZSt7find_ifIPN11spirv_cross20CombinedImageSamplerEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES6_E3$_3ET_S8_S8_T0_"(ptr noundef %266, ptr noundef %269, i64 %273)
          to label %275 unwind label %288

275:                                              ; preds = %270
  store ptr %274, ptr %35, align 8, !tbaa !5
  %276 = load ptr, ptr %35, align 8, !tbaa !5
  %277 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %40, i32 0, i32 12
  %278 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(120) %277)
          to label %279 unwind label %288

279:                                              ; preds = %275
  %280 = icmp ne ptr %276, %278
  br i1 %280, label %281, label %301

281:                                              ; preds = %279
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #8
  %282 = load ptr, ptr %35, align 8, !tbaa !5
  %283 = getelementptr inbounds %"struct.spirv_cross::CombinedImageSampler", ptr %282, i32 0, i32 0
  %284 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %283)
          to label %285 unwind label %292

285:                                              ; preds = %281
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %40, i32 noundef %284, i1 noundef zeroext true)
          to label %286 unwind label %292

286:                                              ; preds = %285
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %287 unwind label %296

287:                                              ; preds = %286
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  store i32 1, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  br label %309

288:                                              ; preds = %303, %275, %270, %267, %263
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %13, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %14, align 4
  br label %308

292:                                              ; preds = %285, %281
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %13, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %14, align 4
  br label %300

296:                                              ; preds = %286
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %13, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %300

300:                                              ; preds = %296, %292
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  br label %308

301:                                              ; preds = %279
  %302 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %302, ptr noundef @.str.1059)
          to label %303 unwind label %304

303:                                              ; preds = %301
  invoke void @__cxa_throw(ptr %302, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %320 unwind label %288

304:                                              ; preds = %301
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %13, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %14, align 4
  call void @__cxa_free_exception(ptr %302) #8
  br label %308

308:                                              ; preds = %304, %300, %288
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  br label %310

309:                                              ; preds = %287, %213
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #8
  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
  ret void

310:                                              ; preds = %308, %262, %218
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %311

311:                                              ; preds = %310, %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %312

312:                                              ; preds = %311, %94, %81, %77
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %313

313:                                              ; preds = %312, %73
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %314

314:                                              ; preds = %313, %49
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #8
  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 %315

315:                                              ; preds = %314
  %316 = load ptr, ptr %13, align 8
  %317 = load i32, ptr %14, align 4
  %318 = insertvalue { ptr, i32 } poison, ptr %316, 0
  %319 = insertvalue { ptr, i32 } %318, i32 %317, 1
  resume { ptr, i32 } %319

320:                                              ; preds = %303, %253
  unreachable
}

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

declare noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction9ParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_0ET_S9_S9_T0_"(ptr noundef, ptr noundef, i32) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184)) #7

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction9ParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_1ET_S9_S9_T0_"(ptr noundef, ptr noundef, i32) #5

; 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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction29CombinedImageSamplerParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_2ET_S9_S9_T0_"(ptr noundef, ptr noundef, i64, i32) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(152)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(152)) #7

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPN11spirv_cross20CombinedImageSamplerEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES6_E3$_3ET_S8_S8_T0_"(ptr noundef, ptr noundef, i64) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(120)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(120)) #7

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 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 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 #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, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !6, i64 2040}
!12 = !{!"_ZTSN11spirv_cross8CompilerE", !13, i64 8, !61, i64 1928, !61, i64 1984, !6, i64 2040, !6, i64 2048, !51, i64 2056, !64, i64 2064, !53, i64 2120, !59, i64 2128, !53, i64 2184, !53, i64 2185, !66, i64 2192, !61, i64 2312, !69, i64 2368, !59, i64 2400, !59, i64 2456, !59, i64 2512, !59, i64 2568, !59, i64 2624, !58, i64 2680, !58, i64 2744, !51, i64 2808, !51, i64 2812, !53, i64 2816, !59, i64 2824, !53, i64 2880, !53, i64 2881, !51, i64 2884, !71, i64 2888, !61, i64 2944, !73, i64 3000, !59, i64 3056, !53, i64 3112, !75, i64 3120}
!13 = !{!"_ZTSN11spirv_cross8ParsedIRE", !14, i64 0, !20, i64 8, !24, i64 32, !27, i64 248, !7, i64 304, !32, i64 1088, !32, i64 1144, !35, i64 1200, !37, i64 1256, !40, i64 1312, !43, i64 1592, !46, i64 1624, !48, i64 1680, !50, i64 1736, !52, i64 1740, !54, i64 1748, !55, i64 1752, !51, i64 1756, !51, i64 1760, !56, i64 1768, !58, i64 1800, !59, i64 1864}
!14 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !15, i64 0}
!15 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !16, i64 0}
!16 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !18, i64 0}
!18 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !19, i64 0}
!19 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!20 = !{!"_ZTSSt6vectorIjSaIjEE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !25, i64 0, !10, i64 16, !26, i64 24}
!25 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !10, i64 8}
!26 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!27 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !28, i64 0}
!28 = !{!"_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, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!29 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!30 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !31, i64 0, !10, i64 8}
!31 = !{!"float", !7, i64 0}
!32 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !33, i64 0, !10, i64 16, !34, i64 24}
!33 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !10, i64 8}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!35 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !36, i64 0}
!36 = !{!"_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, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!37 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !38, i64 0, !10, i64 16, !39, i64 24}
!38 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !10, i64 8}
!39 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!40 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !41, i64 0, !10, i64 16, !42, i64 24}
!41 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !10, i64 8}
!42 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!43 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !44, i64 0, !10, i64 16, !45, i64 24}
!44 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !10, i64 8}
!45 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!46 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !47, i64 0}
!47 = !{!"_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, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!48 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !49, i64 0}
!49 = !{!"_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, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!50 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !51, i64 0}
!51 = !{!"int", !7, i64 0}
!52 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !51, i64 0, !53, i64 4, !53, i64 5, !53, i64 6}
!53 = !{!"bool", !7, i64 0}
!54 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!55 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!56 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !57, i64 0, !10, i64 8, !7, i64 16}
!57 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!58 = !{!"_ZTSN11spirv_cross6BitsetE", !10, i64 0, !59, i64 8}
!59 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !60, i64 0}
!60 = !{!"_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, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!61 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !62, i64 0, !10, i64 16, !63, i64 24}
!62 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !10, i64 8}
!63 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!64 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !65, i64 0}
!65 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !10, i64 8, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!66 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !67, i64 0, !10, i64 16, !68, i64 24}
!67 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !10, i64 8}
!68 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!69 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !70, i64 0, !6, i64 24}
!70 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!71 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !72, i64 0}
!72 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !10, i64 8, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!73 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !74, i64 0}
!74 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !10, i64 8, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!75 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !76, i64 0}
!76 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !10, i64 8, !29, i64 16, !10, i64 24, !30, i64 32, !6, i64 48}
!77 = !{i64 0, i64 4, !78}
!78 = !{!51, !51, i64 0}
!79 = !{!53, !53, i64 0}
!80 = !{i8 0, i8 2}
!81 = !{}
!82 = !{!83, !53, i64 0}
!83 = !{!"_ZTSZN11spirv_cross12CompilerGLSL25to_combined_image_samplerB5cxx11ENS_7TypedIDILNS_5TypesE2EEES3_E3$_2", !53, i64 0, !53, i64 1, !84, i64 4, !84, i64 8}
!84 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !51, i64 0}
!85 = !{!83, !53, i64 1}


; 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] }
%"class.spirv_cross::TypedID.282" = type { i32 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.1058 = external hidden unnamed_addr constant [122 x i8], align 1
@.str.1059 = external hidden unnamed_addr constant [112 x i8], align 1

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

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

declare 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 i32 @__gxx_personality_v0(...)

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 void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL25to_combined_image_samplerB5cxx11ENS_7TypedIDILNS_5TypesE2EEES3_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 %2, i32 %3) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.spirv_cross::TypedID.282", align 4
  %6 = alloca %"class.spirv_cross::TypedID.282", align 4
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.spirv_cross::TypedID.282", align 4
  %11 = alloca %"class.spirv_cross::TypedID.282", align 4
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  store i32 %2, ptr %5, align 4
  store i32 %3, ptr %6, align 4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  %14 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %14)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  %15 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %7, i8 noundef signext 91, i64 noundef 0) #7
  %.not = icmp eq i64 %15, -1
  br i1 %.not, label %21, label %16

16:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(32) %7, i64 noundef %15, i64 noundef -1)
          to label %17 unwind label %19

17:                                               ; preds = %16
  %18 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  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
  br label %21

19:                                               ; preds = %16
  %20 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %137

21:                                               ; preds = %17, %4
  %22 = getelementptr inbounds i8, ptr %1, i64 2040
  %23 = load ptr, ptr %22, align 8, !tbaa !5
  %24 = getelementptr inbounds i8, ptr %23, i64 24
  %25 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %26 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %25)
          to label %27 unwind label %35

27:                                               ; preds = %21
  %28 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %6)
  %29 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %28)
          to label %30 unwind label %37

30:                                               ; preds = %27
  %.not60 = icmp eq ptr %26, null
  br i1 %.not60, label %41, label %31

31:                                               ; preds = %30
  %32 = getelementptr inbounds i8, ptr %26, i64 8
  %33 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %34 unwind label %39

34:                                               ; preds = %31
  store i32 %33, ptr %5, align 4, !tbaa !75
  br label %41

35:                                               ; preds = %21
  %36 = landingpad { ptr, i32 }
          cleanup
  br label %137

37:                                               ; preds = %27
  %38 = landingpad { ptr, i32 }
          cleanup
  br label %137

39:                                               ; preds = %31
  %40 = landingpad { ptr, i32 }
          cleanup
  br label %137

41:                                               ; preds = %34, %30
  %.not61 = icmp eq ptr %29, null
  br i1 %.not61, label %48, label %42

42:                                               ; preds = %41
  %43 = getelementptr inbounds i8, ptr %29, i64 8
  %44 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_2EEEv(ptr noundef nonnull align 4 dereferenceable(4) %43)
          to label %45 unwind label %46

45:                                               ; preds = %42
  store i32 %44, ptr %6, align 4, !tbaa !75
  br label %48

46:                                               ; preds = %42
  %47 = landingpad { ptr, i32 }
          cleanup
  br label %137

48:                                               ; preds = %45, %41
  %49 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %50 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %.sroa.019.0.copyload = load i32, ptr %5, align 4, !tbaa !75
  %51 = invoke noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction9ParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_0ET_S9_S9_T0_"(ptr noundef %49, ptr noundef %50, i32 %.sroa.019.0.copyload)
          to label %52 unwind label %96

52:                                               ; preds = %48
  %53 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %54 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %.sroa.015.0.copyload = load i32, ptr %6, align 4, !tbaa !75
  %55 = invoke noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction9ParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_1ET_S9_S9_T0_"(ptr noundef %53, ptr noundef %54, i32 %.sroa.015.0.copyload)
          to label %56 unwind label %98

56:                                               ; preds = %52
  %57 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %.not62 = icmp eq ptr %51, %57
  br i1 %.not62, label %58, label %60

58:                                               ; preds = %56
  %59 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %.not63 = icmp eq ptr %55, %59
  br i1 %.not63, label %113, label %60

60:                                               ; preds = %58, %56
  %61 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %62 = icmp eq ptr %51, %61
  %63 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %64 = icmp eq ptr %55, %63
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #7
  br i1 %62, label %65, label %67

65:                                               ; preds = %60
  %66 = load i32, ptr %5, align 4, !tbaa !75
  store i32 %66, ptr %10, align 4, !tbaa !75
  br label %74

67:                                               ; preds = %60
  %68 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %69 = ptrtoint ptr %51 to i64
  %70 = ptrtoint ptr %68 to i64
  %71 = sub i64 %69, %70
  %72 = sdiv exact i64 %71, 20
  %73 = trunc i64 %72 to i32
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %10, i32 noundef %73)
  br label %74

74:                                               ; preds = %67, %65
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #7
  br i1 %64, label %75, label %77

75:                                               ; preds = %74
  %76 = load i32, ptr %6, align 4, !tbaa !75
  store i32 %76, ptr %11, align 4, !tbaa !75
  br label %84

77:                                               ; preds = %74
  %78 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184) %24)
  %79 = ptrtoint ptr %55 to i64
  %80 = ptrtoint ptr %78 to i64
  %81 = sub i64 %79, %80
  %82 = sdiv exact i64 %81, 20
  %83 = trunc i64 %82 to i32
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %11, i32 noundef %83)
  br label %84

84:                                               ; preds = %77, %75
  %.sroa.26.0.insert.shift = phi i64 [ 0, %77 ], [ 256, %75 ]
  %85 = load ptr, ptr %22, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i64 512
  %87 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(152) %86)
  %88 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(152) %86)
  %.sroa.3.sroa.0.2.copyload = load i32, ptr %10, align 4, !tbaa !75
  %.sroa.3.sroa.0.2.insert.ext = zext i32 %.sroa.3.sroa.0.2.copyload to i64
  %.sroa.3.sroa.0.2.insert.shift = shl nuw i64 %.sroa.3.sroa.0.2.insert.ext, 32
  %.sroa.4.8.copyload = load i32, ptr %11, align 4, !tbaa !75
  %.sroa.26.0.insert.insert = or disjoint i64 %.sroa.3.sroa.0.2.insert.shift, %.sroa.26.0.insert.shift
  %.sroa.05.0.insert.ext = zext i1 %62 to i64
  %.sroa.05.0.insert.insert = or disjoint i64 %.sroa.26.0.insert.insert, %.sroa.05.0.insert.ext
  %89 = invoke noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction29CombinedImageSamplerParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_2ET_S9_S9_T0_"(ptr noundef %87, ptr noundef %88, i64 %.sroa.05.0.insert.insert, i32 %.sroa.4.8.copyload)
          to label %90 unwind label %100

90:                                               ; preds = %84
  %91 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(152) %86)
  %.not67 = icmp eq ptr %89, %91
  br i1 %.not67, label %107, label %92

92:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #7
  %93 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %89)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %93, i1 noundef zeroext true)
          to label %94 unwind label %102

94:                                               ; preds = %92
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %95 unwind label %104

95:                                               ; preds = %94
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  br label %136

96:                                               ; preds = %48
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %137

98:                                               ; preds = %52
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %137

100:                                              ; preds = %109, %84
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %112

102:                                              ; preds = %92
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %106

104:                                              ; preds = %94
  %105 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br label %106

106:                                              ; preds = %104, %102
  %.pn68 = phi { ptr, i32 } [ %105, %104 ], [ %103, %102 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %112

107:                                              ; preds = %90
  %108 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %108, ptr noundef nonnull @.str.1058)
          to label %109 unwind label %110

109:                                              ; preds = %107
  invoke void @__cxa_throw(ptr nonnull %108, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %138 unwind label %100

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

112:                                              ; preds = %110, %106, %100
  %.pn68.pn = phi { ptr, i32 } [ %.pn68, %106 ], [ %101, %100 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  br label %137

113:                                              ; preds = %58
  %114 = getelementptr inbounds i8, ptr %1, i64 2192
  %115 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(120) %114)
  %116 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(120) %114)
  %.sroa.0.0.copyload = load i32, ptr %5, align 4, !tbaa !75
  %.sroa.0.0.insert.ext = zext i32 %.sroa.0.0.copyload to i64
  %.sroa.0.4.copyload = load i32, ptr %6, align 4, !tbaa !75
  %.sroa.0.4.insert.ext = zext i32 %.sroa.0.4.copyload to i64
  %.sroa.0.4.insert.shift = shl nuw i64 %.sroa.0.4.insert.ext, 32
  %.sroa.0.4.insert.insert = or disjoint i64 %.sroa.0.4.insert.shift, %.sroa.0.0.insert.ext
  %117 = invoke noundef ptr @"_ZSt7find_ifIPN11spirv_cross20CombinedImageSamplerEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES6_E3$_3ET_S8_S8_T0_"(ptr noundef %115, ptr noundef %116, i64 %.sroa.0.4.insert.insert)
          to label %118 unwind label %124

118:                                              ; preds = %113
  %119 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(120) %114)
  %.not64 = icmp eq ptr %117, %119
  br i1 %.not64, label %131, label %120

120:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  %121 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %117)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %121, i1 noundef zeroext true)
          to label %122 unwind label %126

122:                                              ; preds = %120
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %123 unwind label %128

123:                                              ; preds = %122
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %136

124:                                              ; preds = %133, %113
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %137

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

128:                                              ; preds = %122
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  br label %130

130:                                              ; preds = %128, %126
  %.pn = phi { ptr, i32 } [ %129, %128 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %137

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

133:                                              ; preds = %131
  invoke void @__cxa_throw(ptr nonnull %132, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %138 unwind label %124

134:                                              ; preds = %131
  %135 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %132) #7
  br label %137

136:                                              ; preds = %123, %95
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #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
  ret void

137:                                              ; preds = %35, %96, %124, %130, %134, %112, %98, %46, %39, %37, %19
  %.pn68.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %20, %19 ], [ %36, %35 ], [ %47, %46 ], [ %40, %39 ], [ %38, %37 ], [ %97, %96 ], [ %.pn68.pn, %112 ], [ %99, %98 ], [ %.pn, %130 ], [ %125, %124 ], [ %135, %134 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #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
  resume { ptr, i32 } %.pn68.pn.pn.pn.pn.pn.pn

138:                                              ; preds = %133, %109
  unreachable
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction9ParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_0ET_S9_S9_T0_"(ptr noundef, ptr noundef, i32) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction9ParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction9ParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_1ET_S9_S9_T0_"(ptr noundef, ptr noundef, i32) local_unnamed_addr #4

; 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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPN11spirv_cross12SPIRFunction29CombinedImageSamplerParameterEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES7_E3$_2ET_S9_S9_T0_"(ptr noundef, ptr noundef, i64, i32) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_12SPIRFunction29CombinedImageSamplerParameterELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPN11spirv_cross20CombinedImageSamplerEZNS0_12CompilerGLSL25to_combined_image_samplerB5cxx11ENS0_7TypedIDILNS0_5TypesE2EEES6_E3$_3ET_S8_S8_T0_"(ptr noundef, ptr noundef, i64) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_20CombinedImageSamplerELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #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 = { 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 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
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, !14, i64 2040}
!6 = !{!"_ZTSN11spirv_cross8CompilerE", !7, i64 8, !59, i64 1928, !59, i64 1984, !14, i64 2040, !14, i64 2048, !49, i64 2056, !62, i64 2064, !51, i64 2120, !57, i64 2128, !51, i64 2184, !51, i64 2185, !64, i64 2192, !59, i64 2312, !67, i64 2368, !57, i64 2400, !57, i64 2456, !57, i64 2512, !57, i64 2568, !57, i64 2624, !56, i64 2680, !56, i64 2744, !49, i64 2808, !49, i64 2812, !51, i64 2816, !57, i64 2824, !51, i64 2880, !51, i64 2881, !49, i64 2884, !69, i64 2888, !59, i64 2944, !71, i64 3000, !57, i64 3056, !51, i64 3112, !73, i64 3120}
!7 = !{!"_ZTSN11spirv_cross8ParsedIRE", !8, i64 0, !17, i64 8, !21, i64 32, !25, i64 248, !15, i64 304, !30, i64 1088, !30, i64 1144, !33, i64 1200, !35, i64 1256, !38, i64 1312, !41, i64 1592, !44, i64 1624, !46, i64 1680, !48, i64 1736, !50, i64 1740, !52, i64 1748, !53, i64 1752, !49, i64 1756, !49, i64 1760, !54, i64 1768, !56, i64 1800, !57, i64 1864}
!8 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !9, i64 0}
!9 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !10, i64 0}
!10 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !11, i64 0}
!11 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !12, i64 0}
!12 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !13, i64 0}
!13 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !14, i64 0}
!14 = !{!"any pointer", !15, i64 0}
!15 = !{!"omnipotent char", !16, i64 0}
!16 = !{!"Simple C++ TBAA"}
!17 = !{!"_ZTSSt6vectorIjSaIjEE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!21 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !22, i64 0, !23, i64 16, !24, i64 24}
!22 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !14, i64 0, !23, i64 8}
!23 = !{!"long", !15, i64 0}
!24 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !15, i64 0}
!25 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !26, i64 0}
!26 = !{!"_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", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!27 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !14, i64 0}
!28 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !29, i64 0, !23, i64 8}
!29 = !{!"float", !15, i64 0}
!30 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !31, i64 0, !23, i64 16, !32, i64 24}
!31 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !14, i64 0, !23, i64 8}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !15, i64 0}
!33 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !34, i64 0}
!34 = !{!"_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", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!35 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !36, i64 0, !23, i64 16, !37, i64 24}
!36 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !14, i64 0, !23, i64 8}
!37 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !15, i64 0}
!38 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !39, i64 0, !23, i64 16, !40, i64 24}
!39 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !14, i64 0, !23, i64 8}
!40 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !15, i64 0}
!41 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !42, i64 0, !23, i64 16, !43, i64 24}
!42 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !14, i64 0, !23, i64 8}
!43 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !15, i64 0}
!44 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !45, i64 0}
!45 = !{!"_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", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!46 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !47, i64 0}
!47 = !{!"_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", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!48 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !49, i64 0}
!49 = !{!"int", !15, i64 0}
!50 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !49, i64 0, !51, i64 4, !51, i64 5, !51, i64 6}
!51 = !{!"bool", !15, i64 0}
!52 = !{!"_ZTSN3spv15AddressingModelE", !15, i64 0}
!53 = !{!"_ZTSN3spv11MemoryModelE", !15, i64 0}
!54 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !55, i64 0, !23, i64 8, !15, i64 16}
!55 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !14, i64 0}
!56 = !{!"_ZTSN11spirv_cross6BitsetE", !23, i64 0, !57, i64 8}
!57 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !58, i64 0}
!58 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!59 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !60, i64 0, !23, i64 16, !61, i64 24}
!60 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !14, i64 0, !23, i64 8}
!61 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !15, i64 0}
!62 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !63, i64 0}
!63 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!64 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !65, i64 0, !23, i64 16, !66, i64 24}
!65 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !14, i64 0, !23, i64 8}
!66 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !15, i64 0}
!67 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !68, i64 0, !14, i64 24}
!68 = !{!"_ZTSSt14_Function_base", !15, i64 0, !14, i64 16}
!69 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !70, i64 0}
!70 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!71 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !72, i64 0}
!72 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!73 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !74, i64 0}
!74 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !14, i64 0, !23, i64 8, !27, i64 16, !23, i64 24, !28, i64 32, !14, i64 48}
!75 = !{!49, !49, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,ReassociatePass,SROAPass,SimplifyCFGPass