; LLVM IR from mncoppola/rpef :: utilities_src/squashfs4.2/lzma465/CPP/7zip/Compress/LZMA_Alone (LzmaBench)

; 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.CBenchEncoders = type { ptr }
%class.CBaseRandomGenerator = type { i32, i32 }
%class.CBenchProgressStatus = type { i32, i8 }
%struct.CBenchInfo = type <{ i64, i64, i64, i64, i64, i64, i32, [4 x i8] }>
%struct.CEncoderInfo = type { %class.CMyComPtr, [2 x ptr], [2 x %class.CMyComPtr.0], i32, [2 x %"struct.CEncoderInfo::CDecoderInfo"], [2 x %class.CMyComPtr], [2 x i32], ptr, %class.CMyComPtr.1, ptr, i32, i32, i32, %class.CBenchRandomGenerator, ptr, %class.CMyComPtr.1 }
%class.CMyComPtr = type { ptr }
%class.CMyComPtr.0 = type { ptr }
%"struct.CEncoderInfo::CDecoderInfo" = type { ptr, i32, i8 }
%class.CBenchRandomGenerator = type { %class.CBenchBuffer, ptr }
%class.CBenchBuffer = type { ptr, i64, ptr }
%class.CMyComPtr.1 = type { ptr }
%class.CBenchProgressInfo = type { %struct.ICompressProgressInfo, %class.CMyUnknownImp, ptr, %struct.CBenchInfo, i32, ptr }
%struct.ICompressProgressInfo = type { %struct.IUnknown }
%struct.IUnknown = type { ptr }
%class.CMyUnknownImp = 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 uwtable
declare dso_local void @_Z12SetStartTimeR10CBenchInfo(ptr noundef nonnull align 8 dereferenceable(52)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13SetFinishTimeRK10CBenchInfoRS_(ptr noundef nonnull align 8 dereferenceable(52), ptr noundef nonnull align 8 dereferenceable(52)) #1

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #3

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z9LzmaBenchjjP14IBenchCallback(i32 noundef %0, i32 noundef %1, ptr noundef %2) #1 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %struct.CBenchEncoders, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca %class.CBaseRandomGenerator, align 4
  %19 = alloca i32, align 4
  %20 = alloca %class.CBenchProgressStatus, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca %struct.CBenchInfo, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  store i32 %0, ptr %5, align 4, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 1, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 1, ptr %9, align 4, !tbaa !5
  %35 = load i32, ptr %6, align 4, !tbaa !5
  %36 = icmp ult i32 %35, 262144
  br i1 %36, label %43, label %37

37:                                               ; preds = %3
  %38 = load i32, ptr %5, align 4, !tbaa !5
  %39 = icmp ult i32 %38, 1
  br i1 %39, label %43, label %40

40:                                               ; preds = %37
  %41 = load i32, ptr %8, align 4, !tbaa !5
  %42 = icmp ugt i32 %41, 65536
  br i1 %42, label %43, label %44

43:                                               ; preds = %40, %37, %3
  store i32 -2147024809, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %494

44:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %45 = load i32, ptr %8, align 4, !tbaa !5
  call void @_ZN14CBenchEncodersC2Ej(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef %45)
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %46 = getelementptr inbounds %struct.CBenchEncoders, ptr %11, i32 0, i32 0
  %47 = load ptr, ptr %46, align 8, !tbaa !11
  store ptr %47, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %48

48:                                               ; preds = %110, %44
  %49 = load i32, ptr %13, align 4, !tbaa !5
  %50 = load i32, ptr %8, align 4, !tbaa !5
  %51 = icmp ult i32 %49, %50
  br i1 %51, label %52, label %114

52:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %53 = load ptr, ptr %12, align 8, !tbaa !9
  %54 = load i32, ptr %13, align 4, !tbaa !5
  %55 = zext i32 %54 to i64
  %56 = getelementptr inbounds %struct.CEncoderInfo, ptr %53, i64 %55
  store ptr %56, ptr %14, align 8, !tbaa !9
  %57 = load i32, ptr %13, align 4, !tbaa !5
  %58 = icmp eq i32 %57, 0
  br i1 %58, label %59, label %61

59:                                               ; preds = %52
  %60 = load ptr, ptr %7, align 8, !tbaa !9
  br label %62

61:                                               ; preds = %52
  br label %62

62:                                               ; preds = %61, %59
  %63 = phi ptr [ %60, %59 ], [ null, %61 ]
  %64 = load ptr, ptr %14, align 8, !tbaa !9
  %65 = getelementptr inbounds %struct.CEncoderInfo, ptr %64, i32 0, i32 9
  store ptr %63, ptr %65, align 8, !tbaa !13
  %66 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 88) #7
          to label %67 unwind label %78

67:                                               ; preds = %62
  invoke void @_ZN9NCompress5NLzma8CEncoderC1Ev(ptr noundef nonnull align 8 dereferenceable(88) %66)
          to label %68 unwind label %82

68:                                               ; preds = %67
  %69 = load ptr, ptr %14, align 8, !tbaa !9
  %70 = getelementptr inbounds %struct.CEncoderInfo, ptr %69, i32 0, i32 0
  %71 = invoke noundef ptr @_ZN9CMyComPtrI14ICompressCoderEaSEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef %66)
          to label %72 unwind label %78

72:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !5
  br label %73

73:                                               ; preds = %97, %72
  %74 = load i32, ptr %17, align 4, !tbaa !5
  %75 = load i32, ptr %9, align 4, !tbaa !5
  %76 = icmp ult i32 %74, %75
  br i1 %76, label %86, label %77

77:                                               ; preds = %73
  store i32 5, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %109

78:                                               ; preds = %68, %62
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %15, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %16, align 4
  br label %113

82:                                               ; preds = %67
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %15, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %66, i64 noundef 88) #8
  br label %113

86:                                               ; preds = %73
  %87 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 256) #7
          to label %88 unwind label %100

88:                                               ; preds = %86
  invoke void @_ZN9NCompress5NLzma8CDecoderC1Ev(ptr noundef nonnull align 8 dereferenceable(249) %87)
          to label %89 unwind label %104

89:                                               ; preds = %88
  %90 = load ptr, ptr %14, align 8, !tbaa !9
  %91 = getelementptr inbounds %struct.CEncoderInfo, ptr %90, i32 0, i32 5
  %92 = load i32, ptr %17, align 4, !tbaa !5
  %93 = zext i32 %92 to i64
  %94 = getelementptr inbounds [2 x %class.CMyComPtr], ptr %91, i64 0, i64 %93
  %95 = invoke noundef ptr @_ZN9CMyComPtrI14ICompressCoderEaSEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef %87)
          to label %96 unwind label %100

96:                                               ; preds = %89
  br label %97

97:                                               ; preds = %96
  %98 = load i32, ptr %17, align 4, !tbaa !5
  %99 = add i32 %98, 1
  store i32 %99, ptr %17, align 4, !tbaa !5
  br label %73, !llvm.loop !20

100:                                              ; preds = %89, %86
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %15, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %16, align 4
  br label %108

104:                                              ; preds = %88
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %15, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %87, i64 noundef 256) #8
  br label %108

108:                                              ; preds = %104, %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %113

109:                                              ; preds = %77
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %110

110:                                              ; preds = %109
  %111 = load i32, ptr %13, align 4, !tbaa !5
  %112 = add i32 %111, 1
  store i32 %112, ptr %13, align 4, !tbaa !5
  br label %48, !llvm.loop !22

113:                                              ; preds = %108, %82, %78
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %493

114:                                              ; preds = %48
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  invoke void @_ZN20CBaseRandomGeneratorC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %18)
          to label %115 unwind label %134

115:                                              ; preds = %114
  invoke void @_ZN20CBaseRandomGenerator4InitEv(ptr noundef nonnull align 4 dereferenceable(8) %18)
          to label %116 unwind label %134

116:                                              ; preds = %115
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %117

117:                                              ; preds = %146, %116
  %118 = load i32, ptr %13, align 4, !tbaa !5
  %119 = load i32, ptr %8, align 4, !tbaa !5
  %120 = icmp ult i32 %118, %119
  br i1 %120, label %121, label %149

121:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %122 = load ptr, ptr %12, align 8, !tbaa !9
  %123 = load i32, ptr %13, align 4, !tbaa !5
  %124 = zext i32 %123 to i64
  %125 = getelementptr inbounds %struct.CEncoderInfo, ptr %122, i64 %124
  %126 = load i32, ptr %6, align 4, !tbaa !5
  %127 = load i32, ptr %5, align 4, !tbaa !5
  %128 = invoke noundef i32 @_ZN12CEncoderInfo4InitEjjP20CBaseRandomGenerator(ptr noundef nonnull align 8 dereferenceable(192) %125, i32 noundef %126, i32 noundef %127, ptr noundef %18)
          to label %129 unwind label %138

129:                                              ; preds = %121
  store i32 %128, ptr %19, align 4, !tbaa !5
  %130 = load i32, ptr %19, align 4, !tbaa !5
  %131 = icmp ne i32 %130, 0
  br i1 %131, label %132, label %142

132:                                              ; preds = %129
  %133 = load i32, ptr %19, align 4, !tbaa !5
  store i32 %133, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %143

134:                                              ; preds = %115, %114
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %15, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %16, align 4
  br label %492

138:                                              ; preds = %121
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %15, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %492

142:                                              ; preds = %129
  store i32 0, ptr %10, align 4
  br label %143

143:                                              ; preds = %142, %132
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  %144 = load i32, ptr %10, align 4
  switch i32 %144, label %491 [
    i32 0, label %145
  ]

145:                                              ; preds = %143
  br label %146

146:                                              ; preds = %145
  %147 = load i32, ptr %13, align 4, !tbaa !5
  %148 = add i32 %147, 1
  store i32 %148, ptr %13, align 4, !tbaa !5
  br label %117, !llvm.loop !23

149:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %150 = getelementptr inbounds %class.CBenchProgressStatus, ptr %20, i32 0, i32 0
  store i32 0, ptr %150, align 4, !tbaa !24
  %151 = getelementptr inbounds %class.CBenchProgressStatus, ptr %20, i32 0, i32 1
  store i8 1, ptr %151, align 4, !tbaa !27
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %152

152:                                              ; preds = %246, %149
  %153 = load i32, ptr %13, align 4, !tbaa !5
  %154 = load i32, ptr %8, align 4, !tbaa !5
  %155 = icmp ult i32 %153, %154
  br i1 %155, label %156, label %250

156:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %157 = load ptr, ptr %12, align 8, !tbaa !9
  %158 = load i32, ptr %13, align 4, !tbaa !5
  %159 = zext i32 %158 to i64
  %160 = getelementptr inbounds %struct.CEncoderInfo, ptr %157, i64 %159
  store ptr %160, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %161

161:                                              ; preds = %188, %156
  %162 = load i32, ptr %22, align 4, !tbaa !5
  %163 = icmp slt i32 %162, 2
  br i1 %163, label %165, label %164

164:                                              ; preds = %161
  store i32 14, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %200

165:                                              ; preds = %161
  %166 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 96) #7
          to label %167 unwind label %191

167:                                              ; preds = %165
  invoke void @_ZN18CBenchProgressInfoC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %166)
          to label %168 unwind label %195

168:                                              ; preds = %167
  %169 = load ptr, ptr %21, align 8, !tbaa !9
  %170 = getelementptr inbounds %struct.CEncoderInfo, ptr %169, i32 0, i32 1
  %171 = load i32, ptr %22, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [2 x ptr], ptr %170, i64 0, i64 %172
  store ptr %166, ptr %173, align 8, !tbaa !9
  %174 = load ptr, ptr %21, align 8, !tbaa !9
  %175 = getelementptr inbounds %struct.CEncoderInfo, ptr %174, i32 0, i32 2
  %176 = load i32, ptr %22, align 4, !tbaa !5
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds [2 x %class.CMyComPtr.0], ptr %175, i64 0, i64 %177
  %179 = invoke noundef ptr @_ZN9CMyComPtrI21ICompressProgressInfoEaSEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %178, ptr noundef %166)
          to label %180 unwind label %191

180:                                              ; preds = %168
  %181 = load ptr, ptr %21, align 8, !tbaa !9
  %182 = getelementptr inbounds %struct.CEncoderInfo, ptr %181, i32 0, i32 1
  %183 = load i32, ptr %22, align 4, !tbaa !5
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds [2 x ptr], ptr %182, i64 0, i64 %184
  %186 = load ptr, ptr %185, align 8, !tbaa !9
  %187 = getelementptr inbounds %class.CBenchProgressInfo, ptr %186, i32 0, i32 2
  store ptr %20, ptr %187, align 8, !tbaa !28
  br label %188

188:                                              ; preds = %180
  %189 = load i32, ptr %22, align 4, !tbaa !5
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %22, align 4, !tbaa !5
  br label %161, !llvm.loop !35

191:                                              ; preds = %168, %165
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %15, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %16, align 4
  br label %199

195:                                              ; preds = %167
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %15, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %166, i64 noundef 96) #8
  br label %199

199:                                              ; preds = %195, %191
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %249

200:                                              ; preds = %164
  %201 = load i32, ptr %13, align 4, !tbaa !5
  %202 = icmp eq i32 %201, 0
  br i1 %202, label %203, label %227

203:                                              ; preds = %200
  %204 = load ptr, ptr %7, align 8, !tbaa !9
  %205 = load ptr, ptr %21, align 8, !tbaa !9
  %206 = getelementptr inbounds %struct.CEncoderInfo, ptr %205, i32 0, i32 1
  %207 = getelementptr inbounds [2 x ptr], ptr %206, i64 0, i64 0
  %208 = load ptr, ptr %207, align 8, !tbaa !9
  %209 = getelementptr inbounds %class.CBenchProgressInfo, ptr %208, i32 0, i32 5
  store ptr %204, ptr %209, align 8, !tbaa !36
  %210 = load i32, ptr %8, align 4, !tbaa !5
  %211 = load ptr, ptr %21, align 8, !tbaa !9
  %212 = getelementptr inbounds %struct.CEncoderInfo, ptr %211, i32 0, i32 1
  %213 = getelementptr inbounds [2 x ptr], ptr %212, i64 0, i64 0
  %214 = load ptr, ptr %213, align 8, !tbaa !9
  %215 = getelementptr inbounds %class.CBenchProgressInfo, ptr %214, i32 0, i32 3
  %216 = getelementptr inbounds %struct.CBenchInfo, ptr %215, i32 0, i32 6
  store i32 %210, ptr %216, align 8, !tbaa !37
  %217 = load ptr, ptr %21, align 8, !tbaa !9
  %218 = getelementptr inbounds %struct.CEncoderInfo, ptr %217, i32 0, i32 1
  %219 = getelementptr inbounds [2 x ptr], ptr %218, i64 0, i64 0
  %220 = load ptr, ptr %219, align 8, !tbaa !9
  %221 = getelementptr inbounds %class.CBenchProgressInfo, ptr %220, i32 0, i32 3
  invoke void @_Z12SetStartTimeR10CBenchInfo(ptr noundef nonnull align 8 dereferenceable(52) %221)
          to label %222 unwind label %223

222:                                              ; preds = %203
  br label %227

223:                                              ; preds = %203
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %15, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %16, align 4
  br label %249

227:                                              ; preds = %222, %200
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  %228 = load ptr, ptr %21, align 8, !tbaa !9
  %229 = invoke noundef i32 @_ZN12CEncoderInfo6EncodeEv(ptr noundef nonnull align 8 dereferenceable(192) %228)
          to label %230 unwind label %235

230:                                              ; preds = %227
  store i32 %229, ptr %23, align 4, !tbaa !5
  %231 = load i32, ptr %23, align 4, !tbaa !5
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %233, label %239

233:                                              ; preds = %230
  %234 = load i32, ptr %23, align 4, !tbaa !5
  store i32 %234, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %240

235:                                              ; preds = %227
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %15, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %249

239:                                              ; preds = %230
  store i32 0, ptr %10, align 4
  br label %240

240:                                              ; preds = %239, %233
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  %241 = load i32, ptr %10, align 4
  switch i32 %241, label %243 [
    i32 0, label %242
  ]

242:                                              ; preds = %240
  store i32 0, ptr %10, align 4
  br label %243

243:                                              ; preds = %242, %240
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  %244 = load i32, ptr %10, align 4
  switch i32 %244, label %489 [
    i32 0, label %245
  ]

245:                                              ; preds = %243
  br label %246

246:                                              ; preds = %245
  %247 = load i32, ptr %13, align 4, !tbaa !5
  %248 = add i32 %247, 1
  store i32 %248, ptr %13, align 4, !tbaa !5
  br label %152, !llvm.loop !38

249:                                              ; preds = %235, %223, %199
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %490

250:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %251 = getelementptr inbounds %class.CBenchProgressStatus, ptr %20, i32 0, i32 0
  %252 = load i32, ptr %251, align 4, !tbaa !24
  store i32 %252, ptr %24, align 4, !tbaa !5
  %253 = load i32, ptr %24, align 4, !tbaa !5
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %255, label %257

255:                                              ; preds = %250
  %256 = load i32, ptr %24, align 4, !tbaa !5
  store i32 %256, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %258

257:                                              ; preds = %250
  store i32 0, ptr %10, align 4
  br label %258

258:                                              ; preds = %257, %255
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  %259 = load i32, ptr %10, align 4
  switch i32 %259, label %489 [
    i32 0, label %260
  ]

260:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 56, ptr %25) #6
  invoke void @_ZN10CBenchInfoC2Ev(ptr noundef nonnull align 8 dereferenceable(52) %25)
          to label %261 unwind label %298

261:                                              ; preds = %260
  %262 = load ptr, ptr %12, align 8, !tbaa !9
  %263 = getelementptr inbounds %struct.CEncoderInfo, ptr %262, i64 0
  %264 = getelementptr inbounds %struct.CEncoderInfo, ptr %263, i32 0, i32 1
  %265 = getelementptr inbounds [2 x ptr], ptr %264, i64 0, i64 0
  %266 = load ptr, ptr %265, align 8, !tbaa !9
  %267 = getelementptr inbounds %class.CBenchProgressInfo, ptr %266, i32 0, i32 3
  invoke void @_Z13SetFinishTimeRK10CBenchInfoRS_(ptr noundef nonnull align 8 dereferenceable(52) %267, ptr noundef nonnull align 8 dereferenceable(52) %25)
          to label %268 unwind label %298

268:                                              ; preds = %261
  %269 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 4
  store i64 0, ptr %269, align 8, !tbaa !39
  %270 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 5
  store i64 0, ptr %270, align 8, !tbaa !40
  %271 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 6
  store i32 1, ptr %271, align 8, !tbaa !41
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %272

272:                                              ; preds = %295, %268
  %273 = load i32, ptr %13, align 4, !tbaa !5
  %274 = load i32, ptr %8, align 4, !tbaa !5
  %275 = icmp ult i32 %273, %274
  br i1 %275, label %276, label %302

276:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %277 = load ptr, ptr %12, align 8, !tbaa !9
  %278 = load i32, ptr %13, align 4, !tbaa !5
  %279 = zext i32 %278 to i64
  %280 = getelementptr inbounds %struct.CEncoderInfo, ptr %277, i64 %279
  store ptr %280, ptr %26, align 8, !tbaa !9
  %281 = load ptr, ptr %26, align 8, !tbaa !9
  %282 = getelementptr inbounds %struct.CEncoderInfo, ptr %281, i32 0, i32 11
  %283 = load i32, ptr %282, align 4, !tbaa !42
  %284 = zext i32 %283 to i64
  %285 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 4
  %286 = load i64, ptr %285, align 8, !tbaa !39
  %287 = add i64 %286, %284
  store i64 %287, ptr %285, align 8, !tbaa !39
  %288 = load ptr, ptr %26, align 8, !tbaa !9
  %289 = getelementptr inbounds %struct.CEncoderInfo, ptr %288, i32 0, i32 12
  %290 = load i32, ptr %289, align 8, !tbaa !43
  %291 = zext i32 %290 to i64
  %292 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 5
  %293 = load i64, ptr %292, align 8, !tbaa !40
  %294 = add i64 %293, %291
  store i64 %294, ptr %292, align 8, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %295

295:                                              ; preds = %276
  %296 = load i32, ptr %13, align 4, !tbaa !5
  %297 = add i32 %296, 1
  store i32 %297, ptr %13, align 4, !tbaa !5
  br label %272, !llvm.loop !44

298:                                              ; preds = %261, %260
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %15, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %16, align 4
  br label %488

302:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  %303 = load ptr, ptr %7, align 8, !tbaa !9
  %304 = load ptr, ptr %303, align 8, !tbaa !45
  %305 = getelementptr inbounds ptr, ptr %304, i64 0
  %306 = load ptr, ptr %305, align 8
  %307 = invoke noundef i32 %306(ptr noundef nonnull align 8 dereferenceable(8) %303, ptr noundef nonnull align 8 dereferenceable(52) %25, i1 noundef zeroext true)
          to label %308 unwind label %313

308:                                              ; preds = %302
  store i32 %307, ptr %27, align 4, !tbaa !5
  %309 = load i32, ptr %27, align 4, !tbaa !5
  %310 = icmp ne i32 %309, 0
  br i1 %310, label %311, label %317

311:                                              ; preds = %308
  %312 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %312, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %318

313:                                              ; preds = %302
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %15, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %488

317:                                              ; preds = %308
  store i32 0, ptr %10, align 4
  br label %318

318:                                              ; preds = %317, %311
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  %319 = load i32, ptr %10, align 4
  switch i32 %319, label %487 [
    i32 0, label %320
  ]

320:                                              ; preds = %318
  %321 = getelementptr inbounds %class.CBenchProgressStatus, ptr %20, i32 0, i32 0
  store i32 0, ptr %321, align 4, !tbaa !24
  %322 = getelementptr inbounds %class.CBenchProgressStatus, ptr %20, i32 0, i32 1
  store i8 0, ptr %322, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  %323 = load i32, ptr %8, align 4, !tbaa !5
  %324 = load i32, ptr %9, align 4, !tbaa !5
  %325 = mul i32 %323, %324
  store i32 %325, ptr %28, align 4, !tbaa !5
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %326

326:                                              ; preds = %387, %320
  %327 = load i32, ptr %13, align 4, !tbaa !5
  %328 = load i32, ptr %8, align 4, !tbaa !5
  %329 = icmp ult i32 %327, %328
  br i1 %329, label %330, label %391

330:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %331 = load ptr, ptr %12, align 8, !tbaa !9
  %332 = load i32, ptr %13, align 4, !tbaa !5
  %333 = zext i32 %332 to i64
  %334 = getelementptr inbounds %struct.CEncoderInfo, ptr %331, i64 %333
  store ptr %334, ptr %29, align 8, !tbaa !9
  %335 = load ptr, ptr %29, align 8, !tbaa !9
  %336 = getelementptr inbounds %struct.CEncoderInfo, ptr %335, i32 0, i32 11
  %337 = load i32, ptr %336, align 4, !tbaa !42
  %338 = udiv i32 67108864, %337
  %339 = add i32 2, %338
  %340 = load ptr, ptr %29, align 8, !tbaa !9
  %341 = getelementptr inbounds %struct.CEncoderInfo, ptr %340, i32 0, i32 3
  store i32 %339, ptr %341, align 8, !tbaa !47
  %342 = load i32, ptr %13, align 4, !tbaa !5
  %343 = icmp eq i32 %342, 0
  br i1 %343, label %344, label %368

344:                                              ; preds = %330
  %345 = load ptr, ptr %7, align 8, !tbaa !9
  %346 = load ptr, ptr %29, align 8, !tbaa !9
  %347 = getelementptr inbounds %struct.CEncoderInfo, ptr %346, i32 0, i32 1
  %348 = getelementptr inbounds [2 x ptr], ptr %347, i64 0, i64 0
  %349 = load ptr, ptr %348, align 8, !tbaa !9
  %350 = getelementptr inbounds %class.CBenchProgressInfo, ptr %349, i32 0, i32 5
  store ptr %345, ptr %350, align 8, !tbaa !36
  %351 = load i32, ptr %28, align 4, !tbaa !5
  %352 = load ptr, ptr %29, align 8, !tbaa !9
  %353 = getelementptr inbounds %struct.CEncoderInfo, ptr %352, i32 0, i32 1
  %354 = getelementptr inbounds [2 x ptr], ptr %353, i64 0, i64 0
  %355 = load ptr, ptr %354, align 8, !tbaa !9
  %356 = getelementptr inbounds %class.CBenchProgressInfo, ptr %355, i32 0, i32 3
  %357 = getelementptr inbounds %struct.CBenchInfo, ptr %356, i32 0, i32 6
  store i32 %351, ptr %357, align 8, !tbaa !37
  %358 = load ptr, ptr %29, align 8, !tbaa !9
  %359 = getelementptr inbounds %struct.CEncoderInfo, ptr %358, i32 0, i32 1
  %360 = getelementptr inbounds [2 x ptr], ptr %359, i64 0, i64 0
  %361 = load ptr, ptr %360, align 8, !tbaa !9
  %362 = getelementptr inbounds %class.CBenchProgressInfo, ptr %361, i32 0, i32 3
  invoke void @_Z12SetStartTimeR10CBenchInfo(ptr noundef nonnull align 8 dereferenceable(52) %362)
          to label %363 unwind label %364

363:                                              ; preds = %344
  br label %368

364:                                              ; preds = %344
  %365 = landingpad { ptr, i32 }
          cleanup
  %366 = extractvalue { ptr, i32 } %365, 0
  store ptr %366, ptr %15, align 8
  %367 = extractvalue { ptr, i32 } %365, 1
  store i32 %367, ptr %16, align 4
  br label %390

368:                                              ; preds = %363, %330
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  %369 = load ptr, ptr %29, align 8, !tbaa !9
  %370 = invoke noundef i32 @_ZN12CEncoderInfo6DecodeEj(ptr noundef nonnull align 8 dereferenceable(192) %369, i32 noundef 0)
          to label %371 unwind label %376

371:                                              ; preds = %368
  store i32 %370, ptr %30, align 4, !tbaa !5
  %372 = load i32, ptr %30, align 4, !tbaa !5
  %373 = icmp ne i32 %372, 0
  br i1 %373, label %374, label %380

374:                                              ; preds = %371
  %375 = load i32, ptr %30, align 4, !tbaa !5
  store i32 %375, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %381

376:                                              ; preds = %368
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %15, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  br label %390

380:                                              ; preds = %371
  store i32 0, ptr %10, align 4
  br label %381

381:                                              ; preds = %380, %374
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  %382 = load i32, ptr %10, align 4
  switch i32 %382, label %384 [
    i32 0, label %383
  ]

383:                                              ; preds = %381
  store i32 0, ptr %10, align 4
  br label %384

384:                                              ; preds = %383, %381
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  %385 = load i32, ptr %10, align 4
  switch i32 %385, label %485 [
    i32 0, label %386
  ]

386:                                              ; preds = %384
  br label %387

387:                                              ; preds = %386
  %388 = load i32, ptr %13, align 4, !tbaa !5
  %389 = add i32 %388, 1
  store i32 %389, ptr %13, align 4, !tbaa !5
  br label %326, !llvm.loop !48

390:                                              ; preds = %376, %364
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %486

391:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %392 = getelementptr inbounds %class.CBenchProgressStatus, ptr %20, i32 0, i32 0
  %393 = load i32, ptr %392, align 4, !tbaa !24
  store i32 %393, ptr %31, align 4, !tbaa !5
  %394 = load i32, ptr %31, align 4, !tbaa !5
  %395 = icmp ne i32 %394, 0
  br i1 %395, label %396, label %398

396:                                              ; preds = %391
  %397 = load i32, ptr %31, align 4, !tbaa !5
  store i32 %397, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %399

398:                                              ; preds = %391
  store i32 0, ptr %10, align 4
  br label %399

399:                                              ; preds = %398, %396
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  %400 = load i32, ptr %10, align 4
  switch i32 %400, label %485 [
    i32 0, label %401
  ]

401:                                              ; preds = %399
  %402 = load ptr, ptr %12, align 8, !tbaa !9
  %403 = getelementptr inbounds %struct.CEncoderInfo, ptr %402, i64 0
  %404 = getelementptr inbounds %struct.CEncoderInfo, ptr %403, i32 0, i32 1
  %405 = getelementptr inbounds [2 x ptr], ptr %404, i64 0, i64 0
  %406 = load ptr, ptr %405, align 8, !tbaa !9
  %407 = getelementptr inbounds %class.CBenchProgressInfo, ptr %406, i32 0, i32 3
  invoke void @_Z13SetFinishTimeRK10CBenchInfoRS_(ptr noundef nonnull align 8 dereferenceable(52) %407, ptr noundef nonnull align 8 dereferenceable(52) %25)
          to label %408 unwind label %444

408:                                              ; preds = %401
  %409 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 4
  store i64 0, ptr %409, align 8, !tbaa !39
  %410 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 5
  store i64 0, ptr %410, align 8, !tbaa !40
  %411 = load i32, ptr %9, align 4, !tbaa !5
  %412 = load ptr, ptr %12, align 8, !tbaa !9
  %413 = getelementptr inbounds %struct.CEncoderInfo, ptr %412, i64 0
  %414 = getelementptr inbounds %struct.CEncoderInfo, ptr %413, i32 0, i32 3
  %415 = load i32, ptr %414, align 8, !tbaa !47
  %416 = mul i32 %411, %415
  %417 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 6
  store i32 %416, ptr %417, align 8, !tbaa !41
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %418

418:                                              ; preds = %441, %408
  %419 = load i32, ptr %13, align 4, !tbaa !5
  %420 = load i32, ptr %8, align 4, !tbaa !5
  %421 = icmp ult i32 %419, %420
  br i1 %421, label %422, label %448

422:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %423 = load ptr, ptr %12, align 8, !tbaa !9
  %424 = load i32, ptr %13, align 4, !tbaa !5
  %425 = zext i32 %424 to i64
  %426 = getelementptr inbounds %struct.CEncoderInfo, ptr %423, i64 %425
  store ptr %426, ptr %32, align 8, !tbaa !9
  %427 = load ptr, ptr %32, align 8, !tbaa !9
  %428 = getelementptr inbounds %struct.CEncoderInfo, ptr %427, i32 0, i32 11
  %429 = load i32, ptr %428, align 4, !tbaa !42
  %430 = zext i32 %429 to i64
  %431 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 4
  %432 = load i64, ptr %431, align 8, !tbaa !39
  %433 = add i64 %432, %430
  store i64 %433, ptr %431, align 8, !tbaa !39
  %434 = load ptr, ptr %32, align 8, !tbaa !9
  %435 = getelementptr inbounds %struct.CEncoderInfo, ptr %434, i32 0, i32 12
  %436 = load i32, ptr %435, align 8, !tbaa !43
  %437 = zext i32 %436 to i64
  %438 = getelementptr inbounds %struct.CBenchInfo, ptr %25, i32 0, i32 5
  %439 = load i64, ptr %438, align 8, !tbaa !40
  %440 = add i64 %439, %437
  store i64 %440, ptr %438, align 8, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  br label %441

441:                                              ; preds = %422
  %442 = load i32, ptr %13, align 4, !tbaa !5
  %443 = add i32 %442, 1
  store i32 %443, ptr %13, align 4, !tbaa !5
  br label %418, !llvm.loop !49

444:                                              ; preds = %401
  %445 = landingpad { ptr, i32 }
          cleanup
  %446 = extractvalue { ptr, i32 } %445, 0
  store ptr %446, ptr %15, align 8
  %447 = extractvalue { ptr, i32 } %445, 1
  store i32 %447, ptr %16, align 4
  br label %486

448:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  %449 = load ptr, ptr %7, align 8, !tbaa !9
  %450 = load ptr, ptr %449, align 8, !tbaa !45
  %451 = getelementptr inbounds ptr, ptr %450, i64 1
  %452 = load ptr, ptr %451, align 8
  %453 = invoke noundef i32 %452(ptr noundef nonnull align 8 dereferenceable(8) %449, ptr noundef nonnull align 8 dereferenceable(52) %25, i1 noundef zeroext false)
          to label %454 unwind label %459

454:                                              ; preds = %448
  store i32 %453, ptr %33, align 4, !tbaa !5
  %455 = load i32, ptr %33, align 4, !tbaa !5
  %456 = icmp ne i32 %455, 0
  br i1 %456, label %457, label %463

457:                                              ; preds = %454
  %458 = load i32, ptr %33, align 4, !tbaa !5
  store i32 %458, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %464

459:                                              ; preds = %448
  %460 = landingpad { ptr, i32 }
          cleanup
  %461 = extractvalue { ptr, i32 } %460, 0
  store ptr %461, ptr %15, align 8
  %462 = extractvalue { ptr, i32 } %460, 1
  store i32 %462, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  br label %486

463:                                              ; preds = %454
  store i32 0, ptr %10, align 4
  br label %464

464:                                              ; preds = %463, %457
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  %465 = load i32, ptr %10, align 4
  switch i32 %465, label %485 [
    i32 0, label %466
  ]

466:                                              ; preds = %464
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %467 = load ptr, ptr %7, align 8, !tbaa !9
  %468 = load ptr, ptr %467, align 8, !tbaa !45
  %469 = getelementptr inbounds ptr, ptr %468, i64 1
  %470 = load ptr, ptr %469, align 8
  %471 = invoke noundef i32 %470(ptr noundef nonnull align 8 dereferenceable(8) %467, ptr noundef nonnull align 8 dereferenceable(52) %25, i1 noundef zeroext true)
          to label %472 unwind label %477

472:                                              ; preds = %466
  store i32 %471, ptr %34, align 4, !tbaa !5
  %473 = load i32, ptr %34, align 4, !tbaa !5
  %474 = icmp ne i32 %473, 0
  br i1 %474, label %475, label %481

475:                                              ; preds = %472
  %476 = load i32, ptr %34, align 4, !tbaa !5
  store i32 %476, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %482

477:                                              ; preds = %466
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %15, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  br label %486

481:                                              ; preds = %472
  store i32 0, ptr %10, align 4
  br label %482

482:                                              ; preds = %481, %475
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  %483 = load i32, ptr %10, align 4
  switch i32 %483, label %485 [
    i32 0, label %484
  ]

484:                                              ; preds = %482
  store i32 0, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %485

485:                                              ; preds = %484, %482, %464, %399, %384
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %487

486:                                              ; preds = %477, %459, %444, %390
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %488

487:                                              ; preds = %485, %318
  call void @llvm.lifetime.end.p0(i64 56, ptr %25) #6
  br label %489

488:                                              ; preds = %486, %313, %298
  call void @llvm.lifetime.end.p0(i64 56, ptr %25) #6
  br label %490

489:                                              ; preds = %487, %258, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %491

490:                                              ; preds = %488, %249
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %492

491:                                              ; preds = %489, %143
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @_ZN14CBenchEncodersD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  br label %494

492:                                              ; preds = %490, %138, %134
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %493

493:                                              ; preds = %492, %113
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @_ZN14CBenchEncodersD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %496

494:                                              ; preds = %491, %43
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  %495 = load i32, ptr %4, align 4
  ret i32 %495

496:                                              ; preds = %493
  %497 = load ptr, ptr %15, align 8
  %498 = load i32, ptr %16, align 4
  %499 = insertvalue { ptr, i32 } poison, ptr %497, 0
  %500 = insertvalue { ptr, i32 } %499, i32 %498, 1
  resume { ptr, i32 } %500
}

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

declare void @_ZN9NCompress5NLzma8CEncoderC1Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4

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

declare void @_ZN9NCompress5NLzma8CDecoderC1Ev(ptr noundef nonnull align 8 dereferenceable(249)) unnamed_addr #4

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

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

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

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

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

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

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 = { nobuiltin allocsize(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 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { builtin allocsize(0) }
attributes #8 = { builtin 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTS14CBenchEncoders", !10, i64 0}
!13 = !{!14, !10, i64 120}
!14 = !{!"_ZTS12CEncoderInfo", !15, i64 0, !7, i64 8, !7, i64 24, !6, i64 40, !7, i64 48, !7, i64 80, !7, i64 96, !10, i64 104, !16, i64 112, !10, i64 120, !6, i64 128, !6, i64 132, !6, i64 136, !17, i64 144, !10, i64 176, !16, i64 184}
!15 = !{!"_ZTS9CMyComPtrI14ICompressCoderE", !10, i64 0}
!16 = !{!"_ZTS9CMyComPtrI20ISequentialOutStreamE", !10, i64 0}
!17 = !{!"_ZTS21CBenchRandomGenerator", !18, i64 0, !10, i64 24}
!18 = !{!"_ZTS12CBenchBuffer", !19, i64 8, !10, i64 16}
!19 = !{!"long", !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = distinct !{!23, !21}
!24 = !{!25, !6, i64 0}
!25 = !{!"_ZTS20CBenchProgressStatus", !6, i64 0, !26, i64 4}
!26 = !{!"bool", !7, i64 0}
!27 = !{!25, !26, i64 4}
!28 = !{!29, !10, i64 16}
!29 = !{!"_ZTS18CBenchProgressInfo", !30, i64 0, !32, i64 8, !10, i64 16, !33, i64 24, !6, i64 80, !10, i64 88}
!30 = !{!"_ZTS21ICompressProgressInfo", !31, i64 0}
!31 = !{!"_ZTS8IUnknown"}
!32 = !{!"_ZTS13CMyUnknownImp", !6, i64 0}
!33 = !{!"_ZTS10CBenchInfo", !34, i64 0, !34, i64 8, !34, i64 16, !34, i64 24, !34, i64 32, !34, i64 40, !6, i64 48}
!34 = !{!"long long", !7, i64 0}
!35 = distinct !{!35, !21}
!36 = !{!29, !10, i64 88}
!37 = !{!29, !6, i64 72}
!38 = distinct !{!38, !21}
!39 = !{!33, !34, i64 32}
!40 = !{!33, !34, i64 40}
!41 = !{!33, !6, i64 48}
!42 = !{!14, !6, i64 132}
!43 = !{!14, !6, i64 136}
!44 = distinct !{!44, !21}
!45 = !{!46, !46, i64 0}
!46 = !{!"vtable pointer", !8, i64 0}
!47 = !{!14, !6, i64 40}
!48 = distinct !{!48, !21}
!49 = distinct !{!49, !21}


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

%struct.CBenchEncoders = type { ptr }
%class.CBaseRandomGenerator = type { i32, i32 }
%class.CBenchProgressStatus = type { i32, i8 }
%struct.CBenchInfo = type <{ i64, i64, i64, i64, i64, i64, i32, [4 x i8] }>

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12SetStartTimeR10CBenchInfo(ptr noundef nonnull align 8 dereferenceable(52)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13SetFinishTimeRK10CBenchInfoRS_(ptr noundef nonnull align 8 dereferenceable(52), ptr noundef nonnull align 8 dereferenceable(52)) local_unnamed_addr #1

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z9LzmaBenchjjP14IBenchCallback(i32 noundef %0, i32 noundef %1, ptr noundef %2) local_unnamed_addr #1 personality ptr @__gxx_personality_v0 {
  %4 = alloca %struct.CBenchEncoders, align 8
  %5 = alloca %class.CBaseRandomGenerator, align 4
  %6 = alloca %class.CBenchProgressStatus, align 4
  %7 = alloca %struct.CBenchInfo, align 8
  %8 = icmp ult i32 %1, 262144
  %9 = icmp eq i32 %0, 0
  %or.cond = or i1 %9, %8
  br i1 %or.cond, label %136, label %.critedge

.critedge:                                        ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  call void @_ZN14CBenchEncodersC2Ej(ptr noundef nonnull align 8 dereferenceable(8) %4, i32 noundef 1)
  %10 = load ptr, ptr %4, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %10, i64 120
  store ptr %2, ptr %11, align 8, !tbaa !10
  %12 = invoke noalias noundef nonnull dereferenceable(88) ptr @_Znwm(i64 noundef 88) #7
          to label %13 unwind label %16

13:                                               ; preds = %.critedge
  invoke void @_ZN9NCompress5NLzma8CEncoderC1Ev(ptr noundef nonnull align 8 dereferenceable(88) %12)
          to label %14 unwind label %18

14:                                               ; preds = %13
  %15 = invoke noundef ptr @_ZN9CMyComPtrI14ICompressCoderEaSEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull %12)
          to label %20 unwind label %16

16:                                               ; preds = %14, %.critedge
  %17 = landingpad { ptr, i32 }
          cleanup
  br label %135

18:                                               ; preds = %13
  %19 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %12, i64 noundef 88) #8
  br label %135

20:                                               ; preds = %14
  %21 = invoke noalias noundef nonnull dereferenceable(256) ptr @_Znwm(i64 noundef 256) #7
          to label %22 unwind label %26

22:                                               ; preds = %20
  invoke void @_ZN9NCompress5NLzma8CDecoderC1Ev(ptr noundef nonnull align 8 dereferenceable(249) %21)
          to label %23 unwind label %28

23:                                               ; preds = %22
  %24 = getelementptr inbounds i8, ptr %10, i64 80
  %25 = invoke noundef ptr @_ZN9CMyComPtrI14ICompressCoderEaSEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull %21)
          to label %.critedge190 unwind label %26

26:                                               ; preds = %23, %20
  %27 = landingpad { ptr, i32 }
          cleanup
  br label %135

28:                                               ; preds = %22
  %29 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %21, i64 noundef 256) #8
  br label %135

.critedge190:                                     ; preds = %23
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #6
  invoke void @_ZN20CBaseRandomGeneratorC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %5)
          to label %.critedge198 unwind label %32

.critedge198:                                     ; preds = %.critedge190
  call void @_ZN20CBaseRandomGenerator4InitEv(ptr noundef nonnull align 4 dereferenceable(8) %5)
  %30 = invoke noundef i32 @_ZN12CEncoderInfo4InitEjjP20CBaseRandomGenerator(ptr noundef nonnull align 8 dereferenceable(192) %10, i32 noundef %1, i32 noundef %0, ptr noundef nonnull %5)
          to label %31 unwind label %34

31:                                               ; preds = %.critedge198
  %.not184 = icmp eq i32 %30, 0
  br i1 %.not184, label %.critedge200, label %133, !llvm.loop !18

32:                                               ; preds = %.critedge190
  %33 = landingpad { ptr, i32 }
          cleanup
  br label %134

34:                                               ; preds = %.critedge198
  %35 = landingpad { ptr, i32 }
          cleanup
  br label %134

.critedge200:                                     ; preds = %31
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  store i32 0, ptr %6, align 4, !tbaa !20
  %36 = getelementptr inbounds i8, ptr %6, i64 4
  store i8 1, ptr %36, align 4, !tbaa !23
  %37 = getelementptr inbounds i8, ptr %10, i64 8
  %38 = getelementptr inbounds i8, ptr %10, i64 24
  %39 = invoke noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #7
          to label %40 unwind label %60

40:                                               ; preds = %.critedge200
  invoke void @_ZN18CBenchProgressInfoC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %39)
          to label %41 unwind label %62

41:                                               ; preds = %40
  store ptr %39, ptr %37, align 8, !tbaa !24
  %42 = invoke noundef ptr @_ZN9CMyComPtrI21ICompressProgressInfoEaSEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %38, ptr noundef nonnull %39)
          to label %43 unwind label %60

43:                                               ; preds = %41
  %44 = load ptr, ptr %37, align 8, !tbaa !24
  %45 = getelementptr inbounds i8, ptr %44, i64 16
  store ptr %6, ptr %45, align 8, !tbaa !25
  %46 = invoke noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #7
          to label %47 unwind label %60

47:                                               ; preds = %43
  invoke void @_ZN18CBenchProgressInfoC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %46)
          to label %48 unwind label %62

48:                                               ; preds = %47
  %49 = getelementptr inbounds i8, ptr %10, i64 16
  store ptr %46, ptr %49, align 8, !tbaa !24
  %50 = getelementptr inbounds i8, ptr %10, i64 32
  %51 = invoke noundef ptr @_ZN9CMyComPtrI21ICompressProgressInfoEaSEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull %46)
          to label %52 unwind label %60

52:                                               ; preds = %48
  %53 = load ptr, ptr %49, align 8, !tbaa !24
  %54 = getelementptr inbounds i8, ptr %53, i64 16
  store ptr %6, ptr %54, align 8, !tbaa !25
  %55 = load ptr, ptr %37, align 8, !tbaa !24
  %56 = getelementptr inbounds i8, ptr %55, i64 88
  store ptr %2, ptr %56, align 8, !tbaa !32
  %57 = load ptr, ptr %37, align 8, !tbaa !24
  %58 = getelementptr inbounds i8, ptr %57, i64 72
  store i32 1, ptr %58, align 8, !tbaa !33
  %59 = getelementptr inbounds i8, ptr %57, i64 24
  invoke void @_Z12SetStartTimeR10CBenchInfo(ptr noundef nonnull align 8 dereferenceable(52) %59)
          to label %66 unwind label %64

60:                                               ; preds = %48, %43, %41, %.critedge200
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %132

62:                                               ; preds = %47, %40
  %.lcssa = phi ptr [ %39, %40 ], [ %46, %47 ]
  %63 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %.lcssa, i64 noundef 96) #8
  br label %132

64:                                               ; preds = %52
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %132

66:                                               ; preds = %52
  %67 = invoke noundef i32 @_ZN12CEncoderInfo6EncodeEv(ptr noundef nonnull align 8 dereferenceable(192) %10)
          to label %68 unwind label %69

68:                                               ; preds = %66
  %.not177 = icmp eq i32 %67, 0
  br i1 %.not177, label %71, label %131, !llvm.loop !34

69:                                               ; preds = %66
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %132

71:                                               ; preds = %68
  %72 = load i32, ptr %6, align 4, !tbaa !20
  %.not = icmp eq i32 %72, 0
  br i1 %.not, label %73, label %131

73:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %7) #6
  call void @_ZN10CBenchInfoC2Ev(ptr noundef nonnull align 8 dereferenceable(52) %7)
  %74 = load ptr, ptr %37, align 8, !tbaa !24
  %75 = getelementptr inbounds i8, ptr %74, i64 24
  invoke void @_Z13SetFinishTimeRK10CBenchInfoRS_(ptr noundef nonnull align 8 dereferenceable(52) %75, ptr noundef nonnull align 8 dereferenceable(52) %7)
          to label %.critedge193 unwind label %84

.critedge193:                                     ; preds = %73
  %76 = getelementptr inbounds i8, ptr %7, i64 32
  %77 = getelementptr inbounds i8, ptr %7, i64 48
  store i32 1, ptr %77, align 8, !tbaa !35
  %78 = getelementptr inbounds i8, ptr %10, i64 132
  %79 = load <2 x i32>, ptr %78, align 4, !tbaa !36
  %80 = zext <2 x i32> %79 to <2 x i64>
  store <2 x i64> %80, ptr %76, align 8, !tbaa !37
  %81 = load ptr, ptr %2, align 8, !tbaa !38
  %82 = load ptr, ptr %81, align 8
  %83 = invoke noundef i32 %82(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(52) %7, i1 noundef zeroext true)
          to label %86 unwind label %87

84:                                               ; preds = %73
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %130

86:                                               ; preds = %.critedge193
  %.not169 = icmp eq i32 %83, 0
  br i1 %.not169, label %.critedge202, label %129

87:                                               ; preds = %.critedge193
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %130

.critedge202:                                     ; preds = %86
  store i32 0, ptr %6, align 4, !tbaa !20
  store i8 0, ptr %36, align 4, !tbaa !23
  %89 = load i32, ptr %78, align 4, !tbaa !40
  %90 = udiv i32 67108864, %89
  %91 = add nuw nsw i32 %90, 2
  %92 = getelementptr inbounds i8, ptr %10, i64 40
  store i32 %91, ptr %92, align 8, !tbaa !41
  %93 = load ptr, ptr %37, align 8, !tbaa !24
  %94 = getelementptr inbounds i8, ptr %93, i64 88
  store ptr %2, ptr %94, align 8, !tbaa !32
  %95 = load ptr, ptr %37, align 8, !tbaa !24
  %96 = getelementptr inbounds i8, ptr %95, i64 72
  store i32 1, ptr %96, align 8, !tbaa !33
  %97 = getelementptr inbounds i8, ptr %95, i64 24
  invoke void @_Z12SetStartTimeR10CBenchInfo(ptr noundef nonnull align 8 dereferenceable(52) %97)
          to label %100 unwind label %98

98:                                               ; preds = %.critedge202
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %130

100:                                              ; preds = %.critedge202
  %101 = invoke noundef i32 @_ZN12CEncoderInfo6DecodeEj(ptr noundef nonnull align 8 dereferenceable(192) %10, i32 noundef 0)
          to label %102 unwind label %103

102:                                              ; preds = %100
  %.not176 = icmp eq i32 %101, 0
  br i1 %.not176, label %105, label %129, !llvm.loop !42

103:                                              ; preds = %100
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %130

105:                                              ; preds = %102
  %106 = load i32, ptr %6, align 4, !tbaa !20
  %.not170 = icmp eq i32 %106, 0
  br i1 %.not170, label %107, label %129

107:                                              ; preds = %105
  %108 = load ptr, ptr %37, align 8, !tbaa !24
  %109 = getelementptr inbounds i8, ptr %108, i64 24
  invoke void @_Z13SetFinishTimeRK10CBenchInfoRS_(ptr noundef nonnull align 8 dereferenceable(52) %109, ptr noundef nonnull align 8 dereferenceable(52) %7)
          to label %.critedge196 unwind label %117

.critedge196:                                     ; preds = %107
  %110 = load i32, ptr %92, align 8, !tbaa !41
  store i32 %110, ptr %77, align 8, !tbaa !35
  %111 = load <2 x i32>, ptr %78, align 4, !tbaa !36
  %112 = zext <2 x i32> %111 to <2 x i64>
  store <2 x i64> %112, ptr %76, align 8, !tbaa !37
  %113 = load ptr, ptr %2, align 8, !tbaa !38
  %114 = getelementptr inbounds i8, ptr %113, i64 8
  %115 = load ptr, ptr %114, align 8
  %116 = invoke noundef i32 %115(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(52) %7, i1 noundef zeroext false)
          to label %119 unwind label %120

117:                                              ; preds = %107
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %130

119:                                              ; preds = %.critedge196
  %.not171 = icmp eq i32 %116, 0
  br i1 %.not171, label %122, label %129

120:                                              ; preds = %.critedge196
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %130

122:                                              ; preds = %119
  %123 = load ptr, ptr %2, align 8, !tbaa !38
  %124 = getelementptr inbounds i8, ptr %123, i64 8
  %125 = load ptr, ptr %124, align 8
  %126 = invoke noundef i32 %125(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(52) %7, i1 noundef zeroext true)
          to label %129 unwind label %127

127:                                              ; preds = %122
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %130

129:                                              ; preds = %122, %105, %119, %102, %86
  %.12 = phi i32 [ %83, %86 ], [ %101, %102 ], [ %116, %119 ], [ %106, %105 ], [ %126, %122 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %7) #6
  br label %131

130:                                              ; preds = %117, %120, %127, %103, %98, %87, %84
  %.pn.pn.pn = phi { ptr, i32 } [ %88, %87 ], [ %85, %84 ], [ %128, %127 ], [ %121, %120 ], [ %118, %117 ], [ %104, %103 ], [ %99, %98 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %7) #6
  br label %132

131:                                              ; preds = %68, %71, %129
  %.13 = phi i32 [ %67, %68 ], [ %.12, %129 ], [ %72, %71 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %133

132:                                              ; preds = %64, %69, %62, %60, %130
  %.pn178.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %130 ], [ %70, %69 ], [ %65, %64 ], [ %61, %60 ], [ %63, %62 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %134

133:                                              ; preds = %31, %131
  %.14 = phi i32 [ %30, %31 ], [ %.13, %131 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6
  call void @_ZN14CBenchEncodersD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  br label %136

134:                                              ; preds = %132, %34, %32
  %.pn182 = phi { ptr, i32 } [ %35, %34 ], [ %.pn178.pn.pn, %132 ], [ %33, %32 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6
  br label %135

135:                                              ; preds = %16, %18, %28, %26, %134
  %.pn185.pn.pn = phi { ptr, i32 } [ %.pn182, %134 ], [ %17, %16 ], [ %19, %18 ], [ %27, %26 ], [ %29, %28 ]
  call void @_ZN14CBenchEncodersD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  resume { ptr, i32 } %.pn185.pn.pn

136:                                              ; preds = %3, %133
  %.15 = phi i32 [ %.14, %133 ], [ -2147024809, %3 ]
  ret i32 %.15
}

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

declare void @_ZN9NCompress5NLzma8CEncoderC1Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4

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

declare void @_ZN9NCompress5NLzma8CDecoderC1Ev(ptr noundef nonnull align 8 dereferenceable(249)) unnamed_addr #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN20CBaseRandomGenerator4InitEv(ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #5 align 2

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nobuiltin allocsize(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 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { builtin allocsize(0) }
attributes #8 = { builtin 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, !7, i64 0}
!6 = !{!"_ZTS14CBenchEncoders", !7, i64 0}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !7, i64 120}
!11 = !{!"_ZTS12CEncoderInfo", !12, i64 0, !8, i64 8, !8, i64 24, !13, i64 40, !8, i64 48, !8, i64 80, !8, i64 96, !7, i64 104, !14, i64 112, !7, i64 120, !13, i64 128, !13, i64 132, !13, i64 136, !15, i64 144, !7, i64 176, !14, i64 184}
!12 = !{!"_ZTS9CMyComPtrI14ICompressCoderE", !7, i64 0}
!13 = !{!"int", !8, i64 0}
!14 = !{!"_ZTS9CMyComPtrI20ISequentialOutStreamE", !7, i64 0}
!15 = !{!"_ZTS21CBenchRandomGenerator", !16, i64 0, !7, i64 24}
!16 = !{!"_ZTS12CBenchBuffer", !17, i64 8, !7, i64 16}
!17 = !{!"long", !8, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!21, !13, i64 0}
!21 = !{!"_ZTS20CBenchProgressStatus", !13, i64 0, !22, i64 4}
!22 = !{!"bool", !8, i64 0}
!23 = !{!21, !22, i64 4}
!24 = !{!7, !7, i64 0}
!25 = !{!26, !7, i64 16}
!26 = !{!"_ZTS18CBenchProgressInfo", !27, i64 0, !29, i64 8, !7, i64 16, !30, i64 24, !13, i64 80, !7, i64 88}
!27 = !{!"_ZTS21ICompressProgressInfo", !28, i64 0}
!28 = !{!"_ZTS8IUnknown"}
!29 = !{!"_ZTS13CMyUnknownImp", !13, i64 0}
!30 = !{!"_ZTS10CBenchInfo", !31, i64 0, !31, i64 8, !31, i64 16, !31, i64 24, !31, i64 32, !31, i64 40, !13, i64 48}
!31 = !{!"long long", !8, i64 0}
!32 = !{!26, !7, i64 88}
!33 = !{!26, !13, i64 72}
!34 = distinct !{!34, !19}
!35 = !{!30, !13, i64 48}
!36 = !{!13, !13, i64 0}
!37 = !{!31, !31, i64 0}
!38 = !{!39, !39, i64 0}
!39 = !{!"vtable pointer", !9, i64 0}
!40 = !{!11, !13, i64 132}
!41 = !{!11, !13, i64 40}
!42 = distinct !{!42, !19}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LCSSAPass,LICMPass,LoopRotatePass,MemCpyOptPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass