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

; 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.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 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.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.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.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.145 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.146 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.147 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.148 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.149 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.150 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.151 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.152 = external hidden unnamed_addr constant [19 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL31ensure_member_packing_rules_mslERNS_8SPIRTypeEj = external hidden unnamed_addr constant [85 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; 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: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #6 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 #4 align 2

declare void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #7 align 2

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #8

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

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

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

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

declare void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef, i32 noundef) #5

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #5

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef) #5

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #5

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #5

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL31ensure_member_packing_rules_mslERNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1, i32 noundef %2) #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %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 %"struct.spirv_cross::SPIRType", align 8
  %20 = alloca %"class.spirv_cross::TypedID.414", align 4
  %21 = alloca i32, align 4
  %22 = alloca %"class.spirv_cross::TypedID.413", align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i8, align 1
  %26 = alloca %"class.spirv_cross::TypedID.414", align 4
  %27 = alloca %"struct.spirv_cross::SPIRType", align 8
  %28 = alloca %"class.spirv_cross::TypedID.414", align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i8, align 1
  %33 = alloca %"class.spirv_cross::TypedID.414", align 4
  %34 = alloca i32, align 4
  %35 = alloca i8, align 1
  %36 = alloca i32, align 4
  %37 = alloca i8, align 1
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  %38 = load ptr, ptr %4, align 8
  %39 = load ptr, ptr %5, align 8, !tbaa !5
  %40 = load i32, ptr %6, align 4, !tbaa !9
  %41 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %38, ptr noundef nonnull align 8 dereferenceable(336) %39, i32 noundef %40)
  br i1 %41, label %42, label %43

42:                                               ; preds = %3
  br label %497

43:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %44, i32 0, i32 12
  %46 = load i32, ptr %6, align 4, !tbaa !9
  %47 = zext i32 %46 to i64
  %48 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %45, i64 noundef %47) #9
  %49 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %48)
  %50 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %49)
  store ptr %50, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #9
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %51, i32 0, i32 9
  %53 = load i8, ptr %52, align 4, !tbaa !11, !range !39, !noundef !40
  %54 = trunc i8 %53 to i1
  br i1 %54, label %55, label %60

55:                                               ; preds = %43
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %56, i32 0, i32 11
  %58 = load i32, ptr %57, align 8, !tbaa !41
  %59 = icmp eq i32 %58, 5349
  br label %60

60:                                               ; preds = %55, %43
  %61 = phi i1 [ false, %43 ], [ %59, %55 ]
  %62 = zext i1 %61 to i8
  store i8 %62, ptr %8, align 1, !tbaa !42
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  %64 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %63, i32 0, i32 2
  %65 = load i32, ptr %64, align 8, !tbaa !43
  %66 = icmp eq i32 %65, 15
  br i1 %66, label %67, label %77

67:                                               ; preds = %60
  %68 = load i8, ptr %8, align 1, !tbaa !42, !range !39, !noundef !40
  %69 = trunc i8 %68 to i1
  br i1 %69, label %77, label %70

70:                                               ; preds = %67
  %71 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef @.str.145)
          to label %72 unwind label %73

72:                                               ; preds = %70
  call void @__cxa_throw(ptr %71, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

73:                                               ; preds = %70
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %9, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %10, align 4
  call void @__cxa_free_exception(ptr %71) #9
  br label %499

77:                                               ; preds = %67, %60
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %38, ptr noundef nonnull align 8 dereferenceable(336) %78)
  br i1 %79, label %85, label %80

80:                                               ; preds = %77
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %81, i32 0, i32 1
  %83 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
  %84 = load i32, ptr %6, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %83, i32 noundef %84, i32 noundef 2, i32 noundef 0)
  br label %85

85:                                               ; preds = %80, %77
  %86 = load ptr, ptr %5, align 8, !tbaa !5
  %87 = load i32, ptr %6, align 4, !tbaa !9
  %88 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %38, ptr noundef nonnull align 8 dereferenceable(336) %86, i32 noundef %87)
  br i1 %88, label %89, label %90

89:                                               ; preds = %85
  store i32 1, ptr %11, align 4
  br label %495

90:                                               ; preds = %85
  %91 = load ptr, ptr %7, align 8, !tbaa !5
  %92 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %91, i32 0, i32 6
  %93 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %92) #9
  br i1 %93, label %234, label %94

94:                                               ; preds = %90
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %38, ptr noundef nonnull align 8 dereferenceable(336) %95)
  br i1 %96, label %234, label %97

97:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  %98 = load ptr, ptr %5, align 8, !tbaa !5
  %99 = load i32, ptr %6, align 4, !tbaa !9
  %100 = call noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %38, ptr noundef nonnull align 8 dereferenceable(336) %98, i32 noundef %99)
  store i32 %100, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %101 = load ptr, ptr %7, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %101, i32 0, i32 6
  %103 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %102) #9
  %104 = sub i64 %103, 1
  %105 = trunc i64 %104 to i32
  store i32 %105, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %119, %97
  %107 = load i32, ptr %14, align 4, !tbaa !9
  %108 = load i32, ptr %13, align 4, !tbaa !9
  %109 = icmp ult i32 %107, %108
  br i1 %109, label %111, label %110

110:                                              ; preds = %106
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %122

111:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %112 = load ptr, ptr %7, align 8, !tbaa !5
  %113 = load i32, ptr %14, align 4, !tbaa !9
  %114 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %38, ptr noundef nonnull align 8 dereferenceable(336) %112, i32 noundef %113)
  store i32 %114, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 1, ptr %16, align 4, !tbaa !9
  %115 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %16)
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = load i32, ptr %12, align 4, !tbaa !9
  %118 = udiv i32 %117, %116
  store i32 %118, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  br label %119

119:                                              ; preds = %111
  %120 = load i32, ptr %14, align 4, !tbaa !9
  %121 = add i32 %120, 1
  store i32 %121, ptr %14, align 4, !tbaa !9
  br label %106, !llvm.loop !44

122:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  %123 = load i8, ptr %8, align 1, !tbaa !42, !range !39, !noundef !40
  %124 = trunc i8 %123 to i1
  br i1 %124, label %125, label %126

125:                                              ; preds = %122
  br label %131

126:                                              ; preds = %122
  %127 = load ptr, ptr %7, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %127, i32 0, i32 3
  %129 = load i32, ptr %128, align 4, !tbaa !46
  %130 = udiv i32 %129, 8
  br label %131

131:                                              ; preds = %126, %125
  %132 = phi i32 [ 8, %125 ], [ %130, %126 ]
  store i32 %132, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %133 = load i32, ptr %12, align 4, !tbaa !9
  %134 = load i32, ptr %17, align 4, !tbaa !9
  %135 = udiv i32 %133, %134
  store i32 %135, ptr %18, align 4, !tbaa !9
  %136 = load i32, ptr %18, align 4, !tbaa !9
  %137 = icmp eq i32 %136, 3
  br i1 %137, label %138, label %145

138:                                              ; preds = %131
  %139 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %139, ptr noundef @.str.146)
          to label %140 unwind label %141

140:                                              ; preds = %138
  call void @__cxa_throw(ptr %139, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

141:                                              ; preds = %138
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %9, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %10, align 4
  call void @__cxa_free_exception(ptr %139) #9
  br label %233

145:                                              ; preds = %131
  %146 = load i32, ptr %18, align 4, !tbaa !9
  %147 = icmp ugt i32 %146, 4
  br i1 %147, label %148, label %158

148:                                              ; preds = %145
  %149 = load i32, ptr %18, align 4, !tbaa !9
  %150 = icmp ne i32 %149, 8
  br i1 %150, label %151, label %158

151:                                              ; preds = %148
  %152 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %152, ptr noundef @.str.147)
          to label %153 unwind label %154

153:                                              ; preds = %151
  call void @__cxa_throw(ptr %152, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

154:                                              ; preds = %151
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %9, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %10, align 4
  call void @__cxa_free_exception(ptr %152) #9
  br label %233

158:                                              ; preds = %148, %145
  br label %159

159:                                              ; preds = %158
  %160 = load i32, ptr %18, align 4, !tbaa !9
  %161 = icmp eq i32 %160, 8
  br i1 %161, label %162, label %176

162:                                              ; preds = %159
  %163 = load ptr, ptr %7, align 8, !tbaa !5
  %164 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %163, i32 0, i32 3
  %165 = load i32, ptr %164, align 4, !tbaa !46
  %166 = icmp eq i32 %165, 16
  br i1 %166, label %167, label %168

167:                                              ; preds = %162
  call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %38, i8 noundef zeroext 71)
  br label %175

168:                                              ; preds = %162
  %169 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %169, ptr noundef @.str.148)
          to label %170 unwind label %171

170:                                              ; preds = %168
  call void @__cxa_throw(ptr %169, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

171:                                              ; preds = %168
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %9, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %10, align 4
  call void @__cxa_free_exception(ptr %169) #9
  br label %233

175:                                              ; preds = %167
  br label %176

176:                                              ; preds = %175, %159
  call void @llvm.lifetime.start.p0(i64 336, ptr %19) #9
  %177 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %19, ptr noundef nonnull align 8 dereferenceable(336) %177)
  %178 = load i32, ptr %18, align 4, !tbaa !9
  %179 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %19, i32 0, i32 4
  store i32 %178, ptr %179, align 8, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef 0)
          to label %180 unwind label %194

180:                                              ; preds = %176
  %181 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %19, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %181, ptr align 4 %20, i64 4, i1 false), !tbaa.struct !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  %182 = load i8, ptr %8, align 1, !tbaa !42, !range !39, !noundef !40
  %183 = trunc i8 %182 to i1
  br i1 %183, label %184, label %202

184:                                              ; preds = %180
  %185 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %19, i32 0, i32 3
  store i32 64, ptr %185, align 4, !tbaa !46
  %186 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %19, i32 0, i32 3
  %187 = load i32, ptr %186, align 4, !tbaa !46
  %188 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %187)
          to label %189 unwind label %198

189:                                              ; preds = %184
  %190 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %19, i32 0, i32 2
  store i32 %188, ptr %190, align 8, !tbaa !43
  %191 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %19, i32 0, i32 9
  store i8 0, ptr %191, align 4, !tbaa !11
  %192 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %19, i32 0, i32 8
  store i32 0, ptr %192, align 8, !tbaa !49
  %193 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %19, i32 0, i32 10
  store i8 0, ptr %193, align 1, !tbaa !50
  br label %202

194:                                              ; preds = %176
  %195 = landingpad { ptr, i32 }
          cleanup
  %196 = extractvalue { ptr, i32 } %195, 0
  store ptr %196, ptr %9, align 8
  %197 = extractvalue { ptr, i32 } %195, 1
  store i32 %197, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %232

198:                                              ; preds = %184
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %9, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %10, align 4
  br label %232

202:                                              ; preds = %189, %180
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %203 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %38, i32 0, i32 1
  %204 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %203, i32 noundef 1)
          to label %205 unwind label %228

205:                                              ; preds = %202
  store i32 %204, ptr %21, align 4, !tbaa !9
  %206 = load i32, ptr %21, align 4, !tbaa !9
  %207 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %206, ptr noundef nonnull align 8 dereferenceable(336) %19)
          to label %208 unwind label %228

208:                                              ; preds = %205
  %209 = load ptr, ptr %5, align 8, !tbaa !5
  %210 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %209, i32 0, i32 1
  %211 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %210)
          to label %212 unwind label %228

212:                                              ; preds = %208
  %213 = load i32, ptr %6, align 4, !tbaa !9
  %214 = load i32, ptr %21, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %211, i32 noundef %213, i32 noundef 1, i32 noundef %214)
          to label %215 unwind label %228

215:                                              ; preds = %212
  %216 = load i32, ptr %21, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef %216)
          to label %217 unwind label %228

217:                                              ; preds = %215
  %218 = load i32, ptr %12, align 4, !tbaa !9
  %219 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %22, i32 0, i32 0
  %220 = load i32, ptr %219, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 %220, i32 noundef 6, i32 noundef %218)
          to label %221 unwind label %228

221:                                              ; preds = %217
  %222 = load ptr, ptr %5, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %222, i32 0, i32 1
  %224 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %223)
          to label %225 unwind label %228

225:                                              ; preds = %221
  %226 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler32unset_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %224, i32 noundef %226, i32 noundef 2)
          to label %227 unwind label %228

227:                                              ; preds = %225
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %19) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %345

228:                                              ; preds = %225, %221, %217, %215, %212, %208, %205, %202
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %9, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  br label %232

232:                                              ; preds = %228, %198, %194
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %19) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %19) #9
  br label %233

233:                                              ; preds = %232, %171, %154, %141
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %499

234:                                              ; preds = %94, %90
  %235 = load ptr, ptr %7, align 8, !tbaa !5
  %236 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %38, ptr noundef nonnull align 8 dereferenceable(336) %235)
  br i1 %236, label %237, label %337

237:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  %238 = load ptr, ptr %5, align 8, !tbaa !5
  %239 = load i32, ptr %6, align 4, !tbaa !9
  %240 = call noundef i32 @_ZNK11spirv_cross8Compiler32type_struct_member_matrix_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %38, ptr noundef nonnull align 8 dereferenceable(336) %238, i32 noundef %239)
  store i32 %240, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %241 = load i32, ptr %23, align 4, !tbaa !9
  %242 = load ptr, ptr %7, align 8, !tbaa !5
  %243 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %242, i32 0, i32 3
  %244 = load i32, ptr %243, align 4, !tbaa !46
  %245 = udiv i32 %244, 8
  %246 = udiv i32 %241, %245
  store i32 %246, ptr %24, align 4, !tbaa !9
  %247 = load i32, ptr %24, align 4, !tbaa !9
  %248 = icmp eq i32 %247, 3
  br i1 %248, label %249, label %256

249:                                              ; preds = %237
  %250 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %250, ptr noundef @.str.146)
          to label %251 unwind label %252

251:                                              ; preds = %249
  call void @__cxa_throw(ptr %250, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

252:                                              ; preds = %249
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %9, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %10, align 4
  call void @__cxa_free_exception(ptr %250) #9
  br label %336

256:                                              ; preds = %237
  %257 = load i32, ptr %24, align 4, !tbaa !9
  %258 = icmp ugt i32 %257, 4
  br i1 %258, label %259, label %269

259:                                              ; preds = %256
  %260 = load i32, ptr %24, align 4, !tbaa !9
  %261 = icmp ne i32 %260, 8
  br i1 %261, label %262, label %269

262:                                              ; preds = %259
  %263 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %263, ptr noundef @.str.147)
          to label %264 unwind label %265

264:                                              ; preds = %262
  call void @__cxa_throw(ptr %263, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

265:                                              ; preds = %262
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %9, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %10, align 4
  call void @__cxa_free_exception(ptr %263) #9
  br label %336

269:                                              ; preds = %259, %256
  br label %270

270:                                              ; preds = %269
  %271 = load i32, ptr %24, align 4, !tbaa !9
  %272 = icmp eq i32 %271, 8
  br i1 %272, label %273, label %286

273:                                              ; preds = %270
  %274 = load ptr, ptr %7, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %274, i32 0, i32 2
  %276 = load i32, ptr %275, align 8, !tbaa !43
  %277 = icmp ne i32 %276, 12
  br i1 %277, label %278, label %285

278:                                              ; preds = %273
  %279 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %279, ptr noundef @.str.149)
          to label %280 unwind label %281

280:                                              ; preds = %278
  call void @__cxa_throw(ptr %279, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

281:                                              ; preds = %278
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %9, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %10, align 4
  call void @__cxa_free_exception(ptr %279) #9
  br label %336

285:                                              ; preds = %273
  call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %38, i8 noundef zeroext 71)
  br label %286

286:                                              ; preds = %285, %270
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #9
  %287 = load ptr, ptr %5, align 8, !tbaa !5
  %288 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %287, i32 0, i32 1
  %289 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %288)
  %290 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %26, i32 0, i32 0
  store i32 %289, ptr %290, align 4
  %291 = load i32, ptr %6, align 4, !tbaa !9
  %292 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %26, i32 0, i32 0
  %293 = load i32, ptr %292, align 4
  %294 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 %293, i32 noundef %291, i32 noundef 4)
  %295 = zext i1 %294 to i8
  store i8 %295, ptr %25, align 1, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 336, ptr %27) #9
  %296 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %27, ptr noundef nonnull align 8 dereferenceable(336) %296)
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef 0)
          to label %297 unwind label %304

297:                                              ; preds = %286
  %298 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %27, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %298, ptr align 4 %28, i64 4, i1 false), !tbaa.struct !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  %299 = load i8, ptr %25, align 1, !tbaa !42, !range !39, !noundef !40
  %300 = trunc i8 %299 to i1
  br i1 %300, label %301, label %308

301:                                              ; preds = %297
  %302 = load i32, ptr %24, align 4, !tbaa !9
  %303 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %27, i32 0, i32 5
  store i32 %302, ptr %303, align 4, !tbaa !51
  br label %311

304:                                              ; preds = %286
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %9, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %335

308:                                              ; preds = %297
  %309 = load i32, ptr %24, align 4, !tbaa !9
  %310 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %27, i32 0, i32 4
  store i32 %309, ptr %310, align 8, !tbaa !47
  br label %311

311:                                              ; preds = %308, %301
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %312 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %38, i32 0, i32 1
  %313 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %312, i32 noundef 1)
          to label %314 unwind label %331

314:                                              ; preds = %311
  store i32 %313, ptr %29, align 4, !tbaa !9
  %315 = load i32, ptr %29, align 4, !tbaa !9
  %316 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %315, ptr noundef nonnull align 8 dereferenceable(336) %27)
          to label %317 unwind label %331

317:                                              ; preds = %314
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %318, i32 0, i32 1
  %320 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %319)
          to label %321 unwind label %331

321:                                              ; preds = %317
  %322 = load i32, ptr %6, align 4, !tbaa !9
  %323 = load i32, ptr %29, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %320, i32 noundef %322, i32 noundef 1, i32 noundef %323)
          to label %324 unwind label %331

324:                                              ; preds = %321
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  %326 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %325, i32 0, i32 1
  %327 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %326)
          to label %328 unwind label %331

328:                                              ; preds = %324
  %329 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler32unset_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %327, i32 noundef %329, i32 noundef 2)
          to label %330 unwind label %331

330:                                              ; preds = %328
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %27) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %344

331:                                              ; preds = %328, %324, %321, %317, %314, %311
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %9, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %335

335:                                              ; preds = %331, %304
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %27) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  br label %336

336:                                              ; preds = %335, %281, %265, %252
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %499

337:                                              ; preds = %234
  %338 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %338, ptr noundef @.str.150)
          to label %339 unwind label %340

339:                                              ; preds = %337
  call void @__cxa_throw(ptr %338, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

340:                                              ; preds = %337
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %9, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %10, align 4
  call void @__cxa_free_exception(ptr %338) #9
  br label %499

344:                                              ; preds = %330
  br label %345

345:                                              ; preds = %344, %227
  %346 = load ptr, ptr %5, align 8, !tbaa !5
  %347 = load i32, ptr %6, align 4, !tbaa !9
  %348 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %38, ptr noundef nonnull align 8 dereferenceable(336) %346, i32 noundef %347)
  br i1 %348, label %349, label %350

349:                                              ; preds = %345
  store i32 1, ptr %11, align 4
  br label %495

350:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %351 = load ptr, ptr %5, align 8, !tbaa !5
  %352 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %351, i32 0, i32 1
  %353 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %352)
  %354 = load i32, ptr %6, align 4, !tbaa !9
  %355 = call noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %353, i32 noundef %354, i32 noundef 1)
  store i32 %355, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %356 = load i32, ptr %30, align 4, !tbaa !9
  %357 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %356)
  store ptr %357, ptr %31, align 8, !tbaa !5
  %358 = load ptr, ptr %31, align 8, !tbaa !5
  %359 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %38, ptr noundef nonnull align 8 dereferenceable(336) %358)
  br i1 %359, label %360, label %395

360:                                              ; preds = %350
  %361 = load ptr, ptr %31, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %361, i32 0, i32 6
  %363 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %362) #9
  %364 = load i32, ptr %363, align 4, !tbaa !9
  %365 = icmp ugt i32 %364, 1
  br i1 %365, label %366, label %385

366:                                              ; preds = %360
  %367 = load ptr, ptr %31, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %367, i32 0, i32 7
  %369 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIbE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %368) #9
  %370 = load i8, ptr %369, align 1, !tbaa !42, !range !39, !noundef !40
  %371 = trunc i8 %370 to i1
  br i1 %371, label %379, label %372

372:                                              ; preds = %366
  %373 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %373, ptr noundef @.str.151)
          to label %374 unwind label %375

374:                                              ; preds = %372
  call void @__cxa_throw(ptr %373, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

375:                                              ; preds = %372
  %376 = landingpad { ptr, i32 }
          cleanup
  %377 = extractvalue { ptr, i32 } %376, 0
  store ptr %377, ptr %9, align 8
  %378 = extractvalue { ptr, i32 } %376, 1
  store i32 %378, ptr %10, align 4
  call void @__cxa_free_exception(ptr %373) #9
  br label %498

379:                                              ; preds = %366
  %380 = load ptr, ptr %31, align 8, !tbaa !5
  %381 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %380, i32 0, i32 6
  %382 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %381) #9
  %383 = load i32, ptr %382, align 4, !tbaa !9
  %384 = sub i32 %383, 1
  store i32 %384, ptr %382, align 4, !tbaa !9
  br label %394

385:                                              ; preds = %360
  %386 = load ptr, ptr %5, align 8, !tbaa !5
  %387 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %386, i32 0, i32 1
  %388 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %387)
  %389 = load i32, ptr %6, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler32unset_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %388, i32 noundef %389, i32 noundef 1)
  %390 = load ptr, ptr %5, align 8, !tbaa !5
  %391 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %390, i32 0, i32 1
  %392 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  %393 = load i32, ptr %6, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 noundef %392, i32 noundef %393, i32 noundef 2, i32 noundef 0)
  br label %394

394:                                              ; preds = %385, %379
  br label %483

395:                                              ; preds = %350
  %396 = load ptr, ptr %31, align 8, !tbaa !5
  %397 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %38, ptr noundef nonnull align 8 dereferenceable(336) %396)
  br i1 %397, label %398, label %482

398:                                              ; preds = %395
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #9
  %399 = load ptr, ptr %5, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %399, i32 0, i32 1
  %401 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %400)
  %402 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %33, i32 0, i32 0
  store i32 %401, ptr %402, align 4
  %403 = load i32, ptr %6, align 4, !tbaa !9
  %404 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %33, i32 0, i32 0
  %405 = load i32, ptr %404, align 4
  %406 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %38, i32 %405, i32 noundef %403, i32 noundef 4)
  %407 = zext i1 %406 to i8
  store i8 %407, ptr %32, align 1, !tbaa !42
  %408 = load i8, ptr %32, align 1, !tbaa !42, !range !39, !noundef !40
  %409 = trunc i8 %408 to i1
  br i1 %409, label %443, label %410

410:                                              ; preds = %398
  %411 = load ptr, ptr %31, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %411, i32 0, i32 5
  %413 = load i32, ptr %412, align 4, !tbaa !51
  %414 = icmp ugt i32 %413, 2
  br i1 %414, label %415, label %420

415:                                              ; preds = %410
  %416 = load ptr, ptr %31, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %416, i32 0, i32 5
  %418 = load i32, ptr %417, align 4, !tbaa !51
  %419 = add i32 %418, -1
  store i32 %419, ptr %417, align 4, !tbaa !51
  br label %442

420:                                              ; preds = %410
  %421 = load ptr, ptr %31, align 8, !tbaa !5
  %422 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %421, i32 0, i32 5
  %423 = load i32, ptr %422, align 4, !tbaa !51
  %424 = icmp eq i32 %423, 2
  br i1 %424, label %425, label %441

425:                                              ; preds = %420
  %426 = load ptr, ptr %31, align 8, !tbaa !5
  %427 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %426, i32 0, i32 5
  store i32 1, ptr %427, align 4, !tbaa !51
  %428 = load ptr, ptr %31, align 8, !tbaa !5
  %429 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %428, i32 0, i32 6
  %430 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %429) #9
  br i1 %430, label %431, label %432

431:                                              ; preds = %425
  br label %434

432:                                              ; preds = %425
  call void @__assert_fail(ptr noundef @.str.152, ptr noundef @.str.25, i32 noundef 5155, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL31ensure_member_packing_rules_mslERNS_8SPIRTypeEj) #11
  unreachable

433:                                              ; No predecessors!
  br label %434

434:                                              ; preds = %433, %431
  %435 = load ptr, ptr %31, align 8, !tbaa !5
  %436 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %435, i32 0, i32 1
  store i32 28, ptr %436, align 4, !tbaa !52
  %437 = load ptr, ptr %31, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %437, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  store i32 1, ptr %34, align 4, !tbaa !9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %438, ptr noundef nonnull align 4 dereferenceable(4) %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  %439 = load ptr, ptr %31, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %439, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #9
  store i8 1, ptr %35, align 1, !tbaa !42
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %440, ptr noundef nonnull align 1 dereferenceable(1) %35) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #9
  br label %441

441:                                              ; preds = %434, %420
  br label %442

442:                                              ; preds = %441, %415
  br label %481

443:                                              ; preds = %398
  %444 = load ptr, ptr %31, align 8, !tbaa !5
  %445 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %444, i32 0, i32 4
  %446 = load i32, ptr %445, align 8, !tbaa !47
  %447 = icmp ugt i32 %446, 2
  br i1 %447, label %448, label %453

448:                                              ; preds = %443
  %449 = load ptr, ptr %31, align 8, !tbaa !5
  %450 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %449, i32 0, i32 4
  %451 = load i32, ptr %450, align 8, !tbaa !47
  %452 = add i32 %451, -1
  store i32 %452, ptr %450, align 8, !tbaa !47
  br label %480

453:                                              ; preds = %443
  %454 = load ptr, ptr %31, align 8, !tbaa !5
  %455 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %454, i32 0, i32 4
  %456 = load i32, ptr %455, align 8, !tbaa !47
  %457 = icmp eq i32 %456, 2
  br i1 %457, label %458, label %479

458:                                              ; preds = %453
  %459 = load ptr, ptr %31, align 8, !tbaa !5
  %460 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %459, i32 0, i32 5
  %461 = load i32, ptr %460, align 4, !tbaa !51
  %462 = load ptr, ptr %31, align 8, !tbaa !5
  %463 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %462, i32 0, i32 4
  store i32 %461, ptr %463, align 8, !tbaa !47
  %464 = load ptr, ptr %31, align 8, !tbaa !5
  %465 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %464, i32 0, i32 5
  store i32 1, ptr %465, align 4, !tbaa !51
  %466 = load ptr, ptr %31, align 8, !tbaa !5
  %467 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %466, i32 0, i32 6
  %468 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %467) #9
  br i1 %468, label %469, label %470

469:                                              ; preds = %458
  br label %472

470:                                              ; preds = %458
  call void @__assert_fail(ptr noundef @.str.152, ptr noundef @.str.25, i32 noundef 5172, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL31ensure_member_packing_rules_mslERNS_8SPIRTypeEj) #11
  unreachable

471:                                              ; No predecessors!
  br label %472

472:                                              ; preds = %471, %469
  %473 = load ptr, ptr %31, align 8, !tbaa !5
  %474 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %473, i32 0, i32 1
  store i32 28, ptr %474, align 4, !tbaa !52
  %475 = load ptr, ptr %31, align 8, !tbaa !5
  %476 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %475, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  store i32 1, ptr %36, align 4, !tbaa !9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %476, ptr noundef nonnull align 4 dereferenceable(4) %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  %477 = load ptr, ptr %31, align 8, !tbaa !5
  %478 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %477, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #9
  store i8 1, ptr %37, align 1, !tbaa !42
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %478, ptr noundef nonnull align 1 dereferenceable(1) %37) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  br label %479

479:                                              ; preds = %472, %453
  br label %480

480:                                              ; preds = %479, %448
  br label %481

481:                                              ; preds = %480, %442
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  br label %482

482:                                              ; preds = %481, %395
  br label %483

483:                                              ; preds = %482, %394
  %484 = load ptr, ptr %5, align 8, !tbaa !5
  %485 = load i32, ptr %6, align 4, !tbaa !9
  %486 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %38, ptr noundef nonnull align 8 dereferenceable(336) %484, i32 noundef %485)
  br i1 %486, label %494, label %487

487:                                              ; preds = %483
  %488 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %488, ptr noundef @.str.150)
          to label %489 unwind label %490

489:                                              ; preds = %487
  call void @__cxa_throw(ptr %488, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #10
  unreachable

490:                                              ; preds = %487
  %491 = landingpad { ptr, i32 }
          cleanup
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %9, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %10, align 4
  call void @__cxa_free_exception(ptr %488) #9
  br label %498

494:                                              ; preds = %483
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  store i32 0, ptr %11, align 4
  br label %495

495:                                              ; preds = %494, %349, %89
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  %496 = load i32, ptr %11, align 4
  switch i32 %496, label %505 [
    i32 0, label %497
    i32 1, label %497
  ]

497:                                              ; preds = %495, %495, %42
  ret void

498:                                              ; preds = %490, %375
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %499

499:                                              ; preds = %498, %340, %336, %233, %73
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  br label %500

500:                                              ; preds = %499
  %501 = load ptr, ptr %9, align 8
  %502 = load i32, ptr %10, align 4
  %503 = insertvalue { ptr, i32 } poison, ptr %501, 0
  %504 = insertvalue { ptr, i32 } %503, i32 %502, 1
  resume { ptr, i32 } %504

505:                                              ; preds = %495
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #2 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler32type_struct_member_matrix_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482), i8 noundef zeroext) #2 align 2

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

declare void @_ZN11spirv_cross8Compiler32unset_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef, i32 noundef) #5

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { noreturn }
attributes #11 = { noreturn 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 = !{!"int", !7, i64 0}
!11 = !{!12, !24, i64 124}
!12 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !13, i64 0, !15, i64 12, !16, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !17, i64 32, !21, i64 88, !10, i64 120, !24, i64 124, !24, i64 125, !25, i64 128, !26, i64 136, !17, i64 192, !29, i64 248, !30, i64 272, !30, i64 276, !34, i64 280}
!13 = !{!"_ZTSN11spirv_cross8IVariantE", !14, i64 8}
!14 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!15 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!16 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!17 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !18, i64 0, !19, i64 16, !20, i64 24}
!18 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !19, i64 8}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!21 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !22, i64 0, !19, i64 16, !23, i64 24}
!22 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !19, i64 8}
!23 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!24 = !{!"bool", !7, i64 0}
!25 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !27, i64 0, !19, i64 16, !28, i64 24}
!27 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !19, i64 8}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !30, i64 0, !31, i64 4, !24, i64 8, !24, i64 9, !24, i64 10, !10, i64 12, !32, i64 16, !33, i64 20}
!30 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!31 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!32 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!33 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!34 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !35, i64 0}
!35 = !{!"_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, !19, i64 8, !36, i64 16, !19, i64 24, !37, i64 32, !6, i64 48}
!36 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!37 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !38, i64 0, !19, i64 8}
!38 = !{!"float", !7, i64 0}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = !{!12, !25, i64 128}
!42 = !{!24, !24, i64 0}
!43 = !{!12, !16, i64 16}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}
!46 = !{!12, !10, i64 20}
!47 = !{!12, !10, i64 24}
!48 = !{i64 0, i64 4, !9}
!49 = !{!12, !10, i64 120}
!50 = !{!12, !24, i64 125}
!51 = !{!12, !10, i64 28}
!52 = !{!12, !15, i64 12}


; 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.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = 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 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.145 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.146 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.147 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.148 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.149 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.150 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.151 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.152 = external hidden unnamed_addr constant [19 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL31ensure_member_packing_rules_mslERNS_8SPIRTypeEj = external hidden unnamed_addr constant [85 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #5 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 #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #6 align 2

; 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4

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

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

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #4

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef) local_unnamed_addr #4

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

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

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

declare noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL31ensure_member_packing_rules_mslERNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1, i32 noundef %2) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca %"struct.spirv_cross::SPIRType", align 8
  %7 = alloca %"class.spirv_cross::TypedID.414", align 4
  %8 = alloca %"class.spirv_cross::TypedID.413", align 4
  %9 = alloca %"struct.spirv_cross::SPIRType", align 8
  %10 = alloca %"class.spirv_cross::TypedID.414", align 4
  %11 = alloca i32, align 4
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1, i32 noundef %2)
  br i1 %15, label %239, label %16

16:                                               ; preds = %3
  %17 = getelementptr inbounds i8, ptr %1, i64 136
  %18 = zext i32 %2 to i64
  %19 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %17, i64 noundef %18) #8
  %20 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %19)
  %21 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %20)
  %22 = getelementptr inbounds i8, ptr %21, i64 124
  %23 = load i8, ptr %22, align 4, !tbaa !5, !range !37, !noundef !38
  %24 = trunc nuw i8 %23 to i1
  %25 = getelementptr inbounds i8, ptr %21, i64 128
  %26 = load i32, ptr %25, align 8
  %27 = icmp eq i32 %26, 5349
  %28 = select i1 %24, i1 %27, i1 false
  %29 = getelementptr inbounds i8, ptr %21, i64 16
  %30 = load i32, ptr %29, align 8, !tbaa !39
  %31 = icmp ne i32 %30, 15
  %brmerge = select i1 %31, i1 true, i1 %28
  br i1 %brmerge, label %37, label %32

32:                                               ; preds = %16
  %33 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef nonnull @.str.145)
          to label %34 unwind label %35

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

35:                                               ; preds = %32
  %36 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %33) #8
  br label %240

37:                                               ; preds = %16
  %38 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_scalarERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %1)
  br i1 %38, label %42, label %39

39:                                               ; preds = %37
  %40 = getelementptr inbounds i8, ptr %1, i64 8
  %41 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  tail call void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %41, i32 noundef %2, i32 noundef 2, i32 noundef 0)
  br label %42

42:                                               ; preds = %39, %37
  %43 = tail call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1, i32 noundef %2)
  br i1 %43, label %239, label %44

44:                                               ; preds = %42
  %45 = getelementptr inbounds i8, ptr %21, i64 32
  %46 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %45) #8
  br i1 %46, label %112, label %47

47:                                               ; preds = %44
  %48 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %21)
  br i1 %48, label %112, label %49

49:                                               ; preds = %47
  %50 = tail call noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %1, i32 noundef %2)
  %51 = tail call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %45) #8
  %52 = trunc i64 %51 to i32
  %53 = add i32 %52, -1
  %.not133 = icmp eq i32 %53, 0
  br i1 %.not133, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %49
  %.0114.lcssa = phi i32 [ %50, %49 ], [ %62, %.lr.ph ]
  %54 = getelementptr inbounds i8, ptr %21, i64 20
  %55 = load i32, ptr %54, align 4
  %56 = lshr i32 %55, 3
  %57 = select i1 %28, i32 8, i32 %56
  %58 = udiv i32 %.0114.lcssa, %57
  switch i32 %58, label %69 [
    i32 3, label %64
    i32 8, label %74
    i32 0, label %82
    i32 1, label %82
    i32 2, label %82
    i32 4, label %82
  ]

.lr.ph:                                           ; preds = %49, %.lr.ph
  %.0114132 = phi i32 [ %62, %.lr.ph ], [ %50, %49 ]
  %.0115131 = phi i32 [ %63, %.lr.ph ], [ 0, %49 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #8
  %59 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21to_array_size_literalERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %21, i32 noundef %.0115131)
  store i32 %59, ptr %4, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #8
  store i32 1, ptr %5, align 4, !tbaa !40
  %60 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %61 = load i32, ptr %60, align 4, !tbaa !40
  %62 = udiv i32 %.0114132, %61
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  %63 = add nuw i32 %.0115131, 1
  %exitcond.not = icmp eq i32 %63, %53
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !41

64:                                               ; preds = %._crit_edge
  %65 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %65, ptr noundef nonnull @.str.146)
          to label %66 unwind label %67

66:                                               ; preds = %64
  call void @__cxa_throw(ptr nonnull %65, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

67:                                               ; preds = %64
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %65) #8
  br label %240

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

71:                                               ; preds = %69
  call void @__cxa_throw(ptr nonnull %70, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

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

74:                                               ; preds = %._crit_edge
  %75 = icmp eq i32 %55, 16
  br i1 %75, label %76, label %77

76:                                               ; preds = %74
  call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i8 noundef zeroext 71)
  br label %82

77:                                               ; preds = %74
  %78 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %78, ptr noundef nonnull @.str.148)
          to label %79 unwind label %80

79:                                               ; preds = %77
  call void @__cxa_throw(ptr nonnull %78, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

80:                                               ; preds = %77
  %81 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %78) #8
  br label %240

82:                                               ; preds = %._crit_edge, %._crit_edge, %._crit_edge, %._crit_edge, %76
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %6) #8
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %6, ptr noundef nonnull align 8 dereferenceable(336) %21)
  %83 = getelementptr inbounds i8, ptr %6, i64 24
  store i32 %58, ptr %83, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %7, i32 noundef 0)
  %84 = getelementptr inbounds i8, ptr %6, i64 276
  %85 = load i32, ptr %7, align 4, !tbaa !40
  store i32 %85, ptr %84, align 4, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #8
  br i1 %28, label %86, label %96

86:                                               ; preds = %82
  %87 = getelementptr inbounds i8, ptr %6, i64 20
  store i32 64, ptr %87, align 4, !tbaa !44
  %88 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef 64)
          to label %89 unwind label %94

89:                                               ; preds = %86
  %90 = getelementptr inbounds i8, ptr %6, i64 16
  store i32 %88, ptr %90, align 8, !tbaa !39
  %91 = getelementptr inbounds i8, ptr %6, i64 124
  store i8 0, ptr %91, align 4, !tbaa !5
  %92 = getelementptr inbounds i8, ptr %6, i64 120
  store i32 0, ptr %92, align 8, !tbaa !45
  %93 = getelementptr inbounds i8, ptr %6, i64 125
  store i8 0, ptr %93, align 1, !tbaa !46
  br label %96

94:                                               ; preds = %86
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %111

96:                                               ; preds = %89, %82
  %97 = getelementptr inbounds i8, ptr %0, i64 8
  %98 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %97, i32 noundef 1)
          to label %99 unwind label %109

99:                                               ; preds = %96
  %100 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %98, ptr noundef nonnull align 8 dereferenceable(336) %6)
          to label %101 unwind label %109

101:                                              ; preds = %99
  %102 = getelementptr inbounds i8, ptr %1, i64 8
  %103 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %102)
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %103, i32 noundef %2, i32 noundef 1, i32 noundef %98)
          to label %104 unwind label %109

104:                                              ; preds = %101
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef %98)
  %105 = load i32, ptr %8, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %105, i32 noundef 6, i32 noundef %.0114.lcssa)
          to label %106 unwind label %109

106:                                              ; preds = %104
  %107 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %102)
  invoke void @_ZN11spirv_cross8Compiler32unset_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %107, i32 noundef %2, i32 noundef 2)
          to label %108 unwind label %109

108:                                              ; preds = %106
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %6) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %6) #8
  br label %165

109:                                              ; preds = %106, %104, %101, %99, %96
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %111

111:                                              ; preds = %109, %94
  %.pn = phi { ptr, i32 } [ %110, %109 ], [ %95, %94 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %6) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %6) #8
  br label %240

112:                                              ; preds = %47, %44
  %113 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %21)
  br i1 %113, label %114, label %160

114:                                              ; preds = %112
  %115 = tail call noundef i32 @_ZNK11spirv_cross8Compiler32type_struct_member_matrix_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %1, i32 noundef %2)
  %116 = getelementptr inbounds i8, ptr %21, i64 20
  %117 = load i32, ptr %116, align 4, !tbaa !44
  %118 = lshr i32 %117, 3
  %119 = udiv i32 %115, %118
  switch i32 %119, label %125 [
    i32 3, label %120
    i32 8, label %130
    i32 0, label %138
    i32 1, label %138
    i32 2, label %138
    i32 4, label %138
  ]

120:                                              ; preds = %114
  %121 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %121, ptr noundef nonnull @.str.146)
          to label %122 unwind label %123

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

123:                                              ; preds = %120
  %124 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %121) #8
  br label %240

125:                                              ; preds = %114
  %126 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %126, ptr noundef nonnull @.str.147)
          to label %127 unwind label %128

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

128:                                              ; preds = %125
  %129 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %126) #8
  br label %240

130:                                              ; preds = %114
  %131 = load i32, ptr %29, align 8, !tbaa !39
  %.not = icmp eq i32 %131, 12
  br i1 %.not, label %137, label %132

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

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

135:                                              ; preds = %132
  %136 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %133) #8
  br label %240

137:                                              ; preds = %130
  tail call void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482) %0, i8 noundef zeroext 71)
  br label %138

138:                                              ; preds = %114, %114, %114, %114, %137
  %139 = getelementptr inbounds i8, ptr %1, i64 8
  %140 = tail call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %139)
  %141 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %140, i32 noundef %2, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %9) #8
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %9, ptr noundef nonnull align 8 dereferenceable(336) %21)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %10, i32 noundef 0)
  %142 = getelementptr inbounds i8, ptr %9, i64 276
  %143 = load i32, ptr %10, align 4, !tbaa !40
  store i32 %143, ptr %142, align 4, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  br i1 %141, label %144, label %146

144:                                              ; preds = %138
  %145 = getelementptr inbounds i8, ptr %9, i64 28
  store i32 %119, ptr %145, align 4, !tbaa !47
  br label %148

146:                                              ; preds = %138
  %147 = getelementptr inbounds i8, ptr %9, i64 24
  store i32 %119, ptr %147, align 8, !tbaa !43
  br label %148

148:                                              ; preds = %146, %144
  %149 = getelementptr inbounds i8, ptr %0, i64 8
  %150 = invoke noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %149, i32 noundef 1)
          to label %151 unwind label %158

151:                                              ; preds = %148
  %152 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3setINS_8SPIRTypeEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %150, ptr noundef nonnull align 8 dereferenceable(336) %9)
          to label %153 unwind label %158

153:                                              ; preds = %151
  %154 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %139)
  invoke void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %154, i32 noundef %2, i32 noundef 1, i32 noundef %150)
          to label %155 unwind label %158

155:                                              ; preds = %153
  %156 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %139)
  invoke void @_ZN11spirv_cross8Compiler32unset_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %156, i32 noundef %2, i32 noundef 2)
          to label %157 unwind label %158

157:                                              ; preds = %155
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %9) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %9) #8
  br label %165

158:                                              ; preds = %155, %153, %151, %148
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %9) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %9) #8
  br label %240

160:                                              ; preds = %112
  %161 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %161, ptr noundef nonnull @.str.150)
          to label %162 unwind label %163

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

163:                                              ; preds = %160
  %164 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %161) #8
  br label %240

165:                                              ; preds = %157, %108
  %166 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1, i32 noundef %2)
  br i1 %166, label %239, label %167

167:                                              ; preds = %165
  %168 = getelementptr inbounds i8, ptr %1, i64 8
  %169 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %168)
  %170 = call noundef i32 @_ZNK11spirv_cross8Compiler30get_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %169, i32 noundef %2, i32 noundef 1)
  %171 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %170)
  %172 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %171)
  br i1 %172, label %173, label %195

173:                                              ; preds = %167
  %174 = getelementptr inbounds i8, ptr %171, i64 32
  %175 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %174) #8
  %176 = load i32, ptr %175, align 4, !tbaa !40
  %177 = icmp ugt i32 %176, 1
  br i1 %177, label %178, label %192

178:                                              ; preds = %173
  %179 = getelementptr inbounds i8, ptr %171, i64 88
  %180 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIbE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %179) #8
  %181 = load i8, ptr %180, align 1, !tbaa !48, !range !37, !noundef !38
  %182 = trunc nuw i8 %181 to i1
  br i1 %182, label %188, label %183

183:                                              ; preds = %178
  %184 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %184, ptr noundef nonnull @.str.151)
          to label %185 unwind label %186

185:                                              ; preds = %183
  call void @__cxa_throw(ptr nonnull %184, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

186:                                              ; preds = %183
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %184) #8
  br label %240

188:                                              ; preds = %178
  %189 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjE4backEv(ptr noundef nonnull align 8 dereferenceable(16) %174) #8
  %190 = load i32, ptr %189, align 4, !tbaa !40
  %191 = add i32 %190, -1
  store i32 %191, ptr %189, align 4, !tbaa !40
  br label %232

192:                                              ; preds = %173
  %193 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %168)
  call void @_ZN11spirv_cross8Compiler32unset_extended_member_decorationEjjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %193, i32 noundef %2, i32 noundef 1)
  %194 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %168)
  call void @_ZN11spirv_cross8Compiler30set_extended_member_decorationEjjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %194, i32 noundef %2, i32 noundef 2, i32 noundef 0)
  br label %232

195:                                              ; preds = %167
  %196 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %171)
  br i1 %196, label %197, label %232

197:                                              ; preds = %195
  %198 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %168)
  %199 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler21has_member_decorationENS_7TypedIDILNS_5TypesE1EEEjN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %198, i32 noundef %2, i32 noundef 4)
  br i1 %199, label %215, label %200

200:                                              ; preds = %197
  %201 = getelementptr inbounds i8, ptr %171, i64 28
  %202 = load i32, ptr %201, align 4, !tbaa !47
  %203 = icmp ugt i32 %202, 2
  br i1 %203, label %204, label %206

204:                                              ; preds = %200
  %205 = add i32 %202, -1
  store i32 %205, ptr %201, align 4, !tbaa !47
  br label %232

206:                                              ; preds = %200
  %207 = icmp eq i32 %202, 2
  br i1 %207, label %208, label %232

208:                                              ; preds = %206
  store i32 1, ptr %201, align 4, !tbaa !47
  %209 = getelementptr inbounds i8, ptr %171, i64 32
  %210 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %209) #8
  br i1 %210, label %212, label %211

211:                                              ; preds = %208
  call void @__assert_fail(ptr noundef nonnull @.str.152, ptr noundef nonnull @.str.25, i32 noundef 5155, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL31ensure_member_packing_rules_mslERNS_8SPIRTypeEj) #10
  unreachable

212:                                              ; preds = %208
  %213 = getelementptr inbounds i8, ptr %171, i64 12
  store i32 28, ptr %213, align 4, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  store i32 1, ptr %11, align 4, !tbaa !40
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %209, ptr noundef nonnull align 4 dereferenceable(4) %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  %214 = getelementptr inbounds i8, ptr %171, i64 88
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #8
  store i8 1, ptr %12, align 1, !tbaa !48
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %214, ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  br label %232

215:                                              ; preds = %197
  %216 = getelementptr inbounds i8, ptr %171, i64 24
  %217 = load i32, ptr %216, align 8, !tbaa !43
  %218 = icmp ugt i32 %217, 2
  br i1 %218, label %219, label %221

219:                                              ; preds = %215
  %220 = add i32 %217, -1
  store i32 %220, ptr %216, align 8, !tbaa !43
  br label %232

221:                                              ; preds = %215
  %222 = icmp eq i32 %217, 2
  br i1 %222, label %223, label %232

223:                                              ; preds = %221
  %224 = getelementptr inbounds i8, ptr %171, i64 28
  %225 = load i32, ptr %224, align 4, !tbaa !47
  store i32 %225, ptr %216, align 8, !tbaa !43
  store i32 1, ptr %224, align 4, !tbaa !47
  %226 = getelementptr inbounds i8, ptr %171, i64 32
  %227 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %226) #8
  br i1 %227, label %229, label %228

228:                                              ; preds = %223
  call void @__assert_fail(ptr noundef nonnull @.str.152, ptr noundef nonnull @.str.25, i32 noundef 5172, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL31ensure_member_packing_rules_mslERNS_8SPIRTypeEj) #10
  unreachable

229:                                              ; preds = %223
  %230 = getelementptr inbounds i8, ptr %171, i64 12
  store i32 28, ptr %230, align 4, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #8
  store i32 1, ptr %13, align 4, !tbaa !40
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %226, ptr noundef nonnull align 4 dereferenceable(4) %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #8
  %231 = getelementptr inbounds i8, ptr %171, i64 88
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #8
  store i8 1, ptr %14, align 1, !tbaa !48
  call void @_ZN11spirv_cross11SmallVectorIbLm8EE9push_backEOb(ptr noundef nonnull align 8 dereferenceable(32) %231, ptr noundef nonnull align 1 dereferenceable(1) %14) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  br label %232

232:                                              ; preds = %206, %212, %204, %221, %229, %219, %195, %188, %192
  %233 = call noundef zeroext i1 @_ZNK11spirv_cross11CompilerMSL33validate_member_packing_rules_mslERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %1, i32 noundef %2)
  br i1 %233, label %239, label %234

234:                                              ; preds = %232
  %235 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %235, ptr noundef nonnull @.str.150)
          to label %236 unwind label %237

236:                                              ; preds = %234
  call void @__cxa_throw(ptr nonnull %235, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

237:                                              ; preds = %234
  %238 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %235) #8
  br label %240

239:                                              ; preds = %42, %165, %232, %3
  ret void

240:                                              ; preds = %186, %237, %123, %128, %135, %158, %67, %72, %80, %111, %163, %35
  %.pn127.pn = phi { ptr, i32 } [ %164, %163 ], [ %36, %35 ], [ %68, %67 ], [ %73, %72 ], [ %.pn, %111 ], [ %81, %80 ], [ %124, %123 ], [ %129, %128 ], [ %136, %135 ], [ %159, %158 ], [ %238, %237 ], [ %187, %186 ]
  resume { ptr, i32 } %.pn127.pn
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL26add_spv_func_and_recompileENS0_11SPVFuncImplE(ptr noundef nonnull align 8 dereferenceable(12482), i8 noundef zeroext) local_unnamed_addr #1 align 2

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { noreturn }
attributes #10 = { noreturn 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, !22, i64 124}
!6 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !7, i64 0, !12, i64 12, !13, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !14, i64 32, !19, i64 88, !9, i64 120, !22, i64 124, !22, i64 125, !23, i64 128, !24, i64 136, !14, i64 192, !27, i64 248, !28, i64 272, !28, i64 276, !32, i64 280}
!7 = !{!"_ZTSN11spirv_cross8IVariantE", !8, i64 8}
!8 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSN3spv2OpE", !10, i64 0}
!13 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !10, i64 0}
!14 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !15, i64 0, !17, i64 16, !18, i64 24}
!15 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !16, i64 0, !17, i64 8}
!16 = !{!"any pointer", !10, i64 0}
!17 = !{!"long", !10, i64 0}
!18 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !10, i64 0}
!19 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !20, i64 0, !17, i64 16, !21, i64 24}
!20 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !16, i64 0, !17, i64 8}
!21 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !10, i64 0}
!22 = !{!"bool", !10, i64 0}
!23 = !{!"_ZTSN3spv12StorageClassE", !10, i64 0}
!24 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !25, i64 0, !17, i64 16, !26, i64 24}
!25 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !16, i64 0, !17, i64 8}
!26 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !10, i64 0}
!27 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !28, i64 0, !29, i64 4, !22, i64 8, !22, i64 9, !22, i64 10, !9, i64 12, !30, i64 16, !31, i64 20}
!28 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !9, i64 0}
!29 = !{!"_ZTSN3spv3DimE", !10, i64 0}
!30 = !{!"_ZTSN3spv11ImageFormatE", !10, i64 0}
!31 = !{!"_ZTSN3spv15AccessQualifierE", !10, i64 0}
!32 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !33, i64 0}
!33 = !{!"_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", !16, i64 0, !17, i64 8, !34, i64 16, !17, i64 24, !35, i64 32, !16, i64 48}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !16, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !36, i64 0, !17, i64 8}
!36 = !{!"float", !10, i64 0}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!6, !13, i64 16}
!40 = !{!9, !9, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = !{!6, !9, i64 24}
!44 = !{!6, !9, i64 20}
!45 = !{!6, !9, i64 120}
!46 = !{!6, !22, i64 125}
!47 = !{!6, !9, i64 28}
!48 = !{!22, !22, i64 0}
!49 = !{!6, !12, i64 12}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass