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

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

%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::pair.391" = type <{ %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 x i8] }>
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = 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.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = 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 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1102 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1362 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1363 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1372 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.1373 = external hidden unnamed_addr constant [239 x i8], align 1
@.str.1374 = external hidden unnamed_addr constant [219 x i8], align 1
@.str.1375 = external hidden unnamed_addr constant [134 x i8], align 1

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #1 align 2

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

declare void @_ZNK11spirv_cross8Compiler30combined_decoration_for_memberERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.spirv_cross::Bitset") align 8, ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #7

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler25type_struct_member_offsetERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #7

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

declare noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #7

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #7

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #7

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL29flattened_access_chain_offsetB5cxx11ERKNS_8SPIRTypeEPKjjjjPbPjS7_b(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.391") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, i1 noundef zeroext %10) #1 align 2 personality ptr @__gxx_personality_v0 {
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca i8, align 1
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %"class.spirv_cross::TypedID.280", align 4
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca %"class.spirv_cross::TypedID.280", align 4
  %43 = alloca ptr, align 8
  %44 = alloca %"class.spirv_cross::Bitset", align 8
  %45 = alloca ptr, align 8
  %46 = alloca i32, align 4
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca i32, align 4
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca i32, align 4
  store ptr %0, ptr %12, align 8
  store ptr %1, ptr %13, align 8, !tbaa !5
  store ptr %2, ptr %14, align 8, !tbaa !5
  store ptr %3, ptr %15, align 8, !tbaa !5
  store i32 %4, ptr %16, align 4, !tbaa !9
  store i32 %5, ptr %17, align 4, !tbaa !9
  store i32 %6, ptr %18, align 4, !tbaa !9
  store ptr %7, ptr %19, align 8, !tbaa !5
  store ptr %8, ptr %20, align 8, !tbaa !5
  store ptr %9, ptr %21, align 8, !tbaa !5
  %55 = zext i1 %10 to i8
  store i8 %55, ptr %22, align 1, !tbaa !11
  %56 = load ptr, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %57 = load ptr, ptr %14, align 8, !tbaa !5
  %58 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %57)
  store ptr %58, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #8
  %59 = load ptr, ptr %19, align 8, !tbaa !5
  %60 = icmp ne ptr %59, null
  br i1 %60, label %61, label %65

61:                                               ; preds = %11
  %62 = load ptr, ptr %19, align 8, !tbaa !5
  %63 = load i8, ptr %62, align 1, !tbaa !11, !range !13, !noundef !14
  %64 = trunc i8 %63 to i1
  br label %66

65:                                               ; preds = %11
  br label %66

66:                                               ; preds = %65, %61
  %67 = phi i1 [ %64, %61 ], [ false, %65 ]
  %68 = zext i1 %67 to i8
  store i8 %68, ptr %25, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  %69 = load ptr, ptr %20, align 8, !tbaa !5
  %70 = icmp ne ptr %69, null
  br i1 %70, label %71, label %74

71:                                               ; preds = %66
  %72 = load ptr, ptr %20, align 8, !tbaa !5
  %73 = load i32, ptr %72, align 4, !tbaa !9
  br label %75

74:                                               ; preds = %66
  br label %75

75:                                               ; preds = %74, %71
  %76 = phi i32 [ %73, %71 ], [ 0, %74 ]
  store i32 %76, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %77 = load ptr, ptr %21, align 8, !tbaa !5
  %78 = icmp ne ptr %77, null
  br i1 %78, label %79, label %82

79:                                               ; preds = %75
  %80 = load ptr, ptr %21, align 8, !tbaa !5
  %81 = load i32, ptr %80, align 4, !tbaa !9
  br label %83

82:                                               ; preds = %75
  br label %83

83:                                               ; preds = %82, %79
  %84 = phi i32 [ %81, %79 ], [ 0, %82 ]
  store i32 %84, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %574, %83
  %86 = load i32, ptr %28, align 4, !tbaa !9
  %87 = load i32, ptr %16, align 4, !tbaa !9
  %88 = icmp ult i32 %86, %87
  br i1 %88, label %90, label %89

89:                                               ; preds = %85
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %578

90:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  %91 = load ptr, ptr %15, align 8, !tbaa !5
  %92 = load i32, ptr %28, align 4, !tbaa !9
  %93 = zext i32 %92 to i64
  %94 = getelementptr inbounds i32, ptr %91, i64 %93
  %95 = load i32, ptr %94, align 4, !tbaa !9
  store i32 %95, ptr %29, align 4, !tbaa !9
  %96 = load i8, ptr %22, align 1, !tbaa !11, !range !13, !noundef !14
  %97 = trunc i8 %96 to i1
  br i1 %97, label %98, label %186

98:                                               ; preds = %90
  %99 = load i32, ptr %28, align 4, !tbaa !9
  %100 = icmp eq i32 %99, 0
  br i1 %100, label %101, label %186

101:                                              ; preds = %98
  %102 = load ptr, ptr %14, align 8, !tbaa !5
  %103 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %102, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 8 %103, i64 4, i1 false), !tbaa.struct !15
  %104 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %30, i32 0, i32 0
  %105 = load i32, ptr %104, align 4
  %106 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 %105, i32 noundef 6)
          to label %107 unwind label %113

107:                                              ; preds = %101
  store i32 %106, ptr %27, align 4, !tbaa !9
  %108 = load i32, ptr %27, align 4, !tbaa !9
  %109 = icmp ne i32 %108, 0
  br i1 %109, label %121, label %110

110:                                              ; preds = %107
  %111 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %111, ptr noundef @.str.1372)
          to label %112 unwind label %117

112:                                              ; preds = %110
  invoke void @__cxa_throw(ptr %111, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %610 unwind label %113

113:                                              ; preds = %564, %299, %294, %282, %112, %101
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %31, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %32, align 4
  br label %577

117:                                              ; preds = %110
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %31, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %32, align 4
  call void @__cxa_free_exception(ptr %111) #8
  br label %577

121:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %122 = load i32, ptr %29, align 4, !tbaa !9
  %123 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %122)
          to label %124 unwind label %135

124:                                              ; preds = %121
  store ptr %123, ptr %33, align 8, !tbaa !5
  %125 = load ptr, ptr %33, align 8, !tbaa !5
  %126 = icmp ne ptr %125, null
  br i1 %126, label %127, label %139

127:                                              ; preds = %124
  %128 = load ptr, ptr %33, align 8, !tbaa !5
  %129 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %128, i32 noundef 0, i32 noundef 0)
          to label %130 unwind label %135

130:                                              ; preds = %127
  %131 = load i32, ptr %27, align 4, !tbaa !9
  %132 = mul i32 %129, %131
  %133 = load i32, ptr %17, align 4, !tbaa !9
  %134 = add i32 %133, %132
  store i32 %134, ptr %17, align 4, !tbaa !9
  br label %184

135:                                              ; preds = %163, %155, %146, %127, %121
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %31, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %32, align 4
  br label %185

139:                                              ; preds = %124
  %140 = load i32, ptr %27, align 4, !tbaa !9
  %141 = load i32, ptr %18, align 4, !tbaa !9
  %142 = urem i32 %140, %141
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %144, label %151

144:                                              ; preds = %139
  %145 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %145, ptr noundef @.str.1373)
          to label %146 unwind label %147

146:                                              ; preds = %144
  invoke void @__cxa_throw(ptr %145, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %610 unwind label %135

147:                                              ; preds = %144
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %31, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %32, align 4
  call void @__cxa_free_exception(ptr %145) #8
  br label %185

151:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #8
  %152 = load i32, ptr %29, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %56, i32 noundef %152, i1 noundef zeroext true)
          to label %153 unwind label %166

153:                                              ; preds = %151
  %154 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %155 unwind label %170

155:                                              ; preds = %153
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  %156 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.976)
          to label %157 unwind label %135

157:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %158 = load i32, ptr %27, align 4, !tbaa !9
  %159 = load i32, ptr %18, align 4, !tbaa !9
  %160 = udiv i32 %158, %159
  store i32 %160, ptr %36, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %161 unwind label %175

161:                                              ; preds = %157
  %162 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %163 unwind label %179

163:                                              ; preds = %161
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  %164 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.1102)
          to label %165 unwind label %135

165:                                              ; preds = %163
  br label %184

166:                                              ; preds = %151
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %31, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %32, align 4
  br label %174

170:                                              ; preds = %153
  %171 = landingpad { ptr, i32 }
          cleanup
  %172 = extractvalue { ptr, i32 } %171, 0
  store ptr %172, ptr %31, align 8
  %173 = extractvalue { ptr, i32 } %171, 1
  store i32 %173, ptr %32, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  br label %174

174:                                              ; preds = %170, %166
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  br label %185

175:                                              ; preds = %157
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %31, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %32, align 4
  br label %183

179:                                              ; preds = %161
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %31, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %32, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  br label %183

183:                                              ; preds = %179, %175
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  br label %185

184:                                              ; preds = %165, %130
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %573

185:                                              ; preds = %183, %174, %147, %135
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %577

186:                                              ; preds = %98, %90
  %187 = load ptr, ptr %23, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %187, i32 0, i32 6
  %189 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %188) #8
  br i1 %189, label %277, label %190

190:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %191 = load i32, ptr %29, align 4, !tbaa !9
  %192 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %191)
          to label %193 unwind label %204

193:                                              ; preds = %190
  store ptr %192, ptr %37, align 8, !tbaa !5
  %194 = load ptr, ptr %37, align 8, !tbaa !5
  %195 = icmp ne ptr %194, null
  br i1 %195, label %196, label %208

196:                                              ; preds = %193
  %197 = load ptr, ptr %37, align 8, !tbaa !5
  %198 = invoke noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %197, i32 noundef 0, i32 noundef 0)
          to label %199 unwind label %204

199:                                              ; preds = %196
  %200 = load i32, ptr %27, align 4, !tbaa !9
  %201 = mul i32 %198, %200
  %202 = load i32, ptr %17, align 4, !tbaa !9
  %203 = add i32 %202, %201
  store i32 %203, ptr %17, align 4, !tbaa !9
  br label %253

204:                                              ; preds = %232, %224, %215, %196, %190
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %31, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %32, align 4
  br label %276

208:                                              ; preds = %193
  %209 = load i32, ptr %27, align 4, !tbaa !9
  %210 = load i32, ptr %18, align 4, !tbaa !9
  %211 = urem i32 %209, %210
  %212 = icmp ne i32 %211, 0
  br i1 %212, label %213, label %220

213:                                              ; preds = %208
  %214 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %214, ptr noundef @.str.1373)
          to label %215 unwind label %216

215:                                              ; preds = %213
  invoke void @__cxa_throw(ptr %214, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %610 unwind label %204

216:                                              ; preds = %213
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %31, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %32, align 4
  call void @__cxa_free_exception(ptr %214) #8
  br label %276

220:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #8
  %221 = load i32, ptr %29, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %56, i32 noundef %221, i1 noundef zeroext false)
          to label %222 unwind label %235

222:                                              ; preds = %220
  %223 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %224 unwind label %239

224:                                              ; preds = %222
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  %225 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.976)
          to label %226 unwind label %204

226:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %227 = load i32, ptr %27, align 4, !tbaa !9
  %228 = load i32, ptr %18, align 4, !tbaa !9
  %229 = udiv i32 %227, %228
  store i32 %229, ptr %40, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %230 unwind label %244

230:                                              ; preds = %226
  %231 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %232 unwind label %248

232:                                              ; preds = %230
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  %233 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.1102)
          to label %234 unwind label %204

234:                                              ; preds = %232
  br label %253

235:                                              ; preds = %220
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %31, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %32, align 4
  br label %243

239:                                              ; preds = %222
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %31, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %32, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %243

243:                                              ; preds = %239, %235
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  br label %276

244:                                              ; preds = %226
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %31, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %32, align 4
  br label %252

248:                                              ; preds = %230
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %31, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %32, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %252

252:                                              ; preds = %248, %244
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  br label %276

253:                                              ; preds = %234, %199
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  %254 = load ptr, ptr %23, align 8, !tbaa !5
  %255 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %254, i32 0, i32 16
  %256 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %255)
          to label %257 unwind label %271

257:                                              ; preds = %253
  store i32 %256, ptr %41, align 4, !tbaa !9
  %258 = load i32, ptr %41, align 4, !tbaa !9
  %259 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %258)
          to label %260 unwind label %271

260:                                              ; preds = %257
  store ptr %259, ptr %23, align 8, !tbaa !5
  %261 = load ptr, ptr %23, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %261, i32 0, i32 6
  %263 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %262) #8
  br i1 %263, label %275, label %264

264:                                              ; preds = %260
  %265 = load i32, ptr %41, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef %265)
          to label %266 unwind label %271

266:                                              ; preds = %264
  %267 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %42, i32 0, i32 0
  %268 = load i32, ptr %267, align 4
  %269 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 %268, i32 noundef 6)
          to label %270 unwind label %271

270:                                              ; preds = %266
  store i32 %269, ptr %27, align 4, !tbaa !9
  br label %275

271:                                              ; preds = %266, %264, %257, %253
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %31, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %32, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %276

275:                                              ; preds = %270, %260
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %572

276:                                              ; preds = %271, %252, %243, %216, %204
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %577

277:                                              ; preds = %186
  %278 = load ptr, ptr %23, align 8, !tbaa !5
  %279 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %278, i32 0, i32 2
  %280 = load i32, ptr %279, align 8, !tbaa !16
  %281 = icmp eq i32 %280, 15
  br i1 %281, label %282, label %356

282:                                              ; preds = %277
  %283 = load i32, ptr %29, align 4, !tbaa !9
  %284 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %283)
          to label %285 unwind label %113

285:                                              ; preds = %282
  store i32 %284, ptr %29, align 4, !tbaa !9
  %286 = load i32, ptr %29, align 4, !tbaa !9
  %287 = zext i32 %286 to i64
  %288 = load ptr, ptr %23, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %288, i32 0, i32 12
  %290 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %289) #8
  %291 = icmp uge i64 %287, %290
  br i1 %291, label %292, label %299

292:                                              ; preds = %285
  %293 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %293, ptr noundef @.str.1362)
          to label %294 unwind label %295

294:                                              ; preds = %292
  invoke void @__cxa_throw(ptr %293, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %610 unwind label %113

295:                                              ; preds = %292
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %31, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %32, align 4
  call void @__cxa_free_exception(ptr %293) #8
  br label %577

299:                                              ; preds = %285
  %300 = load ptr, ptr %23, align 8, !tbaa !5
  %301 = load i32, ptr %29, align 4, !tbaa !9
  %302 = invoke noundef i32 @_ZNK11spirv_cross8Compiler25type_struct_member_offsetERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %300, i32 noundef %301)
          to label %303 unwind label %113

303:                                              ; preds = %299
  %304 = load i32, ptr %17, align 4, !tbaa !9
  %305 = add i32 %304, %302
  store i32 %305, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %306 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %306, ptr %43, align 8, !tbaa !5
  %307 = load ptr, ptr %23, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %307, i32 0, i32 12
  %309 = load i32, ptr %29, align 4, !tbaa !9
  %310 = zext i32 %309 to i64
  %311 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %308, i64 noundef %310) #8
  %312 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %311)
          to label %313 unwind label %331

313:                                              ; preds = %303
  %314 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %312)
          to label %315 unwind label %331

315:                                              ; preds = %313
  store ptr %314, ptr %23, align 8, !tbaa !5
  %316 = load ptr, ptr %23, align 8, !tbaa !5
  %317 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %316, i32 0, i32 5
  %318 = load i32, ptr %317, align 4, !tbaa !43
  %319 = icmp ugt i32 %318, 1
  br i1 %319, label %320, label %344

320:                                              ; preds = %315
  %321 = load ptr, ptr %43, align 8, !tbaa !5
  %322 = load i32, ptr %29, align 4, !tbaa !9
  %323 = invoke noundef i32 @_ZNK11spirv_cross8Compiler32type_struct_member_matrix_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %321, i32 noundef %322)
          to label %324 unwind label %331

324:                                              ; preds = %320
  store i32 %323, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %44) #8
  %325 = load ptr, ptr %43, align 8, !tbaa !5
  %326 = load i32, ptr %29, align 4, !tbaa !9
  invoke void @_ZNK11spirv_cross8Compiler30combined_decoration_for_memberERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.spirv_cross::Bitset") align 8 %44, ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %325, i32 noundef %326)
          to label %327 unwind label %335

327:                                              ; preds = %324
  %328 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %44, i32 noundef 4)
          to label %329 unwind label %339

329:                                              ; preds = %327
  %330 = zext i1 %328 to i8
  store i8 %330, ptr %25, align 1, !tbaa !11
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %44) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %44) #8
  br label %345

331:                                              ; preds = %349, %320, %313, %303
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %31, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %32, align 4
  br label %355

335:                                              ; preds = %324
  %336 = landingpad { ptr, i32 }
          cleanup
  %337 = extractvalue { ptr, i32 } %336, 0
  store ptr %337, ptr %31, align 8
  %338 = extractvalue { ptr, i32 } %336, 1
  store i32 %338, ptr %32, align 4
  br label %343

339:                                              ; preds = %327
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %31, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %32, align 4
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %44) #8
  br label %343

343:                                              ; preds = %339, %335
  call void @llvm.lifetime.end.p0(i64 64, ptr %44) #8
  br label %355

344:                                              ; preds = %315
  store i8 0, ptr %25, align 1, !tbaa !11
  br label %345

345:                                              ; preds = %344, %329
  %346 = load ptr, ptr %23, align 8, !tbaa !5
  %347 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %346, i32 0, i32 6
  %348 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %347) #8
  br i1 %348, label %354, label %349

349:                                              ; preds = %345
  %350 = load ptr, ptr %43, align 8, !tbaa !5
  %351 = load i32, ptr %29, align 4, !tbaa !9
  %352 = invoke noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %56, ptr noundef nonnull align 8 dereferenceable(336) %350, i32 noundef %351)
          to label %353 unwind label %331

353:                                              ; preds = %349
  store i32 %352, ptr %27, align 4, !tbaa !9
  br label %354

354:                                              ; preds = %353, %345
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %571

355:                                              ; preds = %343, %331
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %577

356:                                              ; preds = %277
  %357 = load ptr, ptr %23, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %357, i32 0, i32 5
  %359 = load i32, ptr %358, align 4, !tbaa !43
  %360 = icmp ugt i32 %359, 1
  br i1 %360, label %361, label %459

361:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %362 = load i32, ptr %29, align 4, !tbaa !9
  %363 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %362)
          to label %364 unwind label %386

364:                                              ; preds = %361
  store ptr %363, ptr %45, align 8, !tbaa !5
  %365 = load ptr, ptr %45, align 8, !tbaa !5
  %366 = icmp ne ptr %365, null
  br i1 %366, label %367, label %390

367:                                              ; preds = %364
  %368 = load i32, ptr %29, align 4, !tbaa !9
  %369 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %368)
          to label %370 unwind label %386

370:                                              ; preds = %367
  store i32 %369, ptr %29, align 4, !tbaa !9
  %371 = load i32, ptr %29, align 4, !tbaa !9
  %372 = load i8, ptr %25, align 1, !tbaa !11, !range !13, !noundef !14
  %373 = trunc i8 %372 to i1
  br i1 %373, label %374, label %379

374:                                              ; preds = %370
  %375 = load ptr, ptr %23, align 8, !tbaa !5
  %376 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %375, i32 0, i32 3
  %377 = load i32, ptr %376, align 4, !tbaa !44
  %378 = udiv i32 %377, 8
  br label %381

379:                                              ; preds = %370
  %380 = load i32, ptr %26, align 4, !tbaa !9
  br label %381

381:                                              ; preds = %379, %374
  %382 = phi i32 [ %378, %374 ], [ %380, %379 ]
  %383 = mul i32 %371, %382
  %384 = load i32, ptr %17, align 4, !tbaa !9
  %385 = add i32 %384, %383
  store i32 %385, ptr %17, align 4, !tbaa !9
  br label %451

386:                                              ; preds = %455, %451, %367, %361
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %31, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %32, align 4
  br label %458

390:                                              ; preds = %364
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  %391 = load i8, ptr %25, align 1, !tbaa !11, !range !13, !noundef !14
  %392 = trunc i8 %391 to i1
  br i1 %392, label %393, label %398

393:                                              ; preds = %390
  %394 = load ptr, ptr %23, align 8, !tbaa !5
  %395 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %394, i32 0, i32 3
  %396 = load i32, ptr %395, align 4, !tbaa !44
  %397 = udiv i32 %396, 8
  br label %400

398:                                              ; preds = %390
  %399 = load i32, ptr %26, align 4, !tbaa !9
  br label %400

400:                                              ; preds = %398, %393
  %401 = phi i32 [ %397, %393 ], [ %399, %398 ]
  store i32 %401, ptr %46, align 4, !tbaa !9
  %402 = load i32, ptr %46, align 4, !tbaa !9
  %403 = load i32, ptr %18, align 4, !tbaa !9
  %404 = urem i32 %402, %403
  %405 = icmp ne i32 %404, 0
  br i1 %405, label %406, label %417

406:                                              ; preds = %400
  %407 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %407, ptr noundef @.str.1374)
          to label %408 unwind label %409

408:                                              ; preds = %406
  invoke void @__cxa_throw(ptr %407, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %610 unwind label %413

409:                                              ; preds = %406
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %31, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %32, align 4
  call void @__cxa_free_exception(ptr %407) #8
  br label %450

413:                                              ; preds = %429, %421, %408
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %31, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %32, align 4
  br label %450

417:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  %418 = load i32, ptr %29, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %56, i32 noundef %418, i1 noundef zeroext false)
          to label %419 unwind label %432

419:                                              ; preds = %417
  %420 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %421 unwind label %436

421:                                              ; preds = %419
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  %422 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.976)
          to label %423 unwind label %413

423:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  %424 = load i32, ptr %46, align 4, !tbaa !9
  %425 = load i32, ptr %18, align 4, !tbaa !9
  %426 = udiv i32 %424, %425
  store i32 %426, ptr %49, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 4 dereferenceable(4) %49)
          to label %427 unwind label %441

427:                                              ; preds = %423
  %428 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %429 unwind label %445

429:                                              ; preds = %427
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  %430 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.1102)
          to label %431 unwind label %413

431:                                              ; preds = %429
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %451

432:                                              ; preds = %417
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %31, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %32, align 4
  br label %440

436:                                              ; preds = %419
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %31, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %32, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %440

440:                                              ; preds = %436, %432
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  br label %450

441:                                              ; preds = %423
  %442 = landingpad { ptr, i32 }
          cleanup
  %443 = extractvalue { ptr, i32 } %442, 0
  store ptr %443, ptr %31, align 8
  %444 = extractvalue { ptr, i32 } %442, 1
  store i32 %444, ptr %32, align 4
  br label %449

445:                                              ; preds = %427
  %446 = landingpad { ptr, i32 }
          cleanup
  %447 = extractvalue { ptr, i32 } %446, 0
  store ptr %447, ptr %31, align 8
  %448 = extractvalue { ptr, i32 } %446, 1
  store i32 %448, ptr %32, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %449

449:                                              ; preds = %445, %441
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  br label %450

450:                                              ; preds = %449, %440, %413, %409
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %458

451:                                              ; preds = %431, %381
  %452 = load ptr, ptr %23, align 8, !tbaa !5
  %453 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %452, i32 0, i32 16
  %454 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %453)
          to label %455 unwind label %386

455:                                              ; preds = %451
  %456 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %454)
          to label %457 unwind label %386

457:                                              ; preds = %455
  store ptr %456, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %570

458:                                              ; preds = %450, %386
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %577

459:                                              ; preds = %356
  %460 = load ptr, ptr %23, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %460, i32 0, i32 4
  %462 = load i32, ptr %461, align 8, !tbaa !45
  %463 = icmp ugt i32 %462, 1
  br i1 %463, label %464, label %562

464:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  %465 = load i32, ptr %29, align 4, !tbaa !9
  %466 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %465)
          to label %467 unwind label %489

467:                                              ; preds = %464
  store ptr %466, ptr %50, align 8, !tbaa !5
  %468 = load ptr, ptr %50, align 8, !tbaa !5
  %469 = icmp ne ptr %468, null
  br i1 %469, label %470, label %493

470:                                              ; preds = %467
  %471 = load i32, ptr %29, align 4, !tbaa !9
  %472 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %471)
          to label %473 unwind label %489

473:                                              ; preds = %470
  store i32 %472, ptr %29, align 4, !tbaa !9
  %474 = load i32, ptr %29, align 4, !tbaa !9
  %475 = load i8, ptr %25, align 1, !tbaa !11, !range !13, !noundef !14
  %476 = trunc i8 %475 to i1
  br i1 %476, label %477, label %479

477:                                              ; preds = %473
  %478 = load i32, ptr %26, align 4, !tbaa !9
  br label %484

479:                                              ; preds = %473
  %480 = load ptr, ptr %23, align 8, !tbaa !5
  %481 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %480, i32 0, i32 3
  %482 = load i32, ptr %481, align 4, !tbaa !44
  %483 = udiv i32 %482, 8
  br label %484

484:                                              ; preds = %479, %477
  %485 = phi i32 [ %478, %477 ], [ %483, %479 ]
  %486 = mul i32 %474, %485
  %487 = load i32, ptr %17, align 4, !tbaa !9
  %488 = add i32 %487, %486
  store i32 %488, ptr %17, align 4, !tbaa !9
  br label %554

489:                                              ; preds = %558, %554, %470, %464
  %490 = landingpad { ptr, i32 }
          cleanup
  %491 = extractvalue { ptr, i32 } %490, 0
  store ptr %491, ptr %31, align 8
  %492 = extractvalue { ptr, i32 } %490, 1
  store i32 %492, ptr %32, align 4
  br label %561

493:                                              ; preds = %467
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %494 = load i8, ptr %25, align 1, !tbaa !11, !range !13, !noundef !14
  %495 = trunc i8 %494 to i1
  br i1 %495, label %496, label %498

496:                                              ; preds = %493
  %497 = load i32, ptr %26, align 4, !tbaa !9
  br label %503

498:                                              ; preds = %493
  %499 = load ptr, ptr %23, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %499, i32 0, i32 3
  %501 = load i32, ptr %500, align 4, !tbaa !44
  %502 = udiv i32 %501, 8
  br label %503

503:                                              ; preds = %498, %496
  %504 = phi i32 [ %497, %496 ], [ %502, %498 ]
  store i32 %504, ptr %51, align 4, !tbaa !9
  %505 = load i32, ptr %51, align 4, !tbaa !9
  %506 = load i32, ptr %18, align 4, !tbaa !9
  %507 = urem i32 %505, %506
  %508 = icmp ne i32 %507, 0
  br i1 %508, label %509, label %520

509:                                              ; preds = %503
  %510 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %510, ptr noundef @.str.1375)
          to label %511 unwind label %512

511:                                              ; preds = %509
  invoke void @__cxa_throw(ptr %510, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %610 unwind label %516

512:                                              ; preds = %509
  %513 = landingpad { ptr, i32 }
          cleanup
  %514 = extractvalue { ptr, i32 } %513, 0
  store ptr %514, ptr %31, align 8
  %515 = extractvalue { ptr, i32 } %513, 1
  store i32 %515, ptr %32, align 4
  call void @__cxa_free_exception(ptr %510) #8
  br label %553

516:                                              ; preds = %532, %524, %511
  %517 = landingpad { ptr, i32 }
          cleanup
  %518 = extractvalue { ptr, i32 } %517, 0
  store ptr %518, ptr %31, align 8
  %519 = extractvalue { ptr, i32 } %517, 1
  store i32 %519, ptr %32, align 4
  br label %553

520:                                              ; preds = %503
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #8
  %521 = load i32, ptr %29, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(9848) %56, i32 noundef %521, i1 noundef zeroext false)
          to label %522 unwind label %535

522:                                              ; preds = %520
  %523 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %524 unwind label %539

524:                                              ; preds = %522
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #8
  %525 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.976)
          to label %526 unwind label %516

526:                                              ; preds = %524
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  %527 = load i32, ptr %51, align 4, !tbaa !9
  %528 = load i32, ptr %18, align 4, !tbaa !9
  %529 = udiv i32 %527, %528
  store i32 %529, ptr %54, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 4 dereferenceable(4) %54)
          to label %530 unwind label %544

530:                                              ; preds = %526
  %531 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %53)
          to label %532 unwind label %548

532:                                              ; preds = %530
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  %533 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.1102)
          to label %534 unwind label %516

534:                                              ; preds = %532
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %554

535:                                              ; preds = %520
  %536 = landingpad { ptr, i32 }
          cleanup
  %537 = extractvalue { ptr, i32 } %536, 0
  store ptr %537, ptr %31, align 8
  %538 = extractvalue { ptr, i32 } %536, 1
  store i32 %538, ptr %32, align 4
  br label %543

539:                                              ; preds = %522
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %31, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %32, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  br label %543

543:                                              ; preds = %539, %535
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #8
  br label %553

544:                                              ; preds = %526
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %31, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %32, align 4
  br label %552

548:                                              ; preds = %530
  %549 = landingpad { ptr, i32 }
          cleanup
  %550 = extractvalue { ptr, i32 } %549, 0
  store ptr %550, ptr %31, align 8
  %551 = extractvalue { ptr, i32 } %549, 1
  store i32 %551, ptr %32, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  br label %552

552:                                              ; preds = %548, %544
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  br label %553

553:                                              ; preds = %552, %543, %516, %512
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %561

554:                                              ; preds = %534, %484
  %555 = load ptr, ptr %23, align 8, !tbaa !5
  %556 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %555, i32 0, i32 16
  %557 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %556)
          to label %558 unwind label %489

558:                                              ; preds = %554
  %559 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %56, i32 noundef %557)
          to label %560 unwind label %489

560:                                              ; preds = %558
  store ptr %559, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  br label %569

561:                                              ; preds = %553, %489
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  br label %577

562:                                              ; preds = %459
  %563 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %563, ptr noundef @.str.1363)
          to label %564 unwind label %565

564:                                              ; preds = %562
  invoke void @__cxa_throw(ptr %563, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %610 unwind label %113

565:                                              ; preds = %562
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %31, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %32, align 4
  call void @__cxa_free_exception(ptr %563) #8
  br label %577

569:                                              ; preds = %560
  br label %570

570:                                              ; preds = %569, %457
  br label %571

571:                                              ; preds = %570, %354
  br label %572

572:                                              ; preds = %571, %275
  br label %573

573:                                              ; preds = %572, %184
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  br label %574

574:                                              ; preds = %573
  %575 = load i32, ptr %28, align 4, !tbaa !9
  %576 = add i32 %575, 1
  store i32 %576, ptr %28, align 4, !tbaa !9
  br label %85, !llvm.loop !46

577:                                              ; preds = %565, %561, %458, %355, %295, %276, %185, %117, %113
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %604

578:                                              ; preds = %89
  %579 = load ptr, ptr %19, align 8, !tbaa !5
  %580 = icmp ne ptr %579, null
  br i1 %580, label %581, label %586

581:                                              ; preds = %578
  %582 = load i8, ptr %25, align 1, !tbaa !11, !range !13, !noundef !14
  %583 = trunc i8 %582 to i1
  %584 = load ptr, ptr %19, align 8, !tbaa !5
  %585 = zext i1 %583 to i8
  store i8 %585, ptr %584, align 1, !tbaa !11
  br label %586

586:                                              ; preds = %581, %578
  %587 = load ptr, ptr %20, align 8, !tbaa !5
  %588 = icmp ne ptr %587, null
  br i1 %588, label %589, label %592

589:                                              ; preds = %586
  %590 = load i32, ptr %26, align 4, !tbaa !9
  %591 = load ptr, ptr %20, align 8, !tbaa !5
  store i32 %590, ptr %591, align 4, !tbaa !9
  br label %592

592:                                              ; preds = %589, %586
  %593 = load ptr, ptr %21, align 8, !tbaa !5
  %594 = icmp ne ptr %593, null
  br i1 %594, label %595, label %598

595:                                              ; preds = %592
  %596 = load i32, ptr %27, align 4, !tbaa !9
  %597 = load ptr, ptr %21, align 8, !tbaa !5
  store i32 %596, ptr %597, align 4, !tbaa !9
  br label %598

598:                                              ; preds = %595, %592
  invoke void @_ZSt9make_pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS9_INSA_IT0_E4typeEE6__typeEEOSB_OSG_(ptr dead_on_unwind writable sret(%"struct.std::pair.391") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %599 unwind label %600

599:                                              ; preds = %598
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  ret void

600:                                              ; preds = %598
  %601 = landingpad { ptr, i32 }
          cleanup
  %602 = extractvalue { ptr, i32 } %601, 0
  store ptr %602, ptr %31, align 8
  %603 = extractvalue { ptr, i32 } %601, 1
  store i32 %603, ptr %32, align 4
  br label %604

604:                                              ; preds = %600, %577
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %605

605:                                              ; preds = %604
  %606 = load ptr, ptr %31, align 8
  %607 = load i32, ptr %32, align 4
  %608 = insertvalue { ptr, i32 } poison, ptr %606, 0
  %609 = insertvalue { ptr, i32 } %608, i32 %607, 1
  resume { ptr, i32 } %609

610:                                              ; preds = %564, %511, %408, %294, %215, %146, %112
  unreachable
}

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{i64 0, i64 4, !9}
!16 = !{!17, !21, i64 16}
!17 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !18, i64 0, !20, i64 12, !21, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !22, i64 32, !26, i64 88, !10, i64 120, !12, i64 124, !12, i64 125, !29, i64 128, !30, i64 136, !22, i64 192, !33, i64 248, !34, i64 272, !34, i64 276, !38, i64 280}
!18 = !{!"_ZTSN11spirv_cross8IVariantE", !19, i64 8}
!19 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!20 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!21 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!22 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !23, i64 0, !24, i64 16, !25, i64 24}
!23 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !24, i64 8}
!24 = !{!"long", !7, i64 0}
!25 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !27, i64 0, !24, i64 16, !28, i64 24}
!27 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !24, i64 8}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!29 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!30 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !31, i64 0, !24, i64 16, !32, i64 24}
!31 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !24, i64 8}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !34, i64 0, !35, i64 4, !12, i64 8, !12, i64 9, !12, i64 10, !10, i64 12, !36, i64 16, !37, i64 20}
!34 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!35 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!36 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!37 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!38 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !39, i64 0}
!39 = !{!"_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, !24, i64 8, !40, i64 16, !24, i64 24, !41, i64 32, !6, i64 48}
!40 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!41 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !42, i64 0, !24, i64 8}
!42 = !{!"float", !7, i64 0}
!43 = !{!17, !10, i64 28}
!44 = !{!17, !10, i64 20}
!45 = !{!17, !10, i64 24}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}


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

%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::pair.391" = type <{ %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"class.spirv_cross::TypedID.280" = type { i32 }

@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1102 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1362 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1363 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1372 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.1373 = external hidden unnamed_addr constant [239 x i8], align 1
@.str.1374 = external hidden unnamed_addr constant [219 x i8], align 1
@.str.1375 = external hidden unnamed_addr constant [134 x i8], align 1

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK11spirv_cross8Compiler30combined_decoration_for_memberERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.spirv_cross::Bitset") align 8, ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #6

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

; 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 i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(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 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #3 align 2

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

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

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

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #6

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL29flattened_access_chain_offsetB5cxx11ERKNS_8SPIRTypeEPKjjjjPbPjS7_b(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.391") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %2, ptr nocapture noundef readonly %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, i1 noundef zeroext %10) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca i32, align 4
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca i32, align 4
  %20 = alloca %"class.spirv_cross::TypedID.280", align 4
  %21 = alloca %"class.spirv_cross::Bitset", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca i32, align 4
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca i32, align 4
  store i32 %5, ptr %12, align 4, !tbaa !5
  %28 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler16get_pointee_typeERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %2)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  %.not = icmp eq ptr %7, null
  br i1 %.not, label %31, label %29

29:                                               ; preds = %11
  %30 = load i8, ptr %7, align 1, !tbaa !9, !range !11, !noundef !12
  br label %31

31:                                               ; preds = %11, %29
  %32 = phi i8 [ %30, %29 ], [ 0, %11 ]
  %.not139 = icmp eq ptr %8, null
  br i1 %.not139, label %35, label %33

33:                                               ; preds = %31
  %34 = load i32, ptr %8, align 4, !tbaa !5
  br label %35

35:                                               ; preds = %31, %33
  %36 = phi i32 [ %34, %33 ], [ 0, %31 ]
  %.not140 = icmp eq ptr %9, null
  br i1 %.not140, label %39, label %37

37:                                               ; preds = %35
  %38 = load i32, ptr %9, align 4, !tbaa !5
  br label %39

39:                                               ; preds = %35, %37
  %40 = phi i32 [ %38, %37 ], [ 0, %35 ]
  %.not293 = icmp eq i32 %4, 0
  br i1 %.not293, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %39
  %41 = getelementptr inbounds i8, ptr %2, i64 8
  %wide.trip.count = zext i32 %4 to i64
  br label %42

._crit_edge:                                      ; preds = %296, %39
  %.0107.lcssa = phi i32 [ %40, %39 ], [ %.3, %296 ]
  %.0104.lcssa = phi i32 [ %36, %39 ], [ %.2106, %296 ]
  %.0102.lcssa = phi i8 [ %32, %39 ], [ %.2, %296 ]
  br i1 %.not, label %299, label %297

42:                                               ; preds = %.lr.ph, %296
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %296 ]
  %.0290 = phi ptr [ %28, %.lr.ph ], [ %.1, %296 ]
  %.0102289 = phi i8 [ %32, %.lr.ph ], [ %.2, %296 ]
  %.0104288 = phi i32 [ %36, %.lr.ph ], [ %.2106, %296 ]
  %.0107287 = phi i32 [ %40, %.lr.ph ], [ %.3, %296 ]
  %43 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv
  %44 = load i32, ptr %43, align 4, !tbaa !5
  %45 = icmp eq i64 %indvars.iv, 0
  %or.cond = and i1 %45, %10
  br i1 %or.cond, label %46, label %86

46:                                               ; preds = %42
  %.sroa.0.0.copyload = load i32, ptr %41, align 8, !tbaa !5
  %47 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %.sroa.0.0.copyload, i32 noundef 6)
          to label %48 unwind label %.loopexit186

48:                                               ; preds = %46
  %.not167 = icmp eq i32 %47, 0
  br i1 %.not167, label %49, label %54

49:                                               ; preds = %48
  %50 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %50, ptr noundef nonnull @.str.1372)
          to label %.invoke unwind label %52

.invoke:                                          ; preds = %49, %292, %143
  %51 = phi ptr [ %144, %143 ], [ %293, %292 ], [ %50, %49 ]
  invoke void @__cxa_throw(ptr nonnull %51, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %.cont unwind label %.loopexit.split-lp187

.cont:                                            ; preds = %.invoke
  unreachable

.loopexit186:                                     ; preds = %46, %137, %147
  %lpad.loopexit188 = landingpad { ptr, i32 }
          cleanup
  br label %307

.loopexit.split-lp187:                            ; preds = %.invoke
  %lpad.loopexit.split-lp189 = landingpad { ptr, i32 }
          cleanup
  br label %307

52:                                               ; preds = %49
  %53 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %50) #7
  br label %307

54:                                               ; preds = %48
  %55 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %44)
          to label %56 unwind label %.loopexit191

56:                                               ; preds = %54
  %.not168 = icmp eq ptr %55, null
  br i1 %.not168, label %62, label %57

57:                                               ; preds = %56
  %58 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %55, i32 noundef 0, i32 noundef 0)
  %59 = mul i32 %58, %47
  %60 = load i32, ptr %12, align 4, !tbaa !5
  %61 = add i32 %60, %59
  store i32 %61, ptr %12, align 4, !tbaa !5
  br label %296

.loopexit191:                                     ; preds = %54, %73, %77
  %lpad.loopexit193 = landingpad { ptr, i32 }
          cleanup
  br label %307

.loopexit.split-lp192:                            ; preds = %67
  %lpad.loopexit.split-lp194 = landingpad { ptr, i32 }
          cleanup
  br label %307

62:                                               ; preds = %56
  %63 = urem i32 %47, %6
  %64 = udiv i32 %47, %6
  %.not169 = icmp eq i32 %63, 0
  br i1 %.not169, label %70, label %65

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

67:                                               ; preds = %65
  invoke void @__cxa_throw(ptr nonnull %66, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %308 unwind label %.loopexit.split-lp192

68:                                               ; preds = %65
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %66) #7
  br label %307

70:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %44, i1 noundef zeroext true)
          to label %71 unwind label %79

71:                                               ; preds = %70
  %72 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %73 unwind label %81

73:                                               ; preds = %71
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  %74 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.976)
          to label %75 unwind label %.loopexit191

75:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  store i32 %64, ptr %16, align 4, !tbaa !5
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 4 dereferenceable(4) %16)
  %76 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %77 unwind label %84

77:                                               ; preds = %75
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  %78 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.1102)
          to label %296 unwind label %.loopexit191

79:                                               ; preds = %70
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %83

81:                                               ; preds = %71
  %82 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %83

83:                                               ; preds = %81, %79
  %.pn170 = phi { ptr, i32 } [ %82, %81 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  br label %307

84:                                               ; preds = %75
  %85 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %307

86:                                               ; preds = %42
  %87 = getelementptr inbounds i8, ptr %.0290, i64 32
  %88 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %87) #7
  br i1 %88, label %133, label %89

89:                                               ; preds = %86
  %90 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %44)
          to label %91 unwind label %.loopexit

91:                                               ; preds = %89
  %.not141 = icmp eq ptr %90, null
  br i1 %.not141, label %97, label %92

92:                                               ; preds = %91
  %93 = call noundef i32 @_ZNK11spirv_cross12SPIRConstant6scalarEjj(ptr noundef nonnull align 8 dereferenceable(360) %90, i32 noundef 0, i32 noundef 0)
  %94 = mul i32 %93, %.0107287
  %95 = load i32, ptr %12, align 4, !tbaa !5
  %96 = add i32 %95, %94
  store i32 %96, ptr %12, align 4, !tbaa !5
  br label %121

.loopexit:                                        ; preds = %89, %108, %112
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %307

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

97:                                               ; preds = %91
  %98 = urem i32 %.0107287, %6
  %99 = udiv i32 %.0107287, %6
  %.not142 = icmp eq i32 %98, 0
  br i1 %.not142, label %105, label %100

100:                                              ; preds = %97
  %101 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull @.str.1373)
          to label %102 unwind label %103

102:                                              ; preds = %100
  invoke void @__cxa_throw(ptr nonnull %101, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %308 unwind label %.loopexit.split-lp

103:                                              ; preds = %100
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %101) #7
  br label %307

105:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %44, i1 noundef zeroext false)
          to label %106 unwind label %114

106:                                              ; preds = %105
  %107 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %108 unwind label %116

108:                                              ; preds = %106
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  %109 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.976)
          to label %110 unwind label %.loopexit

110:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  store i32 %99, ptr %19, align 4, !tbaa !5
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 4 dereferenceable(4) %19)
  %111 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %112 unwind label %119

112:                                              ; preds = %110
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  %113 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.1102)
          to label %121 unwind label %.loopexit

114:                                              ; preds = %105
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %118

116:                                              ; preds = %106
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %118

118:                                              ; preds = %116, %114
  %.pn = phi { ptr, i32 } [ %117, %116 ], [ %115, %114 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %307

119:                                              ; preds = %110
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %307

121:                                              ; preds = %112, %92
  %122 = getelementptr inbounds i8, ptr %.0290, i64 276
  %123 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %122)
  %124 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %123)
          to label %125 unwind label %131

125:                                              ; preds = %121
  %126 = getelementptr inbounds i8, ptr %124, i64 32
  %127 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %126) #7
  br i1 %127, label %296, label %128

128:                                              ; preds = %125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef %123)
  %129 = load i32, ptr %20, align 4
  %130 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 %129, i32 noundef 6)
          to label %296 unwind label %131

131:                                              ; preds = %128, %121
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %307

133:                                              ; preds = %86
  %134 = getelementptr inbounds i8, ptr %.0290, i64 16
  %135 = load i32, ptr %134, align 8, !tbaa !13
  %136 = icmp eq i32 %135, 15
  br i1 %136, label %137, label %178

137:                                              ; preds = %133
  %138 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %44)
          to label %139 unwind label %.loopexit186

139:                                              ; preds = %137
  %140 = zext i32 %138 to i64
  %141 = getelementptr inbounds i8, ptr %.0290, i64 136
  %142 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %141) #7
  %.not162 = icmp ugt i64 %142, %140
  br i1 %.not162, label %147, label %143

143:                                              ; preds = %139
  %144 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %144, ptr noundef nonnull @.str.1362)
          to label %.invoke unwind label %145

145:                                              ; preds = %143
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %144) #7
  br label %307

147:                                              ; preds = %139
  %148 = invoke noundef i32 @_ZNK11spirv_cross8Compiler25type_struct_member_offsetERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0290, i32 noundef %138)
          to label %149 unwind label %.loopexit186

149:                                              ; preds = %147
  %150 = load i32, ptr %12, align 4, !tbaa !5
  %151 = add i32 %150, %148
  store i32 %151, ptr %12, align 4, !tbaa !5
  %152 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %141, i64 noundef %140) #7
  %153 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %152)
  %154 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %153)
          to label %155 unwind label %166

155:                                              ; preds = %149
  %156 = getelementptr inbounds i8, ptr %154, i64 28
  %157 = load i32, ptr %156, align 4, !tbaa !41
  %158 = icmp ugt i32 %157, 1
  br i1 %158, label %159, label %173

159:                                              ; preds = %155
  %160 = invoke noundef i32 @_ZNK11spirv_cross8Compiler32type_struct_member_matrix_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0290, i32 noundef %138)
          to label %161 unwind label %166

161:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %21) #7
  invoke void @_ZNK11spirv_cross8Compiler30combined_decoration_for_memberERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.spirv_cross::Bitset") align 8 %21, ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0290, i32 noundef %138)
          to label %162 unwind label %168

162:                                              ; preds = %161
  %163 = invoke noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %21, i32 noundef 4)
          to label %164 unwind label %170

164:                                              ; preds = %162
  %165 = zext i1 %163 to i8
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %21) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #7
  br label %173

166:                                              ; preds = %176, %159, %149
  %167 = landingpad { ptr, i32 }
          cleanup
  br label %307

168:                                              ; preds = %161
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %172

170:                                              ; preds = %162
  %171 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN11spirv_cross6BitsetD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %21) #7
  br label %172

172:                                              ; preds = %170, %168
  %.pn163 = phi { ptr, i32 } [ %171, %170 ], [ %169, %168 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #7
  br label %307

173:                                              ; preds = %155, %164
  %.1105 = phi i32 [ %160, %164 ], [ %.0104288, %155 ]
  %.1103 = phi i8 [ %165, %164 ], [ 0, %155 ]
  %174 = getelementptr inbounds i8, ptr %154, i64 32
  %175 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %174) #7
  br i1 %175, label %296, label %176

176:                                              ; preds = %173
  %177 = invoke noundef i32 @_ZNK11spirv_cross8Compiler31type_struct_member_array_strideERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %.0290, i32 noundef %138)
          to label %296 unwind label %166

178:                                              ; preds = %133
  %179 = getelementptr inbounds i8, ptr %.0290, i64 28
  %180 = load i32, ptr %179, align 4, !tbaa !41
  %181 = icmp ugt i32 %180, 1
  br i1 %181, label %182, label %235

182:                                              ; preds = %178
  %183 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %44)
          to label %184 unwind label %198

184:                                              ; preds = %182
  %.not154 = icmp eq ptr %183, null
  br i1 %.not154, label %200, label %185

185:                                              ; preds = %184
  %186 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %44)
          to label %187 unwind label %198

187:                                              ; preds = %185
  %188 = trunc nuw i8 %.0102289 to i1
  br i1 %188, label %189, label %193

189:                                              ; preds = %187
  %190 = getelementptr inbounds i8, ptr %.0290, i64 20
  %191 = load i32, ptr %190, align 4, !tbaa !42
  %192 = lshr i32 %191, 3
  br label %193

193:                                              ; preds = %187, %189
  %194 = phi i32 [ %192, %189 ], [ %.0104288, %187 ]
  %195 = mul i32 %194, %186
  %196 = load i32, ptr %12, align 4, !tbaa !5
  %197 = add i32 %196, %195
  store i32 %197, ptr %12, align 4, !tbaa !5
  br label %231

198:                                              ; preds = %231, %185, %182
  %199 = landingpad { ptr, i32 }
          cleanup
  br label %307

200:                                              ; preds = %184
  %201 = trunc nuw i8 %.0102289 to i1
  br i1 %201, label %202, label %206

202:                                              ; preds = %200
  %203 = getelementptr inbounds i8, ptr %.0290, i64 20
  %204 = load i32, ptr %203, align 4, !tbaa !42
  %205 = lshr i32 %204, 3
  br label %206

206:                                              ; preds = %200, %202
  %207 = phi i32 [ %205, %202 ], [ %.0104288, %200 ]
  %208 = urem i32 %207, %6
  %209 = udiv i32 %207, %6
  %.not155 = icmp eq i32 %208, 0
  br i1 %.not155, label %215, label %210

210:                                              ; preds = %206
  %211 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %211, ptr noundef nonnull @.str.1374)
          to label %212 unwind label %213

212:                                              ; preds = %210
  invoke void @__cxa_throw(ptr nonnull %211, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %308 unwind label %.loopexit.split-lp182

213:                                              ; preds = %210
  %214 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %211) #7
  br label %307

.loopexit181:                                     ; preds = %218, %222
  %lpad.loopexit183 = landingpad { ptr, i32 }
          cleanup
  br label %307

.loopexit.split-lp182:                            ; preds = %212
  %lpad.loopexit.split-lp184 = landingpad { ptr, i32 }
          cleanup
  br label %307

215:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %44, i1 noundef zeroext false)
          to label %216 unwind label %224

216:                                              ; preds = %215
  %217 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %218 unwind label %226

218:                                              ; preds = %216
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  %219 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.976)
          to label %220 unwind label %.loopexit181

220:                                              ; preds = %218
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #7
  store i32 %209, ptr %24, align 4, !tbaa !5
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 4 dereferenceable(4) %24)
  %221 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %23)
          to label %222 unwind label %229

222:                                              ; preds = %220
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  %223 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.1102)
          to label %231 unwind label %.loopexit181

224:                                              ; preds = %215
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %228

226:                                              ; preds = %216
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  br label %228

228:                                              ; preds = %226, %224
  %.pn156 = phi { ptr, i32 } [ %227, %226 ], [ %225, %224 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %307

229:                                              ; preds = %220
  %230 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  br label %307

231:                                              ; preds = %222, %193
  %232 = getelementptr inbounds i8, ptr %.0290, i64 276
  %233 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %232)
  %234 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %233)
          to label %296 unwind label %198

235:                                              ; preds = %178
  %236 = getelementptr inbounds i8, ptr %.0290, i64 24
  %237 = load i32, ptr %236, align 8, !tbaa !43
  %238 = icmp ugt i32 %237, 1
  br i1 %238, label %239, label %292

239:                                              ; preds = %235
  %240 = invoke noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %44)
          to label %241 unwind label %255

241:                                              ; preds = %239
  %.not146 = icmp eq ptr %240, null
  br i1 %.not146, label %257, label %242

242:                                              ; preds = %241
  %243 = invoke noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %44)
          to label %244 unwind label %255

244:                                              ; preds = %242
  %245 = trunc nuw i8 %.0102289 to i1
  br i1 %245, label %250, label %246

246:                                              ; preds = %244
  %247 = getelementptr inbounds i8, ptr %.0290, i64 20
  %248 = load i32, ptr %247, align 4, !tbaa !42
  %249 = lshr i32 %248, 3
  br label %250

250:                                              ; preds = %244, %246
  %251 = phi i32 [ %249, %246 ], [ %.0104288, %244 ]
  %252 = mul i32 %251, %243
  %253 = load i32, ptr %12, align 4, !tbaa !5
  %254 = add i32 %253, %252
  store i32 %254, ptr %12, align 4, !tbaa !5
  br label %288

255:                                              ; preds = %288, %242, %239
  %256 = landingpad { ptr, i32 }
          cleanup
  br label %307

257:                                              ; preds = %241
  %258 = trunc nuw i8 %.0102289 to i1
  br i1 %258, label %263, label %259

259:                                              ; preds = %257
  %260 = getelementptr inbounds i8, ptr %.0290, i64 20
  %261 = load i32, ptr %260, align 4, !tbaa !42
  %262 = lshr i32 %261, 3
  br label %263

263:                                              ; preds = %257, %259
  %264 = phi i32 [ %262, %259 ], [ %.0104288, %257 ]
  %265 = urem i32 %264, %6
  %266 = udiv i32 %264, %6
  %.not147 = icmp eq i32 %265, 0
  br i1 %.not147, label %272, label %267

267:                                              ; preds = %263
  %268 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %268, ptr noundef nonnull @.str.1375)
          to label %269 unwind label %270

269:                                              ; preds = %267
  invoke void @__cxa_throw(ptr nonnull %268, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %308 unwind label %.loopexit.split-lp177

270:                                              ; preds = %267
  %271 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %268) #7
  br label %307

.loopexit176:                                     ; preds = %275, %279
  %lpad.loopexit178 = landingpad { ptr, i32 }
          cleanup
  br label %307

.loopexit.split-lp177:                            ; preds = %269
  %lpad.loopexit.split-lp179 = landingpad { ptr, i32 }
          cleanup
  br label %307

272:                                              ; preds = %263
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %44, i1 noundef zeroext false)
          to label %273 unwind label %281

273:                                              ; preds = %272
  %274 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %275 unwind label %283

275:                                              ; preds = %273
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  %276 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.976)
          to label %277 unwind label %.loopexit176

277:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #7
  store i32 %266, ptr %27, align 4, !tbaa !5
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 4 dereferenceable(4) %27)
  %278 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %279 unwind label %286

279:                                              ; preds = %277
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  %280 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.1102)
          to label %288 unwind label %.loopexit176

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

283:                                              ; preds = %273
  %284 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  br label %285

285:                                              ; preds = %283, %281
  %.pn148 = phi { ptr, i32 } [ %284, %283 ], [ %282, %281 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  br label %307

286:                                              ; preds = %277
  %287 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  br label %307

288:                                              ; preds = %279, %250
  %289 = getelementptr inbounds i8, ptr %.0290, i64 276
  %290 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %289)
  %291 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %290)
          to label %296 unwind label %255

292:                                              ; preds = %235
  %293 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %293, ptr noundef nonnull @.str.1363)
          to label %.invoke unwind label %294

294:                                              ; preds = %292
  %295 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %293) #7
  br label %307

296:                                              ; preds = %288, %231, %173, %176, %125, %128, %57, %77
  %.3 = phi i32 [ %47, %77 ], [ %47, %57 ], [ %.0107287, %125 ], [ %130, %128 ], [ %.0107287, %173 ], [ %177, %176 ], [ %.0107287, %231 ], [ %.0107287, %288 ]
  %.2106 = phi i32 [ %.0104288, %77 ], [ %.0104288, %57 ], [ %.0104288, %125 ], [ %.0104288, %128 ], [ %.1105, %173 ], [ %.1105, %176 ], [ %.0104288, %231 ], [ %.0104288, %288 ]
  %.2 = phi i8 [ %.0102289, %77 ], [ %.0102289, %57 ], [ %.0102289, %125 ], [ %.0102289, %128 ], [ %.1103, %173 ], [ %.1103, %176 ], [ %.0102289, %231 ], [ %.0102289, %288 ]
  %.1 = phi ptr [ %.0290, %77 ], [ %.0290, %57 ], [ %124, %125 ], [ %124, %128 ], [ %154, %173 ], [ %154, %176 ], [ %234, %231 ], [ %291, %288 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %42, !llvm.loop !44

297:                                              ; preds = %._crit_edge
  %298 = and i8 %.0102.lcssa, 1
  store i8 %298, ptr %7, align 1, !tbaa !9
  br label %299

299:                                              ; preds = %297, %._crit_edge
  br i1 %.not139, label %301, label %300

300:                                              ; preds = %299
  store i32 %.0104.lcssa, ptr %8, align 4, !tbaa !5
  br label %301

301:                                              ; preds = %300, %299
  br i1 %.not140, label %303, label %302

302:                                              ; preds = %301
  store i32 %.0107.lcssa, ptr %9, align 4, !tbaa !5
  br label %303

303:                                              ; preds = %302, %301
  invoke void @_ZSt9make_pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS9_INSA_IT0_E4typeEE6__typeEEOSB_OSG_(ptr dead_on_unwind writable sret(%"struct.std::pair.391") align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %304 unwind label %305

304:                                              ; preds = %303
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  ret void

305:                                              ; preds = %303
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %307

307:                                              ; preds = %.loopexit176, %.loopexit.split-lp177, %.loopexit181, %.loopexit.split-lp182, %.loopexit, %.loopexit.split-lp, %.loopexit191, %.loopexit.split-lp192, %.loopexit186, %.loopexit.split-lp187, %52, %145, %294, %84, %83, %68, %131, %119, %118, %103, %172, %166, %213, %228, %229, %198, %270, %285, %286, %255, %305
  %.pn172.pn.pn = phi { ptr, i32 } [ %306, %305 ], [ %53, %52 ], [ %146, %145 ], [ %295, %294 ], [ %69, %68 ], [ %85, %84 ], [ %.pn170, %83 ], [ %132, %131 ], [ %104, %103 ], [ %120, %119 ], [ %.pn, %118 ], [ %167, %166 ], [ %.pn163, %172 ], [ %199, %198 ], [ %214, %213 ], [ %230, %229 ], [ %.pn156, %228 ], [ %256, %255 ], [ %271, %270 ], [ %287, %286 ], [ %.pn148, %285 ], [ %lpad.loopexit188, %.loopexit186 ], [ %lpad.loopexit.split-lp189, %.loopexit.split-lp187 ], [ %lpad.loopexit193, %.loopexit191 ], [ %lpad.loopexit.split-lp194, %.loopexit.split-lp192 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit183, %.loopexit181 ], [ %lpad.loopexit.split-lp184, %.loopexit.split-lp182 ], [ %lpad.loopexit178, %.loopexit176 ], [ %lpad.loopexit.split-lp179, %.loopexit.split-lp177 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  resume { ptr, i32 } %.pn172.pn.pn

308:                                              ; preds = %269, %212, %102, %67
  unreachable
}

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !18, i64 16}
!14 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !15, i64 0, !17, i64 12, !18, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !19, i64 32, !24, i64 88, !6, i64 120, !10, i64 124, !10, i64 125, !27, i64 128, !28, i64 136, !19, i64 192, !31, i64 248, !32, i64 272, !32, i64 276, !36, i64 280}
!15 = !{!"_ZTSN11spirv_cross8IVariantE", !16, i64 8}
!16 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !6, i64 0}
!17 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!18 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!19 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !20, i64 0, !22, i64 16, !23, i64 24}
!20 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !21, i64 0, !22, i64 8}
!21 = !{!"any pointer", !7, i64 0}
!22 = !{!"long", !7, i64 0}
!23 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!24 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !25, i64 0, !22, i64 16, !26, i64 24}
!25 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !21, i64 0, !22, i64 8}
!26 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!27 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !29, i64 0, !22, i64 16, !30, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !21, i64 0, !22, i64 8}
!30 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!31 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !32, i64 0, !33, i64 4, !10, i64 8, !10, i64 9, !10, i64 10, !6, i64 12, !34, i64 16, !35, i64 20}
!32 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !6, i64 0}
!33 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!34 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!35 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!36 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !37, i64 0}
!37 = !{!"_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", !21, i64 0, !22, i64 8, !38, i64 16, !22, i64 24, !39, i64 32, !21, i64 48}
!38 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !21, i64 0}
!39 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !40, i64 0, !22, i64 8}
!40 = !{!"float", !7, i64 0}
!41 = !{!14, !6, i64 28}
!42 = !{!14, !6, i64 20}
!43 = !{!14, !6, i64 24}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}


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