; LLVM IR from SSBMTonberry/pocketlzma :: ref_spec/lzma1900/C/Util/7z (7zMain)

; 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.ISzAlloc = type { ptr, ptr }
%struct.CFileInStream = type { %struct.ISeekInStream, %struct.CSzFile }
%struct.ISeekInStream = type { ptr, ptr }
%struct.CSzFile = type { ptr }
%struct.CLookToRead2 = type { %struct.ILookInStream, ptr, i64, i64, ptr, i64 }
%struct.ILookInStream = type { ptr, ptr, ptr, ptr }
%struct.CSzArEx = type { %struct.CSzAr, i64, i64, i32, ptr, ptr, %struct.CSzBitUi32s, %struct.CSzBitUi32s, %struct.CSzBitUi64s, %struct.CSzBitUi64s, ptr, ptr, ptr, ptr }
%struct.CSzAr = type { i32, i32, ptr, %struct.CSzBitUi32s, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.CSzBitUi32s = type { ptr, ptr }
%struct.CSzBitUi64s = type { ptr, ptr }
%struct.CNtfsFileTime = type { i32, i32 }

@.str = external hidden unnamed_addr constant [69 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [211 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [18 x i8], align 1
@g_Alloc = external hidden constant %struct.ISzAlloc, align 8
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %struct.ISzAlloc, align 8
  %7 = alloca %struct.ISzAlloc, align 8
  %8 = alloca %struct.CFileInStream, align 8
  %9 = alloca %struct.CLookToRead2, align 8
  %10 = alloca %struct.CSzArEx, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i32, align 4
  %27 = alloca [8 x i8], align 1
  %28 = alloca [32 x i8], align 16
  %29 = alloca [32 x i8], align 16
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca %struct.CSzFile, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca [32 x i8], align 16
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 72, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 216, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  store ptr null, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  store i64 0, ptr %13, align 8, !tbaa !11
  call void @Print(ptr noundef @.str)
  %38 = load i32, ptr %4, align 4, !tbaa !5
  %39 = icmp eq i32 %38, 1
  br i1 %39, label %40, label %41

40:                                               ; preds = %2
  call void @Print(ptr noundef @.str.1)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %405

41:                                               ; preds = %2
  %42 = load i32, ptr %4, align 4, !tbaa !5
  %43 = icmp slt i32 %42, 3
  br i1 %43, label %44, label %45

44:                                               ; preds = %41
  call void @PrintError(ptr noundef @.str.2)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %405

45:                                               ; preds = %41
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 @g_Alloc, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 @g_Alloc, i64 16, i1 false), !tbaa.struct !13
  %46 = getelementptr inbounds %struct.CFileInStream, ptr %8, i32 0, i32 1
  %47 = load ptr, ptr %5, align 8, !tbaa !9
  %48 = getelementptr inbounds ptr, ptr %47, i64 2
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  %50 = call i32 @InFile_Open(ptr noundef %46, ptr noundef %49)
  %51 = icmp ne i32 %50, 0
  br i1 %51, label %52, label %53

52:                                               ; preds = %45
  call void @PrintError(ptr noundef @.str.3)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %405

53:                                               ; preds = %45
  call void @FileInStream_CreateVTable(ptr noundef %8)
  call void @LookToRead2_CreateVTable(ptr noundef %9, i32 noundef 0)
  %54 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 4
  store ptr null, ptr %54, align 8, !tbaa !14
  store i32 0, ptr %11, align 4, !tbaa !5
  %55 = getelementptr inbounds %struct.ISzAlloc, ptr %6, i32 0, i32 0
  %56 = load ptr, ptr %55, align 8, !tbaa !17
  %57 = call ptr %56(ptr noundef %6, i64 noundef 262144)
  %58 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 4
  store ptr %57, ptr %58, align 8, !tbaa !14
  %59 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 4
  %60 = load ptr, ptr %59, align 8, !tbaa !14
  %61 = icmp ne ptr %60, null
  br i1 %61, label %63, label %62

62:                                               ; preds = %53
  store i32 2, ptr %11, align 4, !tbaa !5
  br label %69

63:                                               ; preds = %53
  %64 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 5
  store i64 262144, ptr %64, align 8, !tbaa !19
  %65 = getelementptr inbounds %struct.CFileInStream, ptr %8, i32 0, i32 0
  %66 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 1
  store ptr %65, ptr %66, align 8, !tbaa !20
  %67 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 3
  store i64 0, ptr %67, align 8, !tbaa !21
  %68 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 2
  store i64 0, ptr %68, align 8, !tbaa !22
  br label %69

69:                                               ; preds = %63, %62
  call void @CrcGenerateTable()
  call void @SzArEx_Init(ptr noundef %10)
  %70 = load i32, ptr %11, align 4, !tbaa !5
  %71 = icmp eq i32 %70, 0
  br i1 %71, label %72, label %75

72:                                               ; preds = %69
  %73 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 0
  %74 = call i32 @SzArEx_Open(ptr noundef %10, ptr noundef %73, ptr noundef %6, ptr noundef %7)
  store i32 %74, ptr %11, align 4, !tbaa !5
  br label %75

75:                                               ; preds = %72, %69
  %76 = load i32, ptr %11, align 4, !tbaa !5
  %77 = icmp eq i32 %76, 0
  br i1 %77, label %78, label %374

78:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %79 = load ptr, ptr %5, align 8, !tbaa !9
  %80 = getelementptr inbounds ptr, ptr %79, i64 1
  %81 = load ptr, ptr %80, align 8, !tbaa !9
  store ptr %81, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  store i32 0, ptr %18, align 4, !tbaa !5
  %82 = load ptr, ptr %15, align 8, !tbaa !9
  %83 = call i32 @strcmp(ptr noundef %82, ptr noundef @.str.4) #6
  %84 = icmp eq i32 %83, 0
  br i1 %84, label %85, label %86

85:                                               ; preds = %78
  store i32 1, ptr %16, align 4, !tbaa !5
  br label %105

86:                                               ; preds = %78
  %87 = load ptr, ptr %15, align 8, !tbaa !9
  %88 = call i32 @strcmp(ptr noundef %87, ptr noundef @.str.5) #6
  %89 = icmp eq i32 %88, 0
  br i1 %89, label %90, label %91

90:                                               ; preds = %86
  store i32 1, ptr %17, align 4, !tbaa !5
  br label %104

91:                                               ; preds = %86
  %92 = load ptr, ptr %15, align 8, !tbaa !9
  %93 = call i32 @strcmp(ptr noundef %92, ptr noundef @.str.6) #6
  %94 = icmp eq i32 %93, 0
  br i1 %94, label %95, label %96

95:                                               ; preds = %91
  br label %103

96:                                               ; preds = %91
  %97 = load ptr, ptr %15, align 8, !tbaa !9
  %98 = call i32 @strcmp(ptr noundef %97, ptr noundef @.str.7) #6
  %99 = icmp eq i32 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %96
  store i32 1, ptr %18, align 4, !tbaa !5
  br label %102

101:                                              ; preds = %96
  call void @PrintError(ptr noundef @.str.2)
  store i32 11, ptr %11, align 4, !tbaa !5
  br label %102

102:                                              ; preds = %101, %100
  br label %103

103:                                              ; preds = %102, %95
  br label %104

104:                                              ; preds = %103, %90
  br label %105

105:                                              ; preds = %104, %85
  %106 = load i32, ptr %11, align 4, !tbaa !5
  %107 = icmp eq i32 %106, 0
  br i1 %107, label %108, label %373

108:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 -1, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  store ptr null, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  store i64 0, ptr %22, align 8, !tbaa !11
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %109

109:                                              ; preds = %366, %108
  %110 = load i32, ptr %19, align 4, !tbaa !5
  %111 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 3
  %112 = load i32, ptr %111, align 8, !tbaa !23
  %113 = icmp ult i32 %110, %112
  br i1 %113, label %114, label %369

114:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  store i64 0, ptr %23, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store i64 0, ptr %24, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %115 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 5
  %116 = load ptr, ptr %115, align 8, !tbaa !28
  %117 = load i32, ptr %19, align 4, !tbaa !5
  %118 = lshr i32 %117, 3
  %119 = zext i32 %118 to i64
  %120 = getelementptr inbounds i8, ptr %116, i64 %119
  %121 = load i8, ptr %120, align 1, !tbaa !29
  %122 = zext i8 %121 to i32
  %123 = load i32, ptr %19, align 4, !tbaa !5
  %124 = and i32 %123, 7
  %125 = ashr i32 128, %124
  %126 = and i32 %122, %125
  %127 = icmp ne i32 %126, 0
  %128 = zext i1 %127 to i32
  store i32 %128, ptr %26, align 4, !tbaa !5
  %129 = load i32, ptr %16, align 4, !tbaa !5
  %130 = icmp eq i32 %129, 0
  br i1 %130, label %131, label %138

131:                                              ; preds = %114
  %132 = load i32, ptr %26, align 4, !tbaa !5
  %133 = icmp ne i32 %132, 0
  br i1 %133, label %134, label %138

134:                                              ; preds = %131
  %135 = load i32, ptr %18, align 4, !tbaa !5
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %138, label %137

137:                                              ; preds = %134
  store i32 4, ptr %14, align 4
  br label %363

138:                                              ; preds = %134, %131, %114
  %139 = load i32, ptr %19, align 4, !tbaa !5
  %140 = zext i32 %139 to i64
  %141 = call i64 @SzArEx_GetFileNameUtf16(ptr noundef %10, i64 noundef %140, ptr noundef null)
  store i64 %141, ptr %25, align 8, !tbaa !11
  %142 = load i64, ptr %25, align 8, !tbaa !11
  %143 = load i64, ptr %13, align 8, !tbaa !11
  %144 = icmp ugt i64 %142, %143
  br i1 %144, label %145, label %155

145:                                              ; preds = %138
  %146 = load ptr, ptr %12, align 8, !tbaa !9
  call void @SzFree(ptr noundef null, ptr noundef %146)
  %147 = load i64, ptr %25, align 8, !tbaa !11
  store i64 %147, ptr %13, align 8, !tbaa !11
  %148 = load i64, ptr %13, align 8, !tbaa !11
  %149 = mul i64 %148, 2
  %150 = call ptr @SzAlloc(ptr noundef null, i64 noundef %149)
  store ptr %150, ptr %12, align 8, !tbaa !9
  %151 = load ptr, ptr %12, align 8, !tbaa !9
  %152 = icmp ne ptr %151, null
  br i1 %152, label %154, label %153

153:                                              ; preds = %145
  store i32 2, ptr %11, align 4, !tbaa !5
  store i32 2, ptr %14, align 4
  br label %363

154:                                              ; preds = %145
  br label %155

155:                                              ; preds = %154, %138
  %156 = load i32, ptr %19, align 4, !tbaa !5
  %157 = zext i32 %156 to i64
  %158 = load ptr, ptr %12, align 8, !tbaa !9
  %159 = call i64 @SzArEx_GetFileNameUtf16(ptr noundef %10, i64 noundef %157, ptr noundef %158)
  %160 = load i32, ptr %16, align 4, !tbaa !5
  %161 = icmp ne i32 %160, 0
  br i1 %161, label %162, label %266

162:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %163 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 7
  %164 = getelementptr inbounds %struct.CSzBitUi32s, ptr %163, i32 0, i32 0
  %165 = load ptr, ptr %164, align 8, !tbaa !30
  %166 = icmp ne ptr %165, null
  br i1 %166, label %167, label %190

167:                                              ; preds = %162
  %168 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 7
  %169 = getelementptr inbounds %struct.CSzBitUi32s, ptr %168, i32 0, i32 0
  %170 = load ptr, ptr %169, align 8, !tbaa !30
  %171 = load i32, ptr %19, align 4, !tbaa !5
  %172 = lshr i32 %171, 3
  %173 = zext i32 %172 to i64
  %174 = getelementptr inbounds i8, ptr %170, i64 %173
  %175 = load i8, ptr %174, align 1, !tbaa !29
  %176 = zext i8 %175 to i32
  %177 = load i32, ptr %19, align 4, !tbaa !5
  %178 = and i32 %177, 7
  %179 = ashr i32 128, %178
  %180 = and i32 %176, %179
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %182, label %190

182:                                              ; preds = %167
  %183 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 7
  %184 = getelementptr inbounds %struct.CSzBitUi32s, ptr %183, i32 0, i32 1
  %185 = load ptr, ptr %184, align 8, !tbaa !31
  %186 = load i32, ptr %19, align 4, !tbaa !5
  %187 = zext i32 %186 to i64
  %188 = getelementptr inbounds i32, ptr %185, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !5
  br label %191

190:                                              ; preds = %167, %162
  br label %191

191:                                              ; preds = %190, %182
  %192 = phi i32 [ %189, %182 ], [ 0, %190 ]
  %193 = load i32, ptr %26, align 4, !tbaa !5
  %194 = getelementptr inbounds [8 x i8], ptr %27, i64 0, i64 0
  call void @GetAttribString(i32 noundef %192, i32 noundef %193, ptr noundef %194)
  %195 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 4
  %196 = load ptr, ptr %195, align 8, !tbaa !32
  %197 = load i32, ptr %19, align 4, !tbaa !5
  %198 = add i32 %197, 1
  %199 = zext i32 %198 to i64
  %200 = getelementptr inbounds i64, ptr %196, i64 %199
  %201 = load i64, ptr %200, align 8, !tbaa !33
  %202 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 4
  %203 = load ptr, ptr %202, align 8, !tbaa !32
  %204 = load i32, ptr %19, align 4, !tbaa !5
  %205 = zext i32 %204 to i64
  %206 = getelementptr inbounds i64, ptr %203, i64 %205
  %207 = load i64, ptr %206, align 8, !tbaa !33
  %208 = sub i64 %201, %207
  store i64 %208, ptr %30, align 8, !tbaa !33
  %209 = load i64, ptr %30, align 8, !tbaa !33
  %210 = getelementptr inbounds [32 x i8], ptr %28, i64 0, i64 0
  call void @UInt64ToStr(i64 noundef %209, ptr noundef %210, i32 noundef 10)
  %211 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 8
  %212 = getelementptr inbounds %struct.CSzBitUi64s, ptr %211, i32 0, i32 0
  %213 = load ptr, ptr %212, align 8, !tbaa !34
  %214 = icmp ne ptr %213, null
  br i1 %214, label %215, label %238

215:                                              ; preds = %191
  %216 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 8
  %217 = getelementptr inbounds %struct.CSzBitUi64s, ptr %216, i32 0, i32 0
  %218 = load ptr, ptr %217, align 8, !tbaa !34
  %219 = load i32, ptr %19, align 4, !tbaa !5
  %220 = lshr i32 %219, 3
  %221 = zext i32 %220 to i64
  %222 = getelementptr inbounds i8, ptr %218, i64 %221
  %223 = load i8, ptr %222, align 1, !tbaa !29
  %224 = zext i8 %223 to i32
  %225 = load i32, ptr %19, align 4, !tbaa !5
  %226 = and i32 %225, 7
  %227 = ashr i32 128, %226
  %228 = and i32 %224, %227
  %229 = icmp ne i32 %228, 0
  br i1 %229, label %230, label %238

230:                                              ; preds = %215
  %231 = getelementptr inbounds %struct.CSzArEx, ptr %10, i32 0, i32 8
  %232 = getelementptr inbounds %struct.CSzBitUi64s, ptr %231, i32 0, i32 1
  %233 = load ptr, ptr %232, align 8, !tbaa !35
  %234 = load i32, ptr %19, align 4, !tbaa !5
  %235 = zext i32 %234 to i64
  %236 = getelementptr inbounds %struct.CNtfsFileTime, ptr %233, i64 %235
  %237 = getelementptr inbounds [32 x i8], ptr %29, i64 0, i64 0
  call void @ConvertFileTimeToString(ptr noundef %236, ptr noundef %237)
  br label %251

238:                                              ; preds = %215, %191
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  store i64 0, ptr %31, align 8, !tbaa !11
  br label %239

239:                                              ; preds = %245, %238
  %240 = load i64, ptr %31, align 8, !tbaa !11
  %241 = icmp ult i64 %240, 19
  br i1 %241, label %242, label %248

242:                                              ; preds = %239
  %243 = load i64, ptr %31, align 8, !tbaa !11
  %244 = getelementptr inbounds [32 x i8], ptr %29, i64 0, i64 %243
  store i8 32, ptr %244, align 1, !tbaa !29
  br label %245

245:                                              ; preds = %242
  %246 = load i64, ptr %31, align 8, !tbaa !11
  %247 = add i64 %246, 1
  store i64 %247, ptr %31, align 8, !tbaa !11
  br label %239, !llvm.loop !36

248:                                              ; preds = %239
  %249 = load i64, ptr %31, align 8, !tbaa !11
  %250 = getelementptr inbounds [32 x i8], ptr %29, i64 0, i64 %249
  store i8 0, ptr %250, align 1, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  br label %251

251:                                              ; preds = %248, %230
  %252 = getelementptr inbounds [32 x i8], ptr %29, i64 0, i64 0
  call void @Print(ptr noundef %252)
  call void @Print(ptr noundef @.str.8)
  %253 = getelementptr inbounds [8 x i8], ptr %27, i64 0, i64 0
  call void @Print(ptr noundef %253)
  call void @Print(ptr noundef @.str.8)
  %254 = getelementptr inbounds [32 x i8], ptr %28, i64 0, i64 0
  call void @Print(ptr noundef %254)
  call void @Print(ptr noundef @.str.9)
  %255 = load ptr, ptr %12, align 8, !tbaa !9
  %256 = call i32 @PrintString(ptr noundef %255)
  store i32 %256, ptr %11, align 4, !tbaa !5
  %257 = load i32, ptr %11, align 4, !tbaa !5
  %258 = icmp ne i32 %257, 0
  br i1 %258, label %259, label %260

259:                                              ; preds = %251
  store i32 2, ptr %14, align 4
  br label %265

260:                                              ; preds = %251
  %261 = load i32, ptr %26, align 4, !tbaa !5
  %262 = icmp ne i32 %261, 0
  br i1 %262, label %263, label %264

263:                                              ; preds = %260
  call void @Print(ptr noundef @.str.10)
  br label %264

264:                                              ; preds = %263, %260
  call void @PrintLF()
  store i32 4, ptr %14, align 4
  br label %265

265:                                              ; preds = %264, %259
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %363

266:                                              ; preds = %155
  %267 = load i32, ptr %17, align 4, !tbaa !5
  %268 = icmp ne i32 %267, 0
  %269 = zext i1 %268 to i64
  %270 = select i1 %268, ptr @.str.11, ptr @.str.12
  call void @Print(ptr noundef %270)
  %271 = load ptr, ptr %12, align 8, !tbaa !9
  %272 = call i32 @PrintString(ptr noundef %271)
  store i32 %272, ptr %11, align 4, !tbaa !5
  %273 = load i32, ptr %11, align 4, !tbaa !5
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %276

275:                                              ; preds = %266
  store i32 2, ptr %14, align 4
  br label %363

276:                                              ; preds = %266
  %277 = load i32, ptr %26, align 4, !tbaa !5
  %278 = icmp ne i32 %277, 0
  br i1 %278, label %279, label %280

279:                                              ; preds = %276
  call void @Print(ptr noundef @.str.10)
  br label %288

280:                                              ; preds = %276
  %281 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 0
  %282 = load i32, ptr %19, align 4, !tbaa !5
  %283 = call i32 @SzArEx_Extract(ptr noundef %10, ptr noundef %281, i32 noundef %282, ptr noundef %20, ptr noundef %21, ptr noundef %22, ptr noundef %23, ptr noundef %24, ptr noundef %6, ptr noundef %7)
  store i32 %283, ptr %11, align 4, !tbaa !5
  %284 = load i32, ptr %11, align 4, !tbaa !5
  %285 = icmp ne i32 %284, 0
  br i1 %285, label %286, label %287

286:                                              ; preds = %280
  store i32 2, ptr %14, align 4
  br label %363

287:                                              ; preds = %280
  br label %288

288:                                              ; preds = %287, %279
  %289 = load i32, ptr %17, align 4, !tbaa !5
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %362, label %291

291:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %292 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %292, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %293 = load ptr, ptr %35, align 8, !tbaa !9
  store ptr %293, ptr %36, align 8, !tbaa !9
  store i64 0, ptr %34, align 8, !tbaa !11
  br label %294

294:                                              ; preds = %327, %291
  %295 = load ptr, ptr %35, align 8, !tbaa !9
  %296 = load i64, ptr %34, align 8, !tbaa !11
  %297 = getelementptr inbounds i16, ptr %295, i64 %296
  %298 = load i16, ptr %297, align 2, !tbaa !38
  %299 = zext i16 %298 to i32
  %300 = icmp ne i32 %299, 0
  br i1 %300, label %301, label %330

301:                                              ; preds = %294
  %302 = load ptr, ptr %35, align 8, !tbaa !9
  %303 = load i64, ptr %34, align 8, !tbaa !11
  %304 = getelementptr inbounds i16, ptr %302, i64 %303
  %305 = load i16, ptr %304, align 2, !tbaa !38
  %306 = zext i16 %305 to i32
  %307 = icmp eq i32 %306, 47
  br i1 %307, label %308, label %326

308:                                              ; preds = %301
  %309 = load i32, ptr %18, align 4, !tbaa !5
  %310 = icmp ne i32 %309, 0
  br i1 %310, label %311, label %320

311:                                              ; preds = %308
  %312 = load ptr, ptr %35, align 8, !tbaa !9
  %313 = load i64, ptr %34, align 8, !tbaa !11
  %314 = getelementptr inbounds i16, ptr %312, i64 %313
  store i16 0, ptr %314, align 2, !tbaa !38
  %315 = load ptr, ptr %35, align 8, !tbaa !9
  %316 = call i32 @MyCreateDir(ptr noundef %315)
  %317 = load ptr, ptr %35, align 8, !tbaa !9
  %318 = load i64, ptr %34, align 8, !tbaa !11
  %319 = getelementptr inbounds i16, ptr %317, i64 %318
  store i16 47, ptr %319, align 2, !tbaa !38
  br label %325

320:                                              ; preds = %308
  %321 = load ptr, ptr %35, align 8, !tbaa !9
  %322 = load i64, ptr %34, align 8, !tbaa !11
  %323 = getelementptr inbounds i16, ptr %321, i64 %322
  %324 = getelementptr inbounds i16, ptr %323, i64 1
  store ptr %324, ptr %36, align 8, !tbaa !9
  br label %325

325:                                              ; preds = %320, %311
  br label %326

326:                                              ; preds = %325, %301
  br label %327

327:                                              ; preds = %326
  %328 = load i64, ptr %34, align 8, !tbaa !11
  %329 = add i64 %328, 1
  store i64 %329, ptr %34, align 8, !tbaa !11
  br label %294, !llvm.loop !40

330:                                              ; preds = %294
  %331 = load i32, ptr %26, align 4, !tbaa !5
  %332 = icmp ne i32 %331, 0
  br i1 %332, label %333, label %336

333:                                              ; preds = %330
  %334 = load ptr, ptr %36, align 8, !tbaa !9
  %335 = call i32 @MyCreateDir(ptr noundef %334)
  call void @PrintLF()
  store i32 4, ptr %14, align 4
  br label %359

336:                                              ; preds = %330
  %337 = load ptr, ptr %36, align 8, !tbaa !9
  %338 = call i32 @OutFile_OpenUtf16(ptr noundef %32, ptr noundef %337)
  %339 = icmp ne i32 %338, 0
  br i1 %339, label %340, label %341

340:                                              ; preds = %336
  call void @PrintError(ptr noundef @.str.13)
  store i32 11, ptr %11, align 4, !tbaa !5
  store i32 2, ptr %14, align 4
  br label %359

341:                                              ; preds = %336
  br label %342

342:                                              ; preds = %341
  %343 = load i64, ptr %24, align 8, !tbaa !11
  store i64 %343, ptr %33, align 8, !tbaa !11
  %344 = load ptr, ptr %21, align 8, !tbaa !9
  %345 = load i64, ptr %23, align 8, !tbaa !11
  %346 = getelementptr inbounds i8, ptr %344, i64 %345
  %347 = call i32 @File_Write(ptr noundef %32, ptr noundef %346, ptr noundef %33)
  %348 = icmp ne i32 %347, 0
  br i1 %348, label %353, label %349

349:                                              ; preds = %342
  %350 = load i64, ptr %33, align 8, !tbaa !11
  %351 = load i64, ptr %24, align 8, !tbaa !11
  %352 = icmp ne i64 %350, %351
  br i1 %352, label %353, label %354

353:                                              ; preds = %349, %342
  call void @PrintError(ptr noundef @.str.14)
  store i32 11, ptr %11, align 4, !tbaa !5
  store i32 2, ptr %14, align 4
  br label %359

354:                                              ; preds = %349
  %355 = call i32 @File_Close(ptr noundef %32)
  %356 = icmp ne i32 %355, 0
  br i1 %356, label %357, label %358

357:                                              ; preds = %354
  call void @PrintError(ptr noundef @.str.15)
  store i32 11, ptr %11, align 4, !tbaa !5
  store i32 2, ptr %14, align 4
  br label %359

358:                                              ; preds = %354
  store i32 0, ptr %14, align 4
  br label %359

359:                                              ; preds = %358, %357, %353, %340, %333
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  %360 = load i32, ptr %14, align 4
  switch i32 %360, label %363 [
    i32 0, label %361
  ]

361:                                              ; preds = %359
  br label %362

362:                                              ; preds = %361, %288
  call void @PrintLF()
  store i32 0, ptr %14, align 4
  br label %363

363:                                              ; preds = %362, %359, %286, %275, %265, %153, %137
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  %364 = load i32, ptr %14, align 4
  switch i32 %364, label %407 [
    i32 0, label %365
    i32 4, label %366
    i32 2, label %369
  ]

365:                                              ; preds = %363
  br label %366

366:                                              ; preds = %365, %363
  %367 = load i32, ptr %19, align 4, !tbaa !5
  %368 = add i32 %367, 1
  store i32 %368, ptr %19, align 4, !tbaa !5
  br label %109, !llvm.loop !41

369:                                              ; preds = %363, %109
  %370 = getelementptr inbounds %struct.ISzAlloc, ptr %6, i32 0, i32 1
  %371 = load ptr, ptr %370, align 8, !tbaa !42
  %372 = load ptr, ptr %21, align 8, !tbaa !9
  call void %371(ptr noundef %6, ptr noundef %372)
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %373

373:                                              ; preds = %369, %105
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %374

374:                                              ; preds = %373, %75
  %375 = load ptr, ptr %12, align 8, !tbaa !9
  call void @SzFree(ptr noundef null, ptr noundef %375)
  call void @SzArEx_Free(ptr noundef %10, ptr noundef %6)
  %376 = getelementptr inbounds %struct.ISzAlloc, ptr %6, i32 0, i32 1
  %377 = load ptr, ptr %376, align 8, !tbaa !42
  %378 = getelementptr inbounds %struct.CLookToRead2, ptr %9, i32 0, i32 4
  %379 = load ptr, ptr %378, align 8, !tbaa !14
  call void %377(ptr noundef %6, ptr noundef %379)
  %380 = getelementptr inbounds %struct.CFileInStream, ptr %8, i32 0, i32 1
  %381 = call i32 @File_Close(ptr noundef %380)
  %382 = load i32, ptr %11, align 4, !tbaa !5
  %383 = icmp eq i32 %382, 0
  br i1 %383, label %384, label %385

384:                                              ; preds = %374
  call void @Print(ptr noundef @.str.16)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %405

385:                                              ; preds = %374
  %386 = load i32, ptr %11, align 4, !tbaa !5
  %387 = icmp eq i32 %386, 4
  br i1 %387, label %388, label %389

388:                                              ; preds = %385
  call void @PrintError(ptr noundef @.str.17)
  br label %404

389:                                              ; preds = %385
  %390 = load i32, ptr %11, align 4, !tbaa !5
  %391 = icmp eq i32 %390, 2
  br i1 %391, label %392, label %393

392:                                              ; preds = %389
  call void @PrintError(ptr noundef @.str.18)
  br label %403

393:                                              ; preds = %389
  %394 = load i32, ptr %11, align 4, !tbaa !5
  %395 = icmp eq i32 %394, 3
  br i1 %395, label %396, label %397

396:                                              ; preds = %393
  call void @PrintError(ptr noundef @.str.19)
  br label %402

397:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #5
  %398 = load i32, ptr %11, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds [32 x i8], ptr %37, i64 0, i64 0
  call void @UInt64ToStr(i64 noundef %399, ptr noundef %400, i32 noundef 0)
  %401 = getelementptr inbounds [32 x i8], ptr %37, i64 0, i64 0
  call void @PrintError(ptr noundef %401)
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #5
  br label %402

402:                                              ; preds = %397, %396
  br label %403

403:                                              ; preds = %402, %392
  br label %404

404:                                              ; preds = %403, %388
  store i32 1, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %405

405:                                              ; preds = %404, %384, %52, %44, %40
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 216, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #5
  %406 = load i32, ptr %3, align 4
  ret i32 %406

407:                                              ; preds = %363
  unreachable
}

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

; Function Attrs: nounwind uwtable
declare hidden void @Print(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @PrintError(ptr noundef) #0

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

declare i32 @InFile_Open(ptr noundef, ptr noundef) #3

declare void @FileInStream_CreateVTable(ptr noundef) #3

declare void @LookToRead2_CreateVTable(ptr noundef, i32 noundef) #3

declare void @CrcGenerateTable() #3

declare void @SzArEx_Init(ptr noundef) #3

declare i32 @SzArEx_Open(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

declare i64 @SzArEx_GetFileNameUtf16(ptr noundef, i64 noundef, ptr noundef) #3

declare void @SzFree(ptr noundef, ptr noundef) #3

declare ptr @SzAlloc(ptr noundef, i64 noundef) #3

; Function Attrs: nounwind uwtable
declare hidden void @GetAttribString(i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @UInt64ToStr(i64 noundef, ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @ConvertFileTimeToString(ptr noundef, ptr noundef) #0

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

; Function Attrs: nounwind uwtable
declare hidden i32 @PrintString(ptr noundef) #0

declare i32 @SzArEx_Extract(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @MyCreateDir(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @OutFile_OpenUtf16(ptr noundef, ptr noundef) #0

declare i32 @File_Write(ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @File_Close(ptr noundef) #3

declare void @SzArEx_Free(ptr noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden void @PrintLF() #0

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

!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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{i64 0, i64 8, !9, i64 8, i64 8, !9}
!14 = !{!15, !10, i64 56}
!15 = !{!"", !16, i64 0, !10, i64 32, !12, i64 40, !12, i64 48, !10, i64 56, !12, i64 64}
!16 = !{!"ILookInStream", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!17 = !{!18, !10, i64 0}
!18 = !{!"ISzAlloc", !10, i64 0, !10, i64 8}
!19 = !{!15, !12, i64 64}
!20 = !{!15, !10, i64 32}
!21 = !{!15, !12, i64 48}
!22 = !{!15, !12, i64 40}
!23 = !{!24, !6, i64 96}
!24 = !{!"", !25, i64 0, !27, i64 80, !27, i64 88, !6, i64 96, !10, i64 104, !10, i64 112, !26, i64 120, !26, i64 136, !26, i64 152, !26, i64 168, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208}
!25 = !{!"", !6, i64 0, !6, i64 4, !10, i64 8, !26, i64 16, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72}
!26 = !{!"", !10, i64 0, !10, i64 8}
!27 = !{!"long long", !7, i64 0}
!28 = !{!24, !10, i64 112}
!29 = !{!7, !7, i64 0}
!30 = !{!24, !10, i64 136}
!31 = !{!24, !10, i64 144}
!32 = !{!24, !10, i64 104}
!33 = !{!27, !27, i64 0}
!34 = !{!24, !10, i64 152}
!35 = !{!24, !10, i64 160}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = !{!39, !39, i64 0}
!39 = !{!"short", !7, i64 0}
!40 = distinct !{!40, !37}
!41 = distinct !{!41, !37}
!42 = !{!18, !10, i64 8}


; 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.ISzAlloc = type { ptr, ptr }
%struct.CFileInStream = type { %struct.ISeekInStream, %struct.CSzFile }
%struct.ISeekInStream = type { ptr, ptr }
%struct.CSzFile = type { ptr }
%struct.CLookToRead2 = type { %struct.ILookInStream, ptr, i64, i64, ptr, i64 }
%struct.ILookInStream = type { ptr, ptr, ptr, ptr }
%struct.CSzArEx = type { %struct.CSzAr, i64, i64, i32, ptr, ptr, %struct.CSzBitUi32s, %struct.CSzBitUi32s, %struct.CSzBitUi64s, %struct.CSzBitUi64s, ptr, ptr, ptr, ptr }
%struct.CSzAr = type { i32, i32, ptr, %struct.CSzBitUi32s, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.CSzBitUi32s = type { ptr, ptr }
%struct.CSzBitUi64s = type { ptr, ptr }
%struct.CNtfsFileTime = type { i32, i32 }

@.str = external hidden unnamed_addr constant [69 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [211 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [18 x i8], align 1
@g_Alloc = external hidden local_unnamed_addr constant %struct.ISzAlloc, align 8
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca %struct.ISzAlloc, align 8
  %4 = alloca %struct.ISzAlloc, align 8
  %5 = alloca %struct.CFileInStream, align 8
  %6 = alloca %struct.CLookToRead2, align 8
  %7 = alloca %struct.CSzArEx, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca [8 x i8], align 1
  %14 = alloca [32 x i8], align 16
  %15 = alloca [32 x i8], align 16
  %16 = alloca %struct.CSzFile, align 8
  %17 = alloca i64, align 8
  %18 = alloca [32 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 216, ptr nonnull %7) #6
  tail call void @Print(ptr noundef nonnull @.str)
  %19 = icmp eq i32 %0, 1
  br i1 %19, label %20, label %21

20:                                               ; preds = %2
  tail call void @Print(ptr noundef nonnull @.str.1)
  br label %208

21:                                               ; preds = %2
  %22 = icmp slt i32 %0, 3
  br i1 %22, label %23, label %24

23:                                               ; preds = %21
  tail call void @PrintError(ptr noundef nonnull @.str.2)
  br label %208

24:                                               ; preds = %21
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) @g_Alloc, i64 16, i1 false), !tbaa.struct !5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) @g_Alloc, i64 16, i1 false), !tbaa.struct !5
  %25 = getelementptr inbounds i8, ptr %5, i64 16
  %26 = getelementptr inbounds i8, ptr %1, i64 16
  %27 = load ptr, ptr %26, align 8, !tbaa !6
  %28 = call i32 @InFile_Open(ptr noundef nonnull %25, ptr noundef %27) #6
  %.not = icmp eq i32 %28, 0
  br i1 %.not, label %30, label %29

29:                                               ; preds = %24
  call void @PrintError(ptr noundef nonnull @.str.3)
  br label %208

30:                                               ; preds = %24
  call void @FileInStream_CreateVTable(ptr noundef nonnull %5) #6
  call void @LookToRead2_CreateVTable(ptr noundef nonnull %6, i32 noundef 0) #6
  %31 = getelementptr inbounds i8, ptr %6, i64 56
  store ptr null, ptr %31, align 8, !tbaa !10
  %32 = load ptr, ptr %3, align 8, !tbaa !14
  %33 = call ptr %32(ptr noundef nonnull %3, i64 noundef 262144) #6
  store ptr %33, ptr %31, align 8, !tbaa !10
  %.not113.not = icmp eq ptr %33, null
  br i1 %.not113.not, label %38, label %34

34:                                               ; preds = %30
  %35 = getelementptr inbounds i8, ptr %6, i64 64
  store i64 262144, ptr %35, align 8, !tbaa !16
  %36 = getelementptr inbounds i8, ptr %6, i64 32
  store ptr %5, ptr %36, align 8, !tbaa !17
  %37 = getelementptr inbounds i8, ptr %6, i64 40
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %37, i8 0, i64 16, i1 false)
  br label %38

38:                                               ; preds = %30, %34
  %.084 = phi i32 [ 0, %34 ], [ 2, %30 ]
  call void @CrcGenerateTable() #6
  call void @SzArEx_Init(ptr noundef nonnull %7) #6
  br i1 %.not113.not, label %41, label %39

39:                                               ; preds = %38
  %40 = call i32 @SzArEx_Open(ptr noundef nonnull %7, ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %4) #6
  br label %41

41:                                               ; preds = %39, %38
  %.185 = phi i32 [ %40, %39 ], [ %.084, %38 ]
  %42 = icmp eq i32 %.185, 0
  br i1 %42, label %43, label %197

43:                                               ; preds = %41
  %44 = getelementptr inbounds i8, ptr %1, i64 8
  %45 = load ptr, ptr %44, align 8, !tbaa !6
  %46 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %45, ptr noundef nonnull dereferenceable(1) @.str.4) #7
  %.not184 = icmp eq i32 %46, 0
  br i1 %.not184, label %.thread, label %47

47:                                               ; preds = %43
  %48 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %45, ptr noundef nonnull dereferenceable(1) @.str.5) #7
  %.not211 = icmp eq i32 %48, 0
  br i1 %.not211, label %56, label %49

49:                                               ; preds = %47
  %50 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %45, ptr noundef nonnull dereferenceable(1) @.str.6) #7
  %51 = icmp eq i32 %50, 0
  br i1 %51, label %56, label %52

52:                                               ; preds = %49
  %53 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %45, ptr noundef nonnull dereferenceable(1) @.str.7) #7
  %54 = icmp eq i32 %53, 0
  br i1 %54, label %56, label %55

55:                                               ; preds = %52
  call void @PrintError(ptr noundef nonnull @.str.2)
  br label %197

56:                                               ; preds = %49, %47, %52
  %.not114.ph = phi i1 [ false, %52 ], [ true, %47 ], [ true, %49 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  store i32 -1, ptr %8, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  store ptr null, ptr %9, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  store i64 0, ptr %10, align 8, !tbaa !20
  %57 = getelementptr inbounds i8, ptr %7, i64 96
  %58 = load i32, ptr %57, align 8, !tbaa !21
  %.not185 = icmp eq i32 %58, 0
  br i1 %.not185, label %.loopexit, label %.lr.ph

.thread:                                          ; preds = %43
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  store i32 -1, ptr %8, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  store ptr null, ptr %9, align 8, !tbaa !6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  store i64 0, ptr %10, align 8, !tbaa !20
  %59 = getelementptr inbounds i8, ptr %7, i64 96
  %60 = load i32, ptr %59, align 8, !tbaa !21
  %.not185196 = icmp eq i32 %60, 0
  br i1 %.not185196, label %.loopexit, label %.lr.ph.thread

.lr.ph.thread:                                    ; preds = %.thread
  %61 = getelementptr inbounds i8, ptr %7, i64 112
  %62 = getelementptr inbounds i8, ptr %7, i64 136
  %63 = getelementptr inbounds i8, ptr %7, i64 144
  %64 = getelementptr inbounds i8, ptr %7, i64 104
  %65 = getelementptr inbounds i8, ptr %7, i64 152
  %66 = getelementptr inbounds i8, ptr %7, i64 160
  br label %.lr.ph.split.preheader

.lr.ph:                                           ; preds = %56
  %67 = getelementptr inbounds i8, ptr %7, i64 112
  %68 = getelementptr inbounds i8, ptr %7, i64 136
  %69 = getelementptr inbounds i8, ptr %7, i64 144
  %70 = getelementptr inbounds i8, ptr %7, i64 104
  %71 = getelementptr inbounds i8, ptr %7, i64 152
  %72 = getelementptr inbounds i8, ptr %7, i64 160
  %73 = select i1 %.not211, ptr @.str.11, ptr @.str.12
  br i1 %.not184, label %.lr.ph.split.preheader, label %.lr.ph.split.us

.lr.ph.split.preheader:                           ; preds = %.lr.ph.thread, %.lr.ph
  %74 = phi ptr [ %66, %.lr.ph.thread ], [ %72, %.lr.ph ]
  %75 = phi ptr [ %65, %.lr.ph.thread ], [ %71, %.lr.ph ]
  %76 = phi ptr [ %64, %.lr.ph.thread ], [ %70, %.lr.ph ]
  %77 = phi ptr [ %63, %.lr.ph.thread ], [ %69, %.lr.ph ]
  %78 = phi ptr [ %62, %.lr.ph.thread ], [ %68, %.lr.ph ]
  %79 = phi ptr [ %61, %.lr.ph.thread ], [ %67, %.lr.ph ]
  %80 = phi ptr [ %59, %.lr.ph.thread ], [ %57, %.lr.ph ]
  %81 = getelementptr inbounds i8, ptr %15, i64 19
  br label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %129
  %indvars.iv = phi i64 [ %indvars.iv.next, %129 ], [ 0, %.lr.ph ]
  %.086169.us = phi ptr [ %.288159.us, %129 ], [ null, %.lr.ph ]
  %.092168.us = phi i64 [ %.294158.us, %129 ], [ 0, %.lr.ph ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  store i64 0, ptr %11, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  store i64 0, ptr %12, align 8, !tbaa !20
  %82 = load ptr, ptr %67, align 8, !tbaa !26
  %83 = trunc nuw i64 %indvars.iv to i32
  %84 = lshr i64 %indvars.iv, 3
  %85 = getelementptr inbounds i8, ptr %82, i64 %84
  %86 = load i8, ptr %85, align 1, !tbaa !27
  %87 = zext i8 %86 to i32
  %88 = and i32 %83, 7
  %89 = lshr exact i32 128, %88
  %90 = and i32 %89, %87
  %91 = icmp ne i32 %90, 0
  %or.cond3.not.us = and i1 %.not114.ph, %91
  br i1 %or.cond3.not.us, label %.thread151.us, label %92

92:                                               ; preds = %.lr.ph.split.us
  %93 = call i64 @SzArEx_GetFileNameUtf16(ptr noundef nonnull %7, i64 noundef %indvars.iv, ptr noundef null) #6
  %94 = icmp ugt i64 %93, %.092168.us
  br i1 %94, label %95, label %98

95:                                               ; preds = %92
  call void @SzFree(ptr noundef null, ptr noundef %.086169.us) #6
  %96 = shl i64 %93, 1
  %97 = call ptr @SzAlloc(ptr noundef null, i64 noundef %96) #6
  %.not115.us = icmp eq ptr %97, null
  br i1 %.not115.us, label %.thread141, label %98

98:                                               ; preds = %95, %92
  %.193.us = phi i64 [ %93, %95 ], [ %.092168.us, %92 ]
  %.187.us = phi ptr [ %97, %95 ], [ %.086169.us, %92 ]
  %99 = call i64 @SzArEx_GetFileNameUtf16(ptr noundef nonnull %7, i64 noundef %indvars.iv, ptr noundef %.187.us) #6
  call void @Print(ptr noundef nonnull %73)
  %100 = call i32 @PrintString(ptr noundef %.187.us)
  %.not118.us = icmp eq i32 %100, 0
  br i1 %.not118.us, label %101, label %.thread141

101:                                              ; preds = %98
  br i1 %91, label %104, label %102

102:                                              ; preds = %101
  %103 = call i32 @SzArEx_Extract(ptr noundef nonnull %7, ptr noundef nonnull %6, i32 noundef %83, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4) #6
  %.not119.us = icmp eq i32 %103, 0
  br i1 %.not119.us, label %105, label %.thread141

104:                                              ; preds = %101
  call void @Print(ptr noundef nonnull @.str.10)
  br label %105

105:                                              ; preds = %104, %102
  br i1 %.not211, label %125, label %106

106:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  br i1 %.not114.ph, label %.split.us.us, label %.split.us177

.split.us177:                                     ; preds = %106, %127
  %.082.us175 = phi i64 [ %128, %127 ], [ 0, %106 ]
  %107 = getelementptr inbounds i16, ptr %.187.us, i64 %.082.us175
  %108 = load i16, ptr %107, align 2, !tbaa !28
  switch i16 %108, label %127 [
    i16 0, label %.split163.us176
    i16 47, label %109
  ]

109:                                              ; preds = %.split.us177
  store i16 0, ptr %107, align 2, !tbaa !28
  %110 = call i32 @MyCreateDir(ptr noundef nonnull %.187.us)
  store i16 47, ptr %107, align 2, !tbaa !28
  br label %127

111:                                              ; preds = %.split163.us176
  %112 = call i32 @OutFile_OpenUtf16(ptr noundef nonnull %16, ptr noundef %.us-phi.us)
  %.not121.us = icmp eq i32 %112, 0
  br i1 %.not121.us, label %113, label %.thread136.us.thread

113:                                              ; preds = %111
  %114 = load i64, ptr %12, align 8, !tbaa !20
  store i64 %114, ptr %17, align 8, !tbaa !20
  %115 = load ptr, ptr %9, align 8, !tbaa !6
  %116 = load i64, ptr %11, align 8, !tbaa !20
  %117 = getelementptr inbounds i8, ptr %115, i64 %116
  %118 = call i32 @File_Write(ptr noundef nonnull %16, ptr noundef %117, ptr noundef nonnull %17) #6
  %.not122.us = icmp eq i32 %118, 0
  br i1 %.not122.us, label %119, label %.thread136.us.thread

119:                                              ; preds = %113
  %120 = load i64, ptr %17, align 8, !tbaa !20
  %121 = load i64, ptr %12, align 8, !tbaa !20
  %.not123.us = icmp eq i64 %120, %121
  br i1 %.not123.us, label %122, label %.thread136.us.thread

122:                                              ; preds = %119
  %123 = call i32 @File_Close(ptr noundef nonnull %16) #6
  %.not124.us = icmp eq i32 %123, 0
  br i1 %.not124.us, label %124, label %.thread136.us.thread

124:                                              ; preds = %122
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  br label %125

125:                                              ; preds = %124, %105
  call void @PrintLF()
  br label %.thread151.us

.thread136.us.thread:                             ; preds = %122, %113, %119, %111
  %.str.15.sink = phi ptr [ @.str.13, %111 ], [ @.str.14, %119 ], [ @.str.14, %113 ], [ @.str.15, %122 ]
  call void @PrintError(ptr noundef nonnull %.str.15.sink)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %.loopexit

.thread136.us:                                    ; preds = %.split163.us176
  %126 = call i32 @MyCreateDir(ptr noundef %.us-phi.us)
  call void @PrintLF()
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %129

127:                                              ; preds = %109, %.split.us177
  %128 = add i64 %.082.us175, 1
  br label %.split.us177, !llvm.loop !30

.thread151.us:                                    ; preds = %125, %.lr.ph.split.us
  %.294.ph.us = phi i64 [ %.092168.us, %.lr.ph.split.us ], [ %.193.us, %125 ]
  %.288.ph149.us = phi ptr [ %.086169.us, %.lr.ph.split.us ], [ %.187.us, %125 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %129

129:                                              ; preds = %.thread136.us, %.thread151.us
  %.288159.us = phi ptr [ %.288.ph149.us, %.thread151.us ], [ %.187.us, %.thread136.us ]
  %.294158.us = phi i64 [ %.294.ph.us, %.thread151.us ], [ %.193.us, %.thread136.us ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %130 = load i32, ptr %57, align 8, !tbaa !21
  %131 = zext i32 %130 to i64
  %132 = icmp ult i64 %indvars.iv.next, %131
  br i1 %132, label %.lr.ph.split.us, label %.loopexit, !llvm.loop !32

.split163.us176:                                  ; preds = %.split.us177, %.split.us.us
  %.us-phi.us = phi ptr [ %.0.us.us, %.split.us.us ], [ %.187.us, %.split.us177 ]
  br i1 %91, label %.thread136.us, label %111

.split.us.us:                                     ; preds = %106, %137
  %.082.us.us = phi i64 [ %138, %137 ], [ 0, %106 ]
  %.0.us.us = phi ptr [ %.1.us.us, %137 ], [ %.187.us, %106 ]
  %133 = getelementptr inbounds i16, ptr %.187.us, i64 %.082.us.us
  %134 = load i16, ptr %133, align 2, !tbaa !28
  switch i16 %134, label %137 [
    i16 0, label %.split163.us176
    i16 47, label %135
  ]

135:                                              ; preds = %.split.us.us
  %136 = getelementptr inbounds i8, ptr %133, i64 2
  br label %137

137:                                              ; preds = %135, %.split.us.us
  %.1.us.us = phi ptr [ %136, %135 ], [ %.0.us.us, %.split.us.us ]
  %138 = add i64 %.082.us.us, 1
  br label %.split.us.us, !llvm.loop !30

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader, %190
  %indvars.iv191 = phi i64 [ 0, %.lr.ph.split.preheader ], [ %indvars.iv.next192, %190 ]
  %.086169 = phi ptr [ null, %.lr.ph.split.preheader ], [ %.187, %190 ]
  %.092168 = phi i64 [ 0, %.lr.ph.split.preheader ], [ %.193, %190 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  store i64 0, ptr %11, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  store i64 0, ptr %12, align 8, !tbaa !20
  %139 = load ptr, ptr %79, align 8, !tbaa !26
  %140 = trunc nuw i64 %indvars.iv191 to i32
  %141 = lshr i64 %indvars.iv191, 3
  %142 = getelementptr inbounds i8, ptr %139, i64 %141
  %143 = load i8, ptr %142, align 1, !tbaa !27
  %144 = zext i8 %143 to i32
  %145 = and i32 %140, 7
  %146 = lshr exact i32 128, %145
  %147 = and i32 %146, %144
  %148 = icmp ne i32 %147, 0
  %149 = zext i1 %148 to i32
  %150 = call i64 @SzArEx_GetFileNameUtf16(ptr noundef nonnull %7, i64 noundef %indvars.iv191, ptr noundef null) #6
  %151 = icmp ugt i64 %150, %.092168
  br i1 %151, label %152, label %155

152:                                              ; preds = %.lr.ph.split
  call void @SzFree(ptr noundef null, ptr noundef %.086169) #6
  %153 = shl i64 %150, 1
  %154 = call ptr @SzAlloc(ptr noundef null, i64 noundef %153) #6
  %.not115 = icmp eq ptr %154, null
  br i1 %.not115, label %.thread141, label %155

155:                                              ; preds = %152, %.lr.ph.split
  %.193 = phi i64 [ %150, %152 ], [ %.092168, %.lr.ph.split ]
  %.187 = phi ptr [ %154, %152 ], [ %.086169, %.lr.ph.split ]
  %156 = call i64 @SzArEx_GetFileNameUtf16(ptr noundef nonnull %7, i64 noundef %indvars.iv191, ptr noundef %.187) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  %157 = load ptr, ptr %78, align 8, !tbaa !33
  %.not125 = icmp eq ptr %157, null
  br i1 %.not125, label %167, label %158

158:                                              ; preds = %155
  %159 = getelementptr inbounds i8, ptr %157, i64 %141
  %160 = load i8, ptr %159, align 1, !tbaa !27
  %161 = zext i8 %160 to i32
  %162 = and i32 %146, %161
  %.not126 = icmp eq i32 %162, 0
  br i1 %.not126, label %167, label %163

163:                                              ; preds = %158
  %164 = load ptr, ptr %77, align 8, !tbaa !34
  %165 = getelementptr inbounds i32, ptr %164, i64 %indvars.iv191
  %166 = load i32, ptr %165, align 4, !tbaa !18
  br label %167

167:                                              ; preds = %155, %158, %163
  %168 = phi i32 [ %166, %163 ], [ 0, %158 ], [ 0, %155 ]
  call void @GetAttribString(i32 noundef %168, i32 noundef %149, ptr noundef nonnull %13)
  %169 = load ptr, ptr %76, align 8, !tbaa !35
  %indvars.iv.next192 = add nuw nsw i64 %indvars.iv191, 1
  %170 = getelementptr inbounds i64, ptr %169, i64 %indvars.iv.next192
  %171 = load i64, ptr %170, align 8, !tbaa !36
  %172 = getelementptr inbounds i64, ptr %169, i64 %indvars.iv191
  %173 = load i64, ptr %172, align 8, !tbaa !36
  %174 = sub i64 %171, %173
  call void @UInt64ToStr(i64 noundef %174, ptr noundef nonnull %14, i32 noundef 10)
  %175 = load ptr, ptr %75, align 8, !tbaa !37
  %.not127 = icmp eq ptr %175, null
  br i1 %.not127, label %184, label %176

176:                                              ; preds = %167
  %177 = getelementptr inbounds i8, ptr %175, i64 %141
  %178 = load i8, ptr %177, align 1, !tbaa !27
  %179 = zext i8 %178 to i32
  %180 = and i32 %146, %179
  %.not128 = icmp eq i32 %180, 0
  br i1 %.not128, label %184, label %181

181:                                              ; preds = %176
  %182 = load ptr, ptr %74, align 8, !tbaa !38
  %183 = getelementptr inbounds %struct.CNtfsFileTime, ptr %182, i64 %indvars.iv191
  call void @ConvertFileTimeToString(ptr noundef %183, ptr noundef nonnull %15)
  br label %185

184:                                              ; preds = %176, %167
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(19) %15, i8 32, i64 19, i1 false), !tbaa !27
  store i8 0, ptr %81, align 1, !tbaa !27
  br label %185

185:                                              ; preds = %184, %181
  call void @Print(ptr noundef nonnull %15)
  call void @Print(ptr noundef nonnull @.str.8)
  call void @Print(ptr noundef nonnull %13)
  call void @Print(ptr noundef nonnull @.str.8)
  call void @Print(ptr noundef nonnull %14)
  call void @Print(ptr noundef nonnull @.str.9)
  %186 = call i32 @PrintString(ptr noundef %.187)
  %.not129.not = icmp eq i32 %186, 0
  br i1 %.not129.not, label %187, label %189

187:                                              ; preds = %185
  br i1 %148, label %188, label %190

188:                                              ; preds = %187
  call void @Print(ptr noundef nonnull @.str.10)
  br label %190

189:                                              ; preds = %185
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %.loopexit

.thread141:                                       ; preds = %95, %98, %102, %152
  %.us-phi178 = phi ptr [ null, %152 ], [ %.187.us, %102 ], [ %.187.us, %98 ], [ null, %95 ]
  %.us-phi179 = phi i32 [ 2, %152 ], [ %103, %102 ], [ %100, %98 ], [ 2, %95 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %.loopexit

190:                                              ; preds = %187, %188
  call void @PrintLF()
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  %191 = load i32, ptr %80, align 8, !tbaa !21
  %192 = zext i32 %191 to i64
  %193 = icmp ult i64 %indvars.iv.next192, %192
  br i1 %193, label %.lr.ph.split, label %.loopexit, !llvm.loop !32

.loopexit:                                        ; preds = %129, %190, %.thread136.us.thread, %189, %.thread, %56, %.thread141
  %.389 = phi ptr [ %.us-phi178, %.thread141 ], [ null, %56 ], [ null, %.thread ], [ %.187, %189 ], [ %.187.us, %.thread136.us.thread ], [ %.187, %190 ], [ %.288159.us, %129 ]
  %.8 = phi i32 [ %.us-phi179, %.thread141 ], [ 0, %56 ], [ 0, %.thread ], [ %186, %189 ], [ 11, %.thread136.us.thread ], [ 0, %190 ], [ 0, %129 ]
  %194 = getelementptr inbounds i8, ptr %3, i64 8
  %195 = load ptr, ptr %194, align 8, !tbaa !39
  %196 = load ptr, ptr %9, align 8, !tbaa !6
  call void %195(ptr noundef nonnull %3, ptr noundef %196) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  br label %197

197:                                              ; preds = %55, %.loopexit, %41
  %.591 = phi ptr [ null, %41 ], [ %.389, %.loopexit ], [ null, %55 ]
  %.10 = phi i32 [ %.185, %41 ], [ %.8, %.loopexit ], [ 11, %55 ]
  call void @SzFree(ptr noundef null, ptr noundef %.591) #6
  call void @SzArEx_Free(ptr noundef nonnull %7, ptr noundef nonnull %3) #6
  %198 = getelementptr inbounds i8, ptr %3, i64 8
  %199 = load ptr, ptr %198, align 8, !tbaa !39
  %200 = load ptr, ptr %31, align 8, !tbaa !10
  call void %199(ptr noundef nonnull %3, ptr noundef %200) #6
  %201 = call i32 @File_Close(ptr noundef nonnull %25) #6
  switch i32 %.10, label %206 [
    i32 0, label %202
    i32 4, label %203
    i32 2, label %204
    i32 3, label %205
  ]

202:                                              ; preds = %197
  call void @Print(ptr noundef nonnull @.str.16)
  br label %208

203:                                              ; preds = %197
  call void @PrintError(ptr noundef nonnull @.str.17)
  br label %208

204:                                              ; preds = %197
  call void @PrintError(ptr noundef nonnull @.str.18)
  br label %208

205:                                              ; preds = %197
  call void @PrintError(ptr noundef nonnull @.str.19)
  br label %208

206:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  %207 = sext i32 %.10 to i64
  call void @UInt64ToStr(i64 noundef %207, ptr noundef nonnull %18, i32 noundef 0)
  call void @PrintError(ptr noundef nonnull %18)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  br label %208

208:                                              ; preds = %203, %205, %206, %204, %202, %29, %23, %20
  %.081 = phi i32 [ 0, %20 ], [ 1, %23 ], [ 1, %29 ], [ 0, %202 ], [ 1, %204 ], [ 1, %206 ], [ 1, %205 ], [ 1, %203 ]
  call void @llvm.lifetime.end.p0(i64 216, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #6
  ret i32 %.081
}

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

; Function Attrs: nounwind uwtable
declare hidden void @Print(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @PrintError(ptr noundef) local_unnamed_addr #0

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

declare i32 @InFile_Open(ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @FileInStream_CreateVTable(ptr noundef) local_unnamed_addr #3

declare void @LookToRead2_CreateVTable(ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @CrcGenerateTable() local_unnamed_addr #3

declare void @SzArEx_Init(ptr noundef) local_unnamed_addr #3

declare i32 @SzArEx_Open(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

declare i64 @SzArEx_GetFileNameUtf16(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

declare void @SzFree(ptr noundef, ptr noundef) local_unnamed_addr #3

declare ptr @SzAlloc(ptr noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden void @GetAttribString(i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @UInt64ToStr(i64 noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @ConvertFileTimeToString(ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare hidden i32 @PrintString(ptr noundef) local_unnamed_addr #0

declare i32 @SzArEx_Extract(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @MyCreateDir(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i32 @OutFile_OpenUtf16(ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @File_Write(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @File_Close(ptr noundef) local_unnamed_addr #3

declare void @SzArEx_Free(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden void @PrintLF() local_unnamed_addr #0

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

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

!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 = !{i64 0, i64 8, !6, i64 8, i64 8, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !7, i64 56}
!11 = !{!"", !12, i64 0, !7, i64 32, !13, i64 40, !13, i64 48, !7, i64 56, !13, i64 64}
!12 = !{!"ILookInStream", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!13 = !{!"long", !8, i64 0}
!14 = !{!15, !7, i64 0}
!15 = !{!"ISzAlloc", !7, i64 0, !7, i64 8}
!16 = !{!11, !13, i64 64}
!17 = !{!11, !7, i64 32}
!18 = !{!19, !19, i64 0}
!19 = !{!"int", !8, i64 0}
!20 = !{!13, !13, i64 0}
!21 = !{!22, !19, i64 96}
!22 = !{!"", !23, i64 0, !25, i64 80, !25, i64 88, !19, i64 96, !7, i64 104, !7, i64 112, !24, i64 120, !24, i64 136, !24, i64 152, !24, i64 168, !7, i64 184, !7, i64 192, !7, i64 200, !7, i64 208}
!23 = !{!"", !19, i64 0, !19, i64 4, !7, i64 8, !24, i64 16, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72}
!24 = !{!"", !7, i64 0, !7, i64 8}
!25 = !{!"long long", !8, i64 0}
!26 = !{!22, !7, i64 112}
!27 = !{!8, !8, i64 0}
!28 = !{!29, !29, i64 0}
!29 = !{!"short", !8, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!22, !7, i64 136}
!34 = !{!22, !7, i64 144}
!35 = !{!22, !7, i64 104}
!36 = !{!25, !25, i64 0}
!37 = !{!22, !7, i64 152}
!38 = !{!22, !7, i64 160}
!39 = !{!15, !7, i64 8}


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