; ModuleID = 'compress.c' source_filename = "compress.c" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-linux-gnu" @maxbits = dso_local local_unnamed_addr global i32 16, align 4 @maxmaxcode = dso_local local_unnamed_addr global i64 65536, align 8 @hsize = dso_local local_unnamed_addr global i64 257, align 8 @free_ent = dso_local local_unnamed_addr global i64 0, align 8 @exit_stat = dso_local local_unnamed_addr global i32 0, align 4 @nomagic = dso_local local_unnamed_addr global i32 1, align 4 @zcat_flg = dso_local local_unnamed_addr global i32 0, align 4 @quiet = dso_local local_unnamed_addr global i32 1, align 4 @block_compress = dso_local local_unnamed_addr global i32 128, align 4 @clear_flg = dso_local local_unnamed_addr global i32 0, align 4 @ratio = dso_local local_unnamed_addr global i64 0, align 8 @checkpoint = dso_local local_unnamed_addr global i64 10000, align 8 @force = dso_local local_unnamed_addr global i32 0, align 4 @InCnt = dso_local local_unnamed_addr global i32 0, align 4 @apsim_InCnt = dso_local local_unnamed_addr global i32 0, align 4 @orig_text_buffer = dso_local global [50 x i8] zeroinitializer, align 16 @InBuff = dso_local local_unnamed_addr global i8* null, align 8 @comp_text_buffer = dso_local global [55 x i8] zeroinitializer, align 16 @OutBuff = dso_local local_unnamed_addr global i8* null, align 8 @in_count = dso_local local_unnamed_addr global i64 1, align 8 @out_count = dso_local local_unnamed_addr global i64 0, align 8 @offset = internal unnamed_addr global i32 0, align 4 @bytes_out = dso_local local_unnamed_addr global i64 0, align 8 @n_bits = dso_local local_unnamed_addr global i32 0, align 4 @maxcode = dso_local local_unnamed_addr global i64 0, align 8 @htab = dso_local local_unnamed_addr global [257 x i64] zeroinitializer, align 16 @codetab = dso_local local_unnamed_addr global [257 x i16] zeroinitializer, align 16 @lmask = dso_local local_unnamed_addr global [9 x i8] c"\FF\FE\FC\F8\F0\E0\C0\80\00", align 1 @rmask = dso_local local_unnamed_addr global [9 x i8] c"\00\01\03\07\0F\1F?\7F\FF", align 1 @buf = dso_local global [16 x i8] zeroinitializer, align 16 @fsize = dso_local local_unnamed_addr global i64 0, align 8 @ofname = dso_local local_unnamed_addr global [100 x i8] zeroinitializer, align 16 ; Function Attrs: nofree nosync nounwind sspstrong uwtable define dso_local i32 @main() local_unnamed_addr #0 { br label %1 1: ; preds = %1, %0 %2 = phi i64 [ 0, %0 ], [ %9, %1 ] %3 = phi i32 [ 1, %0 ], [ %6, %1 ] %4 = mul nsw i32 %3, 133 %5 = add nsw i32 %4, 81 %6 = srem i32 %5, 8095 %7 = trunc i32 %6 to i8 %8 = getelementptr inbounds [50 x i8], [50 x i8]* @orig_text_buffer, i64 0, i64 %2 store i8 %7, i8* %8, align 1, !tbaa !5 %9 = add nuw nsw i64 %2, 1 %10 = icmp eq i64 %9, 50 br i1 %10, label %11, label %1, !llvm.loop !8 11: ; preds = %1 store i32 16, i32* @maxbits, align 4, !tbaa !11 store i64 65536, i64* @maxmaxcode, align 8, !tbaa !13 store i32 50, i32* @InCnt, align 4, !tbaa !11 store i32 53, i32* @apsim_InCnt, align 4, !tbaa !11 store i8* getelementptr inbounds ([50 x i8], [50 x i8]* @orig_text_buffer, i64 0, i64 0), i8** @InBuff, align 8, !tbaa !15 store i8* getelementptr inbounds ([55 x i8], [55 x i8]* @comp_text_buffer, i64 0, i64 0), i8** @OutBuff, align 8, !tbaa !15 call void @compress() ret i32 0 } ; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable writeonly define dso_local void @initbuffer() local_unnamed_addr #1 { br label %1 1: ; preds = %0, %1 %2 = phi i64 [ 0, %0 ], [ %9, %1 ] %3 = phi i32 [ 1, %0 ], [ %6, %1 ] %4 = mul nsw i32 %3, 133 %5 = add nsw i32 %4, 81 %6 = srem i32 %5, 8095 %7 = trunc i32 %6 to i8 %8 = getelementptr inbounds [50 x i8], [50 x i8]* @orig_text_buffer, i64 0, i64 %2 store i8 %7, i8* %8, align 1, !tbaa !5 %9 = add nuw nsw i64 %2, 1 %10 = icmp eq i64 %9, 50 br i1 %10, label %11, label %1, !llvm.loop !8 11: ; preds = %1 ret void } ; Function Attrs: nofree nosync nounwind sspstrong uwtable define dso_local void @compress() local_unnamed_addr #0 { store i32 0, i32* @offset, align 4, !tbaa !11 store i64 3, i64* @bytes_out, align 8, !tbaa !13 store i64 0, i64* @out_count, align 8, !tbaa !13 store i32 0, i32* @clear_flg, align 4, !tbaa !11 store i64 0, i64* @ratio, align 8, !tbaa !13 store i64 1, i64* @in_count, align 8, !tbaa !13 store i64 10000, i64* @checkpoint, align 8, !tbaa !13 store i32 9, i32* @n_bits, align 4, !tbaa !11 store i64 511, i64* @maxcode, align 8, !tbaa !13 %1 = load i32, i32* @block_compress, align 4, !tbaa !11 %2 = icmp eq i32 %1, 0 %3 = select i1 %2, i64 256, i64 257 store i64 %3, i64* @free_ent, align 8, !tbaa !13 %4 = load i32, i32* @InCnt, align 4, !tbaa !11 %5 = icmp sgt i32 %4, 0 br i1 %5, label %6, label %16 6: ; preds = %0 %7 = load i32, i32* @apsim_InCnt, align 4, !tbaa !11 %8 = add nsw i32 %7, -1 store i32 %8, i32* @apsim_InCnt, align 4, !tbaa !11 %9 = icmp sgt i32 %7, 0 br i1 %9, label %10, label %16 10: ; preds = %6 %11 = add nsw i32 %4, -1 store i32 %11, i32* @InCnt, align 4, !tbaa !11 %12 = load i8*, i8** @InBuff, align 8, !tbaa !15 %13 = getelementptr inbounds i8, i8* %12, i64 1 store i8* %13, i8** @InBuff, align 8, !tbaa !15 %14 = load i8, i8* %12, align 1, !tbaa !5 %15 = zext i8 %14 to i64 br label %16 16: ; preds = %0, %6, %10 %17 = phi i64 [ %15, %10 ], [ 4294967295, %6 ], [ 4294967295, %0 ] %18 = load i64, i64* @hsize, align 8, !tbaa !13 %19 = icmp slt i64 %18, 65536 br i1 %19, label %20, label %28 20: ; preds = %16, %20 %21 = phi i32 [ %23, %20 ], [ 0, %16 ] %22 = phi i64 [ %24, %20 ], [ %18, %16 ] %23 = add nuw nsw i32 %21, 1 %24 = shl nsw i64 %22, 1 %25 = icmp slt i64 %22, 32768 br i1 %25, label %20, label %26, !llvm.loop !17 26: ; preds = %20 %27 = sub nsw i32 7, %21 br label %28 28: ; preds = %26, %16 %29 = phi i32 [ 8, %16 ], [ %27, %26 ] %30 = add i64 %18, -16 %31 = add i64 %18, 15 %32 = call i64 @llvm.smin.i64(i64 %18, i64 31) #6 %33 = sub i64 %31, %32 %34 = and i64 %33, -16 %35 = sub i64 %30, %34 %36 = getelementptr [257 x i64], [257 x i64]* @htab, i64 0, i64 %35 %37 = bitcast i64* %36 to i8* %38 = shl nuw i64 %33, 3 %39 = add i64 %38, 128 %40 = and i64 %39, -128 call void @llvm.memset.p0i8.i64(i8* align 8 %37, i8 -1, i64 %40, i1 false) #6 %41 = sub i64 %18, %34 %42 = icmp sgt i64 %41, 16 br i1 %42, label %43, label %52 43: ; preds = %28 %44 = call i64 @llvm.smin.i64(i64 %35, i64 1) #6 %45 = add i64 %44, -1 %46 = getelementptr [257 x i64], [257 x i64]* @htab, i64 0, i64 %45 %47 = bitcast i64* %46 to i8* %48 = add i64 %18, -15 %49 = add i64 %34, %44 %50 = sub i64 %48, %49 %51 = shl nuw i64 %50, 3 call void @llvm.memset.p0i8.i64(i8* align 8 %47, i8 -1, i64 %51, i1 false) #6 br label %52 52: ; preds = %28, %43 %53 = load i32, i32* @InCnt, align 4, !tbaa !11 %54 = icmp sgt i32 %53, 0 br i1 %54, label %55, label %178 55: ; preds = %52, %174 %56 = phi i32 [ %176, %174 ], [ %53, %52 ] %57 = phi i64 [ %175, %174 ], [ %17, %52 ] %58 = load i32, i32* @apsim_InCnt, align 4, !tbaa !11 %59 = add nsw i32 %58, -1 store i32 %59, i32* @apsim_InCnt, align 4, !tbaa !11 %60 = icmp sgt i32 %58, 0 br i1 %60, label %61, label %67 61: ; preds = %55 %62 = add nsw i32 %56, -1 store i32 %62, i32* @InCnt, align 4, !tbaa !11 %63 = load i8*, i8** @InBuff, align 8, !tbaa !15 %64 = getelementptr inbounds i8, i8* %63, i64 1 store i8* %64, i8** @InBuff, align 8, !tbaa !15 %65 = load i8, i8* %63, align 1, !tbaa !5 %66 = zext i8 %65 to i32 br label %67 67: ; preds = %55, %61 %68 = phi i32 [ %66, %61 ], [ -1, %55 ] %69 = load i64, i64* @in_count, align 8, !tbaa !13 %70 = add nsw i64 %69, 1 store i64 %70, i64* @in_count, align 8, !tbaa !13 %71 = sext i32 %68 to i64 %72 = load i32, i32* @maxbits, align 4, !tbaa !11 %73 = zext i32 %72 to i64 %74 = shl i64 %71, %73 %75 = add nsw i64 %74, %57 %76 = shl i32 %68, %29 %77 = sext i32 %76 to i64 %78 = xor i64 %57, %77 %79 = getelementptr inbounds [257 x i64], [257 x i64]* @htab, i64 0, i64 %78 %80 = load i64, i64* %79, align 8, !tbaa !13 %81 = icmp eq i64 %80, %75 br i1 %81, label %82, label %86 82: ; preds = %67 %83 = getelementptr inbounds [257 x i16], [257 x i16]* @codetab, i64 0, i64 %78 %84 = load i16, i16* %83, align 2, !tbaa !18 %85 = zext i16 %84 to i64 br label %174, !llvm.loop !20 86: ; preds = %67 %87 = icmp slt i64 %80, 0 br i1 %87, label %113, label %88 88: ; preds = %86 %89 = sub nsw i64 %18, %78 %90 = icmp eq i64 %78, 0 %91 = shl i64 %89, 32 %92 = ashr exact i64 %91, 32 %93 = select i1 %90, i64 1, i64 %92 br label %94 94: ; preds = %108, %88 %95 = phi i64 [ 0, %88 ], [ %110, %108 ] %96 = phi i64 [ %78, %88 ], [ %100, %108 ] %97 = sub nsw i64 %96, %93 %98 = icmp slt i64 %97, 0 %99 = select i1 %98, i64 %18, i64 0 %100 = add nsw i64 %99, %97 %101 = getelementptr inbounds [257 x i64], [257 x i64]* @htab, i64 0, i64 %100 %102 = load i64, i64* %101, align 8, !tbaa !13 %103 = icmp eq i64 %102, %75 br i1 %103, label %104, label %108 104: ; preds = %94 %105 = getelementptr inbounds [257 x i16], [257 x i16]* @codetab, i64 0, i64 %100 %106 = load i16, i16* %105, align 2, !tbaa !18 %107 = zext i16 %106 to i64 br label %174, !llvm.loop !20 108: ; preds = %94 %109 = icmp slt i64 %102, 1 %110 = add nuw i64 %95, 1 %111 = icmp slt i64 %69, %110 %112 = select i1 %109, i1 true, i1 %111 br i1 %112, label %113, label %94 113: ; preds = %108, %86 %114 = phi i64 [ %78, %86 ], [ %100, %108 ] %115 = load i64, i64* @out_count, align 8, !tbaa !13 %116 = add nsw i64 %115, 1 store i64 %116, i64* @out_count, align 8, !tbaa !13 %117 = load i64, i64* @free_ent, align 8, !tbaa !13 %118 = load i64, i64* @maxmaxcode, align 8, !tbaa !13 %119 = icmp slt i64 %117, %118 br i1 %119, label %120, label %125 120: ; preds = %113 %121 = add nsw i64 %117, 1 store i64 %121, i64* @free_ent, align 8, !tbaa !13 %122 = trunc i64 %117 to i16 %123 = getelementptr inbounds [257 x i16], [257 x i16]* @codetab, i64 0, i64 %114 store i16 %122, i16* %123, align 2, !tbaa !18 %124 = getelementptr inbounds [257 x i64], [257 x i64]* @htab, i64 0, i64 %114 store i64 %75, i64* %124, align 8, !tbaa !13 br label %174 125: ; preds = %113 %126 = load i64, i64* @checkpoint, align 8, !tbaa !13 %127 = icmp sge i64 %70, %126 %128 = load i32, i32* @block_compress, align 4 %129 = icmp ne i32 %128, 0 %130 = select i1 %127, i1 %129, i1 false br i1 %130, label %131, label %174 131: ; preds = %125 %132 = add nsw i64 %69, 10001 store i64 %132, i64* @checkpoint, align 8, !tbaa !13 %133 = icmp sgt i64 %69, 8388606 br i1 %133, label %134, label %140 134: ; preds = %131 %135 = load i64, i64* @bytes_out, align 8, !tbaa !13 %136 = icmp ult i64 %135, 256 br i1 %136, label %144, label %137 137: ; preds = %134 %138 = ashr i64 %135, 8 %139 = sdiv i64 %70, %138 br label %144 140: ; preds = %131 %141 = shl i64 %70, 8 %142 = load i64, i64* @bytes_out, align 8, !tbaa !13 %143 = sdiv i64 %141, %142 br label %144 144: ; preds = %140, %137, %134 %145 = phi i64 [ %139, %137 ], [ %143, %140 ], [ 2147483647, %134 ] %146 = load i64, i64* @ratio, align 8, !tbaa !13 %147 = icmp sgt i64 %145, %146 br i1 %147, label %148, label %149 148: ; preds = %144 store i64 %145, i64* @ratio, align 8, !tbaa !13 br label %174 149: ; preds = %144 store i64 0, i64* @ratio, align 8, !tbaa !13 %150 = load i64, i64* @hsize, align 8, !tbaa !13 %151 = add i64 %150, -16 %152 = add i64 %150, 15 %153 = call i64 @llvm.smin.i64(i64 %150, i64 31) #6 %154 = sub i64 %152, %153 %155 = and i64 %154, -16 %156 = sub i64 %151, %155 %157 = getelementptr [257 x i64], [257 x i64]* @htab, i64 0, i64 %156 %158 = bitcast i64* %157 to i8* %159 = shl nuw i64 %154, 3 %160 = add i64 %159, 128 %161 = and i64 %160, -128 call void @llvm.memset.p0i8.i64(i8* align 8 %158, i8 -1, i64 %161, i1 false) #6 %162 = sub i64 %150, %155 %163 = icmp sgt i64 %162, 16 br i1 %163, label %164, label %173 164: ; preds = %149 %165 = call i64 @llvm.smin.i64(i64 %156, i64 1) #6 %166 = add i64 %165, -1 %167 = getelementptr [257 x i64], [257 x i64]* @htab, i64 0, i64 %166 %168 = bitcast i64* %167 to i8* %169 = add i64 %150, -15 %170 = add i64 %155, %165 %171 = sub i64 %169, %170 %172 = shl nuw i64 %171, 3 call void @llvm.memset.p0i8.i64(i8* align 8 %168, i8 -1, i64 %172, i1 false) #6 br label %173 173: ; preds = %164, %149 store i64 257, i64* @free_ent, align 8, !tbaa !13 store i32 1, i32* @clear_flg, align 4, !tbaa !11 call void @output(i64 256) #6 br label %174 174: ; preds = %173, %148, %120, %125, %104, %82 %175 = phi i64 [ %85, %82 ], [ %107, %104 ], [ %71, %125 ], [ %71, %120 ], [ %71, %148 ], [ %71, %173 ] %176 = load i32, i32* @InCnt, align 4, !tbaa !11 %177 = icmp sgt i32 %176, 0 br i1 %177, label %55, label %178, !llvm.loop !20 178: ; preds = %174, %52 %179 = load i64, i64* @bytes_out, align 8, !tbaa !13 %180 = load i64, i64* @in_count, align 8, !tbaa !13 %181 = icmp sgt i64 %179, %180 br i1 %181, label %182, label %183 182: ; preds = %178 store i32 2, i32* @exit_stat, align 4, !tbaa !11 br label %183 183: ; preds = %182, %178 ret void } ; Function Attrs: mustprogress nofree norecurse nosync nounwind sspstrong uwtable willreturn define dso_local i32 @getbyte() local_unnamed_addr #2 { %1 = load i32, i32* @InCnt, align 4, !tbaa !11 %2 = icmp sgt i32 %1, 0 br i1 %2, label %3, label %13 3: ; preds = %0 %4 = load i32, i32* @apsim_InCnt, align 4, !tbaa !11 %5 = add nsw i32 %4, -1 store i32 %5, i32* @apsim_InCnt, align 4, !tbaa !11 %6 = icmp sgt i32 %4, 0 br i1 %6, label %7, label %13 7: ; preds = %3 %8 = add nsw i32 %1, -1 store i32 %8, i32* @InCnt, align 4, !tbaa !11 %9 = load i8*, i8** @InBuff, align 8, !tbaa !15 %10 = getelementptr inbounds i8, i8* %9, i64 1 store i8* %10, i8** @InBuff, align 8, !tbaa !15 %11 = load i8, i8* %9, align 1, !tbaa !5 %12 = zext i8 %11 to i32 br label %13 13: ; preds = %0, %3, %7 %14 = phi i32 [ %12, %7 ], [ -1, %3 ], [ -1, %0 ] ret i32 %14 } ; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable writeonly define dso_local void @cl_hash(i64 %0) local_unnamed_addr #1 { %2 = add i64 %0, -16 %3 = add i64 %0, 15 %4 = call i64 @llvm.smin.i64(i64 %0, i64 31) %5 = sub i64 %3, %4 %6 = and i64 %5, -16 %7 = sub i64 %2, %6 %8 = getelementptr [257 x i64], [257 x i64]* @htab, i64 0, i64 %7 %9 = bitcast i64* %8 to i8* %10 = shl nuw i64 %5, 3 %11 = add i64 %10, 128 %12 = and i64 %11, -128 call void @llvm.memset.p0i8.i64(i8* align 8 %9, i8 -1, i64 %12, i1 false) %13 = add i64 %0, 15 %14 = call i64 @llvm.smin.i64(i64 %0, i64 31) %15 = sub i64 %13, %14 %16 = and i64 %15, -16 %17 = sub i64 %0, %16 %18 = icmp sgt i64 %17, 16 br i1 %18, label %19, label %30 19: ; preds = %1 %20 = add i64 %0, -16 %21 = sub i64 %20, %16 %22 = call i64 @llvm.smin.i64(i64 %21, i64 1) %23 = add i64 %22, -1 %24 = getelementptr [257 x i64], [257 x i64]* @htab, i64 0, i64 %23 %25 = bitcast i64* %24 to i8* %26 = add i64 %0, -15 %27 = add i64 %22, %16 %28 = sub i64 %26, %27 %29 = shl nuw i64 %28, 3 call void @llvm.memset.p0i8.i64(i8* align 8 %25, i8 -1, i64 %29, i1 false) br label %30 30: ; preds = %19, %1 ret void } ; Function Attrs: nofree nosync nounwind sspstrong uwtable define dso_local void @cl_block() local_unnamed_addr #0 { %1 = load i64, i64* @in_count, align 8, !tbaa !13 %2 = add nsw i64 %1, 10000 store i64 %2, i64* @checkpoint, align 8, !tbaa !13 %3 = icmp sgt i64 %1, 8388607 br i1 %3, label %4, label %10 4: ; preds = %0 %5 = load i64, i64* @bytes_out, align 8, !tbaa !13 %6 = icmp ult i64 %5, 256 br i1 %6, label %14, label %7 7: ; preds = %4 %8 = ashr i64 %5, 8 %9 = sdiv i64 %1, %8 br label %14 10: ; preds = %0 %11 = shl i64 %1, 8 %12 = load i64, i64* @bytes_out, align 8, !tbaa !13 %13 = sdiv i64 %11, %12 br label %14 14: ; preds = %4, %7, %10 %15 = phi i64 [ %9, %7 ], [ %13, %10 ], [ 2147483647, %4 ] %16 = load i64, i64* @ratio, align 8, !tbaa !13 %17 = icmp sgt i64 %15, %16 br i1 %17, label %18, label %19 18: ; preds = %14 store i64 %15, i64* @ratio, align 8, !tbaa !13 br label %44 19: ; preds = %14 store i64 0, i64* @ratio, align 8, !tbaa !13 %20 = load i64, i64* @hsize, align 8, !tbaa !13 %21 = add i64 %20, -16 %22 = add i64 %20, 15 %23 = call i64 @llvm.smin.i64(i64 %20, i64 31) #6 %24 = sub i64 %22, %23 %25 = and i64 %24, -16 %26 = sub i64 %21, %25 %27 = getelementptr [257 x i64], [257 x i64]* @htab, i64 0, i64 %26 %28 = bitcast i64* %27 to i8* %29 = shl nuw i64 %24, 3 %30 = add i64 %29, 128 %31 = and i64 %30, -128 call void @llvm.memset.p0i8.i64(i8* align 8 %28, i8 -1, i64 %31, i1 false) #6 %32 = sub i64 %20, %25 %33 = icmp sgt i64 %32, 16 br i1 %33, label %34, label %43 34: ; preds = %19 %35 = call i64 @llvm.smin.i64(i64 %26, i64 1) #6 %36 = add i64 %35, -1 %37 = getelementptr [257 x i64], [257 x i64]* @htab, i64 0, i64 %36 %38 = bitcast i64* %37 to i8* %39 = add i64 %20, -15 %40 = add i64 %25, %35 %41 = sub i64 %39, %40 %42 = shl nuw i64 %41, 3 call void @llvm.memset.p0i8.i64(i8* align 8 %38, i8 -1, i64 %42, i1 false) #6 br label %43 43: ; preds = %19, %34 store i64 257, i64* @free_ent, align 8, !tbaa !13 store i32 1, i32* @clear_flg, align 4, !tbaa !11 call void @output(i64 256) br label %44 44: ; preds = %43, %18 ret void } ; Function Attrs: nofree nosync nounwind sspstrong uwtable define dso_local void @output(i64 %0) local_unnamed_addr #0 { %2 = load i32, i32* @offset, align 4, !tbaa !11 %3 = icmp sgt i64 %0, -1 br i1 %3, label %4, label %105 4: ; preds = %1 %5 = load i32, i32* @n_bits, align 4, !tbaa !11 %6 = ashr i32 %2, 3 %7 = sext i32 %6 to i64 %8 = getelementptr inbounds [16 x i8], [16 x i8]* @buf, i64 0, i64 %7 %9 = and i32 %2, 7 %10 = load i8, i8* %8, align 1, !tbaa !5 %11 = zext i32 %9 to i64 %12 = getelementptr inbounds [9 x i8], [9 x i8]* @rmask, i64 0, i64 %11 %13 = load i8, i8* %12, align 1, !tbaa !5 %14 = and i8 %13, %10 %15 = shl i64 %0, %11 %16 = getelementptr inbounds [9 x i8], [9 x i8]* @lmask, i64 0, i64 %11 %17 = load i8, i8* %16, align 1, !tbaa !5 %18 = trunc i64 %15 to i8 %19 = or i8 %14, %18 %20 = and i8 %19, %17 store i8 %20, i8* %8, align 1, !tbaa !5 %21 = getelementptr inbounds i8, i8* %8, i64 1 %22 = sub nuw nsw i32 8, %9 %23 = sub nsw i32 %5, %22 %24 = zext i32 %22 to i64 %25 = ashr i64 %0, %24 %26 = icmp sgt i32 %23, 7 br i1 %26, label %27, label %32 27: ; preds = %4 %28 = trunc i64 %25 to i8 %29 = getelementptr inbounds i8, i8* %8, i64 2 store i8 %28, i8* %21, align 1, !tbaa !5 %30 = ashr i64 %25, 8 %31 = add nsw i32 %23, -8 br label %32 32: ; preds = %27, %4 %33 = phi i64 [ %30, %27 ], [ %25, %4 ] %34 = phi i32 [ %31, %27 ], [ %23, %4 ] %35 = phi i8* [ %29, %27 ], [ %21, %4 ] %36 = icmp eq i32 %34, 0 br i1 %36, label %39, label %37 37: ; preds = %32 %38 = trunc i64 %33 to i8 store i8 %38, i8* %35, align 1, !tbaa !5 br label %39 39: ; preds = %37, %32 %40 = add nsw i32 %5, %2 store i32 %40, i32* @offset, align 4, !tbaa !11 %41 = shl i32 %5, 3 %42 = icmp eq i32 %40, %41 br i1 %42, label %43, label %59 43: ; preds = %39 %44 = sext i32 %5 to i64 %45 = load i64, i64* @bytes_out, align 8, !tbaa !13 %46 = add nsw i64 %45, %44 store i64 %46, i64* @bytes_out, align 8, !tbaa !13 %47 = add i32 %5, -1 %48 = call i32 @llvm.umin.i32(i32 %47, i32 15) %49 = zext i32 %48 to i64 %50 = getelementptr [16 x i8], [16 x i8]* @buf, i64 0, i64 %49 br label %51 51: ; preds = %51, %43 %52 = phi i8* [ getelementptr inbounds ([16 x i8], [16 x i8]* @buf, i64 0, i64 0), %43 ], [ %53, %51 ] %53 = getelementptr inbounds i8, i8* %52, i64 1 %54 = load i8, i8* %52, align 1, !tbaa !5 %55 = load i8*, i8** @OutBuff, align 8, !tbaa !15 %56 = getelementptr inbounds i8, i8* %55, i64 1 store i8* %56, i8** @OutBuff, align 8, !tbaa !15 store i8 %54, i8* %55, align 1, !tbaa !5 %57 = icmp eq i8* %52, %50 br i1 %57, label %58, label %51, !llvm.loop !21 58: ; preds = %51 store i32 0, i32* @offset, align 4, !tbaa !11 br label %59 59: ; preds = %58, %39 %60 = load i64, i64* @free_ent, align 8, !tbaa !13 %61 = load i64, i64* @maxcode, align 8, !tbaa !13 %62 = icmp sgt i64 %60, %61 %63 = load i32, i32* @clear_flg, align 4 %64 = icmp sgt i32 %63, 0 %65 = select i1 %62, i1 true, i1 %64 br i1 %65, label %66, label %128 66: ; preds = %59 %67 = load i32, i32* @offset, align 4, !tbaa !11 %68 = icmp sgt i32 %67, 0 br i1 %68, label %69, label %90 69: ; preds = %66 %70 = load i32, i32* @n_bits, align 4, !tbaa !11 %71 = icmp sgt i32 %70, 0 br i1 %71, label %72, label %85 72: ; preds = %69 %73 = add i32 %70, -1 %74 = call i32 @llvm.umin.i32(i32 %73, i32 15) #6 %75 = add nuw nsw i32 %74, 1 %76 = zext i32 %75 to i64 br label %77 77: ; preds = %77, %72 %78 = phi i64 [ 0, %72 ], [ %83, %77 ] %79 = getelementptr inbounds [16 x i8], [16 x i8]* @buf, i64 0, i64 %78 %80 = load i8, i8* %79, align 1, !tbaa !5 %81 = load i8*, i8** @OutBuff, align 8, !tbaa !15 %82 = getelementptr inbounds i8, i8* %81, i64 1 store i8* %82, i8** @OutBuff, align 8, !tbaa !15 store i8 %80, i8* %81, align 1, !tbaa !5 %83 = add nuw nsw i64 %78, 1 %84 = icmp eq i64 %83, %76 br i1 %84, label %85, label %77, !llvm.loop !22 85: ; preds = %77, %69 %86 = load i32, i32* @n_bits, align 4, !tbaa !11 %87 = sext i32 %86 to i64 %88 = load i64, i64* @bytes_out, align 8, !tbaa !13 %89 = add nsw i64 %88, %87 store i64 %89, i64* @bytes_out, align 8, !tbaa !13 br label %90 90: ; preds = %85, %66 store i32 0, i32* @offset, align 4, !tbaa !11 %91 = load i32, i32* @clear_flg, align 4, !tbaa !11 %92 = icmp eq i32 %91, 0 br i1 %92, label %94, label %93 93: ; preds = %90 store i32 9, i32* @n_bits, align 4, !tbaa !11 store i64 511, i64* @maxcode, align 8, !tbaa !13 store i32 0, i32* @clear_flg, align 4, !tbaa !11 br label %128 94: ; preds = %90 %95 = load i32, i32* @n_bits, align 4, !tbaa !11 %96 = add nsw i32 %95, 1 store i32 %96, i32* @n_bits, align 4, !tbaa !11 %97 = load i32, i32* @maxbits, align 4, !tbaa !11 %98 = icmp eq i32 %96, %97 br i1 %98, label %99, label %101 99: ; preds = %94 %100 = load i64, i64* @maxmaxcode, align 8, !tbaa !13 store i64 %100, i64* @maxcode, align 8, !tbaa !13 br label %128 101: ; preds = %94 %102 = shl nsw i32 -1, %96 %103 = xor i32 %102, -1 %104 = sext i32 %103 to i64 store i64 %104, i64* @maxcode, align 8, !tbaa !13 br label %128 105: ; preds = %1 %106 = icmp sgt i32 %2, 0 br i1 %106, label %107, label %122 107: ; preds = %105 %108 = add nsw i32 %2, 7 %109 = sdiv i32 %108, 8 %110 = add nsw i32 %109, -1 %111 = call i32 @llvm.umin.i32(i32 %110, i32 15) #6 %112 = add nuw nsw i32 %111, 1 %113 = zext i32 %112 to i64 br label %114 114: ; preds = %114, %107 %115 = phi i64 [ 0, %107 ], [ %120, %114 ] %116 = getelementptr inbounds [16 x i8], [16 x i8]* @buf, i64 0, i64 %115 %117 = load i8, i8* %116, align 1, !tbaa !5 %118 = load i8*, i8** @OutBuff, align 8, !tbaa !15 %119 = getelementptr inbounds i8, i8* %118, i64 1 store i8* %119, i8** @OutBuff, align 8, !tbaa !15 store i8 %117, i8* %118, align 1, !tbaa !5 %120 = add nuw nsw i64 %115, 1 %121 = icmp eq i64 %120, %113 br i1 %121, label %122, label %114, !llvm.loop !22 122: ; preds = %114, %105 %123 = add nsw i32 %2, 7 %124 = sdiv i32 %123, 8 %125 = sext i32 %124 to i64 %126 = load i64, i64* @bytes_out, align 8, !tbaa !13 %127 = add nsw i64 %126, %125 store i64 %127, i64* @bytes_out, align 8, !tbaa !13 store i32 0, i32* @offset, align 4, !tbaa !11 br label %128 128: ; preds = %59, %99, %101, %93, %122 ret void } ; Function Attrs: mustprogress nofree norecurse nosync nounwind sspstrong uwtable willreturn define dso_local void @putbyte(i8 signext %0) local_unnamed_addr #2 { %2 = load i8*, i8** @OutBuff, align 8, !tbaa !15 %3 = getelementptr inbounds i8, i8* %2, i64 1 store i8* %3, i8** @OutBuff, align 8, !tbaa !15 store i8 %0, i8* %2, align 1, !tbaa !5 ret void } ; Function Attrs: nofree norecurse nosync nounwind sspstrong uwtable define dso_local void @writebytes(i8* nocapture readonly %0, i32 %1) local_unnamed_addr #3 { %3 = icmp sgt i32 %1, 0 br i1 %3, label %4, label %17 4: ; preds = %2 %5 = add i32 %1, -1 %6 = call i32 @llvm.umin.i32(i32 %5, i32 15) %7 = add nuw nsw i32 %6, 1 %8 = zext i32 %7 to i64 br label %9 9: ; preds = %4, %9 %10 = phi i64 [ 0, %4 ], [ %15, %9 ] %11 = getelementptr inbounds i8, i8* %0, i64 %10 %12 = load i8, i8* %11, align 1, !tbaa !5 %13 = load i8*, i8** @OutBuff, align 8, !tbaa !15 %14 = getelementptr inbounds i8, i8* %13, i64 1 store i8* %14, i8** @OutBuff, align 8, !tbaa !15 store i8 %12, i8* %13, align 1, !tbaa !5 %15 = add nuw nsw i64 %10, 1 %16 = icmp eq i64 %15, %8 br i1 %16, label %17, label %9, !llvm.loop !22 17: ; preds = %9, %2 ret void } ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn declare i64 @llvm.smin.i64(i64, i64) #4 ; Function Attrs: argmemonly nofree nounwind willreturn writeonly declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #5 ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn declare i32 @llvm.umin.i32(i32, i32) #4 attributes #0 = { nofree nosync nounwind sspstrong uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nofree norecurse nosync nounwind sspstrong uwtable writeonly "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #2 = { mustprogress nofree norecurse nosync nounwind sspstrong uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { nofree norecurse nosync nounwind sspstrong uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { nofree nosync nounwind readnone speculatable willreturn } attributes #5 = { argmemonly nofree nounwind willreturn writeonly } attributes #6 = { nounwind } !llvm.module.flags = !{!0, !1, !2, !3} !llvm.ident = !{!4} !0 = !{i32 1, !"wchar_size", i32 4} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"PIE Level", i32 2} !3 = !{i32 7, !"uwtable", i32 1} !4 = !{!"clang version 13.0.1"} !5 = !{!6, !6, i64 0} !6 = !{!"omnipotent char", !7, i64 0} !7 = !{!"Simple C/C++ TBAA"} !8 = distinct !{!8, !9, !10} !9 = !{!"llvm.loop.mustprogress"} !10 = !{!"llvm.loop.unroll.disable"} !11 = !{!12, !12, i64 0} !12 = !{!"int", !6, i64 0} !13 = !{!14, !14, i64 0} !14 = !{!"long", !6, i64 0} !15 = !{!16, !16, i64 0} !16 = !{!"any pointer", !6, i64 0} !17 = distinct !{!17, !9, !10} !18 = !{!19, !19, i64 0} !19 = !{!"short", !6, i64 0} !20 = distinct !{!20, !9, !10} !21 = distinct !{!21, !9, !10} !22 = distinct !{!22, !9, !10}