; LLVM IR from redhatdragon/EchoEngine :: HAL/ExampleImplimentations/Windows/OpenMP3 (openmp3)

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

%"class.OpenMP3::Decoder" = type <{ ptr, [8320 x i8], [10496 x i8], [2 x [32 x [18 x float]]], [2 x [1024 x float]], ptr, i32, [4 x i8] }>
%"class.OpenMP3::Frame" = type { i8, i8, i32, i8, ptr, i32, i32 }
%"struct.OpenMP3::FrameData" = type { i32, [2 x [4 x i32]], [2 x [2 x i32]], [2 x [2 x i32]], [2 x [2 x float]], [2 x [2 x i32]], [2 x [2 x i8]], [2 x [2 x i8]], [2 x [2 x i32]], [2 x [2 x [3 x i32]]], [2 x [2 x [3 x float]]], [2 x [2 x i32]], [2 x [2 x i32]], [2 x [2 x i32]], [2 x [2 x i32]], [2 x [2 x i32]], [2 x [2 x i32]], [2 x [2 x [21 x i32]]], [2 x [2 x [12 x [3 x i32]]]], [2 x [2 x [576 x float]]] }
%"struct.OpenMP3::Reservoir" = type { [2048 x i32], ptr, i32, i32, i32 }

@_ZN7OpenMP317kScaleFactorSizesE = external dso_local constant [16 x [2 x i32]], align 16

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN7OpenMP37Decoder7Private8ReadMainERS0_RKNS_5FrameE(ptr noundef nonnull align 8 dereferenceable(31636) %0, ptr noundef nonnull align 8 dereferenceable(32) %1) #1 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 i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %24 = load ptr, ptr %4, align 8, !tbaa !5
  %25 = getelementptr inbounds %"class.OpenMP3::Decoder", ptr %24, i32 0, i32 1
  %26 = getelementptr inbounds [8320 x i8], ptr %25, i64 0, i64 0
  %27 = getelementptr inbounds i8, ptr %26, i64 0
  store ptr %27, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  %28 = load ptr, ptr %4, align 8, !tbaa !5
  %29 = getelementptr inbounds %"class.OpenMP3::Decoder", ptr %28, i32 0, i32 2
  %30 = getelementptr inbounds [10496 x i8], ptr %29, i64 0, i64 0
  %31 = getelementptr inbounds i8, ptr %30, i64 0
  store ptr %31, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  %33 = getelementptr inbounds %"class.OpenMP3::Frame", ptr %32, i32 0, i32 2
  %34 = load i32, ptr %33, align 4, !tbaa !9
  %35 = icmp eq i32 %34, 3
  %36 = zext i1 %35 to i64
  %37 = select i1 %35, i32 1, i32 2
  store i32 %37, ptr %8, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %38 = load i32, ptr %8, align 4, !tbaa !13
  %39 = icmp eq i32 %38, 1
  %40 = zext i1 %39 to i64
  %41 = select i1 %39, i32 17, i32 32
  store i32 %41, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %"class.OpenMP3::Frame", ptr %42, i32 0, i32 5
  %44 = load i32, ptr %43, align 8, !tbaa !14
  %45 = load i32, ptr %9, align 4, !tbaa !13
  %46 = sub i32 %44, %45
  store i32 %46, ptr %10, align 4, !tbaa !13
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = load ptr, ptr %7, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %49, i32 0, i32 0
  %51 = load i32, ptr %50, align 4, !tbaa !15
  %52 = load i32, ptr %10, align 4, !tbaa !13
  %53 = call noundef zeroext i1 @_ZZN7OpenMP37Decoder7Private8ReadMainERS0_RKNS_5FrameEEN5Local12ReadMainDataES2_RNS_9ReservoirEjj(ptr noundef nonnull align 8 dereferenceable(31636) %47, ptr noundef nonnull align 8 dereferenceable(8216) %48, i32 noundef %51, i32 noundef %52)
  br i1 %53, label %55, label %54

54:                                               ; preds = %2
  store i1 false, ptr %3, align 1
  store i32 1, ptr %11, align 4
  br label %540

55:                                               ; preds = %2
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.OpenMP3::Reservoir", ptr %56, i32 0, i32 4
  store i32 0, ptr %57, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !13
  br label %58

58:                                               ; preds = %536, %55
  %59 = load i32, ptr %13, align 4, !tbaa !13
  %60 = icmp ult i32 %59, 2
  br i1 %60, label %62, label %61

61:                                               ; preds = %58
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %539

62:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  %64 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %63, i32 0, i32 5
  %65 = load i32, ptr %13, align 4, !tbaa !13
  %66 = zext i32 %65 to i64
  %67 = getelementptr inbounds [2 x [2 x i32]], ptr %64, i64 0, i64 %66
  %68 = getelementptr inbounds [2 x i32], ptr %67, i64 0, i64 0
  store ptr %68, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %69 = load ptr, ptr %7, align 8, !tbaa !5
  %70 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %69, i32 0, i32 17
  %71 = load i32, ptr %13, align 4, !tbaa !13
  %72 = zext i32 %71 to i64
  %73 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %70, i64 0, i64 %72
  %74 = getelementptr inbounds [2 x [21 x i32]], ptr %73, i64 0, i64 0
  store ptr %74, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %75 = load ptr, ptr %7, align 8, !tbaa !5
  %76 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %75, i32 0, i32 18
  %77 = load i32, ptr %13, align 4, !tbaa !13
  %78 = zext i32 %77 to i64
  %79 = getelementptr inbounds [2 x [2 x [12 x [3 x i32]]]], ptr %76, i64 0, i64 %78
  %80 = getelementptr inbounds [2 x [12 x [3 x i32]]], ptr %79, i64 0, i64 0
  store ptr %80, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  store i32 0, ptr %17, align 4, !tbaa !13
  br label %81

81:                                               ; preds = %532, %62
  %82 = load i32, ptr %17, align 4, !tbaa !13
  %83 = load i32, ptr %8, align 4, !tbaa !13
  %84 = icmp ult i32 %82, %83
  br i1 %84, label %86, label %85

85:                                               ; preds = %81
  store i32 5, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %535

86:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = call noundef i32 @_ZN7OpenMP39Reservoir11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(8216) %87)
  store i32 %88, ptr %18, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  %89 = load ptr, ptr %14, align 8, !tbaa !5
  %90 = load i32, ptr %17, align 4, !tbaa !13
  %91 = zext i32 %90 to i64
  %92 = getelementptr inbounds i32, ptr %89, i64 %91
  %93 = load i32, ptr %92, align 4, !tbaa !13
  %94 = zext i32 %93 to i64
  %95 = getelementptr inbounds [16 x [2 x i32]], ptr @_ZN7OpenMP317kScaleFactorSizesE, i64 0, i64 %94
  %96 = getelementptr inbounds [2 x i32], ptr %95, i64 0, i64 0
  store ptr %96, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %97 = load ptr, ptr %19, align 8, !tbaa !5
  %98 = getelementptr inbounds i32, ptr %97, i64 0
  %99 = load i32, ptr %98, align 4, !tbaa !13
  store i32 %99, ptr %20, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %100 = load ptr, ptr %19, align 8, !tbaa !5
  %101 = getelementptr inbounds i32, ptr %100, i64 1
  %102 = load i32, ptr %101, align 4, !tbaa !13
  store i32 %102, ptr %21, align 4, !tbaa !13
  %103 = load ptr, ptr %7, align 8, !tbaa !5
  %104 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %103, i32 0, i32 6
  %105 = load i32, ptr %13, align 4, !tbaa !13
  %106 = zext i32 %105 to i64
  %107 = getelementptr inbounds [2 x [2 x i8]], ptr %104, i64 0, i64 %106
  %108 = load i32, ptr %17, align 4, !tbaa !13
  %109 = zext i32 %108 to i64
  %110 = getelementptr inbounds [2 x i8], ptr %107, i64 0, i64 %109
  %111 = load i8, ptr %110, align 1, !tbaa !19, !range !21, !noundef !22
  %112 = trunc i8 %111 to i1
  br i1 %112, label %113, label %215

113:                                              ; preds = %86
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %114, i32 0, i32 8
  %116 = load i32, ptr %13, align 4, !tbaa !13
  %117 = zext i32 %116 to i64
  %118 = getelementptr inbounds [2 x [2 x i32]], ptr %115, i64 0, i64 %117
  %119 = load i32, ptr %17, align 4, !tbaa !13
  %120 = zext i32 %119 to i64
  %121 = getelementptr inbounds [2 x i32], ptr %118, i64 0, i64 %120
  %122 = load i32, ptr %121, align 4, !tbaa !13
  %123 = icmp eq i32 %122, 2
  br i1 %123, label %124, label %215

124:                                              ; preds = %113
  %125 = load ptr, ptr %7, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %125, i32 0, i32 7
  %127 = load i32, ptr %13, align 4, !tbaa !13
  %128 = zext i32 %127 to i64
  %129 = getelementptr inbounds [2 x [2 x i8]], ptr %126, i64 0, i64 %128
  %130 = load i32, ptr %17, align 4, !tbaa !13
  %131 = zext i32 %130 to i64
  %132 = getelementptr inbounds [2 x i8], ptr %129, i64 0, i64 %131
  %133 = load i8, ptr %132, align 1, !tbaa !19, !range !21, !noundef !22
  %134 = trunc i8 %133 to i1
  br i1 %134, label %135, label %154

135:                                              ; preds = %124
  store i32 0, ptr %12, align 4, !tbaa !13
  br label %136

136:                                              ; preds = %150, %135
  %137 = load i32, ptr %12, align 4, !tbaa !13
  %138 = icmp ult i32 %137, 8
  br i1 %138, label %139, label %153

139:                                              ; preds = %136
  %140 = load ptr, ptr %6, align 8, !tbaa !5
  %141 = load i32, ptr %20, align 4, !tbaa !13
  %142 = call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %140, i32 noundef %141)
  %143 = load ptr, ptr %15, align 8, !tbaa !5
  %144 = load i32, ptr %17, align 4, !tbaa !13
  %145 = zext i32 %144 to i64
  %146 = getelementptr inbounds [21 x i32], ptr %143, i64 %145
  %147 = load i32, ptr %12, align 4, !tbaa !13
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds [21 x i32], ptr %146, i64 0, i64 %148
  store i32 %142, ptr %149, align 4, !tbaa !13
  br label %150

150:                                              ; preds = %139
  %151 = load i32, ptr %12, align 4, !tbaa !13
  %152 = add i32 %151, 1
  store i32 %152, ptr %12, align 4, !tbaa !13
  br label %136, !llvm.loop !23

153:                                              ; preds = %136
  br label %154

154:                                              ; preds = %153, %124
  store i32 0, ptr %12, align 4, !tbaa !13
  br label %155

155:                                              ; preds = %181, %154
  %156 = load i32, ptr %12, align 4, !tbaa !13
  %157 = icmp ult i32 %156, 6
  br i1 %157, label %158, label %184

158:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  store i32 0, ptr %22, align 4, !tbaa !13
  br label %159

159:                                              ; preds = %177, %158
  %160 = load i32, ptr %22, align 4, !tbaa !13
  %161 = icmp ult i32 %160, 3
  br i1 %161, label %163, label %162

162:                                              ; preds = %159
  store i32 14, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  br label %180

163:                                              ; preds = %159
  %164 = load ptr, ptr %6, align 8, !tbaa !5
  %165 = load i32, ptr %20, align 4, !tbaa !13
  %166 = call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %164, i32 noundef %165)
  %167 = load ptr, ptr %16, align 8, !tbaa !5
  %168 = load i32, ptr %17, align 4, !tbaa !13
  %169 = zext i32 %168 to i64
  %170 = getelementptr inbounds [12 x [3 x i32]], ptr %167, i64 %169
  %171 = load i32, ptr %12, align 4, !tbaa !13
  %172 = zext i32 %171 to i64
  %173 = getelementptr inbounds [12 x [3 x i32]], ptr %170, i64 0, i64 %172
  %174 = load i32, ptr %22, align 4, !tbaa !13
  %175 = zext i32 %174 to i64
  %176 = getelementptr inbounds [3 x i32], ptr %173, i64 0, i64 %175
  store i32 %166, ptr %176, align 4, !tbaa !13
  br label %177

177:                                              ; preds = %163
  %178 = load i32, ptr %22, align 4, !tbaa !13
  %179 = add i32 %178, 1
  store i32 %179, ptr %22, align 4, !tbaa !13
  br label %159, !llvm.loop !25

180:                                              ; preds = %162
  br label %181

181:                                              ; preds = %180
  %182 = load i32, ptr %12, align 4, !tbaa !13
  %183 = add i32 %182, 1
  store i32 %183, ptr %12, align 4, !tbaa !13
  br label %155, !llvm.loop !26

184:                                              ; preds = %155
  store i32 6, ptr %12, align 4, !tbaa !13
  br label %185

185:                                              ; preds = %211, %184
  %186 = load i32, ptr %12, align 4, !tbaa !13
  %187 = icmp ult i32 %186, 12
  br i1 %187, label %188, label %214

188:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  store i32 0, ptr %23, align 4, !tbaa !13
  br label %189

189:                                              ; preds = %207, %188
  %190 = load i32, ptr %23, align 4, !tbaa !13
  %191 = icmp ult i32 %190, 3
  br i1 %191, label %193, label %192

192:                                              ; preds = %189
  store i32 20, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %210

193:                                              ; preds = %189
  %194 = load ptr, ptr %6, align 8, !tbaa !5
  %195 = load i32, ptr %21, align 4, !tbaa !13
  %196 = call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %194, i32 noundef %195)
  %197 = load ptr, ptr %16, align 8, !tbaa !5
  %198 = load i32, ptr %17, align 4, !tbaa !13
  %199 = zext i32 %198 to i64
  %200 = getelementptr inbounds [12 x [3 x i32]], ptr %197, i64 %199
  %201 = load i32, ptr %12, align 4, !tbaa !13
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds [12 x [3 x i32]], ptr %200, i64 0, i64 %202
  %204 = load i32, ptr %23, align 4, !tbaa !13
  %205 = zext i32 %204 to i64
  %206 = getelementptr inbounds [3 x i32], ptr %203, i64 0, i64 %205
  store i32 %196, ptr %206, align 4, !tbaa !13
  br label %207

207:                                              ; preds = %193
  %208 = load i32, ptr %23, align 4, !tbaa !13
  %209 = add i32 %208, 1
  store i32 %209, ptr %23, align 4, !tbaa !13
  br label %189, !llvm.loop !27

210:                                              ; preds = %192
  br label %211

211:                                              ; preds = %210
  %212 = load i32, ptr %12, align 4, !tbaa !13
  %213 = add i32 %212, 1
  store i32 %213, ptr %12, align 4, !tbaa !13
  br label %185, !llvm.loop !28

214:                                              ; preds = %185
  br label %504

215:                                              ; preds = %113, %86
  %216 = load ptr, ptr %7, align 8, !tbaa !5
  %217 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %216, i32 0, i32 1
  %218 = load i32, ptr %17, align 4, !tbaa !13
  %219 = zext i32 %218 to i64
  %220 = getelementptr inbounds [2 x [4 x i32]], ptr %217, i64 0, i64 %219
  %221 = getelementptr inbounds [4 x i32], ptr %220, i64 0, i64 0
  %222 = load i32, ptr %221, align 4, !tbaa !13
  %223 = icmp eq i32 %222, 0
  br i1 %223, label %227, label %224

224:                                              ; preds = %215
  %225 = load i32, ptr %13, align 4, !tbaa !13
  %226 = icmp eq i32 %225, 0
  br i1 %226, label %227, label %246

227:                                              ; preds = %224, %215
  store i32 0, ptr %12, align 4, !tbaa !13
  br label %228

228:                                              ; preds = %242, %227
  %229 = load i32, ptr %12, align 4, !tbaa !13
  %230 = icmp ult i32 %229, 6
  br i1 %230, label %231, label %245

231:                                              ; preds = %228
  %232 = load ptr, ptr %6, align 8, !tbaa !5
  %233 = load i32, ptr %20, align 4, !tbaa !13
  %234 = call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %232, i32 noundef %233)
  %235 = load ptr, ptr %15, align 8, !tbaa !5
  %236 = load i32, ptr %17, align 4, !tbaa !13
  %237 = zext i32 %236 to i64
  %238 = getelementptr inbounds [21 x i32], ptr %235, i64 %237
  %239 = load i32, ptr %12, align 4, !tbaa !13
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds [21 x i32], ptr %238, i64 0, i64 %240
  store i32 %234, ptr %241, align 4, !tbaa !13
  br label %242

242:                                              ; preds = %231
  %243 = load i32, ptr %12, align 4, !tbaa !13
  %244 = add i32 %243, 1
  store i32 %244, ptr %12, align 4, !tbaa !13
  br label %228, !llvm.loop !29

245:                                              ; preds = %228
  br label %287

246:                                              ; preds = %224
  %247 = load ptr, ptr %7, align 8, !tbaa !5
  %248 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %247, i32 0, i32 1
  %249 = load i32, ptr %17, align 4, !tbaa !13
  %250 = zext i32 %249 to i64
  %251 = getelementptr inbounds [2 x [4 x i32]], ptr %248, i64 0, i64 %250
  %252 = getelementptr inbounds [4 x i32], ptr %251, i64 0, i64 0
  %253 = load i32, ptr %252, align 4, !tbaa !13
  %254 = icmp eq i32 %253, 1
  br i1 %254, label %255, label %286

255:                                              ; preds = %246
  %256 = load i32, ptr %13, align 4, !tbaa !13
  %257 = icmp eq i32 %256, 1
  br i1 %257, label %258, label %286

258:                                              ; preds = %255
  store i32 0, ptr %12, align 4, !tbaa !13
  br label %259

259:                                              ; preds = %282, %258
  %260 = load i32, ptr %12, align 4, !tbaa !13
  %261 = icmp ult i32 %260, 6
  br i1 %261, label %262, label %285

262:                                              ; preds = %259
  %263 = load ptr, ptr %7, align 8, !tbaa !5
  %264 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %263, i32 0, i32 17
  %265 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %264, i64 0, i64 0
  %266 = load i32, ptr %17, align 4, !tbaa !13
  %267 = zext i32 %266 to i64
  %268 = getelementptr inbounds [2 x [21 x i32]], ptr %265, i64 0, i64 %267
  %269 = load i32, ptr %12, align 4, !tbaa !13
  %270 = zext i32 %269 to i64
  %271 = getelementptr inbounds [21 x i32], ptr %268, i64 0, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !13
  %273 = load ptr, ptr %7, align 8, !tbaa !5
  %274 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %273, i32 0, i32 17
  %275 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %274, i64 0, i64 1
  %276 = load i32, ptr %17, align 4, !tbaa !13
  %277 = zext i32 %276 to i64
  %278 = getelementptr inbounds [2 x [21 x i32]], ptr %275, i64 0, i64 %277
  %279 = load i32, ptr %12, align 4, !tbaa !13
  %280 = zext i32 %279 to i64
  %281 = getelementptr inbounds [21 x i32], ptr %278, i64 0, i64 %280
  store i32 %272, ptr %281, align 4, !tbaa !13
  br label %282

282:                                              ; preds = %262
  %283 = load i32, ptr %12, align 4, !tbaa !13
  %284 = add i32 %283, 1
  store i32 %284, ptr %12, align 4, !tbaa !13
  br label %259, !llvm.loop !30

285:                                              ; preds = %259
  br label %286

286:                                              ; preds = %285, %255, %246
  br label %287

287:                                              ; preds = %286, %245
  %288 = load ptr, ptr %7, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %288, i32 0, i32 1
  %290 = load i32, ptr %17, align 4, !tbaa !13
  %291 = zext i32 %290 to i64
  %292 = getelementptr inbounds [2 x [4 x i32]], ptr %289, i64 0, i64 %291
  %293 = getelementptr inbounds [4 x i32], ptr %292, i64 0, i64 1
  %294 = load i32, ptr %293, align 4, !tbaa !13
  %295 = icmp eq i32 %294, 0
  br i1 %295, label %299, label %296

296:                                              ; preds = %287
  %297 = load i32, ptr %13, align 4, !tbaa !13
  %298 = icmp eq i32 %297, 0
  br i1 %298, label %299, label %318

299:                                              ; preds = %296, %287
  store i32 6, ptr %12, align 4, !tbaa !13
  br label %300

300:                                              ; preds = %314, %299
  %301 = load i32, ptr %12, align 4, !tbaa !13
  %302 = icmp ult i32 %301, 11
  br i1 %302, label %303, label %317

303:                                              ; preds = %300
  %304 = load ptr, ptr %6, align 8, !tbaa !5
  %305 = load i32, ptr %20, align 4, !tbaa !13
  %306 = call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %304, i32 noundef %305)
  %307 = load ptr, ptr %15, align 8, !tbaa !5
  %308 = load i32, ptr %17, align 4, !tbaa !13
  %309 = zext i32 %308 to i64
  %310 = getelementptr inbounds [21 x i32], ptr %307, i64 %309
  %311 = load i32, ptr %12, align 4, !tbaa !13
  %312 = zext i32 %311 to i64
  %313 = getelementptr inbounds [21 x i32], ptr %310, i64 0, i64 %312
  store i32 %306, ptr %313, align 4, !tbaa !13
  br label %314

314:                                              ; preds = %303
  %315 = load i32, ptr %12, align 4, !tbaa !13
  %316 = add i32 %315, 1
  store i32 %316, ptr %12, align 4, !tbaa !13
  br label %300, !llvm.loop !31

317:                                              ; preds = %300
  br label %359

318:                                              ; preds = %296
  %319 = load ptr, ptr %7, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %319, i32 0, i32 1
  %321 = load i32, ptr %17, align 4, !tbaa !13
  %322 = zext i32 %321 to i64
  %323 = getelementptr inbounds [2 x [4 x i32]], ptr %320, i64 0, i64 %322
  %324 = getelementptr inbounds [4 x i32], ptr %323, i64 0, i64 1
  %325 = load i32, ptr %324, align 4, !tbaa !13
  %326 = icmp eq i32 %325, 1
  br i1 %326, label %327, label %358

327:                                              ; preds = %318
  %328 = load i32, ptr %13, align 4, !tbaa !13
  %329 = icmp eq i32 %328, 1
  br i1 %329, label %330, label %358

330:                                              ; preds = %327
  store i32 6, ptr %12, align 4, !tbaa !13
  br label %331

331:                                              ; preds = %354, %330
  %332 = load i32, ptr %12, align 4, !tbaa !13
  %333 = icmp ult i32 %332, 11
  br i1 %333, label %334, label %357

334:                                              ; preds = %331
  %335 = load ptr, ptr %7, align 8, !tbaa !5
  %336 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %335, i32 0, i32 17
  %337 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %336, i64 0, i64 0
  %338 = load i32, ptr %17, align 4, !tbaa !13
  %339 = zext i32 %338 to i64
  %340 = getelementptr inbounds [2 x [21 x i32]], ptr %337, i64 0, i64 %339
  %341 = load i32, ptr %12, align 4, !tbaa !13
  %342 = zext i32 %341 to i64
  %343 = getelementptr inbounds [21 x i32], ptr %340, i64 0, i64 %342
  %344 = load i32, ptr %343, align 4, !tbaa !13
  %345 = load ptr, ptr %7, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %345, i32 0, i32 17
  %347 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %346, i64 0, i64 1
  %348 = load i32, ptr %17, align 4, !tbaa !13
  %349 = zext i32 %348 to i64
  %350 = getelementptr inbounds [2 x [21 x i32]], ptr %347, i64 0, i64 %349
  %351 = load i32, ptr %12, align 4, !tbaa !13
  %352 = zext i32 %351 to i64
  %353 = getelementptr inbounds [21 x i32], ptr %350, i64 0, i64 %352
  store i32 %344, ptr %353, align 4, !tbaa !13
  br label %354

354:                                              ; preds = %334
  %355 = load i32, ptr %12, align 4, !tbaa !13
  %356 = add i32 %355, 1
  store i32 %356, ptr %12, align 4, !tbaa !13
  br label %331, !llvm.loop !32

357:                                              ; preds = %331
  br label %358

358:                                              ; preds = %357, %327, %318
  br label %359

359:                                              ; preds = %358, %317
  %360 = load ptr, ptr %7, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %360, i32 0, i32 1
  %362 = load i32, ptr %17, align 4, !tbaa !13
  %363 = zext i32 %362 to i64
  %364 = getelementptr inbounds [2 x [4 x i32]], ptr %361, i64 0, i64 %363
  %365 = getelementptr inbounds [4 x i32], ptr %364, i64 0, i64 2
  %366 = load i32, ptr %365, align 4, !tbaa !13
  %367 = icmp eq i32 %366, 0
  br i1 %367, label %371, label %368

368:                                              ; preds = %359
  %369 = load i32, ptr %13, align 4, !tbaa !13
  %370 = icmp eq i32 %369, 0
  br i1 %370, label %371, label %390

371:                                              ; preds = %368, %359
  store i32 11, ptr %12, align 4, !tbaa !13
  br label %372

372:                                              ; preds = %386, %371
  %373 = load i32, ptr %12, align 4, !tbaa !13
  %374 = icmp ult i32 %373, 16
  br i1 %374, label %375, label %389

375:                                              ; preds = %372
  %376 = load ptr, ptr %6, align 8, !tbaa !5
  %377 = load i32, ptr %21, align 4, !tbaa !13
  %378 = call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %376, i32 noundef %377)
  %379 = load ptr, ptr %15, align 8, !tbaa !5
  %380 = load i32, ptr %17, align 4, !tbaa !13
  %381 = zext i32 %380 to i64
  %382 = getelementptr inbounds [21 x i32], ptr %379, i64 %381
  %383 = load i32, ptr %12, align 4, !tbaa !13
  %384 = zext i32 %383 to i64
  %385 = getelementptr inbounds [21 x i32], ptr %382, i64 0, i64 %384
  store i32 %378, ptr %385, align 4, !tbaa !13
  br label %386

386:                                              ; preds = %375
  %387 = load i32, ptr %12, align 4, !tbaa !13
  %388 = add i32 %387, 1
  store i32 %388, ptr %12, align 4, !tbaa !13
  br label %372, !llvm.loop !33

389:                                              ; preds = %372
  br label %431

390:                                              ; preds = %368
  %391 = load ptr, ptr %7, align 8, !tbaa !5
  %392 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %391, i32 0, i32 1
  %393 = load i32, ptr %17, align 4, !tbaa !13
  %394 = zext i32 %393 to i64
  %395 = getelementptr inbounds [2 x [4 x i32]], ptr %392, i64 0, i64 %394
  %396 = getelementptr inbounds [4 x i32], ptr %395, i64 0, i64 2
  %397 = load i32, ptr %396, align 4, !tbaa !13
  %398 = icmp eq i32 %397, 1
  br i1 %398, label %399, label %430

399:                                              ; preds = %390
  %400 = load i32, ptr %13, align 4, !tbaa !13
  %401 = icmp eq i32 %400, 1
  br i1 %401, label %402, label %430

402:                                              ; preds = %399
  store i32 11, ptr %12, align 4, !tbaa !13
  br label %403

403:                                              ; preds = %426, %402
  %404 = load i32, ptr %12, align 4, !tbaa !13
  %405 = icmp ult i32 %404, 16
  br i1 %405, label %406, label %429

406:                                              ; preds = %403
  %407 = load ptr, ptr %7, align 8, !tbaa !5
  %408 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %407, i32 0, i32 17
  %409 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %408, i64 0, i64 0
  %410 = load i32, ptr %17, align 4, !tbaa !13
  %411 = zext i32 %410 to i64
  %412 = getelementptr inbounds [2 x [21 x i32]], ptr %409, i64 0, i64 %411
  %413 = load i32, ptr %12, align 4, !tbaa !13
  %414 = zext i32 %413 to i64
  %415 = getelementptr inbounds [21 x i32], ptr %412, i64 0, i64 %414
  %416 = load i32, ptr %415, align 4, !tbaa !13
  %417 = load ptr, ptr %7, align 8, !tbaa !5
  %418 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %417, i32 0, i32 17
  %419 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %418, i64 0, i64 1
  %420 = load i32, ptr %17, align 4, !tbaa !13
  %421 = zext i32 %420 to i64
  %422 = getelementptr inbounds [2 x [21 x i32]], ptr %419, i64 0, i64 %421
  %423 = load i32, ptr %12, align 4, !tbaa !13
  %424 = zext i32 %423 to i64
  %425 = getelementptr inbounds [21 x i32], ptr %422, i64 0, i64 %424
  store i32 %416, ptr %425, align 4, !tbaa !13
  br label %426

426:                                              ; preds = %406
  %427 = load i32, ptr %12, align 4, !tbaa !13
  %428 = add i32 %427, 1
  store i32 %428, ptr %12, align 4, !tbaa !13
  br label %403, !llvm.loop !34

429:                                              ; preds = %403
  br label %430

430:                                              ; preds = %429, %399, %390
  br label %431

431:                                              ; preds = %430, %389
  %432 = load ptr, ptr %7, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %432, i32 0, i32 1
  %434 = load i32, ptr %17, align 4, !tbaa !13
  %435 = zext i32 %434 to i64
  %436 = getelementptr inbounds [2 x [4 x i32]], ptr %433, i64 0, i64 %435
  %437 = getelementptr inbounds [4 x i32], ptr %436, i64 0, i64 3
  %438 = load i32, ptr %437, align 4, !tbaa !13
  %439 = icmp eq i32 %438, 0
  br i1 %439, label %443, label %440

440:                                              ; preds = %431
  %441 = load i32, ptr %13, align 4, !tbaa !13
  %442 = icmp eq i32 %441, 0
  br i1 %442, label %443, label %462

443:                                              ; preds = %440, %431
  store i32 16, ptr %12, align 4, !tbaa !13
  br label %444

444:                                              ; preds = %458, %443
  %445 = load i32, ptr %12, align 4, !tbaa !13
  %446 = icmp ult i32 %445, 21
  br i1 %446, label %447, label %461

447:                                              ; preds = %444
  %448 = load ptr, ptr %6, align 8, !tbaa !5
  %449 = load i32, ptr %21, align 4, !tbaa !13
  %450 = call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %448, i32 noundef %449)
  %451 = load ptr, ptr %15, align 8, !tbaa !5
  %452 = load i32, ptr %17, align 4, !tbaa !13
  %453 = zext i32 %452 to i64
  %454 = getelementptr inbounds [21 x i32], ptr %451, i64 %453
  %455 = load i32, ptr %12, align 4, !tbaa !13
  %456 = zext i32 %455 to i64
  %457 = getelementptr inbounds [21 x i32], ptr %454, i64 0, i64 %456
  store i32 %450, ptr %457, align 4, !tbaa !13
  br label %458

458:                                              ; preds = %447
  %459 = load i32, ptr %12, align 4, !tbaa !13
  %460 = add i32 %459, 1
  store i32 %460, ptr %12, align 4, !tbaa !13
  br label %444, !llvm.loop !35

461:                                              ; preds = %444
  br label %503

462:                                              ; preds = %440
  %463 = load ptr, ptr %7, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %463, i32 0, i32 1
  %465 = load i32, ptr %17, align 4, !tbaa !13
  %466 = zext i32 %465 to i64
  %467 = getelementptr inbounds [2 x [4 x i32]], ptr %464, i64 0, i64 %466
  %468 = getelementptr inbounds [4 x i32], ptr %467, i64 0, i64 3
  %469 = load i32, ptr %468, align 4, !tbaa !13
  %470 = icmp eq i32 %469, 1
  br i1 %470, label %471, label %502

471:                                              ; preds = %462
  %472 = load i32, ptr %13, align 4, !tbaa !13
  %473 = icmp eq i32 %472, 1
  br i1 %473, label %474, label %502

474:                                              ; preds = %471
  store i32 16, ptr %12, align 4, !tbaa !13
  br label %475

475:                                              ; preds = %498, %474
  %476 = load i32, ptr %12, align 4, !tbaa !13
  %477 = icmp ult i32 %476, 21
  br i1 %477, label %478, label %501

478:                                              ; preds = %475
  %479 = load ptr, ptr %7, align 8, !tbaa !5
  %480 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %479, i32 0, i32 17
  %481 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %480, i64 0, i64 0
  %482 = load i32, ptr %17, align 4, !tbaa !13
  %483 = zext i32 %482 to i64
  %484 = getelementptr inbounds [2 x [21 x i32]], ptr %481, i64 0, i64 %483
  %485 = load i32, ptr %12, align 4, !tbaa !13
  %486 = zext i32 %485 to i64
  %487 = getelementptr inbounds [21 x i32], ptr %484, i64 0, i64 %486
  %488 = load i32, ptr %487, align 4, !tbaa !13
  %489 = load ptr, ptr %7, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %489, i32 0, i32 17
  %491 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %490, i64 0, i64 1
  %492 = load i32, ptr %17, align 4, !tbaa !13
  %493 = zext i32 %492 to i64
  %494 = getelementptr inbounds [2 x [21 x i32]], ptr %491, i64 0, i64 %493
  %495 = load i32, ptr %12, align 4, !tbaa !13
  %496 = zext i32 %495 to i64
  %497 = getelementptr inbounds [21 x i32], ptr %494, i64 0, i64 %496
  store i32 %488, ptr %497, align 4, !tbaa !13
  br label %498

498:                                              ; preds = %478
  %499 = load i32, ptr %12, align 4, !tbaa !13
  %500 = add i32 %499, 1
  store i32 %500, ptr %12, align 4, !tbaa !13
  br label %475, !llvm.loop !36

501:                                              ; preds = %475
  br label %502

502:                                              ; preds = %501, %471, %462
  br label %503

503:                                              ; preds = %502, %461
  br label %504

504:                                              ; preds = %503, %214
  %505 = load ptr, ptr %6, align 8, !tbaa !5
  %506 = load ptr, ptr %5, align 8, !tbaa !5
  %507 = getelementptr inbounds %"class.OpenMP3::Frame", ptr %506, i32 0, i32 1
  %508 = load i8, ptr %507, align 1, !tbaa !37
  %509 = zext i8 %508 to i32
  %510 = load ptr, ptr %7, align 8, !tbaa !5
  %511 = load i32, ptr %18, align 4, !tbaa !13
  %512 = load i32, ptr %13, align 4, !tbaa !13
  %513 = load i32, ptr %17, align 4, !tbaa !13
  %514 = load ptr, ptr %7, align 8, !tbaa !5
  %515 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %514, i32 0, i32 19
  %516 = load i32, ptr %13, align 4, !tbaa !13
  %517 = zext i32 %516 to i64
  %518 = getelementptr inbounds [2 x [2 x [576 x float]]], ptr %515, i64 0, i64 %517
  %519 = load i32, ptr %17, align 4, !tbaa !13
  %520 = zext i32 %519 to i64
  %521 = getelementptr inbounds [2 x [576 x float]], ptr %518, i64 0, i64 %520
  %522 = getelementptr inbounds [576 x float], ptr %521, i64 0, i64 0
  %523 = call noundef i32 @_ZN7OpenMP311ReadHuffmanERNS_9ReservoirEjRKNS_9FrameDataEjjjPf(ptr noundef nonnull align 8 dereferenceable(8216) %505, i32 noundef %509, ptr noundef nonnull align 4 dereferenceable(10444) %510, i32 noundef %511, i32 noundef %512, i32 noundef %513, ptr noundef %522)
  %524 = load ptr, ptr %7, align 8, !tbaa !5
  %525 = getelementptr inbounds %"struct.OpenMP3::FrameData", ptr %524, i32 0, i32 16
  %526 = load i32, ptr %13, align 4, !tbaa !13
  %527 = zext i32 %526 to i64
  %528 = getelementptr inbounds [2 x [2 x i32]], ptr %525, i64 0, i64 %527
  %529 = load i32, ptr %17, align 4, !tbaa !13
  %530 = zext i32 %529 to i64
  %531 = getelementptr inbounds [2 x i32], ptr %528, i64 0, i64 %530
  store i32 %523, ptr %531, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %532

532:                                              ; preds = %504
  %533 = load i32, ptr %17, align 4, !tbaa !13
  %534 = add i32 %533, 1
  store i32 %534, ptr %17, align 4, !tbaa !13
  br label %81, !llvm.loop !38

535:                                              ; preds = %85
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  br label %536

536:                                              ; preds = %535
  %537 = load i32, ptr %13, align 4, !tbaa !13
  %538 = add i32 %537, 1
  store i32 %538, ptr %13, align 4, !tbaa !13
  br label %58, !llvm.loop !39

539:                                              ; preds = %61
  store i1 true, ptr %3, align 1
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %540

540:                                              ; preds = %539, %54
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  %541 = load i1, ptr %3, align 1
  ret i1 %541
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZZN7OpenMP37Decoder7Private8ReadMainERS0_RKNS_5FrameEEN5Local12ReadMainDataES2_RNS_9ReservoirEjj(ptr noundef nonnull align 8 dereferenceable(31636), ptr noundef nonnull align 8 dereferenceable(8216), i32 noundef, i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7OpenMP39Reservoir11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(8216)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216), i32 noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN7OpenMP311ReadHuffmanERNS_9ReservoirEjRKNS_9FrameDataEjjjPf(ptr noundef nonnull align 8 dereferenceable(8216), i32 noundef, ptr noundef nonnull align 4 dereferenceable(10444), i32 noundef, i32 noundef, i32 noundef, ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !11, i64 4}
!10 = !{!"_ZTSN7OpenMP35FrameE", !7, i64 0, !7, i64 1, !11, i64 4, !7, i64 8, !6, i64 16, !12, i64 24, !12, i64 28}
!11 = !{!"_ZTSN7OpenMP34ModeE", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!12, !12, i64 0}
!14 = !{!10, !12, i64 24}
!15 = !{!16, !12, i64 0}
!16 = !{!"_ZTSN7OpenMP39FrameDataE", !12, i64 0, !7, i64 4, !7, i64 36, !7, i64 52, !7, i64 68, !7, i64 84, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 124, !7, i64 172, !7, i64 220, !7, i64 236, !7, i64 252, !7, i64 268, !7, i64 284, !7, i64 300, !7, i64 316, !7, i64 652, !7, i64 1228}
!17 = !{!18, !12, i64 8208}
!18 = !{!"_ZTSN7OpenMP39ReservoirE", !7, i64 0, !6, i64 8192, !12, i64 8200, !12, i64 8204, !12, i64 8208}
!19 = !{!20, !20, i64 0}
!20 = !{!"bool", !7, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = distinct !{!34, !24}
!35 = distinct !{!35, !24}
!36 = distinct !{!36, !24}
!37 = !{!10, !7, i64 1}
!38 = distinct !{!38, !24}
!39 = distinct !{!39, !24}


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

@_ZN7OpenMP317kScaleFactorSizesE = external dso_local local_unnamed_addr constant [16 x [2 x i32]], align 16

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN7OpenMP37Decoder7Private8ReadMainERS0_RKNS_5FrameE(ptr noundef nonnull align 8 dereferenceable(31636) %0, ptr nocapture noundef nonnull readonly align 8 dereferenceable(32) %1) local_unnamed_addr #0 align 2 {
  %3 = getelementptr inbounds i8, ptr %0, i64 8
  %4 = getelementptr inbounds i8, ptr %0, i64 8328
  %5 = getelementptr inbounds i8, ptr %1, i64 4
  %6 = load i32, ptr %5, align 4, !tbaa !5
  %7 = icmp ne i32 %6, 3
  %.neg = select i1 %7, i32 -32, i32 -17
  %8 = getelementptr inbounds i8, ptr %1, i64 24
  %9 = load i32, ptr %8, align 8, !tbaa !12
  %10 = add i32 %.neg, %9
  %11 = load i32, ptr %4, align 8, !tbaa !13
  %12 = tail call noundef zeroext i1 @_ZZN7OpenMP37Decoder7Private8ReadMainERS0_RKNS_5FrameEEN5Local12ReadMainDataES2_RNS_9ReservoirEjj(ptr noundef nonnull align 8 dereferenceable(31636) %0, ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %11, i32 noundef %10)
  br i1 %12, label %13, label %.loopexit203

13:                                               ; preds = %2
  %14 = getelementptr inbounds i8, ptr %0, i64 8216
  store i32 0, ptr %14, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %0, i64 8412
  %16 = getelementptr inbounds i8, ptr %0, i64 8644
  %17 = getelementptr inbounds i8, ptr %0, i64 8980
  %18 = getelementptr inbounds i8, ptr %0, i64 8428
  %19 = getelementptr inbounds i8, ptr %0, i64 8436
  %20 = getelementptr inbounds i8, ptr %0, i64 8332
  %21 = getelementptr inbounds i8, ptr %0, i64 8812
  %22 = getelementptr inbounds i8, ptr %0, i64 8432
  %23 = getelementptr inbounds i8, ptr %1, i64 1
  %24 = getelementptr inbounds i8, ptr %0, i64 9556
  %25 = getelementptr inbounds i8, ptr %0, i64 8628
  br label %26

26:                                               ; preds = %13, %32
  %27 = phi i1 [ true, %13 ], [ false, %32 ]
  %indvars.iv242 = phi i64 [ 0, %13 ], [ 1, %32 ]
  %28 = getelementptr inbounds [2 x [2 x i32]], ptr %15, i64 0, i64 %indvars.iv242
  %29 = getelementptr inbounds [2 x [2 x [21 x i32]]], ptr %16, i64 0, i64 %indvars.iv242
  %30 = getelementptr inbounds [2 x [2 x [12 x [3 x i32]]]], ptr %17, i64 0, i64 %indvars.iv242
  %31 = trunc nuw nsw i64 %indvars.iv242 to i32
  br label %33

32:                                               ; preds = %.loopexit
  br i1 %27, label %26, label %.loopexit203, !llvm.loop !17

33:                                               ; preds = %26, %.loopexit
  %34 = phi i1 [ true, %26 ], [ false, %.loopexit ]
  %indvars.iv = phi i64 [ 0, %26 ], [ 1, %.loopexit ]
  %35 = tail call noundef i32 @_ZN7OpenMP39Reservoir11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(8216) %3)
  %36 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv
  %37 = load i32, ptr %36, align 4, !tbaa !19
  %38 = zext i32 %37 to i64
  %39 = getelementptr inbounds [16 x [2 x i32]], ptr @_ZN7OpenMP317kScaleFactorSizesE, i64 0, i64 %38
  %40 = load i32, ptr %39, align 8, !tbaa !19
  %41 = getelementptr inbounds i8, ptr %39, i64 4
  %42 = load i32, ptr %41, align 4, !tbaa !19
  %43 = getelementptr inbounds [2 x [2 x i8]], ptr %18, i64 0, i64 %indvars.iv242, i64 %indvars.iv
  %44 = load i8, ptr %43, align 1, !tbaa !20, !range !22, !noundef !23
  %45 = trunc nuw i8 %44 to i1
  br i1 %45, label %46, label %142

46:                                               ; preds = %33
  %47 = getelementptr inbounds [2 x [2 x i32]], ptr %19, i64 0, i64 %indvars.iv242, i64 %indvars.iv
  %48 = load i32, ptr %47, align 4, !tbaa !19
  %49 = icmp eq i32 %48, 2
  br i1 %49, label %50, label %142

50:                                               ; preds = %46
  %51 = getelementptr inbounds [2 x [2 x i8]], ptr %22, i64 0, i64 %indvars.iv242, i64 %indvars.iv
  %52 = load i8, ptr %51, align 1, !tbaa !20, !range !22, !noundef !23
  %53 = trunc nuw i8 %52 to i1
  br i1 %53, label %.preheader185.preheader, label %.loopexit186

.preheader185.preheader:                          ; preds = %50
  %54 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %55 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 0
  store i32 %54, ptr %55, align 4, !tbaa !19
  %56 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %57 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 1
  store i32 %56, ptr %57, align 4, !tbaa !19
  %58 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %59 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 2
  store i32 %58, ptr %59, align 4, !tbaa !19
  %60 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %61 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 3
  store i32 %60, ptr %61, align 4, !tbaa !19
  %62 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %63 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 4
  store i32 %62, ptr %63, align 4, !tbaa !19
  %64 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %65 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 5
  store i32 %64, ptr %65, align 4, !tbaa !19
  %66 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %67 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 6
  store i32 %66, ptr %67, align 4, !tbaa !19
  %68 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %69 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 7
  store i32 %68, ptr %69, align 4, !tbaa !19
  br label %.loopexit186

.loopexit186:                                     ; preds = %.preheader185.preheader, %50
  %70 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %71 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 0, i64 0
  store i32 %70, ptr %71, align 4, !tbaa !19
  %72 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %73 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 0, i64 1
  store i32 %72, ptr %73, align 8, !tbaa !19
  %74 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %75 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 0, i64 2
  store i32 %74, ptr %75, align 4, !tbaa !19
  %76 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %77 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 1, i64 0
  store i32 %76, ptr %77, align 8, !tbaa !19
  %78 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %79 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 1, i64 1
  store i32 %78, ptr %79, align 4, !tbaa !19
  %80 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %81 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 1, i64 2
  store i32 %80, ptr %81, align 8, !tbaa !19
  %82 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %83 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 2, i64 0
  store i32 %82, ptr %83, align 4, !tbaa !19
  %84 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %85 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 2, i64 1
  store i32 %84, ptr %85, align 8, !tbaa !19
  %86 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %87 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 2, i64 2
  store i32 %86, ptr %87, align 4, !tbaa !19
  %88 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %89 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 3, i64 0
  store i32 %88, ptr %89, align 8, !tbaa !19
  %90 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %91 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 3, i64 1
  store i32 %90, ptr %91, align 4, !tbaa !19
  %92 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %93 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 3, i64 2
  store i32 %92, ptr %93, align 8, !tbaa !19
  %94 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %95 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 4, i64 0
  store i32 %94, ptr %95, align 4, !tbaa !19
  %96 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %97 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 4, i64 1
  store i32 %96, ptr %97, align 8, !tbaa !19
  %98 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %99 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 4, i64 2
  store i32 %98, ptr %99, align 4, !tbaa !19
  %100 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %101 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 5, i64 0
  store i32 %100, ptr %101, align 8, !tbaa !19
  %102 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %103 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 5, i64 1
  store i32 %102, ptr %103, align 4, !tbaa !19
  %104 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %105 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 5, i64 2
  store i32 %104, ptr %105, align 8, !tbaa !19
  %106 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %107 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 6, i64 0
  store i32 %106, ptr %107, align 4, !tbaa !19
  %108 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %109 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 6, i64 1
  store i32 %108, ptr %109, align 8, !tbaa !19
  %110 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %111 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 6, i64 2
  store i32 %110, ptr %111, align 4, !tbaa !19
  %112 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %113 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 7, i64 0
  store i32 %112, ptr %113, align 8, !tbaa !19
  %114 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %115 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 7, i64 1
  store i32 %114, ptr %115, align 4, !tbaa !19
  %116 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %117 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 7, i64 2
  store i32 %116, ptr %117, align 8, !tbaa !19
  %118 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %119 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 8, i64 0
  store i32 %118, ptr %119, align 4, !tbaa !19
  %120 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %121 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 8, i64 1
  store i32 %120, ptr %121, align 8, !tbaa !19
  %122 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %123 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 8, i64 2
  store i32 %122, ptr %123, align 4, !tbaa !19
  %124 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %125 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 9, i64 0
  store i32 %124, ptr %125, align 8, !tbaa !19
  %126 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %127 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 9, i64 1
  store i32 %126, ptr %127, align 4, !tbaa !19
  %128 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %129 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 9, i64 2
  store i32 %128, ptr %129, align 8, !tbaa !19
  %130 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %131 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 10, i64 0
  store i32 %130, ptr %131, align 4, !tbaa !19
  %132 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %133 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 10, i64 1
  store i32 %132, ptr %133, align 8, !tbaa !19
  %134 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %135 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 10, i64 2
  store i32 %134, ptr %135, align 4, !tbaa !19
  %136 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %137 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 11, i64 0
  store i32 %136, ptr %137, align 8, !tbaa !19
  %138 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %139 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 11, i64 1
  store i32 %138, ptr %139, align 4, !tbaa !19
  %140 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %141 = getelementptr inbounds [12 x [3 x i32]], ptr %30, i64 %indvars.iv, i64 11, i64 2
  store i32 %140, ptr %141, align 8, !tbaa !19
  br label %.loopexit

142:                                              ; preds = %46, %33
  %143 = getelementptr inbounds [2 x [4 x i32]], ptr %20, i64 0, i64 %indvars.iv
  %144 = load i32, ptr %143, align 4, !tbaa !19
  %145 = icmp eq i32 %144, 0
  %or.cond = or i1 %27, %145
  br i1 %or.cond, label %.preheader199.preheader, label %158

.preheader199.preheader:                          ; preds = %142
  %146 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %147 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 0
  store i32 %146, ptr %147, align 4, !tbaa !19
  %148 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %149 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 1
  store i32 %148, ptr %149, align 4, !tbaa !19
  %150 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %151 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 2
  store i32 %150, ptr %151, align 4, !tbaa !19
  %152 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %153 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 3
  store i32 %152, ptr %153, align 4, !tbaa !19
  %154 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %155 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 4
  store i32 %154, ptr %155, align 4, !tbaa !19
  %156 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %157 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 5
  store i32 %156, ptr %157, align 4, !tbaa !19
  br label %.loopexit200

158:                                              ; preds = %142
  %159 = icmp eq i32 %144, 1
  br i1 %159, label %.preheader201.preheader, label %.loopexit200

.preheader201.preheader:                          ; preds = %158
  %160 = getelementptr inbounds [2 x [21 x i32]], ptr %16, i64 0, i64 %indvars.iv, i64 0
  %161 = getelementptr inbounds [2 x [21 x i32]], ptr %21, i64 0, i64 %indvars.iv, i64 0
  %162 = load <4 x i32>, ptr %160, align 4, !tbaa !19
  store <4 x i32> %162, ptr %161, align 4, !tbaa !19
  %163 = getelementptr inbounds [2 x [21 x i32]], ptr %16, i64 0, i64 %indvars.iv, i64 4
  %164 = getelementptr inbounds [2 x [21 x i32]], ptr %21, i64 0, i64 %indvars.iv, i64 4
  %165 = load <2 x i32>, ptr %163, align 4, !tbaa !19
  store <2 x i32> %165, ptr %164, align 4, !tbaa !19
  br label %.loopexit200

.loopexit200:                                     ; preds = %.preheader201.preheader, %.preheader199.preheader, %158
  %166 = getelementptr inbounds i8, ptr %143, i64 4
  %167 = load i32, ptr %166, align 8, !tbaa !19
  %168 = icmp eq i32 %167, 0
  %or.cond5 = or i1 %27, %168
  br i1 %or.cond5, label %.preheader195.preheader, label %179

.preheader195.preheader:                          ; preds = %.loopexit200
  %169 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %170 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 6
  store i32 %169, ptr %170, align 4, !tbaa !19
  %171 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %172 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 7
  store i32 %171, ptr %172, align 4, !tbaa !19
  %173 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %174 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 8
  store i32 %173, ptr %174, align 4, !tbaa !19
  %175 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %176 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 9
  store i32 %175, ptr %176, align 4, !tbaa !19
  %177 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %40)
  %178 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 10
  store i32 %177, ptr %178, align 4, !tbaa !19
  br label %.loopexit196

179:                                              ; preds = %.loopexit200
  %180 = icmp eq i32 %167, 1
  br i1 %180, label %.preheader197.preheader, label %.loopexit196

.preheader197.preheader:                          ; preds = %179
  %181 = getelementptr inbounds [2 x [21 x i32]], ptr %16, i64 0, i64 %indvars.iv, i64 6
  %182 = getelementptr inbounds [2 x [21 x i32]], ptr %21, i64 0, i64 %indvars.iv, i64 6
  %183 = load <4 x i32>, ptr %181, align 4, !tbaa !19
  store <4 x i32> %183, ptr %182, align 4, !tbaa !19
  %184 = getelementptr inbounds [2 x [21 x i32]], ptr %16, i64 0, i64 %indvars.iv, i64 10
  %185 = load i32, ptr %184, align 4, !tbaa !19
  %186 = getelementptr inbounds [2 x [21 x i32]], ptr %21, i64 0, i64 %indvars.iv, i64 10
  store i32 %185, ptr %186, align 4, !tbaa !19
  br label %.loopexit196

.loopexit196:                                     ; preds = %.preheader197.preheader, %.preheader195.preheader, %179
  %187 = getelementptr inbounds i8, ptr %143, i64 8
  %188 = load i32, ptr %187, align 4, !tbaa !19
  %189 = icmp eq i32 %188, 0
  %or.cond9 = or i1 %27, %189
  br i1 %or.cond9, label %.preheader191.preheader, label %200

.preheader191.preheader:                          ; preds = %.loopexit196
  %190 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %191 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 11
  store i32 %190, ptr %191, align 4, !tbaa !19
  %192 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %193 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 12
  store i32 %192, ptr %193, align 4, !tbaa !19
  %194 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %195 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 13
  store i32 %194, ptr %195, align 4, !tbaa !19
  %196 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %197 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 14
  store i32 %196, ptr %197, align 4, !tbaa !19
  %198 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %199 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 15
  store i32 %198, ptr %199, align 4, !tbaa !19
  br label %.loopexit192

200:                                              ; preds = %.loopexit196
  %201 = icmp eq i32 %188, 1
  br i1 %201, label %.preheader193.preheader, label %.loopexit192

.preheader193.preheader:                          ; preds = %200
  %202 = getelementptr inbounds [2 x [21 x i32]], ptr %16, i64 0, i64 %indvars.iv, i64 11
  %203 = getelementptr inbounds [2 x [21 x i32]], ptr %21, i64 0, i64 %indvars.iv, i64 11
  %204 = load <4 x i32>, ptr %202, align 4, !tbaa !19
  store <4 x i32> %204, ptr %203, align 4, !tbaa !19
  %205 = getelementptr inbounds [2 x [21 x i32]], ptr %16, i64 0, i64 %indvars.iv, i64 15
  %206 = load i32, ptr %205, align 4, !tbaa !19
  %207 = getelementptr inbounds [2 x [21 x i32]], ptr %21, i64 0, i64 %indvars.iv, i64 15
  store i32 %206, ptr %207, align 4, !tbaa !19
  br label %.loopexit192

.loopexit192:                                     ; preds = %.preheader193.preheader, %.preheader191.preheader, %200
  %208 = getelementptr inbounds i8, ptr %143, i64 12
  %209 = load i32, ptr %208, align 8, !tbaa !19
  %210 = icmp eq i32 %209, 0
  %or.cond13 = or i1 %27, %210
  br i1 %or.cond13, label %.preheader187.preheader, label %221

.preheader187.preheader:                          ; preds = %.loopexit192
  %211 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %212 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 16
  store i32 %211, ptr %212, align 4, !tbaa !19
  %213 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %214 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 17
  store i32 %213, ptr %214, align 4, !tbaa !19
  %215 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %216 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 18
  store i32 %215, ptr %216, align 4, !tbaa !19
  %217 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %218 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 19
  store i32 %217, ptr %218, align 4, !tbaa !19
  %219 = tail call noundef i32 @_ZN7OpenMP39Reservoir8ReadBitsEj(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %42)
  %220 = getelementptr inbounds [21 x i32], ptr %29, i64 %indvars.iv, i64 20
  store i32 %219, ptr %220, align 4, !tbaa !19
  br label %.loopexit

221:                                              ; preds = %.loopexit192
  %222 = icmp eq i32 %209, 1
  br i1 %222, label %.preheader189.preheader, label %.loopexit

.preheader189.preheader:                          ; preds = %221
  %223 = getelementptr inbounds [2 x [21 x i32]], ptr %16, i64 0, i64 %indvars.iv, i64 16
  %224 = getelementptr inbounds [2 x [21 x i32]], ptr %21, i64 0, i64 %indvars.iv, i64 16
  %225 = load <4 x i32>, ptr %223, align 4, !tbaa !19
  store <4 x i32> %225, ptr %224, align 4, !tbaa !19
  %226 = getelementptr inbounds [2 x [21 x i32]], ptr %16, i64 0, i64 %indvars.iv, i64 20
  %227 = load i32, ptr %226, align 4, !tbaa !19
  %228 = getelementptr inbounds [2 x [21 x i32]], ptr %21, i64 0, i64 %indvars.iv, i64 20
  store i32 %227, ptr %228, align 4, !tbaa !19
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader189.preheader, %.preheader187.preheader, %.loopexit186, %221
  %229 = load i8, ptr %23, align 1, !tbaa !24
  %230 = zext i8 %229 to i32
  %231 = getelementptr inbounds [2 x [2 x [576 x float]]], ptr %24, i64 0, i64 %indvars.iv242, i64 %indvars.iv
  %232 = trunc nuw nsw i64 %indvars.iv to i32
  %233 = tail call noundef i32 @_ZN7OpenMP311ReadHuffmanERNS_9ReservoirEjRKNS_9FrameDataEjjjPf(ptr noundef nonnull align 8 dereferenceable(8216) %3, i32 noundef %230, ptr noundef nonnull align 4 dereferenceable(10444) %4, i32 noundef %35, i32 noundef %31, i32 noundef %232, ptr noundef nonnull %231)
  %234 = getelementptr inbounds [2 x [2 x i32]], ptr %25, i64 0, i64 %indvars.iv242, i64 %indvars.iv
  store i32 %233, ptr %234, align 4, !tbaa !19
  %235 = and i1 %7, %34
  br i1 %235, label %33, label %32, !llvm.loop !25

.loopexit203:                                     ; preds = %32, %2
  ret i1 %12
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZZN7OpenMP37Decoder7Private8ReadMainERS0_RKNS_5FrameEEN5Local12ReadMainDataES2_RNS_9ReservoirEjj(ptr noundef nonnull align 8 dereferenceable(31636), ptr noundef nonnull align 8 dereferenceable(8216), i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN7OpenMP311ReadHuffmanERNS_9ReservoirEjRKNS_9FrameDataEjjjPf(ptr noundef nonnull align 8 dereferenceable(8216), i32 noundef, ptr noundef nonnull align 4 dereferenceable(10444), i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

attributes #0 = { 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 #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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!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, !9, i64 4}
!6 = !{!"_ZTSN7OpenMP35FrameE", !7, i64 0, !7, i64 1, !9, i64 4, !7, i64 8, !10, i64 16, !11, i64 24, !11, i64 28}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!"_ZTSN7OpenMP34ModeE", !7, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!6, !11, i64 24}
!13 = !{!14, !11, i64 0}
!14 = !{!"_ZTSN7OpenMP39FrameDataE", !11, i64 0, !7, i64 4, !7, i64 36, !7, i64 52, !7, i64 68, !7, i64 84, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 124, !7, i64 172, !7, i64 220, !7, i64 236, !7, i64 252, !7, i64 268, !7, i64 284, !7, i64 300, !7, i64 316, !7, i64 652, !7, i64 1228}
!15 = !{!16, !11, i64 8208}
!16 = !{!"_ZTSN7OpenMP39ReservoirE", !7, i64 0, !10, i64 8192, !11, i64 8200, !11, i64 8204, !11, i64 8208}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!11, !11, i64 0}
!20 = !{!21, !21, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = !{!6, !7, i64 1}
!25 = distinct !{!25, !18}


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