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

; 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"

%"struct.std::__detail::_Node_iterator.289" = type { %"struct.std::__detail::_Node_iterator_base.259" }
%"struct.std::__detail::_Node_iterator_base.259" = type { ptr }
%"class.spirv_cross::TypedID.162" = type { i32 }
%"struct.std::pair" = type <{ %"struct.std::__detail::_Node_iterator", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"class.spirv_cross::TypedID.164" = type { i32 }
%"class.spirv_cross::TypedID.163" = type { i32 }
%"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler" = type { %"struct.spirv_cross::Compiler::OpcodeHandler", ptr, ptr, %"class.std::unordered_map.301", %"class.std::unordered_map.301", %"class.std::unordered_map.194", %"class.std::unordered_map.301", %"class.std::unordered_map.301", %"class.std::unordered_set", %"class.std::unordered_map.301", ptr }
%"struct.spirv_cross::Compiler::OpcodeHandler" = type { ptr }
%"class.std::unordered_map.194" = type { %"class.std::_Hashtable.195" }
%"class.std::_Hashtable.195" = 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.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.301" = type { %"class.std::_Hashtable.302" }
%"class.std::_Hashtable.302" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::pair.260" = type { i32, i32 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.162", [4 x i8] }>
%"struct.spirv_cross::SPIRExpression" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.162", %"class.std::__cxx11::basic_string", %"class.spirv_cross::TypedID.163", %"class.spirv_cross::TypedID.162", i8, i8, i8, i8, [4 x i8], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", i32, [4 x i8] }>
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.162" }>
%"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::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.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 }
%"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_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::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.166", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.169", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.163", %"class.spirv_cross::TypedID.163", %"class.std::unordered_set.172" }
%"class.spirv_cross::SmallVector.166" = type { %"class.spirv_cross::VectorView.167", i64, %"class.spirv_cross::AlignedBuffer.168" }
%"class.spirv_cross::VectorView.167" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.168" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.169" = type { %"class.spirv_cross::VectorView.170", i64, %"class.spirv_cross::AlignedBuffer.171" }
%"class.spirv_cross::VectorView.170" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.171" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.163", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.172" = type { %"class.std::_Hashtable.173" }
%"class.std::_Hashtable.173" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::SPIRExtension" = type { %"struct.spirv_cross::IVariant.base", i32 }

@.str = external hidden unnamed_addr constant [1 x i8], align 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler6handleEN3spv2OpEPKjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %1, ptr noundef %2, i32 noundef %3) unnamed_addr #1 align 2 {
  %5 = alloca i1, align 1
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %13 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.spirv_cross::TypedID.162", align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %"struct.std::pair", align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca %"struct.std::pair", align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca %"struct.std::pair", align 8
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %"struct.std::pair", align 8
  %31 = alloca i32, align 4
  %32 = alloca %"struct.std::pair", align 8
  %33 = alloca i32, align 4
  %34 = alloca %"struct.std::pair", align 8
  %35 = alloca ptr, align 8
  %36 = alloca i8, align 1
  %37 = alloca ptr, align 8
  %38 = alloca %"class.spirv_cross::TypedID.164", align 4
  %39 = alloca %"struct.std::pair", align 8
  %40 = alloca %"class.spirv_cross::TypedID.162", align 4
  %41 = alloca %"class.spirv_cross::TypedID.162", align 4
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca %"struct.std::pair", align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca %"struct.std::pair", align 8
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca %"struct.std::pair", align 8
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca %"struct.std::pair", align 8
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca %"struct.std::pair", align 8
  %61 = alloca %"struct.std::pair", align 8
  %62 = alloca i32, align 4
  %63 = alloca ptr, align 8
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca %"struct.std::pair", align 8
  %67 = alloca ptr, align 8
  %68 = alloca %"struct.std::pair", align 8
  %69 = alloca %"class.spirv_cross::TypedID.163", align 4
  %70 = alloca i32, align 4
  %71 = alloca ptr, align 8
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca %"struct.std::pair", align 8
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca %"struct.std::pair", align 8
  %78 = alloca i32, align 4
  %79 = alloca ptr, align 8
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca %"struct.std::pair", align 8
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca %"struct.std::pair", align 8
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca ptr, align 8
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca %"struct.std::pair", align 8
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca %"struct.std::pair", align 8
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca %"struct.std::pair", align 8
  %100 = alloca i32, align 4
  %101 = alloca i32, align 4
  %102 = alloca i32, align 4
  %103 = alloca i32, align 4
  %104 = alloca i32, align 4
  %105 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !11
  %106 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  store i32 0, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  store i32 0, ptr %11, align 4, !tbaa !11
  %107 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %108 = load ptr, ptr %107, align 8, !tbaa !13
  %109 = load i32, ptr %7, align 4, !tbaa !9
  %110 = load ptr, ptr %8, align 8, !tbaa !5
  %111 = load i32, ptr %9, align 4, !tbaa !11
  %112 = call noundef zeroext i1 @_ZN11spirv_cross8Compiler26instruction_to_result_typeERjS1_N3spv2OpEPKjj(ptr noundef nonnull align 8 dereferenceable(3176) %108, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, i32 noundef %109, ptr noundef %110, i32 noundef %111)
  br i1 %112, label %113, label %137

113:                                              ; preds = %4
  %114 = load i32, ptr %7, align 4, !tbaa !9
  %115 = icmp eq i32 %114, 4447
  br i1 %115, label %116, label %133

116:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %117 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 5
  %118 = load ptr, ptr %8, align 8, !tbaa !5
  %119 = getelementptr inbounds i32, ptr %118, i64 2
  %120 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(56) %117, ptr noundef nonnull align 4 dereferenceable(4) %119)
  %121 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.289", ptr %12, i32 0, i32 0
  %122 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.259", ptr %121, i32 0, i32 0
  store ptr %120, ptr %122, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  %123 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 5
  %124 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %123) #3
  %125 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.289", ptr %13, i32 0, i32 0
  %126 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.259", ptr %125, i32 0, i32 0
  store ptr %124, ptr %126, align 8
  %127 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  br i1 %127, label %128, label %132

128:                                              ; preds = %116
  %129 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #3
  %130 = getelementptr inbounds %"struct.std::pair.260", ptr %129, i32 0, i32 1
  %131 = load i32, ptr %130, align 4, !tbaa !26
  store i32 %131, ptr %10, align 4, !tbaa !11
  br label %132

132:                                              ; preds = %128, %116
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  br label %133

133:                                              ; preds = %132, %113
  %134 = load i32, ptr %10, align 4, !tbaa !11
  %135 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 5
  %136 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %135, ptr noundef nonnull align 4 dereferenceable(4) %11)
  store i32 %134, ptr %136, align 4, !tbaa !11
  br label %137

137:                                              ; preds = %133, %4
  %138 = load i32, ptr %7, align 4, !tbaa !9
  switch i32 %138, label %968 [
    i32 62, label %139
    i32 65, label %219
    i32 66, label %219
    i32 67, label %219
    i32 63, label %339
    i32 83, label %448
    i32 61, label %523
    i32 57, label %590
    i32 169, label %678
    i32 12, label %742
    i32 68, label %849
    i32 8, label %857
    i32 317, label %857
    i32 82, label %858
    i32 79, label %858
    i32 81, label %877
    i32 99, label %896
    i32 87, label %920
    i32 88, label %920
    i32 305, label %920
    i32 306, label %920
    i32 91, label %920
    i32 92, label %920
    i32 309, label %920
    i32 310, label %920
    i32 95, label %920
    i32 313, label %920
    i32 98, label %920
    i32 320, label %920
    i32 89, label %944
    i32 90, label %944
    i32 307, label %944
    i32 308, label %944
    i32 93, label %944
    i32 94, label %944
    i32 311, label %944
    i32 312, label %944
    i32 96, label %944
    i32 314, label %944
    i32 97, label %944
    i32 315, label %944
  ]

139:                                              ; preds = %137
  %140 = load i32, ptr %9, align 4, !tbaa !11
  %141 = icmp ult i32 %140, 2
  br i1 %141, label %142, label %143

142:                                              ; preds = %139
  store i1 false, ptr %5, align 1
  store i32 1, ptr %14, align 4
  br label %989

143:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %144 = load ptr, ptr %8, align 8, !tbaa !5
  %145 = getelementptr inbounds i32, ptr %144, i64 0
  %146 = load i32, ptr %145, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef %146)
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %147 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %148 = load ptr, ptr %147, align 8, !tbaa !13
  %149 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %150 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %148, i32 noundef %149)
  store ptr %150, ptr %16, align 8, !tbaa !5
  %151 = load ptr, ptr %16, align 8, !tbaa !5
  %152 = icmp ne ptr %151, null
  br i1 %152, label %153, label %204

153:                                              ; preds = %143
  %154 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %155 = load ptr, ptr %16, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %155, i32 0, i32 1
  %157 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %156)
  store i32 %157, ptr %17, align 4, !tbaa !11
  %158 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %154, ptr noundef nonnull align 4 dereferenceable(4) %17)
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %159 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %160 = load ptr, ptr %159, align 8, !tbaa !28
  %161 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %160, i32 0, i32 1
  %162 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %161)
  store i32 %162, ptr %18, align 4, !tbaa !11
  %163 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %158, ptr noundef nonnull align 4 dereferenceable(4) %18)
  %164 = getelementptr inbounds { ptr, i8 }, ptr %19, i32 0, i32 0
  %165 = extractvalue { ptr, i8 } %163, 0
  store ptr %165, ptr %164, align 8
  %166 = getelementptr inbounds { ptr, i8 }, ptr %19, i32 0, i32 1
  %167 = extractvalue { ptr, i8 } %163, 1
  store i8 %167, ptr %166, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  %168 = load ptr, ptr %16, align 8, !tbaa !5
  %169 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %168, i32 0, i32 1
  %170 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %169)
  %171 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %172 = icmp eq i32 %170, %171
  br i1 %172, label %173, label %188

173:                                              ; preds = %153
  %174 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %175 = load ptr, ptr %16, align 8, !tbaa !5
  %176 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %175, i32 0, i32 1
  %177 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %176)
  store i32 %177, ptr %20, align 4, !tbaa !11
  %178 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %174, ptr noundef nonnull align 4 dereferenceable(4) %20)
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %179 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %180 = load ptr, ptr %179, align 8, !tbaa !28
  %181 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %180, i32 0, i32 1
  %182 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %181)
  store i32 %182, ptr %21, align 4, !tbaa !11
  %183 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %178, ptr noundef nonnull align 4 dereferenceable(4) %21)
  %184 = getelementptr inbounds { ptr, i8 }, ptr %22, i32 0, i32 0
  %185 = extractvalue { ptr, i8 } %183, 0
  store ptr %185, ptr %184, align 8
  %186 = getelementptr inbounds { ptr, i8 }, ptr %22, i32 0, i32 1
  %187 = extractvalue { ptr, i8 } %183, 1
  store i8 %187, ptr %186, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %203

188:                                              ; preds = %153
  %189 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %190 = load ptr, ptr %16, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %190, i32 0, i32 1
  %192 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %191)
  store i32 %192, ptr %23, align 4, !tbaa !11
  %193 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %189, ptr noundef nonnull align 4 dereferenceable(4) %23)
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %194 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %195 = load ptr, ptr %194, align 8, !tbaa !28
  %196 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %195, i32 0, i32 1
  %197 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %196)
  store i32 %197, ptr %24, align 4, !tbaa !11
  %198 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %193, ptr noundef nonnull align 4 dereferenceable(4) %24)
  %199 = getelementptr inbounds { ptr, i8 }, ptr %25, i32 0, i32 0
  %200 = extractvalue { ptr, i8 } %198, 0
  store ptr %200, ptr %199, align 8
  %201 = getelementptr inbounds { ptr, i8 }, ptr %25, i32 0, i32 1
  %202 = extractvalue { ptr, i8 } %198, 1
  store i8 %202, ptr %201, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %203

203:                                              ; preds = %188, %173
  br label %204

204:                                              ; preds = %203, %143
  %205 = load ptr, ptr %8, align 8, !tbaa !5
  %206 = getelementptr inbounds i32, ptr %205, i64 0
  %207 = load i32, ptr %206, align 4, !tbaa !11
  %208 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %209 = load ptr, ptr %208, align 8, !tbaa !28
  %210 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %209, i32 0, i32 1
  %211 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %210)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %207, i32 noundef %211)
  %212 = load ptr, ptr %8, align 8, !tbaa !5
  %213 = getelementptr inbounds i32, ptr %212, i64 1
  %214 = load i32, ptr %213, align 4, !tbaa !11
  %215 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %216 = load ptr, ptr %215, align 8, !tbaa !28
  %217 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %216, i32 0, i32 1
  %218 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %217)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %214, i32 noundef %218)
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  br label %988

219:                                              ; preds = %137, %137, %137
  %220 = load i32, ptr %9, align 4, !tbaa !11
  %221 = icmp ult i32 %220, 3
  br i1 %221, label %222, label %223

222:                                              ; preds = %219
  store i1 false, ptr %5, align 1
  store i32 1, ptr %14, align 4
  br label %989

223:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %224 = load ptr, ptr %8, align 8, !tbaa !5
  %225 = getelementptr inbounds i32, ptr %224, i64 2
  %226 = load i32, ptr %225, align 4, !tbaa !11
  store i32 %226, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  %227 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %228 = load ptr, ptr %227, align 8, !tbaa !13
  %229 = load i32, ptr %26, align 4, !tbaa !11
  %230 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %228, i32 noundef %229)
  store ptr %230, ptr %27, align 8, !tbaa !5
  %231 = load ptr, ptr %27, align 8, !tbaa !5
  %232 = icmp ne ptr %231, null
  br i1 %232, label %233, label %260

233:                                              ; preds = %223
  %234 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  %235 = load ptr, ptr %27, align 8, !tbaa !5
  %236 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %235, i32 0, i32 1
  %237 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %236)
  store i32 %237, ptr %28, align 4, !tbaa !11
  %238 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %234, ptr noundef nonnull align 4 dereferenceable(4) %28)
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  %239 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %240 = load ptr, ptr %239, align 8, !tbaa !28
  %241 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %240, i32 0, i32 1
  %242 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %241)
  store i32 %242, ptr %29, align 4, !tbaa !11
  %243 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %238, ptr noundef nonnull align 4 dereferenceable(4) %29)
  %244 = getelementptr inbounds { ptr, i8 }, ptr %30, i32 0, i32 0
  %245 = extractvalue { ptr, i8 } %243, 0
  store ptr %245, ptr %244, align 8
  %246 = getelementptr inbounds { ptr, i8 }, ptr %30, i32 0, i32 1
  %247 = extractvalue { ptr, i8 } %243, 1
  store i8 %247, ptr %246, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  %248 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 9
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = getelementptr inbounds i32, ptr %249, i64 1
  %251 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %248, ptr noundef nonnull align 4 dereferenceable(4) %250)
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  %252 = load ptr, ptr %27, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %252, i32 0, i32 1
  %254 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %253)
  store i32 %254, ptr %31, align 4, !tbaa !11
  %255 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %251, ptr noundef nonnull align 4 dereferenceable(4) %31)
  %256 = getelementptr inbounds { ptr, i8 }, ptr %32, i32 0, i32 0
  %257 = extractvalue { ptr, i8 } %255, 0
  store ptr %257, ptr %256, align 8
  %258 = getelementptr inbounds { ptr, i8 }, ptr %32, i32 0, i32 1
  %259 = extractvalue { ptr, i8 } %255, 1
  store i8 %259, ptr %258, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  br label %260

260:                                              ; preds = %233, %223
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  store i32 2, ptr %33, align 4, !tbaa !11
  br label %261

261:                                              ; preds = %289, %260
  %262 = load i32, ptr %33, align 4, !tbaa !11
  %263 = load i32, ptr %9, align 4, !tbaa !11
  %264 = icmp ult i32 %262, %263
  br i1 %264, label %266, label %265

265:                                              ; preds = %261
  store i32 3, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  br label %292

266:                                              ; preds = %261
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = load i32, ptr %33, align 4, !tbaa !11
  %269 = zext i32 %268 to i64
  %270 = getelementptr inbounds i32, ptr %267, i64 %269
  %271 = load i32, ptr %270, align 4, !tbaa !11
  %272 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %273 = load ptr, ptr %272, align 8, !tbaa !28
  %274 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %273, i32 0, i32 1
  %275 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %274)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %271, i32 noundef %275)
  %276 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 9
  %277 = load ptr, ptr %8, align 8, !tbaa !5
  %278 = getelementptr inbounds i32, ptr %277, i64 1
  %279 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %276, ptr noundef nonnull align 4 dereferenceable(4) %278)
  %280 = load ptr, ptr %8, align 8, !tbaa !5
  %281 = load i32, ptr %33, align 4, !tbaa !11
  %282 = zext i32 %281 to i64
  %283 = getelementptr inbounds i32, ptr %280, i64 %282
  %284 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %279, ptr noundef nonnull align 4 dereferenceable(4) %283)
  %285 = getelementptr inbounds { ptr, i8 }, ptr %34, i32 0, i32 0
  %286 = extractvalue { ptr, i8 } %284, 0
  store ptr %286, ptr %285, align 8
  %287 = getelementptr inbounds { ptr, i8 }, ptr %34, i32 0, i32 1
  %288 = extractvalue { ptr, i8 } %284, 1
  store i8 %288, ptr %287, align 8
  br label %289

289:                                              ; preds = %266
  %290 = load i32, ptr %33, align 4, !tbaa !11
  %291 = add i32 %290, 1
  store i32 %291, ptr %33, align 4, !tbaa !11
  br label %261, !llvm.loop !29

292:                                              ; preds = %265
  %293 = load ptr, ptr %8, align 8, !tbaa !5
  %294 = getelementptr inbounds i32, ptr %293, i64 1
  %295 = load i32, ptr %294, align 4, !tbaa !11
  %296 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %297 = load ptr, ptr %296, align 8, !tbaa !28
  %298 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %297, i32 0, i32 1
  %299 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %298)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %295, i32 noundef %299)
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  %300 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %301 = load ptr, ptr %300, align 8, !tbaa !13
  %302 = load ptr, ptr %8, align 8, !tbaa !5
  %303 = getelementptr inbounds i32, ptr %302, i64 1
  %304 = load i32, ptr %303, align 4, !tbaa !11
  %305 = load ptr, ptr %8, align 8, !tbaa !5
  %306 = getelementptr inbounds i32, ptr %305, i64 0
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #3
  store i8 1, ptr %36, align 1, !tbaa !31
  %307 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRA1_KcRKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %301, i32 noundef %304, ptr noundef nonnull align 1 dereferenceable(1) @.str, ptr noundef nonnull align 4 dereferenceable(4) %306, ptr noundef nonnull align 1 dereferenceable(1) %36)
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #3
  store ptr %307, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  %308 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %309 = load ptr, ptr %308, align 8, !tbaa !13
  %310 = load i32, ptr %26, align 4, !tbaa !11
  %311 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %309, i32 noundef %310)
  store ptr %311, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %312 = load ptr, ptr %37, align 8, !tbaa !5
  %313 = icmp ne ptr %312, null
  br i1 %313, label %314, label %317

314:                                              ; preds = %292
  %315 = load ptr, ptr %37, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %315, i32 0, i32 1
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 4 dereferenceable(4) %316)
  br label %318

317:                                              ; preds = %292
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %38, i32 noundef 0)
  br label %318

318:                                              ; preds = %317, %314
  %319 = load ptr, ptr %35, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %319, i32 0, i32 4
  %321 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_2EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %320, ptr noundef nonnull align 4 dereferenceable(4) %38)
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  %322 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %323 = load ptr, ptr %322, align 8, !tbaa !13
  %324 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %323, i32 0, i32 1
  %325 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %324, i32 0, i32 2
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = getelementptr inbounds i32, ptr %326, i64 1
  %328 = load i32, ptr %327, align 4, !tbaa !11
  %329 = zext i32 %328 to i64
  %330 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %325, i64 noundef %329) #3
  call void @_ZN11spirv_cross7Variant22set_allow_type_rewriteEv(ptr noundef nonnull align 8 dereferenceable(21) %330)
  %331 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 8
  %332 = load ptr, ptr %8, align 8, !tbaa !5
  %333 = getelementptr inbounds i32, ptr %332, i64 1
  %334 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %331, ptr noundef nonnull align 4 dereferenceable(4) %333)
  %335 = getelementptr inbounds { ptr, i8 }, ptr %39, i32 0, i32 0
  %336 = extractvalue { ptr, i8 } %334, 0
  store ptr %336, ptr %335, align 8
  %337 = getelementptr inbounds { ptr, i8 }, ptr %39, i32 0, i32 1
  %338 = extractvalue { ptr, i8 } %334, 1
  store i8 %338, ptr %337, align 8
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  br label %988

339:                                              ; preds = %137
  %340 = load i32, ptr %9, align 4, !tbaa !11
  %341 = icmp ult i32 %340, 2
  br i1 %341, label %342, label %343

342:                                              ; preds = %339
  store i1 false, ptr %5, align 1
  store i32 1, ptr %14, align 4
  br label %989

343:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  %344 = load ptr, ptr %8, align 8, !tbaa !5
  %345 = getelementptr inbounds i32, ptr %344, i64 0
  %346 = load i32, ptr %345, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %40, i32 noundef %346)
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  %347 = load ptr, ptr %8, align 8, !tbaa !5
  %348 = getelementptr inbounds i32, ptr %347, i64 1
  %349 = load i32, ptr %348, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %41, i32 noundef %349)
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  %350 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %351 = load ptr, ptr %350, align 8, !tbaa !13
  %352 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  %353 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %351, i32 noundef %352)
  store ptr %353, ptr %42, align 8, !tbaa !5
  %354 = load ptr, ptr %42, align 8, !tbaa !5
  %355 = icmp ne ptr %354, null
  br i1 %355, label %356, label %407

356:                                              ; preds = %343
  %357 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #3
  %358 = load ptr, ptr %42, align 8, !tbaa !5
  %359 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %358, i32 0, i32 1
  %360 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %359)
  store i32 %360, ptr %43, align 4, !tbaa !11
  %361 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %357, ptr noundef nonnull align 4 dereferenceable(4) %43)
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #3
  %362 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %363 = load ptr, ptr %362, align 8, !tbaa !28
  %364 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %363, i32 0, i32 1
  %365 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %364)
  store i32 %365, ptr %44, align 4, !tbaa !11
  %366 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %361, ptr noundef nonnull align 4 dereferenceable(4) %44)
  %367 = getelementptr inbounds { ptr, i8 }, ptr %45, i32 0, i32 0
  %368 = extractvalue { ptr, i8 } %366, 0
  store ptr %368, ptr %367, align 8
  %369 = getelementptr inbounds { ptr, i8 }, ptr %45, i32 0, i32 1
  %370 = extractvalue { ptr, i8 } %366, 1
  store i8 %370, ptr %369, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  %371 = load ptr, ptr %42, align 8, !tbaa !5
  %372 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %371, i32 0, i32 1
  %373 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %372)
  %374 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  %375 = icmp eq i32 %373, %374
  br i1 %375, label %376, label %391

376:                                              ; preds = %356
  %377 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #3
  %378 = load ptr, ptr %42, align 8, !tbaa !5
  %379 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %378, i32 0, i32 1
  %380 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %379)
  store i32 %380, ptr %46, align 4, !tbaa !11
  %381 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %377, ptr noundef nonnull align 4 dereferenceable(4) %46)
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #3
  %382 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %383 = load ptr, ptr %382, align 8, !tbaa !28
  %384 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %383, i32 0, i32 1
  %385 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %384)
  store i32 %385, ptr %47, align 4, !tbaa !11
  %386 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %381, ptr noundef nonnull align 4 dereferenceable(4) %47)
  %387 = getelementptr inbounds { ptr, i8 }, ptr %48, i32 0, i32 0
  %388 = extractvalue { ptr, i8 } %386, 0
  store ptr %388, ptr %387, align 8
  %389 = getelementptr inbounds { ptr, i8 }, ptr %48, i32 0, i32 1
  %390 = extractvalue { ptr, i8 } %386, 1
  store i8 %390, ptr %389, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  br label %406

391:                                              ; preds = %356
  %392 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #3
  %393 = load ptr, ptr %42, align 8, !tbaa !5
  %394 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %393, i32 0, i32 1
  %395 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %394)
  store i32 %395, ptr %49, align 4, !tbaa !11
  %396 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %392, ptr noundef nonnull align 4 dereferenceable(4) %49)
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #3
  %397 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %398 = load ptr, ptr %397, align 8, !tbaa !28
  %399 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %398, i32 0, i32 1
  %400 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %399)
  store i32 %400, ptr %50, align 4, !tbaa !11
  %401 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %396, ptr noundef nonnull align 4 dereferenceable(4) %50)
  %402 = getelementptr inbounds { ptr, i8 }, ptr %51, i32 0, i32 0
  %403 = extractvalue { ptr, i8 } %401, 0
  store ptr %403, ptr %402, align 8
  %404 = getelementptr inbounds { ptr, i8 }, ptr %51, i32 0, i32 1
  %405 = extractvalue { ptr, i8 } %401, 1
  store i8 %405, ptr %404, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #3
  br label %406

406:                                              ; preds = %391, %376
  br label %407

407:                                              ; preds = %406, %343
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #3
  store i32 0, ptr %52, align 4, !tbaa !11
  br label %408

408:                                              ; preds = %422, %407
  %409 = load i32, ptr %52, align 4, !tbaa !11
  %410 = icmp ult i32 %409, 2
  br i1 %410, label %412, label %411

411:                                              ; preds = %408
  store i32 6, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #3
  br label %425

412:                                              ; preds = %408
  %413 = load ptr, ptr %8, align 8, !tbaa !5
  %414 = load i32, ptr %52, align 4, !tbaa !11
  %415 = zext i32 %414 to i64
  %416 = getelementptr inbounds i32, ptr %413, i64 %415
  %417 = load i32, ptr %416, align 4, !tbaa !11
  %418 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %419 = load ptr, ptr %418, align 8, !tbaa !28
  %420 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %419, i32 0, i32 1
  %421 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %420)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %417, i32 noundef %421)
  br label %422

422:                                              ; preds = %412
  %423 = load i32, ptr %52, align 4, !tbaa !11
  %424 = add i32 %423, 1
  store i32 %424, ptr %52, align 4, !tbaa !11
  br label %408, !llvm.loop !33

425:                                              ; preds = %411
  %426 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %427 = load ptr, ptr %426, align 8, !tbaa !13
  %428 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %41)
  %429 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %427, i32 noundef %428)
  store ptr %429, ptr %42, align 8, !tbaa !5
  %430 = load ptr, ptr %42, align 8, !tbaa !5
  %431 = icmp ne ptr %430, null
  br i1 %431, label %432, label %447

432:                                              ; preds = %425
  %433 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #3
  %434 = load ptr, ptr %42, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %434, i32 0, i32 1
  %436 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %435)
  store i32 %436, ptr %53, align 4, !tbaa !11
  %437 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %433, ptr noundef nonnull align 4 dereferenceable(4) %53)
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #3
  %438 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %439 = load ptr, ptr %438, align 8, !tbaa !28
  %440 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %439, i32 0, i32 1
  %441 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %440)
  store i32 %441, ptr %54, align 4, !tbaa !11
  %442 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %437, ptr noundef nonnull align 4 dereferenceable(4) %54)
  %443 = getelementptr inbounds { ptr, i8 }, ptr %55, i32 0, i32 0
  %444 = extractvalue { ptr, i8 } %442, 0
  store ptr %444, ptr %443, align 8
  %445 = getelementptr inbounds { ptr, i8 }, ptr %55, i32 0, i32 1
  %446 = extractvalue { ptr, i8 } %442, 1
  store i8 %446, ptr %445, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #3
  br label %447

447:                                              ; preds = %432, %425
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  br label %988

448:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  %449 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %450 = load ptr, ptr %449, align 8, !tbaa !13
  %451 = load i32, ptr %10, align 4, !tbaa !11
  %452 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %450, i32 noundef %451)
  store ptr %452, ptr %56, align 8, !tbaa !5
  %453 = load ptr, ptr %56, align 8, !tbaa !5
  %454 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %453, i32 0, i32 9
  %455 = load i8, ptr %454, align 4, !tbaa !34, !range !56, !noundef !57
  %456 = trunc i8 %455 to i1
  br i1 %456, label %457, label %463

457:                                              ; preds = %448
  %458 = load ptr, ptr %56, align 8, !tbaa !5
  %459 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %458, i32 0, i32 16
  %460 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %459)
  %461 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 5
  %462 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %461, ptr noundef nonnull align 4 dereferenceable(4) %11)
  store i32 %460, ptr %462, align 4, !tbaa !11
  br label %463

463:                                              ; preds = %457, %448
  %464 = load i32, ptr %9, align 4, !tbaa !11
  %465 = icmp ult i32 %464, 3
  br i1 %465, label %466, label %467

466:                                              ; preds = %463
  store i1 false, ptr %5, align 1
  store i32 1, ptr %14, align 4
  br label %521

467:                                              ; preds = %463
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #3
  %468 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %469 = load ptr, ptr %468, align 8, !tbaa !13
  %470 = load ptr, ptr %8, align 8, !tbaa !5
  %471 = getelementptr inbounds i32, ptr %470, i64 2
  %472 = load i32, ptr %471, align 4, !tbaa !11
  %473 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %469, i32 noundef %472)
  store ptr %473, ptr %57, align 8, !tbaa !5
  %474 = load ptr, ptr %57, align 8, !tbaa !5
  %475 = icmp ne ptr %474, null
  br i1 %475, label %476, label %491

476:                                              ; preds = %467
  %477 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #3
  %478 = load ptr, ptr %57, align 8, !tbaa !5
  %479 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %478, i32 0, i32 1
  %480 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %479)
  store i32 %480, ptr %58, align 4, !tbaa !11
  %481 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %477, ptr noundef nonnull align 4 dereferenceable(4) %58)
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #3
  %482 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %483 = load ptr, ptr %482, align 8, !tbaa !28
  %484 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %483, i32 0, i32 1
  %485 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %484)
  store i32 %485, ptr %59, align 4, !tbaa !11
  %486 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %481, ptr noundef nonnull align 4 dereferenceable(4) %59)
  %487 = getelementptr inbounds { ptr, i8 }, ptr %60, i32 0, i32 0
  %488 = extractvalue { ptr, i8 } %486, 0
  store ptr %488, ptr %487, align 8
  %489 = getelementptr inbounds { ptr, i8 }, ptr %60, i32 0, i32 1
  %490 = extractvalue { ptr, i8 } %486, 1
  store i8 %490, ptr %489, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #3
  br label %491

491:                                              ; preds = %476, %467
  %492 = load ptr, ptr %8, align 8, !tbaa !5
  %493 = getelementptr inbounds i32, ptr %492, i64 1
  %494 = load i32, ptr %493, align 4, !tbaa !11
  %495 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %496 = load ptr, ptr %495, align 8, !tbaa !28
  %497 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %496, i32 0, i32 1
  %498 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %497)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %494, i32 noundef %498)
  %499 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 8
  %500 = load ptr, ptr %8, align 8, !tbaa !5
  %501 = getelementptr inbounds i32, ptr %500, i64 2
  %502 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %499, ptr noundef nonnull align 4 dereferenceable(4) %501)
  %503 = icmp ne i64 %502, 0
  br i1 %503, label %504, label %513

504:                                              ; preds = %491
  %505 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 8
  %506 = load ptr, ptr %8, align 8, !tbaa !5
  %507 = getelementptr inbounds i32, ptr %506, i64 1
  %508 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %505, ptr noundef nonnull align 4 dereferenceable(4) %507)
  %509 = getelementptr inbounds { ptr, i8 }, ptr %61, i32 0, i32 0
  %510 = extractvalue { ptr, i8 } %508, 0
  store ptr %510, ptr %509, align 8
  %511 = getelementptr inbounds { ptr, i8 }, ptr %61, i32 0, i32 1
  %512 = extractvalue { ptr, i8 } %508, 1
  store i8 %512, ptr %511, align 8
  br label %513

513:                                              ; preds = %504, %491
  %514 = load ptr, ptr %8, align 8, !tbaa !5
  %515 = getelementptr inbounds i32, ptr %514, i64 2
  %516 = load i32, ptr %515, align 4, !tbaa !11
  %517 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %518 = load ptr, ptr %517, align 8, !tbaa !28
  %519 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %518, i32 0, i32 1
  %520 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %519)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %516, i32 noundef %520)
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  br label %521

521:                                              ; preds = %513, %466
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  %522 = load i32, ptr %14, align 4
  switch i32 %522, label %989 [
    i32 2, label %988
  ]

523:                                              ; preds = %137
  %524 = load i32, ptr %9, align 4, !tbaa !11
  %525 = icmp ult i32 %524, 3
  br i1 %525, label %526, label %527

526:                                              ; preds = %523
  store i1 false, ptr %5, align 1
  store i32 1, ptr %14, align 4
  br label %989

527:                                              ; preds = %523
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #3
  %528 = load ptr, ptr %8, align 8, !tbaa !5
  %529 = getelementptr inbounds i32, ptr %528, i64 2
  %530 = load i32, ptr %529, align 4, !tbaa !11
  store i32 %530, ptr %62, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #3
  %531 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %532 = load ptr, ptr %531, align 8, !tbaa !13
  %533 = load i32, ptr %62, align 4, !tbaa !11
  %534 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %532, i32 noundef %533)
  store ptr %534, ptr %63, align 8, !tbaa !5
  %535 = load ptr, ptr %63, align 8, !tbaa !5
  %536 = icmp ne ptr %535, null
  br i1 %536, label %537, label %552

537:                                              ; preds = %527
  %538 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #3
  %539 = load ptr, ptr %63, align 8, !tbaa !5
  %540 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %539, i32 0, i32 1
  %541 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %540)
  store i32 %541, ptr %64, align 4, !tbaa !11
  %542 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %538, ptr noundef nonnull align 4 dereferenceable(4) %64)
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #3
  %543 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %544 = load ptr, ptr %543, align 8, !tbaa !28
  %545 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %544, i32 0, i32 1
  %546 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %545)
  store i32 %546, ptr %65, align 4, !tbaa !11
  %547 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %542, ptr noundef nonnull align 4 dereferenceable(4) %65)
  %548 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 0
  %549 = extractvalue { ptr, i8 } %547, 0
  store ptr %549, ptr %548, align 8
  %550 = getelementptr inbounds { ptr, i8 }, ptr %66, i32 0, i32 1
  %551 = extractvalue { ptr, i8 } %547, 1
  store i8 %551, ptr %550, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #3
  br label %552

552:                                              ; preds = %537, %527
  %553 = load ptr, ptr %8, align 8, !tbaa !5
  %554 = getelementptr inbounds i32, ptr %553, i64 1
  %555 = load i32, ptr %554, align 4, !tbaa !11
  %556 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %557 = load ptr, ptr %556, align 8, !tbaa !28
  %558 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %557, i32 0, i32 1
  %559 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %558)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %555, i32 noundef %559)
  %560 = load ptr, ptr %8, align 8, !tbaa !5
  %561 = getelementptr inbounds i32, ptr %560, i64 2
  %562 = load i32, ptr %561, align 4, !tbaa !11
  %563 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %564 = load ptr, ptr %563, align 8, !tbaa !28
  %565 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %564, i32 0, i32 1
  %566 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %565)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %562, i32 noundef %566)
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  %567 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %568 = load ptr, ptr %567, align 8, !tbaa !13
  %569 = load ptr, ptr %8, align 8, !tbaa !5
  %570 = getelementptr inbounds i32, ptr %569, i64 0
  %571 = load i32, ptr %570, align 4, !tbaa !11
  %572 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %568, i32 noundef %571)
  store ptr %572, ptr %67, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %574 = load ptr, ptr %573, align 8, !tbaa !13
  %575 = load ptr, ptr %67, align 8, !tbaa !5
  %576 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %574, ptr noundef nonnull align 8 dereferenceable(336) %575)
  br i1 %576, label %577, label %589

577:                                              ; preds = %552
  %578 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 9
  %579 = load ptr, ptr %8, align 8, !tbaa !5
  %580 = getelementptr inbounds i32, ptr %579, i64 1
  %581 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %578, ptr noundef nonnull align 4 dereferenceable(4) %580)
  %582 = load ptr, ptr %8, align 8, !tbaa !5
  %583 = getelementptr inbounds i32, ptr %582, i64 2
  %584 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %581, ptr noundef nonnull align 4 dereferenceable(4) %583)
  %585 = getelementptr inbounds { ptr, i8 }, ptr %68, i32 0, i32 0
  %586 = extractvalue { ptr, i8 } %584, 0
  store ptr %586, ptr %585, align 8
  %587 = getelementptr inbounds { ptr, i8 }, ptr %68, i32 0, i32 1
  %588 = extractvalue { ptr, i8 } %584, 1
  store i8 %588, ptr %587, align 8
  br label %589

589:                                              ; preds = %577, %552
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #3
  br label %988

590:                                              ; preds = %137
  %591 = load i32, ptr %9, align 4, !tbaa !11
  %592 = icmp ult i32 %591, 3
  br i1 %592, label %593, label %594

593:                                              ; preds = %590
  store i1 false, ptr %5, align 1
  store i32 1, ptr %14, align 4
  br label %989

594:                                              ; preds = %590
  %595 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %596 = load ptr, ptr %595, align 8, !tbaa !13
  %597 = load ptr, ptr %8, align 8, !tbaa !5
  %598 = getelementptr inbounds i32, ptr %597, i64 0
  %599 = load i32, ptr %598, align 4, !tbaa !11
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %69, i32 noundef %599)
  %600 = getelementptr inbounds %"class.spirv_cross::TypedID.163", ptr %69, i32 0, i32 0
  %601 = load i32, ptr %600, align 4
  %602 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler8get_typeENS_7TypedIDILNS_5TypesE1EEE(ptr noundef nonnull align 8 dereferenceable(3176) %596, i32 %601)
  %603 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %602, i32 0, i32 2
  %604 = load i32, ptr %603, align 8, !tbaa !58
  %605 = icmp ne i32 %604, 1
  br i1 %605, label %606, label %614

606:                                              ; preds = %594
  %607 = load ptr, ptr %8, align 8, !tbaa !5
  %608 = getelementptr inbounds i32, ptr %607, i64 1
  %609 = load i32, ptr %608, align 4, !tbaa !11
  %610 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %611 = load ptr, ptr %610, align 8, !tbaa !28
  %612 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %611, i32 0, i32 1
  %613 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %612)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %609, i32 noundef %613)
  br label %614

614:                                              ; preds = %606, %594
  %615 = load i32, ptr %9, align 4, !tbaa !11
  %616 = sub i32 %615, 3
  store i32 %616, ptr %9, align 4, !tbaa !11
  %617 = load ptr, ptr %8, align 8, !tbaa !5
  %618 = getelementptr inbounds i32, ptr %617, i64 3
  store ptr %618, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #3
  store i32 0, ptr %70, align 4, !tbaa !11
  br label %619

619:                                              ; preds = %674, %614
  %620 = load i32, ptr %70, align 4, !tbaa !11
  %621 = load i32, ptr %9, align 4, !tbaa !11
  %622 = icmp ult i32 %620, %621
  br i1 %622, label %624, label %623

623:                                              ; preds = %619
  store i32 9, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #3
  br label %677

624:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #3
  %625 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %626 = load ptr, ptr %625, align 8, !tbaa !13
  %627 = load ptr, ptr %8, align 8, !tbaa !5
  %628 = load i32, ptr %70, align 4, !tbaa !11
  %629 = zext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %627, i64 %629
  %631 = load i32, ptr %630, align 4, !tbaa !11
  %632 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %626, i32 noundef %631)
  store ptr %632, ptr %71, align 8, !tbaa !5
  %633 = load ptr, ptr %71, align 8, !tbaa !5
  %634 = icmp ne ptr %633, null
  br i1 %634, label %635, label %664

635:                                              ; preds = %624
  %636 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #3
  %637 = load ptr, ptr %71, align 8, !tbaa !5
  %638 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %637, i32 0, i32 1
  %639 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %638)
  store i32 %639, ptr %72, align 4, !tbaa !11
  %640 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %636, ptr noundef nonnull align 4 dereferenceable(4) %72)
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #3
  %641 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %642 = load ptr, ptr %641, align 8, !tbaa !28
  %643 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %642, i32 0, i32 1
  %644 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %643)
  store i32 %644, ptr %73, align 4, !tbaa !11
  %645 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %640, ptr noundef nonnull align 4 dereferenceable(4) %73)
  %646 = getelementptr inbounds { ptr, i8 }, ptr %74, i32 0, i32 0
  %647 = extractvalue { ptr, i8 } %645, 0
  store ptr %647, ptr %646, align 8
  %648 = getelementptr inbounds { ptr, i8 }, ptr %74, i32 0, i32 1
  %649 = extractvalue { ptr, i8 } %645, 1
  store i8 %649, ptr %648, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #3
  %650 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #3
  %651 = load ptr, ptr %71, align 8, !tbaa !5
  %652 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %651, i32 0, i32 1
  %653 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %652)
  store i32 %653, ptr %75, align 4, !tbaa !11
  %654 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %650, ptr noundef nonnull align 4 dereferenceable(4) %75)
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #3
  %655 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %656 = load ptr, ptr %655, align 8, !tbaa !28
  %657 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %656, i32 0, i32 1
  %658 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %657)
  store i32 %658, ptr %76, align 4, !tbaa !11
  %659 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %654, ptr noundef nonnull align 4 dereferenceable(4) %76)
  %660 = getelementptr inbounds { ptr, i8 }, ptr %77, i32 0, i32 0
  %661 = extractvalue { ptr, i8 } %659, 0
  store ptr %661, ptr %660, align 8
  %662 = getelementptr inbounds { ptr, i8 }, ptr %77, i32 0, i32 1
  %663 = extractvalue { ptr, i8 } %659, 1
  store i8 %663, ptr %662, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #3
  br label %664

664:                                              ; preds = %635, %624
  %665 = load ptr, ptr %8, align 8, !tbaa !5
  %666 = load i32, ptr %70, align 4, !tbaa !11
  %667 = zext i32 %666 to i64
  %668 = getelementptr inbounds i32, ptr %665, i64 %667
  %669 = load i32, ptr %668, align 4, !tbaa !11
  %670 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %671 = load ptr, ptr %670, align 8, !tbaa !28
  %672 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %671, i32 0, i32 1
  %673 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %672)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %669, i32 noundef %673)
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #3
  br label %674

674:                                              ; preds = %664
  %675 = load i32, ptr %70, align 4, !tbaa !11
  %676 = add i32 %675, 1
  store i32 %676, ptr %70, align 4, !tbaa !11
  br label %619, !llvm.loop !59

677:                                              ; preds = %623
  br label %988

678:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #3
  store i32 1, ptr %78, align 4, !tbaa !11
  br label %679

679:                                              ; preds = %738, %678
  %680 = load i32, ptr %78, align 4, !tbaa !11
  %681 = load i32, ptr %9, align 4, !tbaa !11
  %682 = icmp ult i32 %680, %681
  br i1 %682, label %684, label %683

683:                                              ; preds = %679
  store i32 12, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #3
  br label %741

684:                                              ; preds = %679
  %685 = load i32, ptr %78, align 4, !tbaa !11
  %686 = icmp uge i32 %685, 3
  br i1 %686, label %687, label %728

687:                                              ; preds = %684
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #3
  %688 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %689 = load ptr, ptr %688, align 8, !tbaa !13
  %690 = load ptr, ptr %8, align 8, !tbaa !5
  %691 = load i32, ptr %78, align 4, !tbaa !11
  %692 = zext i32 %691 to i64
  %693 = getelementptr inbounds i32, ptr %690, i64 %692
  %694 = load i32, ptr %693, align 4, !tbaa !11
  %695 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %689, i32 noundef %694)
  store ptr %695, ptr %79, align 8, !tbaa !5
  %696 = load ptr, ptr %79, align 8, !tbaa !5
  %697 = icmp ne ptr %696, null
  br i1 %697, label %698, label %727

698:                                              ; preds = %687
  %699 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #3
  %700 = load ptr, ptr %79, align 8, !tbaa !5
  %701 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %700, i32 0, i32 1
  %702 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %701)
  store i32 %702, ptr %80, align 4, !tbaa !11
  %703 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %699, ptr noundef nonnull align 4 dereferenceable(4) %80)
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #3
  %704 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %705 = load ptr, ptr %704, align 8, !tbaa !28
  %706 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %705, i32 0, i32 1
  %707 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %706)
  store i32 %707, ptr %81, align 4, !tbaa !11
  %708 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %703, ptr noundef nonnull align 4 dereferenceable(4) %81)
  %709 = getelementptr inbounds { ptr, i8 }, ptr %82, i32 0, i32 0
  %710 = extractvalue { ptr, i8 } %708, 0
  store ptr %710, ptr %709, align 8
  %711 = getelementptr inbounds { ptr, i8 }, ptr %82, i32 0, i32 1
  %712 = extractvalue { ptr, i8 } %708, 1
  store i8 %712, ptr %711, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #3
  %713 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #3
  %714 = load ptr, ptr %79, align 8, !tbaa !5
  %715 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %714, i32 0, i32 1
  %716 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %715)
  store i32 %716, ptr %83, align 4, !tbaa !11
  %717 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %713, ptr noundef nonnull align 4 dereferenceable(4) %83)
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #3
  %718 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %719 = load ptr, ptr %718, align 8, !tbaa !28
  %720 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %719, i32 0, i32 1
  %721 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %720)
  store i32 %721, ptr %84, align 4, !tbaa !11
  %722 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %717, ptr noundef nonnull align 4 dereferenceable(4) %84)
  %723 = getelementptr inbounds { ptr, i8 }, ptr %85, i32 0, i32 0
  %724 = extractvalue { ptr, i8 } %722, 0
  store ptr %724, ptr %723, align 8
  %725 = getelementptr inbounds { ptr, i8 }, ptr %85, i32 0, i32 1
  %726 = extractvalue { ptr, i8 } %722, 1
  store i8 %726, ptr %725, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #3
  br label %727

727:                                              ; preds = %698, %687
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #3
  br label %728

728:                                              ; preds = %727, %684
  %729 = load ptr, ptr %8, align 8, !tbaa !5
  %730 = load i32, ptr %78, align 4, !tbaa !11
  %731 = zext i32 %730 to i64
  %732 = getelementptr inbounds i32, ptr %729, i64 %731
  %733 = load i32, ptr %732, align 4, !tbaa !11
  %734 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %735 = load ptr, ptr %734, align 8, !tbaa !28
  %736 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %735, i32 0, i32 1
  %737 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %736)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %733, i32 noundef %737)
  br label %738

738:                                              ; preds = %728
  %739 = load i32, ptr %78, align 4, !tbaa !11
  %740 = add i32 %739, 1
  store i32 %740, ptr %78, align 4, !tbaa !11
  br label %679, !llvm.loop !60

741:                                              ; preds = %683
  br label %988

742:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #3
  store i32 4, ptr %86, align 4, !tbaa !11
  br label %743

743:                                              ; preds = %758, %742
  %744 = load i32, ptr %86, align 4, !tbaa !11
  %745 = load i32, ptr %9, align 4, !tbaa !11
  %746 = icmp ult i32 %744, %745
  br i1 %746, label %748, label %747

747:                                              ; preds = %743
  store i32 15, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #3
  br label %761

748:                                              ; preds = %743
  %749 = load ptr, ptr %8, align 8, !tbaa !5
  %750 = load i32, ptr %86, align 4, !tbaa !11
  %751 = zext i32 %750 to i64
  %752 = getelementptr inbounds i32, ptr %749, i64 %751
  %753 = load i32, ptr %752, align 4, !tbaa !11
  %754 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %755 = load ptr, ptr %754, align 8, !tbaa !28
  %756 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %755, i32 0, i32 1
  %757 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %756)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %753, i32 noundef %757)
  br label %758

758:                                              ; preds = %748
  %759 = load i32, ptr %86, align 4, !tbaa !11
  %760 = add i32 %759, 1
  store i32 %760, ptr %86, align 4, !tbaa !11
  br label %743, !llvm.loop !61

761:                                              ; preds = %747
  %762 = load ptr, ptr %8, align 8, !tbaa !5
  %763 = getelementptr inbounds i32, ptr %762, i64 1
  %764 = load i32, ptr %763, align 4, !tbaa !11
  %765 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %766 = load ptr, ptr %765, align 8, !tbaa !28
  %767 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %766, i32 0, i32 1
  %768 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %767)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %764, i32 noundef %768)
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #3
  %769 = load ptr, ptr %8, align 8, !tbaa !5
  %770 = getelementptr inbounds i32, ptr %769, i64 2
  %771 = load i32, ptr %770, align 4, !tbaa !11
  store i32 %771, ptr %87, align 4, !tbaa !11
  %772 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %773 = load ptr, ptr %772, align 8, !tbaa !13
  %774 = load i32, ptr %87, align 4, !tbaa !11
  %775 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %773, i32 noundef %774)
  %776 = getelementptr inbounds %"struct.spirv_cross::SPIRExtension", ptr %775, i32 0, i32 1
  %777 = load i32, ptr %776, align 4, !tbaa !62
  %778 = icmp eq i32 %777, 1
  br i1 %778, label %779, label %848

779:                                              ; preds = %761
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #3
  %780 = load ptr, ptr %8, align 8, !tbaa !5
  %781 = getelementptr inbounds i32, ptr %780, i64 3
  %782 = load i32, ptr %781, align 4, !tbaa !11
  store i32 %782, ptr %88, align 4, !tbaa !65
  %783 = load i32, ptr %88, align 4, !tbaa !65
  switch i32 %783, label %846 [
    i32 35, label %784
    i32 51, label %784
  ]

784:                                              ; preds = %779, %779
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #3
  %785 = load ptr, ptr %8, align 8, !tbaa !5
  %786 = getelementptr inbounds i32, ptr %785, i64 5
  %787 = load i32, ptr %786, align 4, !tbaa !11
  store i32 %787, ptr %89, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #3
  %788 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 1
  %789 = load ptr, ptr %788, align 8, !tbaa !13
  %790 = load i32, ptr %89, align 4, !tbaa !11
  %791 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %789, i32 noundef %790)
  store ptr %791, ptr %90, align 8, !tbaa !5
  %792 = load ptr, ptr %90, align 8, !tbaa !5
  %793 = icmp ne ptr %792, null
  br i1 %793, label %794, label %845

794:                                              ; preds = %784
  %795 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #3
  %796 = load ptr, ptr %90, align 8, !tbaa !5
  %797 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %796, i32 0, i32 1
  %798 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %797)
  store i32 %798, ptr %91, align 4, !tbaa !11
  %799 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %795, ptr noundef nonnull align 4 dereferenceable(4) %91)
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #3
  %800 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %801 = load ptr, ptr %800, align 8, !tbaa !28
  %802 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %801, i32 0, i32 1
  %803 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %802)
  store i32 %803, ptr %92, align 4, !tbaa !11
  %804 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %799, ptr noundef nonnull align 4 dereferenceable(4) %92)
  %805 = getelementptr inbounds { ptr, i8 }, ptr %93, i32 0, i32 0
  %806 = extractvalue { ptr, i8 } %804, 0
  store ptr %806, ptr %805, align 8
  %807 = getelementptr inbounds { ptr, i8 }, ptr %93, i32 0, i32 1
  %808 = extractvalue { ptr, i8 } %804, 1
  store i8 %808, ptr %807, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #3
  %809 = load ptr, ptr %90, align 8, !tbaa !5
  %810 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %809, i32 0, i32 1
  %811 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %810)
  %812 = load i32, ptr %89, align 4, !tbaa !11
  %813 = icmp eq i32 %811, %812
  br i1 %813, label %814, label %829

814:                                              ; preds = %794
  %815 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #3
  %816 = load ptr, ptr %90, align 8, !tbaa !5
  %817 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %816, i32 0, i32 1
  %818 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %817)
  store i32 %818, ptr %94, align 4, !tbaa !11
  %819 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %815, ptr noundef nonnull align 4 dereferenceable(4) %94)
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #3
  %820 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %821 = load ptr, ptr %820, align 8, !tbaa !28
  %822 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %821, i32 0, i32 1
  %823 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %822)
  store i32 %823, ptr %95, align 4, !tbaa !11
  %824 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %819, ptr noundef nonnull align 4 dereferenceable(4) %95)
  %825 = getelementptr inbounds { ptr, i8 }, ptr %96, i32 0, i32 0
  %826 = extractvalue { ptr, i8 } %824, 0
  store ptr %826, ptr %825, align 8
  %827 = getelementptr inbounds { ptr, i8 }, ptr %96, i32 0, i32 1
  %828 = extractvalue { ptr, i8 } %824, 1
  store i8 %828, ptr %827, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #3
  br label %844

829:                                              ; preds = %794
  %830 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #3
  %831 = load ptr, ptr %90, align 8, !tbaa !5
  %832 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %831, i32 0, i32 1
  %833 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %832)
  store i32 %833, ptr %97, align 4, !tbaa !11
  %834 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %830, ptr noundef nonnull align 4 dereferenceable(4) %97)
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #3
  %835 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %836 = load ptr, ptr %835, align 8, !tbaa !28
  %837 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %836, i32 0, i32 1
  %838 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %837)
  store i32 %838, ptr %98, align 4, !tbaa !11
  %839 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %834, ptr noundef nonnull align 4 dereferenceable(4) %98)
  %840 = getelementptr inbounds { ptr, i8 }, ptr %99, i32 0, i32 0
  %841 = extractvalue { ptr, i8 } %839, 0
  store ptr %841, ptr %840, align 8
  %842 = getelementptr inbounds { ptr, i8 }, ptr %99, i32 0, i32 1
  %843 = extractvalue { ptr, i8 } %839, 1
  store i8 %843, ptr %842, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #3
  br label %844

844:                                              ; preds = %829, %814
  br label %845

845:                                              ; preds = %844, %784
  store i32 18, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #3
  br label %847

846:                                              ; preds = %779
  br label %847

847:                                              ; preds = %846, %845
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #3
  br label %848

848:                                              ; preds = %847, %761
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #3
  br label %988

849:                                              ; preds = %137
  %850 = load ptr, ptr %8, align 8, !tbaa !5
  %851 = getelementptr inbounds i32, ptr %850, i64 1
  %852 = load i32, ptr %851, align 4, !tbaa !11
  %853 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %854 = load ptr, ptr %853, align 8, !tbaa !28
  %855 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %854, i32 0, i32 1
  %856 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %855)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %852, i32 noundef %856)
  br label %988

857:                                              ; preds = %137, %137
  br label %988

858:                                              ; preds = %137, %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #3
  store i32 1, ptr %100, align 4, !tbaa !11
  br label %859

859:                                              ; preds = %873, %858
  %860 = load i32, ptr %100, align 4, !tbaa !11
  %861 = icmp ult i32 %860, 4
  br i1 %861, label %863, label %862

862:                                              ; preds = %859
  store i32 19, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #3
  br label %876

863:                                              ; preds = %859
  %864 = load ptr, ptr %8, align 8, !tbaa !5
  %865 = load i32, ptr %100, align 4, !tbaa !11
  %866 = zext i32 %865 to i64
  %867 = getelementptr inbounds i32, ptr %864, i64 %866
  %868 = load i32, ptr %867, align 4, !tbaa !11
  %869 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %870 = load ptr, ptr %869, align 8, !tbaa !28
  %871 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %870, i32 0, i32 1
  %872 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %871)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %868, i32 noundef %872)
  br label %873

873:                                              ; preds = %863
  %874 = load i32, ptr %100, align 4, !tbaa !11
  %875 = add i32 %874, 1
  store i32 %875, ptr %100, align 4, !tbaa !11
  br label %859, !llvm.loop !67

876:                                              ; preds = %862
  br label %988

877:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #3
  store i32 1, ptr %101, align 4, !tbaa !11
  br label %878

878:                                              ; preds = %892, %877
  %879 = load i32, ptr %101, align 4, !tbaa !11
  %880 = icmp ult i32 %879, 3
  br i1 %880, label %882, label %881

881:                                              ; preds = %878
  store i32 22, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #3
  br label %895

882:                                              ; preds = %878
  %883 = load ptr, ptr %8, align 8, !tbaa !5
  %884 = load i32, ptr %101, align 4, !tbaa !11
  %885 = zext i32 %884 to i64
  %886 = getelementptr inbounds i32, ptr %883, i64 %885
  %887 = load i32, ptr %886, align 4, !tbaa !11
  %888 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %889 = load ptr, ptr %888, align 8, !tbaa !28
  %890 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %889, i32 0, i32 1
  %891 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %890)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %887, i32 noundef %891)
  br label %892

892:                                              ; preds = %882
  %893 = load i32, ptr %101, align 4, !tbaa !11
  %894 = add i32 %893, 1
  store i32 %894, ptr %101, align 4, !tbaa !11
  br label %878, !llvm.loop !68

895:                                              ; preds = %881
  br label %988

896:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #3
  store i32 0, ptr %102, align 4, !tbaa !11
  br label %897

897:                                              ; preds = %916, %896
  %898 = load i32, ptr %102, align 4, !tbaa !11
  %899 = load i32, ptr %9, align 4, !tbaa !11
  %900 = icmp ult i32 %898, %899
  br i1 %900, label %902, label %901

901:                                              ; preds = %897
  store i32 25, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #3
  br label %919

902:                                              ; preds = %897
  %903 = load i32, ptr %102, align 4, !tbaa !11
  %904 = icmp ne i32 %903, 3
  br i1 %904, label %905, label %915

905:                                              ; preds = %902
  %906 = load ptr, ptr %8, align 8, !tbaa !5
  %907 = load i32, ptr %102, align 4, !tbaa !11
  %908 = zext i32 %907 to i64
  %909 = getelementptr inbounds i32, ptr %906, i64 %908
  %910 = load i32, ptr %909, align 4, !tbaa !11
  %911 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %912 = load ptr, ptr %911, align 8, !tbaa !28
  %913 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %912, i32 0, i32 1
  %914 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %913)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %910, i32 noundef %914)
  br label %915

915:                                              ; preds = %905, %902
  br label %916

916:                                              ; preds = %915
  %917 = load i32, ptr %102, align 4, !tbaa !11
  %918 = add i32 %917, 1
  store i32 %918, ptr %102, align 4, !tbaa !11
  br label %897, !llvm.loop !69

919:                                              ; preds = %901
  br label %988

920:                                              ; preds = %137, %137, %137, %137, %137, %137, %137, %137, %137, %137, %137, %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #3
  store i32 1, ptr %103, align 4, !tbaa !11
  br label %921

921:                                              ; preds = %940, %920
  %922 = load i32, ptr %103, align 4, !tbaa !11
  %923 = load i32, ptr %9, align 4, !tbaa !11
  %924 = icmp ult i32 %922, %923
  br i1 %924, label %926, label %925

925:                                              ; preds = %921
  store i32 28, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #3
  br label %943

926:                                              ; preds = %921
  %927 = load i32, ptr %103, align 4, !tbaa !11
  %928 = icmp ne i32 %927, 4
  br i1 %928, label %929, label %939

929:                                              ; preds = %926
  %930 = load ptr, ptr %8, align 8, !tbaa !5
  %931 = load i32, ptr %103, align 4, !tbaa !11
  %932 = zext i32 %931 to i64
  %933 = getelementptr inbounds i32, ptr %930, i64 %932
  %934 = load i32, ptr %933, align 4, !tbaa !11
  %935 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %936 = load ptr, ptr %935, align 8, !tbaa !28
  %937 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %936, i32 0, i32 1
  %938 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %937)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %934, i32 noundef %938)
  br label %939

939:                                              ; preds = %929, %926
  br label %940

940:                                              ; preds = %939
  %941 = load i32, ptr %103, align 4, !tbaa !11
  %942 = add i32 %941, 1
  store i32 %942, ptr %103, align 4, !tbaa !11
  br label %921, !llvm.loop !70

943:                                              ; preds = %925
  br label %988

944:                                              ; preds = %137, %137, %137, %137, %137, %137, %137, %137, %137, %137, %137, %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #3
  store i32 1, ptr %104, align 4, !tbaa !11
  br label %945

945:                                              ; preds = %964, %944
  %946 = load i32, ptr %104, align 4, !tbaa !11
  %947 = load i32, ptr %9, align 4, !tbaa !11
  %948 = icmp ult i32 %946, %947
  br i1 %948, label %950, label %949

949:                                              ; preds = %945
  store i32 31, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #3
  br label %967

950:                                              ; preds = %945
  %951 = load i32, ptr %104, align 4, !tbaa !11
  %952 = icmp ne i32 %951, 5
  br i1 %952, label %953, label %963

953:                                              ; preds = %950
  %954 = load ptr, ptr %8, align 8, !tbaa !5
  %955 = load i32, ptr %104, align 4, !tbaa !11
  %956 = zext i32 %955 to i64
  %957 = getelementptr inbounds i32, ptr %954, i64 %956
  %958 = load i32, ptr %957, align 4, !tbaa !11
  %959 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %960 = load ptr, ptr %959, align 8, !tbaa !28
  %961 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %960, i32 0, i32 1
  %962 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %961)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %958, i32 noundef %962)
  br label %963

963:                                              ; preds = %953, %950
  br label %964

964:                                              ; preds = %963
  %965 = load i32, ptr %104, align 4, !tbaa !11
  %966 = add i32 %965, 1
  store i32 %966, ptr %104, align 4, !tbaa !11
  br label %945, !llvm.loop !71

967:                                              ; preds = %949
  br label %988

968:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #3
  store i32 0, ptr %105, align 4, !tbaa !11
  br label %969

969:                                              ; preds = %984, %968
  %970 = load i32, ptr %105, align 4, !tbaa !11
  %971 = load i32, ptr %9, align 4, !tbaa !11
  %972 = icmp ult i32 %970, %971
  br i1 %972, label %974, label %973

973:                                              ; preds = %969
  store i32 34, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #3
  br label %987

974:                                              ; preds = %969
  %975 = load ptr, ptr %8, align 8, !tbaa !5
  %976 = load i32, ptr %105, align 4, !tbaa !11
  %977 = zext i32 %976 to i64
  %978 = getelementptr inbounds i32, ptr %975, i64 %977
  %979 = load i32, ptr %978, align 4, !tbaa !11
  %980 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %106, i32 0, i32 10
  %981 = load ptr, ptr %980, align 8, !tbaa !28
  %982 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %981, i32 0, i32 1
  %983 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %982)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %106, i32 noundef %979, i32 noundef %983)
  br label %984

984:                                              ; preds = %974
  %985 = load i32, ptr %105, align 4, !tbaa !11
  %986 = add i32 %985, 1
  store i32 %986, ptr %105, align 4, !tbaa !11
  br label %969, !llvm.loop !72

987:                                              ; preds = %973
  br label %988

988:                                              ; preds = %987, %967, %943, %919, %895, %876, %857, %849, %848, %741, %677, %589, %521, %447, %318, %204
  store i1 true, ptr %5, align 1
  store i32 1, ptr %14, align 4
  br label %989

989:                                              ; preds = %988, %593, %526, %521, %342, %222, %142
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  %990 = load i1, ptr %5, align 1
  ret i1 %990
}

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRA1_KcRKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) #1 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #2 align 2

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

!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 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 8}
!14 = !{!"_ZTSN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerE", !15, i64 0, !6, i64 8, !6, i64 16, !16, i64 24, !16, i64 80, !22, i64 136, !16, i64 192, !16, i64 248, !24, i64 304, !16, i64 360, !6, i64 416}
!15 = !{!"_ZTSN11spirv_cross8Compiler13OpcodeHandlerE"}
!16 = !{!"_ZTSSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE", !17, i64 0}
!17 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEESaIS9_ENSt8__detail10_Select1stES6_S4_NSB_18_Mod_range_hashingENSB_20_Default_ranged_hashENSB_20_Prime_rehash_policyENSB_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !18, i64 8, !19, i64 16, !18, i64 24, !20, i64 32, !6, i64 48}
!18 = !{!"long", !7, i64 0}
!19 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!20 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !21, i64 0, !18, i64 8}
!21 = !{!"float", !7, i64 0}
!22 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !23, i64 0}
!23 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !18, i64 8, !19, i64 16, !18, i64 24, !20, i64 32, !6, i64 48}
!24 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !25, i64 0}
!25 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !18, i64 8, !19, i64 16, !18, i64 24, !20, i64 32, !6, i64 48}
!26 = !{!27, !12, i64 4}
!27 = !{!"_ZTSSt4pairIKjjE", !12, i64 0, !12, i64 4}
!28 = !{!14, !6, i64 416}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!32, !32, i64 0}
!32 = !{!"bool", !7, i64 0}
!33 = distinct !{!33, !30}
!34 = !{!35, !32, i64 124}
!35 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !36, i64 0, !10, i64 12, !38, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !39, i64 32, !42, i64 88, !12, i64 120, !32, i64 124, !32, i64 125, !45, i64 128, !46, i64 136, !39, i64 192, !49, i64 248, !50, i64 272, !50, i64 276, !54, i64 280}
!36 = !{!"_ZTSN11spirv_cross8IVariantE", !37, i64 8}
!37 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !12, i64 0}
!38 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!39 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !40, i64 0, !18, i64 16, !41, i64 24}
!40 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !18, i64 8}
!41 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!42 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !43, i64 0, !18, i64 16, !44, i64 24}
!43 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !18, i64 8}
!44 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!45 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!46 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !47, i64 0, !18, i64 16, !48, i64 24}
!47 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !18, i64 8}
!48 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!49 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !50, i64 0, !51, i64 4, !32, i64 8, !32, i64 9, !32, i64 10, !12, i64 12, !52, i64 16, !53, i64 20}
!50 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !12, i64 0}
!51 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!52 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!53 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!54 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !55, i64 0}
!55 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !18, i64 8, !19, i64 16, !18, i64 24, !20, i64 32, !6, i64 48}
!56 = !{i8 0, i8 2}
!57 = !{}
!58 = !{!35, !38, i64 16}
!59 = distinct !{!59, !30}
!60 = distinct !{!60, !30}
!61 = distinct !{!61, !30}
!62 = !{!63, !64, i64 12}
!63 = !{!"_ZTSN11spirv_cross13SPIRExtensionE", !36, i64 0, !64, i64 12}
!64 = !{!"_ZTSN11spirv_cross13SPIRExtension9ExtensionE", !7, i64 0}
!65 = !{!66, !66, i64 0}
!66 = !{!"_ZTS10GLSLstd450", !7, i64 0}
!67 = distinct !{!67, !30}
!68 = distinct !{!68, !30}
!69 = distinct !{!69, !30}
!70 = distinct !{!70, !30}
!71 = distinct !{!71, !30}
!72 = distinct !{!72, !30}


; 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"

%"struct.std::__detail::_Node_iterator.289" = type { %"struct.std::__detail::_Node_iterator_base.259" }
%"struct.std::__detail::_Node_iterator_base.259" = type { ptr }
%"class.spirv_cross::TypedID.162" = type { i32 }
%"class.spirv_cross::TypedID.164" = type { i32 }
%"class.spirv_cross::TypedID.163" = type { i32 }

@.str = external hidden unnamed_addr constant [1 x i8], align 1

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler6handleEN3spv2OpEPKjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %1, ptr noundef %2, i32 noundef %3) unnamed_addr #1 align 2 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %8 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %9 = alloca %"class.spirv_cross::TypedID.162", align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i8, align 1
  %20 = alloca %"class.spirv_cross::TypedID.164", align 4
  %21 = alloca %"class.spirv_cross::TypedID.162", align 4
  %22 = alloca %"class.spirv_cross::TypedID.162", align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca %"class.spirv_cross::TypedID.163", align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #3
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #3
  store i32 0, ptr %6, align 4, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %0, i64 8
  %51 = load ptr, ptr %50, align 8, !tbaa !9
  %52 = call noundef zeroext i1 @_ZN11spirv_cross8Compiler26instruction_to_result_typeERjS1_N3spv2OpEPKjj(ptr noundef nonnull align 8 dereferenceable(3176) %51, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %6, i32 noundef %1, ptr noundef %2, i32 noundef %3)
  br i1 %52, label %53, label %70

53:                                               ; preds = %4
  %54 = icmp eq i32 %1, 4447
  br i1 %54, label %55, label %66

55:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #3
  %56 = getelementptr inbounds i8, ptr %0, i64 136
  %57 = getelementptr inbounds i8, ptr %2, i64 8
  %58 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(56) %56, ptr noundef nonnull align 4 dereferenceable(4) %57)
  store ptr %58, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  %59 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %56) #3
  store ptr %59, ptr %8, align 8
  %60 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  br i1 %60, label %61, label %65

61:                                               ; preds = %55
  %62 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #3
  %63 = getelementptr inbounds i8, ptr %62, i64 4
  %64 = load i32, ptr %63, align 4, !tbaa !23
  store i32 %64, ptr %5, align 4, !tbaa !5
  br label %65

65:                                               ; preds = %61, %55
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #3
  br label %66

66:                                               ; preds = %65, %53
  %67 = load i32, ptr %5, align 4, !tbaa !5
  %68 = getelementptr inbounds i8, ptr %0, i64 136
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %68, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store i32 %67, ptr %69, align 4, !tbaa !5
  br label %70

70:                                               ; preds = %66, %4
  switch i32 %1, label %.preheader [
    i32 62, label %112
    i32 65, label %159
    i32 66, label %159
    i32 67, label %159
    i32 63, label %216
    i32 83, label %277
    i32 61, label %322
    i32 57, label %359
    i32 169, label %.preheader233
    i32 12, label %.preheader235
    i32 68, label %483
    i32 8, label %.critedge
    i32 317, label %.critedge
    i32 82, label %.critedge.loopexit269
    i32 79, label %.critedge.loopexit269
    i32 81, label %.preheader237
    i32 99, label %.preheader239
    i32 87, label %511
    i32 88, label %511
    i32 305, label %511
    i32 306, label %511
    i32 91, label %511
    i32 92, label %511
    i32 309, label %511
    i32 310, label %511
    i32 95, label %511
    i32 313, label %511
    i32 98, label %511
    i32 320, label %511
    i32 89, label %538
    i32 90, label %538
    i32 307, label %538
    i32 308, label %538
    i32 93, label %538
    i32 94, label %538
    i32 311, label %538
    i32 312, label %538
    i32 96, label %538
    i32 314, label %538
    i32 97, label %538
    i32 315, label %538
  ]

.preheader239:                                    ; preds = %70
  %.not264 = icmp eq i32 %3, 0
  br i1 %.not264, label %.critedge, label %71

71:                                               ; preds = %.preheader239
  %72 = getelementptr inbounds i8, ptr %0, i64 416
  %wide.trip.count315 = zext i32 %3 to i64
  %73 = load i32, ptr %2, align 4, !tbaa !5
  %74 = load ptr, ptr %72, align 8, !tbaa !25
  %75 = getelementptr inbounds i8, ptr %74, i64 8
  %76 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %75)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %73, i32 noundef %76)
  %exitcond316.peel.not = icmp eq i32 %3, 1
  br i1 %exitcond316.peel.not, label %.critedge, label %77

77:                                               ; preds = %71
  %78 = getelementptr inbounds i8, ptr %2, i64 4
  %79 = load i32, ptr %78, align 4, !tbaa !5
  %80 = load ptr, ptr %72, align 8, !tbaa !25
  %81 = getelementptr inbounds i8, ptr %80, i64 8
  %82 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %81)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %79, i32 noundef %82)
  %exitcond316.peel322.not = icmp eq i32 %3, 2
  br i1 %exitcond316.peel322.not, label %.critedge, label %83

83:                                               ; preds = %77
  %84 = getelementptr inbounds i8, ptr %2, i64 8
  %85 = load i32, ptr %84, align 4, !tbaa !5
  %86 = load ptr, ptr %72, align 8, !tbaa !25
  %87 = getelementptr inbounds i8, ptr %86, i64 8
  %88 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %87)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %85, i32 noundef %88)
  %.off = add i32 %3, -3
  %switch = icmp ult i32 %.off, 2
  br i1 %switch, label %.critedge, label %.peel.next327

.preheader237:                                    ; preds = %70
  %89 = getelementptr inbounds i8, ptr %0, i64 416
  %90 = getelementptr inbounds i8, ptr %2, i64 4
  %91 = load i32, ptr %90, align 4, !tbaa !5
  %92 = load ptr, ptr %89, align 8, !tbaa !25
  %93 = getelementptr inbounds i8, ptr %92, i64 8
  %94 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %93)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %91, i32 noundef %94)
  %95 = getelementptr inbounds i8, ptr %2, i64 8
  %96 = load i32, ptr %95, align 4, !tbaa !5
  %97 = load ptr, ptr %89, align 8, !tbaa !25
  %98 = getelementptr inbounds i8, ptr %97, i64 8
  %99 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %98)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %96, i32 noundef %99)
  br label %.critedge

.preheader235:                                    ; preds = %70
  %100 = icmp ugt i32 %3, 4
  br i1 %100, label %.lr.ph251, label %._crit_edge

.lr.ph251:                                        ; preds = %.preheader235
  %101 = getelementptr inbounds i8, ptr %0, i64 416
  %wide.trip.count343 = zext i32 %3 to i64
  br label %442

.preheader233:                                    ; preds = %70
  %102 = icmp ugt i32 %3, 1
  br i1 %102, label %103, label %.critedge

103:                                              ; preds = %.preheader233
  %104 = getelementptr inbounds i8, ptr %0, i64 24
  %105 = getelementptr inbounds i8, ptr %0, i64 416
  %106 = getelementptr inbounds i8, ptr %0, i64 248
  %wide.trip.count348 = zext i32 %3 to i64
  %.pre379 = load ptr, ptr %105, align 8, !tbaa !25
  %.phi.trans.insert = getelementptr inbounds i8, ptr %2, i64 4
  %.pre = load i32, ptr %.phi.trans.insert, align 4, !tbaa !5
  %107 = getelementptr inbounds i8, ptr %.pre379, i64 8
  %108 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %107)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %.pre, i32 noundef %108)
  %exitcond349.peel.not = icmp eq i32 %3, 2
  br i1 %exitcond349.peel.not, label %.critedge, label %.peel.next351._crit_edge

.peel.next351._crit_edge:                         ; preds = %103
  %.pre383 = load ptr, ptr %105, align 8, !tbaa !25
  %.phi.trans.insert381 = getelementptr inbounds i8, ptr %2, i64 8
  %.pre382 = load i32, ptr %.phi.trans.insert381, align 4, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %.pre383, i64 8
  %110 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %109)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %.pre382, i32 noundef %110)
  %exitcond349.peel355.not = icmp eq i32 %3, 3
  br i1 %exitcond349.peel355.not, label %.critedge, label %.peel.next352

.preheader:                                       ; preds = %70
  %.not266 = icmp eq i32 %3, 0
  br i1 %.not266, label %.critedge, label %.lr.ph263

.lr.ph263:                                        ; preds = %.preheader
  %111 = getelementptr inbounds i8, ptr %0, i64 416
  %wide.trip.count373 = zext i32 %3 to i64
  br label %570

112:                                              ; preds = %70
  %113 = icmp ult i32 %3, 2
  br i1 %113, label %.critedge, label %114

114:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #3
  %115 = load i32, ptr %2, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef %115)
  %116 = load ptr, ptr %50, align 8, !tbaa !9
  %117 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %118 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %116, i32 noundef %117)
  %.not231 = icmp eq ptr %118, null
  br i1 %.not231, label %148, label %119

119:                                              ; preds = %114
  %120 = getelementptr inbounds i8, ptr %0, i64 24
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #3
  %121 = getelementptr inbounds i8, ptr %118, i64 8
  %122 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  store i32 %122, ptr %10, align 4, !tbaa !5
  %123 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %120, ptr noundef nonnull align 4 dereferenceable(4) %10)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #3
  %124 = getelementptr inbounds i8, ptr %0, i64 416
  %125 = load ptr, ptr %124, align 8, !tbaa !25
  %126 = getelementptr inbounds i8, ptr %125, i64 8
  %127 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %126)
  store i32 %127, ptr %11, align 4, !tbaa !5
  %128 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %123, ptr noundef nonnull align 4 dereferenceable(4) %11)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #3
  %129 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %130 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %131 = icmp eq i32 %129, %130
  br i1 %131, label %132, label %140

132:                                              ; preds = %119
  %133 = getelementptr inbounds i8, ptr %0, i64 192
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #3
  %134 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  store i32 %134, ptr %12, align 4, !tbaa !5
  %135 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %133, ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #3
  %136 = load ptr, ptr %124, align 8, !tbaa !25
  %137 = getelementptr inbounds i8, ptr %136, i64 8
  %138 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %137)
  store i32 %138, ptr %13, align 4, !tbaa !5
  %139 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %135, ptr noundef nonnull align 4 dereferenceable(4) %13)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #3
  br label %148

140:                                              ; preds = %119
  %141 = getelementptr inbounds i8, ptr %0, i64 248
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #3
  %142 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  store i32 %142, ptr %14, align 4, !tbaa !5
  %143 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %141, ptr noundef nonnull align 4 dereferenceable(4) %14)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #3
  %144 = load ptr, ptr %124, align 8, !tbaa !25
  %145 = getelementptr inbounds i8, ptr %144, i64 8
  %146 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %145)
  store i32 %146, ptr %15, align 4, !tbaa !5
  %147 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %143, ptr noundef nonnull align 4 dereferenceable(4) %15)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #3
  br label %148

148:                                              ; preds = %132, %140, %114
  %149 = load i32, ptr %2, align 4, !tbaa !5
  %150 = getelementptr inbounds i8, ptr %0, i64 416
  %151 = load ptr, ptr %150, align 8, !tbaa !25
  %152 = getelementptr inbounds i8, ptr %151, i64 8
  %153 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %152)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %149, i32 noundef %153)
  %154 = getelementptr inbounds i8, ptr %2, i64 4
  %155 = load i32, ptr %154, align 4, !tbaa !5
  %156 = load ptr, ptr %150, align 8, !tbaa !25
  %157 = getelementptr inbounds i8, ptr %156, i64 8
  %158 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %157)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %155, i32 noundef %158)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #3
  br label %.critedge

159:                                              ; preds = %70, %70, %70
  %160 = icmp ult i32 %3, 3
  br i1 %160, label %.critedge, label %161

161:                                              ; preds = %159
  %162 = getelementptr inbounds i8, ptr %2, i64 8
  %163 = load i32, ptr %162, align 4, !tbaa !5
  %164 = load ptr, ptr %50, align 8, !tbaa !9
  %165 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %164, i32 noundef %163)
  %.not229 = icmp eq ptr %165, null
  br i1 %.not229, label %.lr.ph260, label %166

166:                                              ; preds = %161
  %167 = getelementptr inbounds i8, ptr %0, i64 24
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #3
  %168 = getelementptr inbounds i8, ptr %165, i64 8
  %169 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %168)
  store i32 %169, ptr %16, align 4, !tbaa !5
  %170 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %167, ptr noundef nonnull align 4 dereferenceable(4) %16)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #3
  %171 = getelementptr inbounds i8, ptr %0, i64 416
  %172 = load ptr, ptr %171, align 8, !tbaa !25
  %173 = getelementptr inbounds i8, ptr %172, i64 8
  %174 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %173)
  store i32 %174, ptr %17, align 4, !tbaa !5
  %175 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %170, ptr noundef nonnull align 4 dereferenceable(4) %17)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #3
  %176 = getelementptr inbounds i8, ptr %0, i64 360
  %177 = getelementptr inbounds i8, ptr %2, i64 4
  %178 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %176, ptr noundef nonnull align 4 dereferenceable(4) %177)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #3
  %179 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %168)
  store i32 %179, ptr %18, align 4, !tbaa !5
  %180 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %178, ptr noundef nonnull align 4 dereferenceable(4) %18)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #3
  br label %.lr.ph260

.lr.ph260:                                        ; preds = %161, %166
  %181 = getelementptr inbounds i8, ptr %0, i64 416
  %182 = getelementptr inbounds i8, ptr %0, i64 360
  %183 = getelementptr inbounds i8, ptr %2, i64 4
  %wide.trip.count368 = zext i32 %3 to i64
  br label %195

._crit_edge261:                                   ; preds = %195
  %184 = getelementptr inbounds i8, ptr %2, i64 4
  %185 = load i32, ptr %184, align 4, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %0, i64 416
  %187 = load ptr, ptr %186, align 8, !tbaa !25
  %188 = getelementptr inbounds i8, ptr %187, i64 8
  %189 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %188)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %185, i32 noundef %189)
  %190 = load ptr, ptr %50, align 8, !tbaa !9
  %191 = load i32, ptr %184, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #3
  store i8 1, ptr %19, align 1, !tbaa !26
  %192 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRA1_KcRKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %190, i32 noundef %191, ptr noundef nonnull align 1 dereferenceable(1) @.str, ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 1 dereferenceable(1) %19)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #3
  %193 = load ptr, ptr %50, align 8, !tbaa !9
  %194 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %163)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #3
  %.not230 = icmp eq ptr %194, null
  br i1 %.not230, label %205, label %203

195:                                              ; preds = %.lr.ph260, %195
  %indvars.iv365 = phi i64 [ 2, %.lr.ph260 ], [ %indvars.iv.next366, %195 ]
  %196 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv365
  %197 = load i32, ptr %196, align 4, !tbaa !5
  %198 = load ptr, ptr %181, align 8, !tbaa !25
  %199 = getelementptr inbounds i8, ptr %198, i64 8
  %200 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %199)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %197, i32 noundef %200)
  %201 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %182, ptr noundef nonnull align 4 dereferenceable(4) %183)
  %202 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %201, ptr noundef nonnull align 4 dereferenceable(4) %196)
  %indvars.iv.next366 = add nuw nsw i64 %indvars.iv365, 1
  %exitcond369.not = icmp eq i64 %indvars.iv.next366, %wide.trip.count368
  br i1 %exitcond369.not, label %._crit_edge261, label %195, !llvm.loop !28

203:                                              ; preds = %._crit_edge261
  %204 = getelementptr inbounds i8, ptr %194, i64 8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %204)
  br label %206

205:                                              ; preds = %._crit_edge261
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef 0)
  br label %206

206:                                              ; preds = %205, %203
  %207 = getelementptr inbounds i8, ptr %192, i64 52
  %208 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEaSILS1_2EEERS2_RKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %207, ptr noundef nonnull align 4 dereferenceable(4) %20)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #3
  %209 = load ptr, ptr %50, align 8, !tbaa !9
  %210 = getelementptr inbounds i8, ptr %209, i64 40
  %211 = load i32, ptr %184, align 4, !tbaa !5
  %212 = zext i32 %211 to i64
  %213 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %210, i64 noundef %212) #3
  call void @_ZN11spirv_cross7Variant22set_allow_type_rewriteEv(ptr noundef nonnull align 8 dereferenceable(21) %213)
  %214 = getelementptr inbounds i8, ptr %0, i64 304
  %215 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %214, ptr noundef nonnull align 4 dereferenceable(4) %184)
  br label %.critedge

216:                                              ; preds = %70
  %217 = icmp ult i32 %3, 2
  br i1 %217, label %.critedge, label %218

218:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #3
  %219 = load i32, ptr %2, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef %219)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #3
  %220 = getelementptr inbounds i8, ptr %2, i64 4
  %221 = load i32, ptr %220, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef %221)
  %222 = load ptr, ptr %50, align 8, !tbaa !9
  %223 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %224 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %222, i32 noundef %223)
  %.not227 = icmp eq ptr %224, null
  br i1 %.not227, label %254, label %225

225:                                              ; preds = %218
  %226 = getelementptr inbounds i8, ptr %0, i64 24
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #3
  %227 = getelementptr inbounds i8, ptr %224, i64 8
  %228 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %227)
  store i32 %228, ptr %23, align 4, !tbaa !5
  %229 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %226, ptr noundef nonnull align 4 dereferenceable(4) %23)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #3
  %230 = getelementptr inbounds i8, ptr %0, i64 416
  %231 = load ptr, ptr %230, align 8, !tbaa !25
  %232 = getelementptr inbounds i8, ptr %231, i64 8
  %233 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %232)
  store i32 %233, ptr %24, align 4, !tbaa !5
  %234 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %229, ptr noundef nonnull align 4 dereferenceable(4) %24)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #3
  %235 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %227)
  %236 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %237 = icmp eq i32 %235, %236
  br i1 %237, label %238, label %246

238:                                              ; preds = %225
  %239 = getelementptr inbounds i8, ptr %0, i64 192
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #3
  %240 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %227)
  store i32 %240, ptr %25, align 4, !tbaa !5
  %241 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %239, ptr noundef nonnull align 4 dereferenceable(4) %25)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #3
  %242 = load ptr, ptr %230, align 8, !tbaa !25
  %243 = getelementptr inbounds i8, ptr %242, i64 8
  %244 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %243)
  store i32 %244, ptr %26, align 4, !tbaa !5
  %245 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %241, ptr noundef nonnull align 4 dereferenceable(4) %26)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #3
  br label %254

246:                                              ; preds = %225
  %247 = getelementptr inbounds i8, ptr %0, i64 248
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #3
  %248 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %227)
  store i32 %248, ptr %27, align 4, !tbaa !5
  %249 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %247, ptr noundef nonnull align 4 dereferenceable(4) %27)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #3
  %250 = load ptr, ptr %230, align 8, !tbaa !25
  %251 = getelementptr inbounds i8, ptr %250, i64 8
  %252 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %251)
  store i32 %252, ptr %28, align 4, !tbaa !5
  %253 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %249, ptr noundef nonnull align 4 dereferenceable(4) %28)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #3
  br label %254

254:                                              ; preds = %238, %246, %218
  %255 = getelementptr inbounds i8, ptr %0, i64 416
  %256 = load i32, ptr %2, align 4, !tbaa !5
  %257 = load ptr, ptr %255, align 8, !tbaa !25
  %258 = getelementptr inbounds i8, ptr %257, i64 8
  %259 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %258)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %256, i32 noundef %259)
  %260 = load i32, ptr %220, align 4, !tbaa !5
  %261 = load ptr, ptr %255, align 8, !tbaa !25
  %262 = getelementptr inbounds i8, ptr %261, i64 8
  %263 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %262)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %260, i32 noundef %263)
  %264 = load ptr, ptr %50, align 8, !tbaa !9
  %265 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %22)
  %266 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %264, i32 noundef %265)
  %.not228 = icmp eq ptr %266, null
  br i1 %.not228, label %276, label %267

267:                                              ; preds = %254
  %268 = getelementptr inbounds i8, ptr %0, i64 24
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #3
  %269 = getelementptr inbounds i8, ptr %266, i64 8
  %270 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %269)
  store i32 %270, ptr %29, align 4, !tbaa !5
  %271 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %268, ptr noundef nonnull align 4 dereferenceable(4) %29)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #3
  %272 = load ptr, ptr %255, align 8, !tbaa !25
  %273 = getelementptr inbounds i8, ptr %272, i64 8
  %274 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %273)
  store i32 %274, ptr %30, align 4, !tbaa !5
  %275 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %271, ptr noundef nonnull align 4 dereferenceable(4) %30)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #3
  br label %276

276:                                              ; preds = %267, %254
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #3
  br label %.critedge

277:                                              ; preds = %70
  %278 = load ptr, ptr %50, align 8, !tbaa !9
  %279 = load i32, ptr %5, align 4, !tbaa !5
  %280 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %278, i32 noundef %279)
  %281 = getelementptr inbounds i8, ptr %280, i64 124
  %282 = load i8, ptr %281, align 4, !tbaa !30, !range !53, !noundef !54
  %283 = trunc nuw i8 %282 to i1
  br i1 %283, label %284, label %289

284:                                              ; preds = %277
  %285 = getelementptr inbounds i8, ptr %280, i64 276
  %286 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %285)
  %287 = getelementptr inbounds i8, ptr %0, i64 136
  %288 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %287, ptr noundef nonnull align 4 dereferenceable(4) %6)
  store i32 %286, ptr %288, align 4, !tbaa !5
  br label %289

289:                                              ; preds = %284, %277
  %290 = icmp ugt i32 %3, 2
  br i1 %290, label %291, label %.critedge

291:                                              ; preds = %289
  %292 = load ptr, ptr %50, align 8, !tbaa !9
  %293 = getelementptr inbounds i8, ptr %2, i64 8
  %294 = load i32, ptr %293, align 4, !tbaa !5
  %295 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %292, i32 noundef %294)
  %.not225 = icmp eq ptr %295, null
  br i1 %.not225, label %306, label %296

296:                                              ; preds = %291
  %297 = getelementptr inbounds i8, ptr %0, i64 24
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #3
  %298 = getelementptr inbounds i8, ptr %295, i64 8
  %299 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %298)
  store i32 %299, ptr %31, align 4, !tbaa !5
  %300 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %297, ptr noundef nonnull align 4 dereferenceable(4) %31)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #3
  %301 = getelementptr inbounds i8, ptr %0, i64 416
  %302 = load ptr, ptr %301, align 8, !tbaa !25
  %303 = getelementptr inbounds i8, ptr %302, i64 8
  %304 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %303)
  store i32 %304, ptr %32, align 4, !tbaa !5
  %305 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %300, ptr noundef nonnull align 4 dereferenceable(4) %32)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #3
  br label %306

306:                                              ; preds = %296, %291
  %307 = getelementptr inbounds i8, ptr %2, i64 4
  %308 = load i32, ptr %307, align 4, !tbaa !5
  %309 = getelementptr inbounds i8, ptr %0, i64 416
  %310 = load ptr, ptr %309, align 8, !tbaa !25
  %311 = getelementptr inbounds i8, ptr %310, i64 8
  %312 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %311)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %308, i32 noundef %312)
  %313 = getelementptr inbounds i8, ptr %0, i64 304
  %314 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %313, ptr noundef nonnull align 4 dereferenceable(4) %293)
  %.not226 = icmp eq i64 %314, 0
  br i1 %.not226, label %317, label %315

315:                                              ; preds = %306
  %316 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %313, ptr noundef nonnull align 4 dereferenceable(4) %307)
  br label %317

317:                                              ; preds = %315, %306
  %318 = load i32, ptr %293, align 4, !tbaa !5
  %319 = load ptr, ptr %309, align 8, !tbaa !25
  %320 = getelementptr inbounds i8, ptr %319, i64 8
  %321 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %320)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %318, i32 noundef %321)
  br label %.critedge

322:                                              ; preds = %70
  %323 = icmp ult i32 %3, 3
  br i1 %323, label %.critedge, label %324

324:                                              ; preds = %322
  %325 = getelementptr inbounds i8, ptr %2, i64 8
  %326 = load i32, ptr %325, align 4, !tbaa !5
  %327 = load ptr, ptr %50, align 8, !tbaa !9
  %328 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %327, i32 noundef %326)
  %.not224 = icmp eq ptr %328, null
  br i1 %.not224, label %339, label %329

329:                                              ; preds = %324
  %330 = getelementptr inbounds i8, ptr %0, i64 24
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #3
  %331 = getelementptr inbounds i8, ptr %328, i64 8
  %332 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %331)
  store i32 %332, ptr %33, align 4, !tbaa !5
  %333 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %330, ptr noundef nonnull align 4 dereferenceable(4) %33)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #3
  %334 = getelementptr inbounds i8, ptr %0, i64 416
  %335 = load ptr, ptr %334, align 8, !tbaa !25
  %336 = getelementptr inbounds i8, ptr %335, i64 8
  %337 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %336)
  store i32 %337, ptr %34, align 4, !tbaa !5
  %338 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %333, ptr noundef nonnull align 4 dereferenceable(4) %34)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #3
  br label %339

339:                                              ; preds = %329, %324
  %340 = getelementptr inbounds i8, ptr %2, i64 4
  %341 = load i32, ptr %340, align 4, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %0, i64 416
  %343 = load ptr, ptr %342, align 8, !tbaa !25
  %344 = getelementptr inbounds i8, ptr %343, i64 8
  %345 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %344)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %341, i32 noundef %345)
  %346 = load i32, ptr %325, align 4, !tbaa !5
  %347 = load ptr, ptr %342, align 8, !tbaa !25
  %348 = getelementptr inbounds i8, ptr %347, i64 8
  %349 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %348)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %346, i32 noundef %349)
  %350 = load ptr, ptr %50, align 8, !tbaa !9
  %351 = load i32, ptr %2, align 4, !tbaa !5
  %352 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %350, i32 noundef %351)
  %353 = load ptr, ptr %50, align 8, !tbaa !9
  %354 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %353, ptr noundef nonnull align 8 dereferenceable(336) %352)
  br i1 %354, label %355, label %.critedge

355:                                              ; preds = %339
  %356 = getelementptr inbounds i8, ptr %0, i64 360
  %357 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %356, ptr noundef nonnull align 4 dereferenceable(4) %340)
  %358 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %357, ptr noundef nonnull align 4 dereferenceable(4) %325)
  br label %.critedge

359:                                              ; preds = %70
  %360 = icmp ult i32 %3, 3
  br i1 %360, label %.critedge, label %361

361:                                              ; preds = %359
  %362 = load ptr, ptr %50, align 8, !tbaa !9
  %363 = load i32, ptr %2, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %35, i32 noundef %363)
  %364 = load i32, ptr %35, align 4
  %365 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler8get_typeENS_7TypedIDILNS_5TypesE1EEE(ptr noundef nonnull align 8 dereferenceable(3176) %362, i32 %364)
  %366 = getelementptr inbounds i8, ptr %365, i64 16
  %367 = load i32, ptr %366, align 8, !tbaa !55
  %.not222 = icmp eq i32 %367, 1
  br i1 %.not222, label %375, label %368

368:                                              ; preds = %361
  %369 = getelementptr inbounds i8, ptr %2, i64 4
  %370 = load i32, ptr %369, align 4, !tbaa !5
  %371 = getelementptr inbounds i8, ptr %0, i64 416
  %372 = load ptr, ptr %371, align 8, !tbaa !25
  %373 = getelementptr inbounds i8, ptr %372, i64 8
  %374 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %373)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %370, i32 noundef %374)
  br label %375

375:                                              ; preds = %368, %361
  %376 = add i32 %3, -3
  %377 = getelementptr inbounds i8, ptr %2, i64 12
  %.not265 = icmp eq i32 %376, 0
  br i1 %.not265, label %.critedge, label %.lr.ph256

.lr.ph256:                                        ; preds = %375
  %378 = getelementptr inbounds i8, ptr %0, i64 24
  %379 = getelementptr inbounds i8, ptr %0, i64 416
  %380 = getelementptr inbounds i8, ptr %0, i64 248
  %wide.trip.count360 = zext i32 %376 to i64
  br label %381

381:                                              ; preds = %.lr.ph256, %400
  %indvars.iv357 = phi i64 [ 0, %.lr.ph256 ], [ %indvars.iv.next358, %400 ]
  %382 = load ptr, ptr %50, align 8, !tbaa !9
  %383 = getelementptr inbounds i32, ptr %377, i64 %indvars.iv357
  %384 = load i32, ptr %383, align 4, !tbaa !5
  %385 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %382, i32 noundef %384)
  %.not223 = icmp eq ptr %385, null
  br i1 %.not223, label %400, label %386

386:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #3
  %387 = getelementptr inbounds i8, ptr %385, i64 8
  %388 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %387)
  store i32 %388, ptr %36, align 4, !tbaa !5
  %389 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %378, ptr noundef nonnull align 4 dereferenceable(4) %36)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %37) #3
  %390 = load ptr, ptr %379, align 8, !tbaa !25
  %391 = getelementptr inbounds i8, ptr %390, i64 8
  %392 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  store i32 %392, ptr %37, align 4, !tbaa !5
  %393 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %389, ptr noundef nonnull align 4 dereferenceable(4) %37)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #3
  %394 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %387)
  store i32 %394, ptr %38, align 4, !tbaa !5
  %395 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %380, ptr noundef nonnull align 4 dereferenceable(4) %38)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %39) #3
  %396 = load ptr, ptr %379, align 8, !tbaa !25
  %397 = getelementptr inbounds i8, ptr %396, i64 8
  %398 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %397)
  store i32 %398, ptr %39, align 4, !tbaa !5
  %399 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %395, ptr noundef nonnull align 4 dereferenceable(4) %39)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #3
  br label %400

400:                                              ; preds = %386, %381
  %401 = load i32, ptr %383, align 4, !tbaa !5
  %402 = load ptr, ptr %379, align 8, !tbaa !25
  %403 = getelementptr inbounds i8, ptr %402, i64 8
  %404 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %403)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %401, i32 noundef %404)
  %indvars.iv.next358 = add nuw nsw i64 %indvars.iv357, 1
  %exitcond361.not = icmp eq i64 %indvars.iv.next358, %wide.trip.count360
  br i1 %exitcond361.not, label %.critedge, label %381, !llvm.loop !56

.peel.next352:                                    ; preds = %.peel.next351._crit_edge, %423
  %indvars.iv345 = phi i64 [ %indvars.iv.next346, %423 ], [ 3, %.peel.next351._crit_edge ]
  %405 = load ptr, ptr %50, align 8, !tbaa !9
  %406 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv345
  %407 = load i32, ptr %406, align 4, !tbaa !5
  %408 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %405, i32 noundef %407)
  %.not221 = icmp eq ptr %408, null
  br i1 %.not221, label %423, label %409

409:                                              ; preds = %.peel.next352
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %40) #3
  %410 = getelementptr inbounds i8, ptr %408, i64 8
  %411 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %410)
  store i32 %411, ptr %40, align 4, !tbaa !5
  %412 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %104, ptr noundef nonnull align 4 dereferenceable(4) %40)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #3
  %413 = load ptr, ptr %105, align 8, !tbaa !25
  %414 = getelementptr inbounds i8, ptr %413, i64 8
  %415 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %414)
  store i32 %415, ptr %41, align 4, !tbaa !5
  %416 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %412, ptr noundef nonnull align 4 dereferenceable(4) %41)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #3
  %417 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %410)
  store i32 %417, ptr %42, align 4, !tbaa !5
  %418 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %106, ptr noundef nonnull align 4 dereferenceable(4) %42)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %43) #3
  %419 = load ptr, ptr %105, align 8, !tbaa !25
  %420 = getelementptr inbounds i8, ptr %419, i64 8
  %421 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %420)
  store i32 %421, ptr %43, align 4, !tbaa !5
  %422 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %418, ptr noundef nonnull align 4 dereferenceable(4) %43)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #3
  br label %423

423:                                              ; preds = %.peel.next352, %409
  %424 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv345
  %425 = load i32, ptr %424, align 4, !tbaa !5
  %426 = load ptr, ptr %105, align 8, !tbaa !25
  %427 = getelementptr inbounds i8, ptr %426, i64 8
  %428 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %427)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %425, i32 noundef %428)
  %indvars.iv.next346 = add nuw nsw i64 %indvars.iv345, 1
  %exitcond349.not = icmp eq i64 %indvars.iv.next346, %wide.trip.count348
  br i1 %exitcond349.not, label %.critedge, label %.peel.next352, !llvm.loop !57

._crit_edge:                                      ; preds = %442, %.preheader235
  %429 = getelementptr inbounds i8, ptr %2, i64 4
  %430 = load i32, ptr %429, align 4, !tbaa !5
  %431 = getelementptr inbounds i8, ptr %0, i64 416
  %432 = load ptr, ptr %431, align 8, !tbaa !25
  %433 = getelementptr inbounds i8, ptr %432, i64 8
  %434 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %433)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %430, i32 noundef %434)
  %435 = getelementptr inbounds i8, ptr %2, i64 8
  %436 = load i32, ptr %435, align 4, !tbaa !5
  %437 = load ptr, ptr %50, align 8, !tbaa !9
  %438 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %437, i32 noundef %436)
  %439 = getelementptr inbounds i8, ptr %438, i64 12
  %440 = load i32, ptr %439, align 4, !tbaa !59
  %441 = icmp eq i32 %440, 1
  br i1 %441, label %448, label %.critedge

442:                                              ; preds = %.lr.ph251, %442
  %indvars.iv340 = phi i64 [ 4, %.lr.ph251 ], [ %indvars.iv.next341, %442 ]
  %443 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv340
  %444 = load i32, ptr %443, align 4, !tbaa !5
  %445 = load ptr, ptr %101, align 8, !tbaa !25
  %446 = getelementptr inbounds i8, ptr %445, i64 8
  %447 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %446)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %444, i32 noundef %447)
  %indvars.iv.next341 = add nuw nsw i64 %indvars.iv340, 1
  %exitcond344.not = icmp eq i64 %indvars.iv.next341, %wide.trip.count343
  br i1 %exitcond344.not, label %._crit_edge, label %442, !llvm.loop !62

448:                                              ; preds = %._crit_edge
  %449 = getelementptr inbounds i8, ptr %2, i64 12
  %450 = load i32, ptr %449, align 4, !tbaa !5
  switch i32 %450, label %.critedge [
    i32 35, label %451
    i32 51, label %451
  ]

451:                                              ; preds = %448, %448
  %452 = getelementptr inbounds i8, ptr %2, i64 20
  %453 = load i32, ptr %452, align 4, !tbaa !5
  %454 = load ptr, ptr %50, align 8, !tbaa !9
  %455 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %454, i32 noundef %453)
  %.not220 = icmp eq ptr %455, null
  br i1 %.not220, label %.critedge, label %456

456:                                              ; preds = %451
  %457 = getelementptr inbounds i8, ptr %0, i64 24
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #3
  %458 = getelementptr inbounds i8, ptr %455, i64 8
  %459 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %458)
  store i32 %459, ptr %44, align 4, !tbaa !5
  %460 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %457, ptr noundef nonnull align 4 dereferenceable(4) %44)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %45) #3
  %461 = load ptr, ptr %431, align 8, !tbaa !25
  %462 = getelementptr inbounds i8, ptr %461, i64 8
  %463 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %462)
  store i32 %463, ptr %45, align 4, !tbaa !5
  %464 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %460, ptr noundef nonnull align 4 dereferenceable(4) %45)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #3
  %465 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %458)
  %466 = icmp eq i32 %465, %453
  br i1 %466, label %467, label %475

467:                                              ; preds = %456
  %468 = getelementptr inbounds i8, ptr %0, i64 192
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %46) #3
  %469 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %458)
  store i32 %469, ptr %46, align 4, !tbaa !5
  %470 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %468, ptr noundef nonnull align 4 dereferenceable(4) %46)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %47) #3
  %471 = load ptr, ptr %431, align 8, !tbaa !25
  %472 = getelementptr inbounds i8, ptr %471, i64 8
  %473 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %472)
  store i32 %473, ptr %47, align 4, !tbaa !5
  %474 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %470, ptr noundef nonnull align 4 dereferenceable(4) %47)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #3
  br label %.critedge

475:                                              ; preds = %456
  %476 = getelementptr inbounds i8, ptr %0, i64 248
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %48) #3
  %477 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %458)
  store i32 %477, ptr %48, align 4, !tbaa !5
  %478 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %476, ptr noundef nonnull align 4 dereferenceable(4) %48)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %49) #3
  %479 = load ptr, ptr %431, align 8, !tbaa !25
  %480 = getelementptr inbounds i8, ptr %479, i64 8
  %481 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %480)
  store i32 %481, ptr %49, align 4, !tbaa !5
  %482 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertEOj(ptr noundef nonnull align 8 dereferenceable(56) %478, ptr noundef nonnull align 4 dereferenceable(4) %49)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %49) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %48) #3
  br label %.critedge

483:                                              ; preds = %70
  %484 = getelementptr inbounds i8, ptr %2, i64 4
  %485 = load i32, ptr %484, align 4, !tbaa !5
  %486 = getelementptr inbounds i8, ptr %0, i64 416
  %487 = load ptr, ptr %486, align 8, !tbaa !25
  %488 = getelementptr inbounds i8, ptr %487, i64 8
  %489 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %488)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %485, i32 noundef %489)
  br label %.critedge

.critedge.loopexit269:                            ; preds = %70, %70
  %490 = getelementptr inbounds i8, ptr %0, i64 416
  %491 = getelementptr inbounds i8, ptr %2, i64 4
  %492 = load i32, ptr %491, align 4, !tbaa !5
  %493 = load ptr, ptr %490, align 8, !tbaa !25
  %494 = getelementptr inbounds i8, ptr %493, i64 8
  %495 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %494)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %492, i32 noundef %495)
  %496 = getelementptr inbounds i8, ptr %2, i64 8
  %497 = load i32, ptr %496, align 4, !tbaa !5
  %498 = load ptr, ptr %490, align 8, !tbaa !25
  %499 = getelementptr inbounds i8, ptr %498, i64 8
  %500 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %499)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %497, i32 noundef %500)
  %501 = getelementptr inbounds i8, ptr %2, i64 12
  %502 = load i32, ptr %501, align 4, !tbaa !5
  %503 = load ptr, ptr %490, align 8, !tbaa !25
  %504 = getelementptr inbounds i8, ptr %503, i64 8
  %505 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %504)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %502, i32 noundef %505)
  br label %.critedge

.peel.next327:                                    ; preds = %83, %.peel.next327
  %indvars.iv312 = phi i64 [ %indvars.iv.next313, %.peel.next327 ], [ 4, %83 ]
  %506 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv312
  %507 = load i32, ptr %506, align 4, !tbaa !5
  %508 = load ptr, ptr %72, align 8, !tbaa !25
  %509 = getelementptr inbounds i8, ptr %508, i64 8
  %510 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %509)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %507, i32 noundef %510)
  %indvars.iv.next313 = add nuw nsw i64 %indvars.iv312, 1
  %exitcond316.not = icmp eq i64 %indvars.iv.next313, %wide.trip.count315
  br i1 %exitcond316.not, label %.critedge, label %.peel.next327, !llvm.loop !63

511:                                              ; preds = %70, %70, %70, %70, %70, %70, %70, %70, %70, %70, %70, %70
  %512 = icmp ugt i32 %3, 1
  br i1 %512, label %513, label %.critedge

513:                                              ; preds = %511
  %514 = getelementptr inbounds i8, ptr %0, i64 416
  %wide.trip.count295 = zext i32 %3 to i64
  %515 = getelementptr inbounds i8, ptr %2, i64 4
  %516 = load i32, ptr %515, align 4, !tbaa !5
  %517 = load ptr, ptr %514, align 8, !tbaa !25
  %518 = getelementptr inbounds i8, ptr %517, i64 8
  %519 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %518)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %516, i32 noundef %519)
  %exitcond296.peel.not = icmp eq i32 %3, 2
  br i1 %exitcond296.peel.not, label %.critedge, label %520

520:                                              ; preds = %513
  %521 = getelementptr inbounds i8, ptr %2, i64 8
  %522 = load i32, ptr %521, align 4, !tbaa !5
  %523 = load ptr, ptr %514, align 8, !tbaa !25
  %524 = getelementptr inbounds i8, ptr %523, i64 8
  %525 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %524)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %522, i32 noundef %525)
  %exitcond296.peel302.not = icmp eq i32 %3, 3
  br i1 %exitcond296.peel302.not, label %.critedge, label %526

526:                                              ; preds = %520
  %527 = getelementptr inbounds i8, ptr %2, i64 12
  %528 = load i32, ptr %527, align 4, !tbaa !5
  %529 = load ptr, ptr %514, align 8, !tbaa !25
  %530 = getelementptr inbounds i8, ptr %529, i64 8
  %531 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %530)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %528, i32 noundef %531)
  %532 = and i32 %3, -2
  %switch391 = icmp eq i32 %532, 4
  br i1 %switch391, label %.critedge, label %.peel.next307

.peel.next307:                                    ; preds = %526, %.peel.next307
  %indvars.iv292 = phi i64 [ %indvars.iv.next293, %.peel.next307 ], [ 5, %526 ]
  %533 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv292
  %534 = load i32, ptr %533, align 4, !tbaa !5
  %535 = load ptr, ptr %514, align 8, !tbaa !25
  %536 = getelementptr inbounds i8, ptr %535, i64 8
  %537 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %536)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %534, i32 noundef %537)
  %indvars.iv.next293 = add nuw nsw i64 %indvars.iv292, 1
  %exitcond296.not = icmp eq i64 %indvars.iv.next293, %wide.trip.count295
  br i1 %exitcond296.not, label %.critedge, label %.peel.next307, !llvm.loop !65

538:                                              ; preds = %70, %70, %70, %70, %70, %70, %70, %70, %70, %70, %70, %70
  %539 = icmp ugt i32 %3, 1
  br i1 %539, label %540, label %.critedge

540:                                              ; preds = %538
  %541 = getelementptr inbounds i8, ptr %0, i64 416
  %wide.trip.count = zext i32 %3 to i64
  %542 = getelementptr inbounds i8, ptr %2, i64 4
  %543 = load i32, ptr %542, align 4, !tbaa !5
  %544 = load ptr, ptr %541, align 8, !tbaa !25
  %545 = getelementptr inbounds i8, ptr %544, i64 8
  %546 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %545)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %543, i32 noundef %546)
  %exitcond.peel.not = icmp eq i32 %3, 2
  br i1 %exitcond.peel.not, label %.critedge, label %547

547:                                              ; preds = %540
  %548 = getelementptr inbounds i8, ptr %2, i64 8
  %549 = load i32, ptr %548, align 4, !tbaa !5
  %550 = load ptr, ptr %541, align 8, !tbaa !25
  %551 = getelementptr inbounds i8, ptr %550, i64 8
  %552 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %551)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %549, i32 noundef %552)
  %exitcond.peel278.not = icmp eq i32 %3, 3
  br i1 %exitcond.peel278.not, label %.critedge, label %553

553:                                              ; preds = %547
  %554 = getelementptr inbounds i8, ptr %2, i64 12
  %555 = load i32, ptr %554, align 4, !tbaa !5
  %556 = load ptr, ptr %541, align 8, !tbaa !25
  %557 = getelementptr inbounds i8, ptr %556, i64 8
  %558 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %557)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %555, i32 noundef %558)
  %exitcond.peel282.not = icmp eq i32 %3, 4
  br i1 %exitcond.peel282.not, label %.critedge, label %559

559:                                              ; preds = %553
  %560 = getelementptr inbounds i8, ptr %2, i64 16
  %561 = load i32, ptr %560, align 4, !tbaa !5
  %562 = load ptr, ptr %541, align 8, !tbaa !25
  %563 = getelementptr inbounds i8, ptr %562, i64 8
  %564 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %563)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %561, i32 noundef %564)
  %.off392 = add i32 %3, -5
  %switch393 = icmp ult i32 %.off392, 2
  br i1 %switch393, label %.critedge, label %.peel.next287

.peel.next287:                                    ; preds = %559, %.peel.next287
  %indvars.iv = phi i64 [ %indvars.iv.next, %.peel.next287 ], [ 6, %559 ]
  %565 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv
  %566 = load i32, ptr %565, align 4, !tbaa !5
  %567 = load ptr, ptr %541, align 8, !tbaa !25
  %568 = getelementptr inbounds i8, ptr %567, i64 8
  %569 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %568)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %566, i32 noundef %569)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.critedge, label %.peel.next287, !llvm.loop !66

570:                                              ; preds = %.lr.ph263, %570
  %indvars.iv370 = phi i64 [ 0, %.lr.ph263 ], [ %indvars.iv.next371, %570 ]
  %571 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv370
  %572 = load i32, ptr %571, align 4, !tbaa !5
  %573 = load ptr, ptr %111, align 8, !tbaa !25
  %574 = getelementptr inbounds i8, ptr %573, i64 8
  %575 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %574)
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandler22notify_variable_accessEjj(ptr noundef nonnull align 8 dereferenceable(424) %0, i32 noundef %572, i32 noundef %575)
  %indvars.iv.next371 = add nuw nsw i64 %indvars.iv370, 1
  %exitcond374.not = icmp eq i64 %indvars.iv.next371, %wide.trip.count373
  br i1 %exitcond374.not, label %.critedge, label %570, !llvm.loop !68

.critedge:                                        ; preds = %.peel.next287, %.peel.next307, %.peel.next327, %423, %400, %570, %559, %526, %83, %540, %547, %553, %513, %520, %71, %77, %103, %.peel.next351._crit_edge, %.preheader237, %.critedge.loopexit269, %538, %511, %.preheader239, %.preheader233, %375, %.preheader, %148, %206, %276, %483, %70, %70, %355, %339, %448, %467, %475, %451, %._crit_edge, %317, %289, %359, %322, %216, %159, %112
  %.1 = phi i1 [ false, %112 ], [ false, %159 ], [ false, %216 ], [ false, %322 ], [ false, %359 ], [ false, %289 ], [ true, %317 ], [ true, %._crit_edge ], [ true, %451 ], [ true, %475 ], [ true, %467 ], [ true, %448 ], [ true, %339 ], [ true, %355 ], [ true, %70 ], [ true, %70 ], [ true, %483 ], [ true, %276 ], [ true, %206 ], [ true, %148 ], [ true, %.preheader ], [ true, %375 ], [ true, %.preheader233 ], [ true, %.preheader239 ], [ true, %511 ], [ true, %538 ], [ true, %.critedge.loopexit269 ], [ true, %.preheader237 ], [ true, %.peel.next351._crit_edge ], [ true, %103 ], [ true, %77 ], [ true, %71 ], [ true, %520 ], [ true, %513 ], [ true, %553 ], [ true, %547 ], [ true, %540 ], [ true, %83 ], [ true, %526 ], [ true, %559 ], [ true, %570 ], [ true, %400 ], [ true, %423 ], [ true, %.peel.next327 ], [ true, %.peel.next307 ], [ true, %.peel.next287 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #3
  ret i1 %.1
}

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRA1_KcRKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #2 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 8}
!10 = !{!"_ZTSN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerE", !11, i64 0, !12, i64 8, !12, i64 16, !13, i64 24, !13, i64 80, !19, i64 136, !13, i64 192, !13, i64 248, !21, i64 304, !13, i64 360, !12, i64 416}
!11 = !{!"_ZTSN11spirv_cross8Compiler13OpcodeHandlerE"}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!"_ZTSSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE", !14, i64 0}
!14 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEESaIS9_ENSt8__detail10_Select1stES6_S4_NSB_18_Mod_range_hashingENSB_20_Default_ranged_hashENSB_20_Prime_rehash_policyENSB_17_Hashtable_traitsILb0ELb0ELb1EEEE", !12, i64 0, !15, i64 8, !16, i64 16, !15, i64 24, !17, i64 32, !12, i64 48}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !12, i64 0}
!17 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !18, i64 0, !15, i64 8}
!18 = !{!"float", !7, i64 0}
!19 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !20, i64 0}
!20 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !12, i64 0, !15, i64 8, !16, i64 16, !15, i64 24, !17, i64 32, !12, i64 48}
!21 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !22, i64 0}
!22 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !12, i64 0, !15, i64 8, !16, i64 16, !15, i64 24, !17, i64 32, !12, i64 48}
!23 = !{!24, !6, i64 4}
!24 = !{!"_ZTSSt4pairIKjjE", !6, i64 0, !6, i64 4}
!25 = !{!10, !12, i64 416}
!26 = !{!27, !27, i64 0}
!27 = !{!"bool", !7, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!31, !27, i64 124}
!31 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !32, i64 0, !34, i64 12, !35, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !36, i64 32, !39, i64 88, !6, i64 120, !27, i64 124, !27, i64 125, !42, i64 128, !43, i64 136, !36, i64 192, !46, i64 248, !47, i64 272, !47, i64 276, !51, i64 280}
!32 = !{!"_ZTSN11spirv_cross8IVariantE", !33, i64 8}
!33 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !6, i64 0}
!34 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!35 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!36 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !37, i64 0, !15, i64 16, !38, i64 24}
!37 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !12, i64 0, !15, i64 8}
!38 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!39 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !40, i64 0, !15, i64 16, !41, i64 24}
!40 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !12, i64 0, !15, i64 8}
!41 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!42 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!43 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !44, i64 0, !15, i64 16, !45, i64 24}
!44 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !12, i64 0, !15, i64 8}
!45 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!46 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !47, i64 0, !48, i64 4, !27, i64 8, !27, i64 9, !27, i64 10, !6, i64 12, !49, i64 16, !50, i64 20}
!47 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !6, i64 0}
!48 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!49 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!50 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!51 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !52, i64 0}
!52 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !12, i64 0, !15, i64 8, !16, i64 16, !15, i64 24, !17, i64 32, !12, i64 48}
!53 = !{i8 0, i8 2}
!54 = !{}
!55 = !{!31, !35, i64 16}
!56 = distinct !{!56, !29}
!57 = distinct !{!57, !29, !58}
!58 = !{!"llvm.loop.peeled.count", i32 2}
!59 = !{!60, !61, i64 12}
!60 = !{!"_ZTSN11spirv_cross13SPIRExtensionE", !32, i64 0, !61, i64 12}
!61 = !{!"_ZTSN11spirv_cross13SPIRExtension9ExtensionE", !7, i64 0}
!62 = distinct !{!62, !29}
!63 = distinct !{!63, !29, !64}
!64 = !{!"llvm.loop.peeled.count", i32 4}
!65 = distinct !{!65, !29, !64}
!66 = distinct !{!66, !29, !67}
!67 = !{!"llvm.loop.peeled.count", i32 5}
!68 = distinct !{!68, !29}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopFullUnrollPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SROAPass,SimplifyCFGPass