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

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

%"struct.spirv_cross::SPIRBlock" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.162", %"class.spirv_cross::TypedID.162", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %struct.anon, %"class.spirv_cross::SmallVector.208", %"class.spirv_cross::SmallVector.211", %"class.spirv_cross::SmallVector.214", %"class.spirv_cross::SmallVector.214", %"class.spirv_cross::SmallVector.217", %"class.spirv_cross::SmallVector.217", i8, i8, i8, %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::SmallVector.220", %"class.spirv_cross::SmallVector.220", %"class.spirv_cross::SmallVector.7" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.162" }>
%"class.spirv_cross::TypedID.162" = type { i32 }
%struct.anon = type { [3 x %"class.spirv_cross::TypedID.162"], %"class.spirv_cross::TypedID.162" }
%"class.spirv_cross::SmallVector.208" = type { %"class.spirv_cross::VectorView.209", i64, %"class.spirv_cross::AlignedBuffer.210" }
%"class.spirv_cross::VectorView.209" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.210" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.211" = type { %"class.spirv_cross::VectorView.212", i64, %"class.spirv_cross::AlignedBuffer.213" }
%"class.spirv_cross::VectorView.212" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.213" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.214" = type { %"class.spirv_cross::VectorView.215", i64, %"class.spirv_cross::AlignedBuffer.216" }
%"class.spirv_cross::VectorView.215" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.216" = type { [64 x i8] }
%"class.spirv_cross::SmallVector.217" = type { %"class.spirv_cross::VectorView.218", i64, %"class.spirv_cross::AlignedBuffer.219" }
%"class.spirv_cross::VectorView.218" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.219" = type { [128 x i8] }
%"class.spirv_cross::TypedID.165" = type { i32 }
%"class.spirv_cross::SmallVector.220" = type { %"class.spirv_cross::VectorView.221", i64, %"class.spirv_cross::AlignedBuffer.222" }
%"class.spirv_cross::VectorView.221" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.222" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"struct.spirv_cross::Instruction" = type { i16, i16, i32, i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.166", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.169", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.163", %"class.spirv_cross::TypedID.163", %"class.std::unordered_set.172" }
%"class.spirv_cross::SmallVector.166" = type { %"class.spirv_cross::VectorView.167", i64, %"class.spirv_cross::AlignedBuffer.168" }
%"class.spirv_cross::VectorView.167" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.168" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.169" = type { %"class.spirv_cross::VectorView.170", i64, %"class.spirv_cross::AlignedBuffer.171" }
%"class.spirv_cross::VectorView.170" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.171" = type { [32 x i8] }
%"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.163", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.163" = type { i32 }
%"class.std::unordered_set.172" = type { %"class.std::_Hashtable.173" }
%"class.std::_Hashtable.173" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.spirv_cross::SPIRExtension" = type { %"struct.spirv_cross::IVariant.base", i32 }

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 4 dereferenceable(12)) #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11spirv_cross8Compiler13block_is_pureERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1) #2 align 2 {
  %3 = alloca i1, align 1
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %18 = load ptr, ptr %4, align 8
  %19 = load ptr, ptr %5, align 8, !tbaa !5
  %20 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %19, i32 0, i32 1
  %21 = load i32, ptr %20, align 4, !tbaa !9
  %22 = icmp eq i32 %21, 6
  br i1 %22, label %38, label %23

23:                                               ; preds = %2
  %24 = load ptr, ptr %5, align 8, !tbaa !5
  %25 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %24, i32 0, i32 1
  %26 = load i32, ptr %25, align 4, !tbaa !9
  %27 = icmp eq i32 %26, 8
  br i1 %27, label %38, label %28

28:                                               ; preds = %23
  %29 = load ptr, ptr %5, align 8, !tbaa !5
  %30 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %29, i32 0, i32 1
  %31 = load i32, ptr %30, align 4, !tbaa !9
  %32 = icmp eq i32 %31, 7
  br i1 %32, label %38, label %33

33:                                               ; preds = %28
  %34 = load ptr, ptr %5, align 8, !tbaa !5
  %35 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %34, i32 0, i32 1
  %36 = load i32, ptr %35, align 4, !tbaa !9
  %37 = icmp eq i32 %36, 9
  br i1 %37, label %38, label %39

38:                                               ; preds = %33, %28, %23, %2
  store i1 false, ptr %3, align 1
  br label %140

39:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %40, i32 0, i32 13
  store ptr %41, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %42 = load ptr, ptr %6, align 8, !tbaa !5
  %43 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_11InstructionEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %42) #3
  store ptr %43, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_11InstructionEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %44) #3
  store ptr %45, ptr %8, align 8, !tbaa !5
  br label %46

46:                                               ; preds = %134, %39
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = load ptr, ptr %8, align 8, !tbaa !5
  %49 = icmp ne ptr %47, %48
  br i1 %49, label %51, label %50

50:                                               ; preds = %46
  store i32 2, ptr %9, align 4
  br label %137

51:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %52, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  %53 = load ptr, ptr %10, align 8, !tbaa !5
  %54 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %18, ptr noundef nonnull align 4 dereferenceable(12) %53)
  store ptr %54, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  %55 = load ptr, ptr %10, align 8, !tbaa !5
  %56 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %55, i32 0, i32 0
  %57 = load i16, ptr %56, align 4, !tbaa !39
  %58 = zext i16 %57 to i32
  store i32 %58, ptr %12, align 4, !tbaa !42
  %59 = load i32, ptr %12, align 4, !tbaa !42
  switch i32 %59, label %126 [
    i32 57, label %60
    i32 63, label %71
    i32 62, label %71
    i32 99, label %84
    i32 227, label %85
    i32 228, label %85
    i32 229, label %85
    i32 230, label %85
    i32 231, label %85
    i32 232, label %85
    i32 233, label %85
    i32 234, label %85
    i32 235, label %85
    i32 236, label %85
    i32 237, label %85
    i32 238, label %85
    i32 239, label %85
    i32 240, label %85
    i32 241, label %85
    i32 242, label %85
    i32 219, label %86
    i32 220, label %86
    i32 221, label %86
    i32 218, label %86
    i32 5295, label %87
    i32 224, label %88
    i32 225, label %88
    i32 5334, label %89
    i32 5335, label %89
    i32 5336, label %89
    i32 5337, label %89
    i32 4445, label %89
    i32 5344, label %89
    i32 4446, label %89
    i32 4473, label %89
    i32 4474, label %89
    i32 4475, label %89
    i32 4476, label %89
    i32 4477, label %89
    i32 5380, label %90
    i32 12, label %91
  ]

60:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  %61 = load ptr, ptr %11, align 8, !tbaa !5
  %62 = getelementptr inbounds i32, ptr %61, i64 2
  %63 = load i32, ptr %62, align 4, !tbaa !44
  store i32 %63, ptr %13, align 4, !tbaa !44
  %64 = load i32, ptr %13, align 4, !tbaa !44
  %65 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %18, i32 noundef %64)
  %66 = call noundef zeroext i1 @_ZN11spirv_cross8Compiler16function_is_pureERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(3176) %18, ptr noundef nonnull align 8 dereferenceable(795) %65)
  br i1 %66, label %68, label %67

67:                                               ; preds = %60
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %69

68:                                               ; preds = %60
  store i32 4, ptr %9, align 4
  br label %69

69:                                               ; preds = %68, %67
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  %70 = load i32, ptr %9, align 4
  switch i32 %70, label %128 [
    i32 4, label %127
  ]

71:                                               ; preds = %51, %51
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %72 = load ptr, ptr %11, align 8, !tbaa !5
  %73 = getelementptr inbounds i32, ptr %72, i64 0
  %74 = load i32, ptr %73, align 4, !tbaa !44
  %75 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %18, i32 noundef %74)
  store ptr %75, ptr %14, align 8, !tbaa !5
  %76 = load ptr, ptr %14, align 8, !tbaa !5
  %77 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %76, i32 0, i32 11
  %78 = load i32, ptr %77, align 8, !tbaa !45
  %79 = icmp ne i32 %78, 7
  br i1 %79, label %80, label %81

80:                                               ; preds = %71
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %82

81:                                               ; preds = %71
  store i32 4, ptr %9, align 4
  br label %82

82:                                               ; preds = %81, %80
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  %83 = load i32, ptr %9, align 4
  switch i32 %83, label %128 [
    i32 4, label %127
  ]

84:                                               ; preds = %51
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %128

85:                                               ; preds = %51, %51, %51, %51, %51, %51, %51, %51, %51, %51, %51, %51, %51, %51, %51, %51
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %128

86:                                               ; preds = %51, %51, %51, %51
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %128

87:                                               ; preds = %51
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %128

88:                                               ; preds = %51, %51
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %128

89:                                               ; preds = %51, %51, %51, %51, %51, %51, %51, %51, %51, %51, %51, %51
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %128

90:                                               ; preds = %51
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %128

91:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %92 = load ptr, ptr %11, align 8, !tbaa !5
  %93 = getelementptr inbounds i32, ptr %92, i64 2
  %94 = load i32, ptr %93, align 4, !tbaa !44
  store i32 %94, ptr %15, align 4, !tbaa !44
  %95 = load i32, ptr %15, align 4, !tbaa !44
  %96 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %18, i32 noundef %95)
  %97 = getelementptr inbounds %"struct.spirv_cross::SPIRExtension", ptr %96, i32 0, i32 1
  %98 = load i32, ptr %97, align 4, !tbaa !68
  %99 = icmp eq i32 %98, 1
  br i1 %99, label %100, label %123

100:                                              ; preds = %91
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = getelementptr inbounds i32, ptr %101, i64 3
  %103 = load i32, ptr %102, align 4, !tbaa !44
  store i32 %103, ptr %16, align 4, !tbaa !71
  %104 = load i32, ptr %16, align 4, !tbaa !71
  switch i32 %104, label %118 [
    i32 35, label %105
    i32 51, label %105
  ]

105:                                              ; preds = %100, %100
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  %106 = load ptr, ptr %11, align 8, !tbaa !5
  %107 = getelementptr inbounds i32, ptr %106, i64 5
  %108 = load i32, ptr %107, align 4, !tbaa !44
  %109 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %18, i32 noundef %108)
  store ptr %109, ptr %17, align 8, !tbaa !5
  %110 = load ptr, ptr %17, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %110, i32 0, i32 11
  %112 = load i32, ptr %111, align 8, !tbaa !45
  %113 = icmp ne i32 %112, 7
  br i1 %113, label %114, label %115

114:                                              ; preds = %105
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %116

115:                                              ; preds = %105
  store i32 5, ptr %9, align 4
  br label %116

116:                                              ; preds = %115, %114
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  %117 = load i32, ptr %9, align 4
  switch i32 %117, label %120 [
    i32 5, label %119
  ]

118:                                              ; preds = %100
  br label %119

119:                                              ; preds = %118, %116
  store i32 0, ptr %9, align 4
  br label %120

120:                                              ; preds = %119, %116
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  %121 = load i32, ptr %9, align 4
  switch i32 %121, label %124 [
    i32 0, label %122
  ]

122:                                              ; preds = %120
  br label %123

123:                                              ; preds = %122, %91
  store i32 4, ptr %9, align 4
  br label %124

124:                                              ; preds = %123, %120
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  %125 = load i32, ptr %9, align 4
  switch i32 %125, label %128 [
    i32 4, label %127
  ]

126:                                              ; preds = %51
  br label %127

127:                                              ; preds = %126, %124, %82, %69
  store i32 0, ptr %9, align 4
  br label %128

128:                                              ; preds = %127, %124, %90, %89, %88, %87, %86, %85, %84, %82, %69
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  %129 = load i32, ptr %9, align 4
  switch i32 %129, label %131 [
    i32 0, label %130
  ]

130:                                              ; preds = %128
  store i32 0, ptr %9, align 4
  br label %131

131:                                              ; preds = %130, %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  %132 = load i32, ptr %9, align 4
  switch i32 %132, label %137 [
    i32 0, label %133
  ]

133:                                              ; preds = %131
  br label %134

134:                                              ; preds = %133
  %135 = load ptr, ptr %7, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %135, i32 1
  store ptr %136, ptr %7, align 8, !tbaa !5
  br label %46

137:                                              ; preds = %131, %50
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  %138 = load i32, ptr %9, align 4
  switch i32 %138, label %142 [
    i32 2, label %139
    i32 1, label %140
  ]

139:                                              ; preds = %137
  store i1 true, ptr %3, align 1
  br label %140

140:                                              ; preds = %139, %137, %38
  %141 = load i1, ptr %3, align 1
  ret i1 %141

142:                                              ; preds = %137
  unreachable
}

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

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

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

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

!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, !14, i64 12}
!10 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !11, i64 0, !14, i64 12, !15, i64 16, !16, i64 20, !17, i64 24, !17, i64 28, !17, i64 32, !12, i64 36, !12, i64 40, !17, i64 44, !17, i64 48, !17, i64 52, !18, i64 56, !19, i64 72, !23, i64 192, !26, i64 312, !26, i64 400, !29, i64 488, !29, i64 640, !32, i64 792, !32, i64 793, !32, i64 794, !17, i64 796, !17, i64 800, !33, i64 808, !33, i64 864, !36, i64 920}
!11 = !{!"_ZTSN11spirv_cross8IVariantE", !12, i64 8}
!12 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !7, i64 0}
!15 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !7, i64 0}
!16 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !7, i64 0}
!17 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !13, i64 0}
!18 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !7, i64 0, !12, i64 12}
!19 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !20, i64 0, !21, i64 16, !22, i64 24}
!20 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !6, i64 0, !21, i64 8}
!21 = !{!"long", !7, i64 0}
!22 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !7, i64 0}
!23 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !24, i64 0, !21, i64 16, !25, i64 24}
!24 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !6, i64 0, !21, i64 8}
!25 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !27, i64 0, !21, i64 16, !28, i64 24}
!27 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !6, i64 0, !21, i64 8}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !30, i64 0, !21, i64 16, !31, i64 24}
!30 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !6, i64 0, !21, i64 8}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !7, i64 0}
!32 = !{!"bool", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !34, i64 0, !21, i64 16, !35, i64 24}
!34 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !6, i64 0, !21, i64 8}
!35 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !7, i64 0}
!36 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !37, i64 0, !21, i64 16, !38, i64 24}
!37 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !21, i64 8}
!38 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!39 = !{!40, !41, i64 0}
!40 = !{!"_ZTSN11spirv_cross11InstructionE", !41, i64 0, !41, i64 2, !13, i64 4, !13, i64 8}
!41 = !{!"short", !7, i64 0}
!42 = !{!43, !43, i64 0}
!43 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!44 = !{!13, !13, i64 0}
!45 = !{!46, !54, i64 128}
!46 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !11, i64 0, !43, i64 12, !47, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !48, i64 32, !51, i64 88, !13, i64 120, !32, i64 124, !32, i64 125, !54, i64 128, !55, i64 136, !48, i64 192, !58, i64 248, !59, i64 272, !59, i64 276, !63, i64 280}
!47 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!48 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !49, i64 0, !21, i64 16, !50, i64 24}
!49 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !21, i64 8}
!50 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!51 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !52, i64 0, !21, i64 16, !53, i64 24}
!52 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !21, i64 8}
!53 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!54 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!55 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !56, i64 0, !21, i64 16, !57, i64 24}
!56 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !21, i64 8}
!57 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!58 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !59, i64 0, !60, i64 4, !32, i64 8, !32, i64 9, !32, i64 10, !13, i64 12, !61, i64 16, !62, i64 20}
!59 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !13, i64 0}
!60 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!61 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!62 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!63 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !64, i64 0}
!64 = !{!"_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, !21, i64 8, !65, i64 16, !21, i64 24, !66, i64 32, !6, i64 48}
!65 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!66 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !67, i64 0, !21, i64 8}
!67 = !{!"float", !7, i64 0}
!68 = !{!69, !70, i64 12}
!69 = !{!"_ZTSN11spirv_cross13SPIRExtensionE", !11, i64 0, !70, i64 12}
!70 = !{!"_ZTSN11spirv_cross13SPIRExtension9ExtensionE", !7, i64 0}
!71 = !{!72, !72, i64 0}
!72 = !{!"_ZTS10GLSLstd450", !7, i64 0}


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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11spirv_cross8Compiler13block_is_pureERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1) local_unnamed_addr #1 align 2 {
  %3 = getelementptr inbounds i8, ptr %1, i64 12
  %4 = load i32, ptr %3, align 4, !tbaa !5
  %.off = add i32 %4, -6
  %switch52 = icmp ult i32 %.off, 4
  br i1 %switch52, label %.thread59, label %5

5:                                                ; preds = %2
  %6 = getelementptr inbounds i8, ptr %1, i64 72
  %7 = tail call noundef ptr @_ZNK11spirv_cross10VectorViewINS_11InstructionEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %6) #2
  %8 = tail call noundef ptr @_ZNK11spirv_cross10VectorViewINS_11InstructionEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %6) #2
  %.not62 = icmp eq ptr %7, %8
  br i1 %.not62, label %.thread59, label %.lr.ph

.lr.ph:                                           ; preds = %5, %.thread55
  %.03963 = phi ptr [ %37, %.thread55 ], [ %7, %5 ]
  %9 = tail call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(12) %.03963)
  %10 = load i16, ptr %.03963, align 4, !tbaa !38
  switch i16 %10, label %.thread55 [
    i16 57, label %11
    i16 63, label %16
    i16 62, label %16
    i16 99, label %.thread59
    i16 227, label %.thread59
    i16 228, label %.thread59
    i16 229, label %.thread59
    i16 230, label %.thread59
    i16 231, label %.thread59
    i16 232, label %.thread59
    i16 233, label %.thread59
    i16 234, label %.thread59
    i16 235, label %.thread59
    i16 236, label %.thread59
    i16 237, label %.thread59
    i16 238, label %.thread59
    i16 239, label %.thread59
    i16 240, label %.thread59
    i16 241, label %.thread59
    i16 242, label %.thread59
    i16 219, label %.thread59
    i16 220, label %.thread59
    i16 221, label %.thread59
    i16 218, label %.thread59
    i16 5295, label %.thread59
    i16 224, label %.thread59
    i16 225, label %.thread59
    i16 5334, label %.thread59
    i16 5335, label %.thread59
    i16 5336, label %.thread59
    i16 5337, label %.thread59
    i16 4445, label %.thread59
    i16 5344, label %.thread59
    i16 4446, label %.thread59
    i16 4473, label %.thread59
    i16 4474, label %.thread59
    i16 4475, label %.thread59
    i16 4476, label %.thread59
    i16 4477, label %.thread59
    i16 5380, label %.thread59
    i16 12, label %21
  ]

11:                                               ; preds = %.lr.ph
  %12 = getelementptr inbounds i8, ptr %9, i64 8
  %13 = load i32, ptr %12, align 4, !tbaa !41
  %14 = tail call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %13)
  %15 = tail call noundef zeroext i1 @_ZN11spirv_cross8Compiler16function_is_pureERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %14)
  br i1 %15, label %.thread55, label %.thread59

16:                                               ; preds = %.lr.ph, %.lr.ph
  %17 = load i32, ptr %9, align 4, !tbaa !41
  %18 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %17)
  %19 = getelementptr inbounds i8, ptr %18, i64 128
  %20 = load i32, ptr %19, align 8, !tbaa !42
  %.not49 = icmp eq i32 %20, 7
  br i1 %.not49, label %.thread55, label %.thread59

21:                                               ; preds = %.lr.ph
  %22 = getelementptr inbounds i8, ptr %9, i64 8
  %23 = load i32, ptr %22, align 4, !tbaa !41
  %24 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %23)
  %25 = getelementptr inbounds i8, ptr %24, i64 12
  %26 = load i32, ptr %25, align 4, !tbaa !66
  %27 = icmp eq i32 %26, 1
  br i1 %27, label %28, label %.thread55

28:                                               ; preds = %21
  %29 = getelementptr inbounds i8, ptr %9, i64 12
  %30 = load i32, ptr %29, align 4, !tbaa !41
  switch i32 %30, label %.thread55 [
    i32 35, label %31
    i32 51, label %31
  ]

31:                                               ; preds = %28, %28
  %32 = getelementptr inbounds i8, ptr %9, i64 20
  %33 = load i32, ptr %32, align 4, !tbaa !41
  %34 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %33)
  %35 = getelementptr inbounds i8, ptr %34, i64 128
  %36 = load i32, ptr %35, align 8, !tbaa !42
  %.not48 = icmp eq i32 %36, 7
  br i1 %.not48, label %.thread55, label %.thread59

.thread55:                                        ; preds = %28, %31, %21, %.lr.ph, %11, %16
  %37 = getelementptr inbounds i8, ptr %.03963, i64 12
  %.not = icmp eq ptr %37, %8
  br i1 %.not, label %.thread59, label %.lr.ph

.thread59:                                        ; preds = %31, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %.lr.ph, %11, %16, %.thread55, %5, %2
  %.11 = phi i1 [ false, %2 ], [ true, %5 ], [ false, %31 ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %.lr.ph ], [ false, %11 ], [ false, %16 ], [ true, %.thread55 ]
  ret i1 %.11
}

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

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

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

attributes #0 = { 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 #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 }

!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, !12, i64 12}
!6 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !7, i64 0, !12, i64 12, !13, i64 16, !14, i64 20, !15, i64 24, !15, i64 28, !15, i64 32, !8, i64 36, !8, i64 40, !15, i64 44, !15, i64 48, !15, i64 52, !16, i64 56, !17, i64 72, !22, i64 192, !25, i64 312, !25, i64 400, !28, i64 488, !28, i64 640, !31, i64 792, !31, i64 793, !31, i64 794, !15, i64 796, !15, i64 800, !32, i64 808, !32, i64 864, !35, i64 920}
!7 = !{!"_ZTSN11spirv_cross8IVariantE", !8, i64 8}
!8 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !10, i64 0}
!13 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !10, i64 0}
!14 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !10, i64 0}
!15 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !9, i64 0}
!16 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !10, i64 0, !8, i64 12}
!17 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !18, i64 0, !20, i64 16, !21, i64 24}
!18 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !19, i64 0, !20, i64 8}
!19 = !{!"any pointer", !10, i64 0}
!20 = !{!"long", !10, i64 0}
!21 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !10, i64 0}
!22 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !23, i64 0, !20, i64 16, !24, i64 24}
!23 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !19, i64 0, !20, i64 8}
!24 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !10, i64 0}
!25 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !26, i64 0, !20, i64 16, !27, i64 24}
!26 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !19, i64 0, !20, i64 8}
!27 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !10, i64 0}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !29, i64 0, !20, i64 16, !30, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !19, i64 0, !20, i64 8}
!30 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !10, i64 0}
!31 = !{!"bool", !10, i64 0}
!32 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !33, i64 0, !20, i64 16, !34, i64 24}
!33 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !19, i64 0, !20, i64 8}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !10, i64 0}
!35 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !36, i64 0, !20, i64 16, !37, i64 24}
!36 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !19, i64 0, !20, i64 8}
!37 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !10, i64 0}
!38 = !{!39, !40, i64 0}
!39 = !{!"_ZTSN11spirv_cross11InstructionE", !40, i64 0, !40, i64 2, !9, i64 4, !9, i64 8}
!40 = !{!"short", !10, i64 0}
!41 = !{!9, !9, i64 0}
!42 = !{!43, !52, i64 128}
!43 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !7, i64 0, !44, i64 12, !45, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !46, i64 32, !49, i64 88, !9, i64 120, !31, i64 124, !31, i64 125, !52, i64 128, !53, i64 136, !46, i64 192, !56, i64 248, !57, i64 272, !57, i64 276, !61, i64 280}
!44 = !{!"_ZTSN3spv2OpE", !10, i64 0}
!45 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !10, i64 0}
!46 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !47, i64 0, !20, i64 16, !48, i64 24}
!47 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !19, i64 0, !20, i64 8}
!48 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !10, i64 0}
!49 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !50, i64 0, !20, i64 16, !51, i64 24}
!50 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !19, i64 0, !20, i64 8}
!51 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !10, i64 0}
!52 = !{!"_ZTSN3spv12StorageClassE", !10, i64 0}
!53 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !54, i64 0, !20, i64 16, !55, i64 24}
!54 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !19, i64 0, !20, i64 8}
!55 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !10, i64 0}
!56 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !57, i64 0, !58, i64 4, !31, i64 8, !31, i64 9, !31, i64 10, !9, i64 12, !59, i64 16, !60, i64 20}
!57 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !9, i64 0}
!58 = !{!"_ZTSN3spv3DimE", !10, i64 0}
!59 = !{!"_ZTSN3spv11ImageFormatE", !10, i64 0}
!60 = !{!"_ZTSN3spv15AccessQualifierE", !10, i64 0}
!61 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !62, i64 0}
!62 = !{!"_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", !19, i64 0, !20, i64 8, !63, i64 16, !20, i64 24, !64, i64 32, !19, i64 48}
!63 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !19, i64 0}
!64 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !65, i64 0, !20, i64 8}
!65 = !{!"float", !10, i64 0}
!66 = !{!67, !68, i64 12}
!67 = !{!"_ZTSN11spirv_cross13SPIRExtensionE", !7, i64 0, !68, i64 12}
!68 = !{!"_ZTSN11spirv_cross13SPIRExtension9ExtensionE", !10, i64 0}


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