; 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::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.162", [4 x i8] }>
%"struct.spirv_cross::SPIRBlock::Phi" = type { %"class.spirv_cross::TypedID.162", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.164" }
%"class.spirv_cross::TypedID.164" = type { 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 i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler23block_is_loop_candidateERKNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1, i32 noundef %2) #2 align 2 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i8, align 1
  %32 = alloca i8, align 1
  %33 = alloca i8, align 1
  %34 = alloca i8, align 1
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  %40 = load ptr, ptr %5, align 8
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %41, i32 0, i32 19
  %43 = load i8, ptr %42, align 8, !tbaa !11, !range !41, !noundef !42
  %44 = trunc i8 %43 to i1
  br i1 %44, label %50, label %45

45:                                               ; preds = %3
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %46, i32 0, i32 20
  %48 = load i8, ptr %47, align 1, !tbaa !43, !range !41, !noundef !42
  %49 = trunc i8 %48 to i1
  br i1 %49, label %50, label %51

50:                                               ; preds = %45, %3
  store i1 false, ptr %4, align 1
  br label %497

51:                                               ; preds = %45
  %52 = load i32, ptr %7, align 4, !tbaa !9
  %53 = icmp eq i32 %52, 0
  br i1 %53, label %57, label %54

54:                                               ; preds = %51
  %55 = load i32, ptr %7, align 4, !tbaa !9
  %56 = icmp eq i32 %55, 2
  br i1 %56, label %57, label %293

57:                                               ; preds = %54, %51
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %58, i32 0, i32 10
  %60 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %59)
  %61 = call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %60)
  store ptr %61, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %62, i32 0, i32 9
  %64 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %63)
  %65 = call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %64)
  store ptr %65, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %66, i32 0, i32 5
  %68 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %67)
  %69 = call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %68)
  store ptr %69, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #3
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %70, i32 0, i32 10
  %72 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %71)
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %73, i32 0, i32 5
  %75 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %74)
  %76 = icmp eq i32 %72, %75
  br i1 %76, label %89, label %77

77:                                               ; preds = %57
  %78 = load ptr, ptr %8, align 8, !tbaa !5
  %79 = icmp ne ptr %78, null
  br i1 %79, label %80, label %87

80:                                               ; preds = %77
  %81 = load ptr, ptr %10, align 8, !tbaa !5
  %82 = icmp ne ptr %81, null
  br i1 %82, label %83, label %87

83:                                               ; preds = %80
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = load ptr, ptr %10, align 8, !tbaa !5
  %86 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %40, ptr noundef nonnull align 8 dereferenceable(976) %84, ptr noundef nonnull align 8 dereferenceable(976) %85)
  br label %87

87:                                               ; preds = %83, %80, %77
  %88 = phi i1 [ false, %80 ], [ false, %77 ], [ %86, %83 ]
  br label %89

89:                                               ; preds = %87, %57
  %90 = phi i1 [ true, %57 ], [ %88, %87 ]
  %91 = zext i1 %90 to i8
  store i8 %91, ptr %11, align 1, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #3
  %92 = load ptr, ptr %6, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %92, i32 0, i32 9
  %94 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %93)
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %95, i32 0, i32 5
  %97 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %96)
  %98 = icmp eq i32 %94, %97
  br i1 %98, label %111, label %99

99:                                               ; preds = %89
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = icmp ne ptr %100, null
  br i1 %101, label %102, label %109

102:                                              ; preds = %99
  %103 = load ptr, ptr %10, align 8, !tbaa !5
  %104 = icmp ne ptr %103, null
  br i1 %104, label %105, label %109

105:                                              ; preds = %102
  %106 = load ptr, ptr %9, align 8, !tbaa !5
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %40, ptr noundef nonnull align 8 dereferenceable(976) %106, ptr noundef nonnull align 8 dereferenceable(976) %107)
  br label %109

109:                                              ; preds = %105, %102, %99
  %110 = phi i1 [ false, %102 ], [ false, %99 ], [ %108, %105 ]
  br label %111

111:                                              ; preds = %109, %89
  %112 = phi i1 [ true, %89 ], [ %110, %109 ]
  %113 = zext i1 %112 to i8
  store i8 %113, ptr %12, align 1, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #3
  %114 = load ptr, ptr %6, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %114, i32 0, i32 9
  %116 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %115)
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %117, i32 0, i32 5
  %119 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %118)
  %120 = icmp ne i32 %116, %119
  br i1 %120, label %121, label %132

121:                                              ; preds = %111
  %122 = load ptr, ptr %6, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %122, i32 0, i32 9
  %124 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %123)
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %125, i32 0, i32 1
  %127 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %126)
  %128 = icmp ne i32 %124, %127
  br i1 %128, label %129, label %132

129:                                              ; preds = %121
  %130 = load i8, ptr %11, align 1, !tbaa !44, !range !41, !noundef !42
  %131 = trunc i8 %130 to i1
  br label %132

132:                                              ; preds = %129, %121, %111
  %133 = phi i1 [ false, %121 ], [ false, %111 ], [ %131, %129 ]
  %134 = zext i1 %133 to i8
  store i8 %134, ptr %13, align 1, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #3
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %135, i32 0, i32 10
  %137 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %136)
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %138, i32 0, i32 5
  %140 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %139)
  %141 = icmp ne i32 %137, %140
  br i1 %141, label %142, label %153

142:                                              ; preds = %132
  %143 = load ptr, ptr %6, align 8, !tbaa !5
  %144 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %143, i32 0, i32 10
  %145 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %144)
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  %147 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %146, i32 0, i32 1
  %148 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %147)
  %149 = icmp ne i32 %145, %148
  br i1 %149, label %150, label %153

150:                                              ; preds = %142
  %151 = load i8, ptr %12, align 1, !tbaa !44, !range !41, !noundef !42
  %152 = trunc i8 %151 to i1
  br label %153

153:                                              ; preds = %150, %142, %132
  %154 = phi i1 [ false, %142 ], [ false, %132 ], [ %152, %150 ]
  %155 = zext i1 %154 to i8
  store i8 %155, ptr %14, align 1, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #3
  %156 = load ptr, ptr %6, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %156, i32 0, i32 1
  %158 = load i32, ptr %157, align 4, !tbaa !45
  %159 = icmp eq i32 %158, 2
  br i1 %159, label %160, label %173

160:                                              ; preds = %153
  %161 = load ptr, ptr %6, align 8, !tbaa !5
  %162 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %161, i32 0, i32 2
  %163 = load i32, ptr %162, align 8, !tbaa !46
  %164 = icmp eq i32 %163, 1
  br i1 %164, label %165, label %173

165:                                              ; preds = %160
  %166 = load i8, ptr %13, align 1, !tbaa !44, !range !41, !noundef !42
  %167 = trunc i8 %166 to i1
  br i1 %167, label %171, label %168

168:                                              ; preds = %165
  %169 = load i8, ptr %14, align 1, !tbaa !44, !range !41, !noundef !42
  %170 = trunc i8 %169 to i1
  br label %171

171:                                              ; preds = %168, %165
  %172 = phi i1 [ true, %165 ], [ %170, %168 ]
  br label %173

173:                                              ; preds = %171, %160, %153
  %174 = phi i1 [ false, %160 ], [ false, %153 ], [ %172, %171 ]
  %175 = zext i1 %174 to i8
  store i8 %175, ptr %15, align 1, !tbaa !44
  %176 = load i8, ptr %15, align 1, !tbaa !44, !range !41, !noundef !42
  %177 = trunc i8 %176 to i1
  br i1 %177, label %178, label %193

178:                                              ; preds = %173
  %179 = load i8, ptr %13, align 1, !tbaa !44, !range !41, !noundef !42
  %180 = trunc i8 %179 to i1
  br i1 %180, label %181, label %193

181:                                              ; preds = %178
  %182 = load i32, ptr %7, align 4, !tbaa !9
  %183 = icmp eq i32 %182, 2
  br i1 %183, label %184, label %193

184:                                              ; preds = %181
  %185 = load ptr, ptr %6, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %185, i32 0, i32 9
  %187 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %186)
  %188 = load ptr, ptr %6, align 8, !tbaa !5
  %189 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %188, i32 0, i32 6
  %190 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %189)
  %191 = icmp eq i32 %187, %190
  %192 = zext i1 %191 to i8
  store i8 %192, ptr %15, align 1, !tbaa !44
  br label %212

193:                                              ; preds = %181, %178, %173
  %194 = load i8, ptr %15, align 1, !tbaa !44, !range !41, !noundef !42
  %195 = trunc i8 %194 to i1
  br i1 %195, label %196, label %211

196:                                              ; preds = %193
  %197 = load i8, ptr %14, align 1, !tbaa !44, !range !41, !noundef !42
  %198 = trunc i8 %197 to i1
  br i1 %198, label %199, label %211

199:                                              ; preds = %196
  %200 = load i32, ptr %7, align 4, !tbaa !9
  %201 = icmp eq i32 %200, 2
  br i1 %201, label %202, label %211

202:                                              ; preds = %199
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  %204 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %203, i32 0, i32 10
  %205 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %204)
  %206 = load ptr, ptr %6, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %206, i32 0, i32 6
  %208 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %207)
  %209 = icmp eq i32 %205, %208
  %210 = zext i1 %209 to i8
  store i8 %210, ptr %15, align 1, !tbaa !44
  br label %211

211:                                              ; preds = %202, %199, %196, %193
  br label %212

212:                                              ; preds = %211, %184
  %213 = load i8, ptr %15, align 1, !tbaa !44, !range !41, !noundef !42
  %214 = trunc i8 %213 to i1
  br i1 %214, label %215, label %289

215:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %216 = load ptr, ptr %6, align 8, !tbaa !5
  %217 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %216, i32 0, i32 14
  store ptr %217, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  %218 = load ptr, ptr %16, align 8, !tbaa !5
  %219 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %218) #3
  store ptr %219, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %220 = load ptr, ptr %16, align 8, !tbaa !5
  %221 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %220) #3
  store ptr %221, ptr %18, align 8, !tbaa !5
  br label %222

222:                                              ; preds = %241, %215
  %223 = load ptr, ptr %17, align 8, !tbaa !5
  %224 = load ptr, ptr %18, align 8, !tbaa !5
  %225 = icmp ne ptr %223, %224
  br i1 %225, label %227, label %226

226:                                              ; preds = %222
  store i32 2, ptr %19, align 4
  br label %244

227:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  %228 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %228, ptr %20, align 8, !tbaa !5
  %229 = load ptr, ptr %20, align 8, !tbaa !5
  %230 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %229, i32 0, i32 1
  %231 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %230)
  %232 = load ptr, ptr %6, align 8, !tbaa !5
  %233 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %232, i32 0, i32 1
  %234 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %233)
  %235 = icmp eq i32 %231, %234
  br i1 %235, label %236, label %237

236:                                              ; preds = %227
  store i1 false, ptr %4, align 1
  store i32 1, ptr %19, align 4
  br label %238

237:                                              ; preds = %227
  store i32 0, ptr %19, align 4
  br label %238

238:                                              ; preds = %237, %236
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  %239 = load i32, ptr %19, align 4
  switch i32 %239, label %244 [
    i32 0, label %240
  ]

240:                                              ; preds = %238
  br label %241

241:                                              ; preds = %240
  %242 = load ptr, ptr %17, align 8, !tbaa !5
  %243 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %242, i32 1
  store ptr %243, ptr %17, align 8, !tbaa !5
  br label %222

244:                                              ; preds = %238, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  %245 = load i32, ptr %19, align 4
  switch i32 %245, label %292 [
    i32 2, label %246
  ]

246:                                              ; preds = %244
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  %248 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %247, i32 0, i32 5
  %249 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %248)
  %250 = call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %249)
  store ptr %250, ptr %21, align 8, !tbaa !5
  %251 = load ptr, ptr %21, align 8, !tbaa !5
  %252 = icmp ne ptr %251, null
  br i1 %252, label %253, label %285

253:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  %254 = load ptr, ptr %21, align 8, !tbaa !5
  %255 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %254, i32 0, i32 14
  store ptr %255, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  %256 = load ptr, ptr %22, align 8, !tbaa !5
  %257 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %256) #3
  store ptr %257, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  %258 = load ptr, ptr %22, align 8, !tbaa !5
  %259 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %258) #3
  store ptr %259, ptr %24, align 8, !tbaa !5
  br label %260

260:                                              ; preds = %279, %253
  %261 = load ptr, ptr %23, align 8, !tbaa !5
  %262 = load ptr, ptr %24, align 8, !tbaa !5
  %263 = icmp ne ptr %261, %262
  br i1 %263, label %265, label %264

264:                                              ; preds = %260
  store i32 4, ptr %19, align 4
  br label %282

265:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  %266 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %266, ptr %25, align 8, !tbaa !5
  %267 = load ptr, ptr %25, align 8, !tbaa !5
  %268 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %267, i32 0, i32 1
  %269 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %268)
  %270 = load ptr, ptr %6, align 8, !tbaa !5
  %271 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %270, i32 0, i32 1
  %272 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %271)
  %273 = icmp eq i32 %269, %272
  br i1 %273, label %274, label %275

274:                                              ; preds = %265
  store i1 false, ptr %4, align 1
  store i32 1, ptr %19, align 4
  br label %276

275:                                              ; preds = %265
  store i32 0, ptr %19, align 4
  br label %276

276:                                              ; preds = %275, %274
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  %277 = load i32, ptr %19, align 4
  switch i32 %277, label %282 [
    i32 0, label %278
  ]

278:                                              ; preds = %276
  br label %279

279:                                              ; preds = %278
  %280 = load ptr, ptr %23, align 8, !tbaa !5
  %281 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %280, i32 1
  store ptr %281, ptr %23, align 8, !tbaa !5
  br label %260

282:                                              ; preds = %276, %264
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  %283 = load i32, ptr %19, align 4
  switch i32 %283, label %286 [
    i32 4, label %284
  ]

284:                                              ; preds = %282
  br label %285

285:                                              ; preds = %284, %246
  store i32 0, ptr %19, align 4
  br label %286

286:                                              ; preds = %285, %282
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  %287 = load i32, ptr %19, align 4
  switch i32 %287, label %292 [
    i32 0, label %288
  ]

288:                                              ; preds = %286
  br label %289

289:                                              ; preds = %288, %212
  %290 = load i8, ptr %15, align 1, !tbaa !44, !range !41, !noundef !42
  %291 = trunc i8 %290 to i1
  store i1 %291, ptr %4, align 1
  store i32 1, ptr %19, align 4
  br label %292

292:                                              ; preds = %289, %286, %244
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  br label %497

293:                                              ; preds = %54
  %294 = load i32, ptr %7, align 4, !tbaa !9
  %295 = icmp eq i32 %294, 1
  br i1 %295, label %296, label %496

296:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #3
  %297 = load ptr, ptr %6, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %297, i32 0, i32 1
  %299 = load i32, ptr %298, align 4, !tbaa !45
  %300 = icmp eq i32 %299, 1
  br i1 %300, label %301, label %309

301:                                              ; preds = %296
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %302, i32 0, i32 2
  %304 = load i32, ptr %303, align 8, !tbaa !46
  %305 = icmp eq i32 %304, 1
  br i1 %305, label %306, label %309

306:                                              ; preds = %301
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler13block_is_noopERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %40, ptr noundef nonnull align 8 dereferenceable(976) %307)
  br label %309

309:                                              ; preds = %306, %301, %296
  %310 = phi i1 [ false, %301 ], [ false, %296 ], [ %308, %306 ]
  %311 = zext i1 %310 to i8
  store i8 %311, ptr %26, align 1, !tbaa !44
  %312 = load i8, ptr %26, align 1, !tbaa !44, !range !41, !noundef !42
  %313 = trunc i8 %312 to i1
  br i1 %313, label %315, label %314

314:                                              ; preds = %309
  store i1 false, ptr %4, align 1
  store i32 1, ptr %19, align 4
  br label %495

315:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  %316 = load ptr, ptr %6, align 8, !tbaa !5
  %317 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %316, i32 0, i32 4
  %318 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %317)
  %319 = call noundef nonnull align 8 dereferenceable(976) ptr @_ZNK11spirv_cross8Compiler3getINS_9SPIRBlockEEERKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %318)
  store ptr %319, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  %320 = load ptr, ptr %27, align 8, !tbaa !5
  %321 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %320, i32 0, i32 10
  %322 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %321)
  %323 = call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %322)
  store ptr %323, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  %324 = load ptr, ptr %27, align 8, !tbaa !5
  %325 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %324, i32 0, i32 9
  %326 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %325)
  %327 = call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %326)
  store ptr %327, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  %328 = load ptr, ptr %6, align 8, !tbaa !5
  %329 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %328, i32 0, i32 5
  %330 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %329)
  %331 = call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %330)
  store ptr %331, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #3
  %332 = load ptr, ptr %27, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %332, i32 0, i32 10
  %334 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %333)
  %335 = load ptr, ptr %6, align 8, !tbaa !5
  %336 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %335, i32 0, i32 5
  %337 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %336)
  %338 = icmp eq i32 %334, %337
  br i1 %338, label %351, label %339

339:                                              ; preds = %315
  %340 = load ptr, ptr %28, align 8, !tbaa !5
  %341 = icmp ne ptr %340, null
  br i1 %341, label %342, label %349

342:                                              ; preds = %339
  %343 = load ptr, ptr %30, align 8, !tbaa !5
  %344 = icmp ne ptr %343, null
  br i1 %344, label %345, label %349

345:                                              ; preds = %342
  %346 = load ptr, ptr %28, align 8, !tbaa !5
  %347 = load ptr, ptr %30, align 8, !tbaa !5
  %348 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %40, ptr noundef nonnull align 8 dereferenceable(976) %346, ptr noundef nonnull align 8 dereferenceable(976) %347)
  br label %349

349:                                              ; preds = %345, %342, %339
  %350 = phi i1 [ false, %342 ], [ false, %339 ], [ %348, %345 ]
  br label %351

351:                                              ; preds = %349, %315
  %352 = phi i1 [ true, %315 ], [ %350, %349 ]
  %353 = zext i1 %352 to i8
  store i8 %353, ptr %31, align 1, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #3
  %354 = load ptr, ptr %27, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %354, i32 0, i32 9
  %356 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %355)
  %357 = load ptr, ptr %6, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %357, i32 0, i32 5
  %359 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %358)
  %360 = icmp eq i32 %356, %359
  br i1 %360, label %373, label %361

361:                                              ; preds = %351
  %362 = load ptr, ptr %29, align 8, !tbaa !5
  %363 = icmp ne ptr %362, null
  br i1 %363, label %364, label %371

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

367:                                              ; preds = %364
  %368 = load ptr, ptr %29, align 8, !tbaa !5
  %369 = load ptr, ptr %30, align 8, !tbaa !5
  %370 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %40, ptr noundef nonnull align 8 dereferenceable(976) %368, ptr noundef nonnull align 8 dereferenceable(976) %369)
  br label %371

371:                                              ; preds = %367, %364, %361
  %372 = phi i1 [ false, %364 ], [ false, %361 ], [ %370, %367 ]
  br label %373

373:                                              ; preds = %371, %351
  %374 = phi i1 [ true, %351 ], [ %372, %371 ]
  %375 = zext i1 %374 to i8
  store i8 %375, ptr %32, align 1, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #3
  %376 = load ptr, ptr %27, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %376, i32 0, i32 9
  %378 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %377)
  %379 = load ptr, ptr %6, align 8, !tbaa !5
  %380 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %379, i32 0, i32 5
  %381 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %380)
  %382 = icmp ne i32 %378, %381
  br i1 %382, label %383, label %394

383:                                              ; preds = %373
  %384 = load ptr, ptr %27, align 8, !tbaa !5
  %385 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %384, i32 0, i32 9
  %386 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %385)
  %387 = load ptr, ptr %6, align 8, !tbaa !5
  %388 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %387, i32 0, i32 1
  %389 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %388)
  %390 = icmp ne i32 %386, %389
  br i1 %390, label %391, label %394

391:                                              ; preds = %383
  %392 = load i8, ptr %31, align 1, !tbaa !44, !range !41, !noundef !42
  %393 = trunc i8 %392 to i1
  br label %394

394:                                              ; preds = %391, %383, %373
  %395 = phi i1 [ false, %383 ], [ false, %373 ], [ %393, %391 ]
  %396 = zext i1 %395 to i8
  store i8 %396, ptr %33, align 1, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #3
  %397 = load ptr, ptr %27, align 8, !tbaa !5
  %398 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %397, i32 0, i32 10
  %399 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  %400 = load ptr, ptr %6, align 8, !tbaa !5
  %401 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %400, i32 0, i32 5
  %402 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %401)
  %403 = icmp ne i32 %399, %402
  br i1 %403, label %404, label %415

404:                                              ; preds = %394
  %405 = load ptr, ptr %27, align 8, !tbaa !5
  %406 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %405, i32 0, i32 10
  %407 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %406)
  %408 = load ptr, ptr %6, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %408, i32 0, i32 1
  %410 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %409)
  %411 = icmp ne i32 %407, %410
  br i1 %411, label %412, label %415

412:                                              ; preds = %404
  %413 = load i8, ptr %32, align 1, !tbaa !44, !range !41, !noundef !42
  %414 = trunc i8 %413 to i1
  br label %415

415:                                              ; preds = %412, %404, %394
  %416 = phi i1 [ false, %404 ], [ false, %394 ], [ %414, %412 ]
  %417 = zext i1 %416 to i8
  store i8 %417, ptr %34, align 1, !tbaa !44
  %418 = load ptr, ptr %27, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %418, i32 0, i32 1
  %420 = load i32, ptr %419, align 4, !tbaa !45
  %421 = icmp eq i32 %420, 2
  br i1 %421, label %422, label %435

422:                                              ; preds = %415
  %423 = load ptr, ptr %27, align 8, !tbaa !5
  %424 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %423, i32 0, i32 2
  %425 = load i32, ptr %424, align 8, !tbaa !46
  %426 = icmp eq i32 %425, 0
  br i1 %426, label %427, label %435

427:                                              ; preds = %422
  %428 = load i8, ptr %33, align 1, !tbaa !44, !range !41, !noundef !42
  %429 = trunc i8 %428 to i1
  br i1 %429, label %433, label %430

430:                                              ; preds = %427
  %431 = load i8, ptr %34, align 1, !tbaa !44, !range !41, !noundef !42
  %432 = trunc i8 %431 to i1
  br label %433

433:                                              ; preds = %430, %427
  %434 = phi i1 [ true, %427 ], [ %432, %430 ]
  br label %435

435:                                              ; preds = %433, %422, %415
  %436 = phi i1 [ false, %422 ], [ false, %415 ], [ %434, %433 ]
  %437 = zext i1 %436 to i8
  store i8 %437, ptr %26, align 1, !tbaa !44
  %438 = load i8, ptr %26, align 1, !tbaa !44, !range !41, !noundef !42
  %439 = trunc i8 %438 to i1
  br i1 %439, label %440, label %491

440:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  %441 = load ptr, ptr %6, align 8, !tbaa !5
  %442 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %441, i32 0, i32 5
  %443 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %442)
  %444 = call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %40, i32 noundef %443)
  store ptr %444, ptr %35, align 8, !tbaa !5
  %445 = load ptr, ptr %35, align 8, !tbaa !5
  %446 = icmp ne ptr %445, null
  br i1 %446, label %447, label %487

447:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  %448 = load ptr, ptr %35, align 8, !tbaa !5
  %449 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %448, i32 0, i32 14
  store ptr %449, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  %450 = load ptr, ptr %36, align 8, !tbaa !5
  %451 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %450) #3
  store ptr %451, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  %452 = load ptr, ptr %36, align 8, !tbaa !5
  %453 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %452) #3
  store ptr %453, ptr %38, align 8, !tbaa !5
  br label %454

454:                                              ; preds = %481, %447
  %455 = load ptr, ptr %37, align 8, !tbaa !5
  %456 = load ptr, ptr %38, align 8, !tbaa !5
  %457 = icmp ne ptr %455, %456
  br i1 %457, label %459, label %458

458:                                              ; preds = %454
  store i32 6, ptr %19, align 4
  br label %484

459:                                              ; preds = %454
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  %460 = load ptr, ptr %37, align 8, !tbaa !5
  store ptr %460, ptr %39, align 8, !tbaa !5
  %461 = load ptr, ptr %39, align 8, !tbaa !5
  %462 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %461, i32 0, i32 1
  %463 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %462)
  %464 = load ptr, ptr %6, align 8, !tbaa !5
  %465 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %464, i32 0, i32 1
  %466 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %465)
  %467 = icmp eq i32 %463, %466
  br i1 %467, label %476, label %468

468:                                              ; preds = %459
  %469 = load ptr, ptr %39, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %469, i32 0, i32 1
  %471 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %470)
  %472 = load ptr, ptr %27, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %472, i32 0, i32 10
  %474 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %473)
  %475 = icmp eq i32 %471, %474
  br i1 %475, label %476, label %477

476:                                              ; preds = %468, %459
  store i1 false, ptr %4, align 1
  store i32 1, ptr %19, align 4
  br label %478

477:                                              ; preds = %468
  store i32 0, ptr %19, align 4
  br label %478

478:                                              ; preds = %477, %476
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  %479 = load i32, ptr %19, align 4
  switch i32 %479, label %484 [
    i32 0, label %480
  ]

480:                                              ; preds = %478
  br label %481

481:                                              ; preds = %480
  %482 = load ptr, ptr %37, align 8, !tbaa !5
  %483 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Phi", ptr %482, i32 1
  store ptr %483, ptr %37, align 8, !tbaa !5
  br label %454

484:                                              ; preds = %478, %458
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  %485 = load i32, ptr %19, align 4
  switch i32 %485, label %488 [
    i32 6, label %486
  ]

486:                                              ; preds = %484
  br label %487

487:                                              ; preds = %486, %440
  store i32 0, ptr %19, align 4
  br label %488

488:                                              ; preds = %487, %484
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  %489 = load i32, ptr %19, align 4
  switch i32 %489, label %494 [
    i32 0, label %490
  ]

490:                                              ; preds = %488
  br label %491

491:                                              ; preds = %490, %435
  %492 = load i8, ptr %26, align 1, !tbaa !44, !range !41, !noundef !42
  %493 = trunc i8 %492 to i1
  store i1 %493, ptr %4, align 1
  store i32 1, ptr %19, align 4
  br label %494

494:                                              ; preds = %491, %488
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  br label %495

495:                                              ; preds = %494, %314
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #3
  br label %497

496:                                              ; preds = %293
  store i1 false, ptr %4, align 1
  br label %497

497:                                              ; preds = %496, %495, %292, %50
  %498 = load i1, ptr %4, align 1
  ret i1 %498
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(976), ptr noundef nonnull align 8 dereferenceable(976)) #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, !10, i64 0}
!10 = !{!"_ZTSN11spirv_cross9SPIRBlock6MethodE", !7, i64 0}
!11 = !{!12, !34, i64 792}
!12 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !13, i64 0, !16, i64 12, !17, i64 16, !18, i64 20, !19, i64 24, !19, i64 28, !19, i64 32, !14, i64 36, !14, i64 40, !19, i64 44, !19, i64 48, !19, i64 52, !20, i64 56, !21, i64 72, !25, i64 192, !28, i64 312, !28, i64 400, !31, i64 488, !31, i64 640, !34, i64 792, !34, i64 793, !34, i64 794, !19, i64 796, !19, i64 800, !35, i64 808, !35, i64 864, !38, i64 920}
!13 = !{!"_ZTSN11spirv_cross8IVariantE", !14, i64 8}
!14 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !7, i64 0}
!17 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !7, i64 0}
!18 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !7, i64 0}
!19 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !15, i64 0}
!20 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !7, i64 0, !14, i64 12}
!21 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !22, i64 0, !23, i64 16, !24, i64 24}
!22 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !6, i64 0, !23, i64 8}
!23 = !{!"long", !7, i64 0}
!24 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !7, i64 0}
!25 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !26, i64 0, !23, i64 16, !27, i64 24}
!26 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !6, i64 0, !23, i64 8}
!27 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !7, i64 0}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !29, i64 0, !23, i64 16, !30, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !6, i64 0, !23, i64 8}
!30 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !7, i64 0}
!31 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !32, i64 0, !23, i64 16, !33, i64 24}
!32 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !6, i64 0, !23, i64 8}
!33 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !7, i64 0}
!34 = !{!"bool", !7, i64 0}
!35 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !36, i64 0, !23, i64 16, !37, i64 24}
!36 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !6, i64 0, !23, i64 8}
!37 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !7, i64 0}
!38 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !39, i64 0, !23, i64 16, !40, i64 24}
!39 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !23, i64 8}
!40 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!41 = !{i8 0, i8 2}
!42 = !{}
!43 = !{!12, !34, i64 793}
!44 = !{!34, !34, i64 0}
!45 = !{!12, !16, i64 12}
!46 = !{!12, !17, i64 16}


; 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 i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(976) ptr @_ZNK11spirv_cross8Compiler3getINS_9SPIRBlockEEERKT_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 ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE5beginEv(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_9SPIRBlock3PhiEE3endEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler23block_is_loop_candidateERKNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1, i32 noundef %2) local_unnamed_addr #1 align 2 {
  %4 = getelementptr inbounds i8, ptr %1, i64 792
  %5 = load i8, ptr %4, align 8, !tbaa !5, !range !38, !noundef !39
  %6 = trunc nuw i8 %5 to i1
  br i1 %6, label %.critedge194, label %7

7:                                                ; preds = %3
  %8 = getelementptr inbounds i8, ptr %1, i64 793
  %9 = load i8, ptr %8, align 1, !tbaa !40, !range !38, !noundef !39
  %10 = trunc nuw i8 %9 to i1
  br i1 %10, label %.critedge194, label %11

11:                                               ; preds = %7
  %12 = icmp eq i32 %2, 2
  switch i32 %2, label %.critedge194 [
    i32 2, label %13
    i32 0, label %13
    i32 1, label %101
  ]

13:                                               ; preds = %11, %11
  %14 = getelementptr inbounds i8, ptr %1, i64 48
  %15 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %14)
  %16 = tail call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %15)
  %17 = getelementptr inbounds i8, ptr %1, i64 44
  %18 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  %19 = tail call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %18)
  %20 = getelementptr inbounds i8, ptr %1, i64 28
  %21 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %22 = tail call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %21)
  %23 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %14)
  %24 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %25 = icmp eq i32 %23, %24
  br i1 %25, label %31, label %26

26:                                               ; preds = %13
  %27 = icmp ne ptr %16, null
  %28 = icmp ne ptr %22, null
  %or.cond10 = and i1 %27, %28
  br i1 %or.cond10, label %29, label %31

29:                                               ; preds = %26
  %30 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %16, ptr noundef nonnull align 8 dereferenceable(976) %22)
  br label %31

31:                                               ; preds = %26, %29, %13
  %32 = phi i1 [ true, %13 ], [ false, %26 ], [ %30, %29 ]
  %33 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  %34 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %35 = icmp eq i32 %33, %34
  br i1 %35, label %41, label %36

36:                                               ; preds = %31
  %37 = icmp ne ptr %19, null
  %38 = icmp ne ptr %22, null
  %or.cond12 = and i1 %37, %38
  br i1 %or.cond12, label %39, label %41

39:                                               ; preds = %36
  %40 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %19, ptr noundef nonnull align 8 dereferenceable(976) %22)
  br label %41

41:                                               ; preds = %36, %39, %31
  %42 = phi i1 [ true, %31 ], [ false, %36 ], [ %40, %39 ]
  %43 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  %44 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %.not172 = icmp eq i32 %43, %44
  br i1 %.not172, label %49, label %45

45:                                               ; preds = %41
  %46 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  %47 = getelementptr inbounds i8, ptr %1, i64 8
  %48 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %47)
  %.not173 = icmp ne i32 %46, %48
  %spec.select = and i1 %32, %.not173
  br label %49

49:                                               ; preds = %45, %41
  %50 = phi i1 [ false, %41 ], [ %spec.select, %45 ]
  %51 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %14)
  %52 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %.not174 = icmp eq i32 %51, %52
  br i1 %.not174, label %57, label %53

53:                                               ; preds = %49
  %54 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %14)
  %55 = getelementptr inbounds i8, ptr %1, i64 8
  %56 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %55)
  %.not175 = icmp ne i32 %54, %56
  %spec.select181 = and i1 %42, %.not175
  br label %57

57:                                               ; preds = %53, %49
  %58 = phi i1 [ false, %49 ], [ %spec.select181, %53 ]
  %59 = getelementptr inbounds i8, ptr %1, i64 12
  %60 = load i32, ptr %59, align 4, !tbaa !41
  %61 = icmp eq i32 %60, 2
  %62 = getelementptr inbounds i8, ptr %1, i64 16
  %63 = load i32, ptr %62, align 8
  %64 = icmp eq i32 %63, 1
  %or.cond = select i1 %61, i1 %64, i1 false
  %65 = or i1 %50, %58
  %spec.select206 = and i1 %65, %or.cond
  %or.cond14 = and i1 %12, %50
  %or.cond184 = and i1 %or.cond14, %or.cond
  br i1 %or.cond184, label %66, label %71

66:                                               ; preds = %57
  %67 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %17)
  %68 = getelementptr inbounds i8, ptr %1, i64 32
  %69 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %68)
  %70 = icmp eq i32 %67, %69
  br i1 %70, label %78, label %.critedge194

71:                                               ; preds = %57
  %or.cond16 = and i1 %12, %58
  %or.cond185 = and i1 %or.cond16, %or.cond
  br i1 %or.cond185, label %72, label %77

72:                                               ; preds = %71
  %73 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %14)
  %74 = getelementptr inbounds i8, ptr %1, i64 32
  %75 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %74)
  %76 = icmp eq i32 %73, %75
  br i1 %76, label %78, label %.critedge194

77:                                               ; preds = %71
  br i1 %spec.select206, label %78, label %.critedge194

78:                                               ; preds = %72, %66, %77
  %79 = getelementptr inbounds i8, ptr %1, i64 192
  %80 = tail call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %79) #2
  %81 = tail call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %79) #2
  %.not176216 = icmp eq ptr %80, %81
  br i1 %.not176216, label %.critedge, label %.lr.ph218

.lr.ph218:                                        ; preds = %78
  %82 = getelementptr inbounds i8, ptr %1, i64 8
  br label %85

83:                                               ; preds = %85
  %84 = getelementptr inbounds i8, ptr %.0146217, i64 12
  %.not176 = icmp eq ptr %84, %81
  br i1 %.not176, label %.critedge, label %85

85:                                               ; preds = %.lr.ph218, %83
  %.0146217 = phi ptr [ %80, %.lr.ph218 ], [ %84, %83 ]
  %86 = getelementptr inbounds i8, ptr %.0146217, i64 4
  %87 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
  %88 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
  %.not177 = icmp eq i32 %87, %88
  br i1 %.not177, label %.critedge194, label %83

.critedge:                                        ; preds = %83, %78
  %89 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %90 = tail call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %89)
  %.not178 = icmp eq ptr %90, null
  br i1 %.not178, label %.critedge194, label %91

91:                                               ; preds = %.critedge
  %92 = getelementptr inbounds i8, ptr %90, i64 192
  %93 = tail call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %92) #2
  %94 = tail call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %92) #2
  %.not179219 = icmp eq ptr %93, %94
  br i1 %.not179219, label %.critedge194, label %.lr.ph221

.lr.ph221:                                        ; preds = %91
  %95 = getelementptr inbounds i8, ptr %1, i64 8
  br label %96

96:                                               ; preds = %96, %.lr.ph221
  %.0155220 = phi ptr [ %93, %.lr.ph221 ], [ %100, %96 ]
  %97 = getelementptr inbounds i8, ptr %.0155220, i64 4
  %98 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %97)
  %99 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %95)
  %.not180.not = icmp ne i32 %98, %99
  %100 = getelementptr inbounds i8, ptr %.0155220, i64 12
  %.not179 = icmp ne ptr %100, %94
  %or.cond235.not = select i1 %.not180.not, i1 %.not179, i1 false
  br i1 %or.cond235.not, label %96, label %.critedge194

101:                                              ; preds = %11
  %102 = getelementptr inbounds i8, ptr %1, i64 12
  %103 = load i32, ptr %102, align 4, !tbaa !41
  %104 = icmp eq i32 %103, 1
  %105 = getelementptr inbounds i8, ptr %1, i64 16
  %106 = load i32, ptr %105, align 8
  %107 = icmp eq i32 %106, 1
  %or.cond192 = select i1 %104, i1 %107, i1 false
  br i1 %or.cond192, label %108, label %.critedge194

108:                                              ; preds = %101
  %109 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler13block_is_noopERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
  br i1 %109, label %110, label %.critedge194

110:                                              ; preds = %108
  %111 = getelementptr inbounds i8, ptr %1, i64 24
  %112 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %111)
  %113 = tail call noundef nonnull align 8 dereferenceable(976) ptr @_ZNK11spirv_cross8Compiler3getINS_9SPIRBlockEEERKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %112)
  %114 = getelementptr inbounds i8, ptr %113, i64 48
  %115 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %114)
  %116 = tail call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %115)
  %117 = getelementptr inbounds i8, ptr %113, i64 44
  %118 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %117)
  %119 = tail call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %118)
  %120 = getelementptr inbounds i8, ptr %1, i64 28
  %121 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %120)
  %122 = tail call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %121)
  %123 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %114)
  %124 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %120)
  %125 = icmp eq i32 %123, %124
  br i1 %125, label %131, label %126

126:                                              ; preds = %110
  %127 = icmp ne ptr %116, null
  %128 = icmp ne ptr %122, null
  %or.cond18 = and i1 %127, %128
  br i1 %or.cond18, label %129, label %131

129:                                              ; preds = %126
  %130 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %116, ptr noundef nonnull align 8 dereferenceable(976) %122)
  br label %131

131:                                              ; preds = %126, %129, %110
  %132 = phi i1 [ true, %110 ], [ false, %126 ], [ %130, %129 ]
  %133 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %117)
  %134 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %120)
  %135 = icmp eq i32 %133, %134
  br i1 %135, label %141, label %136

136:                                              ; preds = %131
  %137 = icmp ne ptr %119, null
  %138 = icmp ne ptr %122, null
  %or.cond20 = and i1 %137, %138
  br i1 %or.cond20, label %139, label %141

139:                                              ; preds = %136
  %140 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %119, ptr noundef nonnull align 8 dereferenceable(976) %122)
  br label %141

141:                                              ; preds = %136, %139, %131
  %142 = phi i1 [ true, %131 ], [ false, %136 ], [ %140, %139 ]
  %143 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %117)
  %144 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %120)
  %.not = icmp eq i32 %143, %144
  br i1 %.not, label %149, label %145

145:                                              ; preds = %141
  %146 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %117)
  %147 = getelementptr inbounds i8, ptr %1, i64 8
  %148 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %147)
  %.not167 = icmp ne i32 %146, %148
  %spec.select195 = and i1 %132, %.not167
  br label %149

149:                                              ; preds = %145, %141
  %150 = phi i1 [ false, %141 ], [ %spec.select195, %145 ]
  %151 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %114)
  %152 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %120)
  %.not168 = icmp eq i32 %151, %152
  br i1 %.not168, label %157, label %153

153:                                              ; preds = %149
  %154 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %114)
  %155 = getelementptr inbounds i8, ptr %1, i64 8
  %156 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %155)
  %.not169 = icmp ne i32 %154, %156
  %spec.select196 = and i1 %142, %.not169
  br label %157

157:                                              ; preds = %153, %149
  %158 = phi i1 [ false, %149 ], [ %spec.select196, %153 ]
  %159 = getelementptr inbounds i8, ptr %113, i64 12
  %160 = load i32, ptr %159, align 4, !tbaa !41
  %161 = icmp eq i32 %160, 2
  %162 = getelementptr inbounds i8, ptr %113, i64 16
  %163 = load i32, ptr %162, align 8
  %164 = icmp eq i32 %163, 0
  %or.cond199 = select i1 %161, i1 %164, i1 false
  %165 = or i1 %150, %158
  %or.cond231 = and i1 %or.cond199, %165
  br i1 %or.cond231, label %166, label %.critedge194

166:                                              ; preds = %157
  %167 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %120)
  %168 = tail call noundef ptr @_ZNK11spirv_cross8Compiler9maybe_getINS_9SPIRBlockEEEPKT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %167)
  %.not170 = icmp eq ptr %168, null
  br i1 %.not170, label %.critedge194, label %169

169:                                              ; preds = %166
  %170 = getelementptr inbounds i8, ptr %168, i64 192
  %171 = tail call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %170) #2
  %172 = tail call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock3PhiEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %170) #2
  %.not171211 = icmp eq ptr %171, %172
  br i1 %.not171211, label %.critedge194, label %.lr.ph

.lr.ph:                                           ; preds = %169
  %173 = getelementptr inbounds i8, ptr %1, i64 8
  br label %176

174:                                              ; preds = %.critedge201
  %175 = getelementptr inbounds i8, ptr %.0145212, i64 12
  %.not171 = icmp eq ptr %175, %172
  br i1 %.not171, label %.critedge194, label %176

176:                                              ; preds = %.lr.ph, %174
  %.0145212 = phi ptr [ %171, %.lr.ph ], [ %175, %174 ]
  %177 = getelementptr inbounds i8, ptr %.0145212, i64 4
  %178 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %177)
  %179 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %173)
  %180 = icmp eq i32 %178, %179
  br i1 %180, label %.critedge194, label %.critedge201

.critedge201:                                     ; preds = %176
  %181 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %177)
  %182 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %114)
  %183 = icmp eq i32 %181, %182
  br i1 %183, label %.critedge194, label %174

.critedge194:                                     ; preds = %.critedge201, %176, %174, %85, %96, %169, %91, %157, %166, %.critedge, %72, %66, %101, %11, %108, %77, %3, %7
  %.16 = phi i1 [ false, %7 ], [ false, %3 ], [ false, %77 ], [ false, %108 ], [ false, %11 ], [ false, %101 ], [ false, %66 ], [ false, %72 ], [ true, %.critedge ], [ true, %166 ], [ false, %157 ], [ true, %91 ], [ true, %169 ], [ %.not180.not, %96 ], [ false, %85 ], [ false, %.critedge201 ], [ false, %176 ], [ true, %174 ]
  ret i1 %.16
}

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(976), ptr noundef nonnull align 8 dereferenceable(976)) 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, !31, i64 792}
!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 = !{i8 0, i8 2}
!39 = !{}
!40 = !{!6, !31, i64 793}
!41 = !{!6, !12, i64 12}


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