#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ stderr;
void usage() {
  fprintf(
      stderr,
      "sparsecopy v0.10\n\nUsage:\n     sparsecopy [OPTIONS] SOURCE "
      "DEST\n\nOptions:\n     -o, --overlay          Overlay existing file "
      "DEST (rather than truncating)\n     -n, --nocheck          Skip blank "
      "check\n     -q, --quiet            Quiet\n     -m, --max SIZE         "
      "Copy SIZE bytes maximum from SOURCE\n     -e, --errorremainder   Error "
      "if there is more to write beyond --max value\n     -b, --blocksize SIZE "
      "  Use SIZE blocksize in bytes (default 512)\n     -s, --seek POS        "
      " Start writing SOURCE at position POS in DEST\n     -f, --finalsize "
      "SIZE   Set size of DEST to SIZE when done (no effect on block "
      "devices)\n     -c, --check            Check the first block in the "
      "destination is zero, else abort\n     -p, --progress         Display "
      "progress indicator on stderr\n     -y, --syncevery SIZE   Issue an "
      "fdatasync() every SIZE byets\n     -h, --help             Display "
      "usage\n\nSparsecopy copies from a source file (either sparse or "
      "non-sparse) to a destination file\nmaking the destination file sparse "
      "on the way. If the destination file already exists\nthen the source "
      "file can be superimposed on top of it by using the -o switch "
      "(ignored\nif the destination file doesn't exist); in this case "
      "sparsecopy will (unless -n is\nspecified as well) check that any blocks "
      "to be overlayed with zero (i.e. made sparse)\nare already zero in the "
      "destination images. When used with block devices, sparsecopy\nwill not "
      "affect the size of the device.\n\nSOURCE can be \"-\" to indicate "
      "stdin. SOURCE or DEST can be raw devices if you wish.\nIf you want to "
      "make a sparse file, either use /dev/zero for SOURCE and -m, or "
      "(quicker) use\n/dev/null for SOURCE and -f.\n\nSIZE and POS can be "
      "specified in blocks (default), or use the following suffixes:\n     B  "
      "Bytes      (2^0  bytes)\n     K  Kilobytes  (2^10 bytes)\n     M  "
      "Megabytes  (2^20 bytes)\n     G  Gigabtytes (2^30 bytes)\n     T  "
      "Terabytes  (2^40 bytes)\n     P  Perabytes  (2^50 bytes)\n     E  "
      "Exabytes   (2^60 bytes)\n\nNote that blocksize=1024 will set blocksize "
      "to 1024 512byte blocks (use 1024B if this is not\nwhat you mean). Also "
      "note that disk capacity is often measured using decimal megabytes "
      "etc.;\nwe do not adopt this convention for compatibility with dd.\n");
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ec5(%rip),%rax
mov    (%rax),%edi
lea    0xedc(%rip),%rsi
call   1030 <fprintf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
mov    0x2ec9(%rip),%rax
mov    (%rax),%edi
lea    0xee0(%rip),%rsi
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [2188 x i8] c"sparsecopy v0.10\0A\0AUsage:\0A sparsecopy [OPTIONS] SOURCE DEST\0A\0AOptions:\0A -o, --overlay Overlay existing file DEST (rather than truncating)\0A -n, --nocheck Skip blank check\0A -q, --quiet Quiet\0A -m, --max SIZE Copy SIZE bytes maximum from SOURCE\0A -e, --errorremainder Error if there is more to write beyond --max value\0A -b, --blocksize SIZE Use SIZE blocksize in bytes (default 512)\0A -s, --seek POS Start writing SOURCE at position POS in DEST\0A -f, --finalsize SIZE Set size of DEST to SIZE when done (no effect on block devices)\0A -c, --check Check the first block in the destination is zero, else abort\0A -p, --progress Display progress indicator on stderr\0A -y, --syncevery SIZE Issue an fdatasync() every SIZE byets\0A -h, --help Display usage\0A\0ASparsecopy copies from a source file (either sparse or non-sparse) to a destination file\0Amaking the destination file sparse on the way. If the destination file already exists\0Athen the source file can be superimposed on top of it by using the -o switch (ignored\0Aif the destination file doesn't exist); in this case sparsecopy will (unless -n is\0Aspecified as well) check that any blocks to be overlayed with zero (i.e. made sparse)\0Aare already zero in the destination images. When used with block devices, sparsecopy\0Awill not affect the size of the device.\0A\0ASOURCE can be \22-\22 to indicate stdin. SOURCE or DEST can be raw devices if you wish.\0AIf you want to make a sparse file, either use /dev/zero for SOURCE and -m, or (quicker) use\0A/dev/null for SOURCE and -f.\0A\0ASIZE and POS can be specified in blocks (default), or use the following suffixes:\0A B Bytes (2^0 bytes)\0A K Kilobytes (2^10 bytes)\0A M Megabytes (2^20 bytes)\0A G Gigabtytes (2^30 bytes)\0A T Terabytes (2^40 bytes)\0A P Perabytes (2^50 bytes)\0A E Exabytes (2^60 bytes)\0A\0ANote that blocksize=1024 will set blocksize to 1024 512byte blocks (use 1024B if this is not\0Awhat you mean). Also note that disk capacity is often measured using decimal megabytes etc.;\0Awe do not adopt this convention for compatibility with dd.\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([2188 x i8], [2188 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [2188 x i8] c"sparsecopy v0.10\0A\0AUsage:\0A sparsecopy [OPTIONS] SOURCE DEST\0A\0AOptions:\0A -o, --overlay Overlay existing file DEST (rather than truncating)\0A -n, --nocheck Skip blank check\0A -q, --quiet Quiet\0A -m, --max SIZE Copy SIZE bytes maximum from SOURCE\0A -e, --errorremainder Error if there is more to write beyond --max value\0A -b, --blocksize SIZE Use SIZE blocksize in bytes (default 512)\0A -s, --seek POS Start writing SOURCE at position POS in DEST\0A -f, --finalsize SIZE Set size of DEST to SIZE when done (no effect on block devices)\0A -c, --check Check the first block in the destination is zero, else abort\0A -p, --progress Display progress indicator on stderr\0A -y, --syncevery SIZE Issue an fdatasync() every SIZE byets\0A -h, --help Display usage\0A\0ASparsecopy copies from a source file (either sparse or non-sparse) to a destination file\0Amaking the destination file sparse on the way. If the destination file already exists\0Athen the source file can be superimposed on top of it by using the -o switch (ignored\0Aif the destination file doesn't exist); in this case sparsecopy will (unless -n is\0Aspecified as well) check that any blocks to be overlayed with zero (i.e. made sparse)\0Aare already zero in the destination images. When used with block devices, sparsecopy\0Awill not affect the size of the device.\0A\0ASOURCE can be \22-\22 to indicate stdin. SOURCE or DEST can be raw devices if you wish.\0AIf you want to make a sparse file, either use /dev/zero for SOURCE and -m, or (quicker) use\0A/dev/null for SOURCE and -f.\0A\0ASIZE and POS can be specified in blocks (default), or use the following suffixes:\0A B Bytes (2^0 bytes)\0A K Kilobytes (2^10 bytes)\0A M Megabytes (2^20 bytes)\0A G Gigabtytes (2^30 bytes)\0A T Terabytes (2^40 bytes)\0A P Perabytes (2^50 bytes)\0A E Exabytes (2^60 bytes)\0A\0ANote that blocksize=1024 will set blocksize to 1024 512byte blocks (use 1024B if this is not\0Awhat you mean). Also note that disk capacity is often measured using decimal megabytes etc.;\0Awe do not adopt this convention for compatibility with dd.\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([2188 x i8], [2188 x i8]* @.str, i64 0, i64 0))
ret void
}