#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*/ PrintVersion();
int /*<<< orphan*/ exit(int);
int /*<<< orphan*/ printf(char *);
void Help() {
  printf("\n");
  PrintVersion();
  printf("\n usage: zzip [<command>] [<sw1><sw2>...] [<archive>] file1 file2 "
         "...\n\n"
         " <commands>\n"
         "   a  Add files to archive\n"
         "   e  Extract files from archive\n"
         "   x  eXtract files with full path\n"
         "   d  Delete files from archive\n"
         "   t  Test files in archive\n"
         "   l  List contents of archive\n\n"
         " <switches>\n"
         "  -...  Block size (e.g. -3m,-3072k)\n"
         "  -a    Adaptive block size reduction\n"
         "  -mx   MaXimum compression\n"
         "  -mm   MultiMedia compression\n"
         "  -q    Quiet output to screen\n"
         "  -r    Recurse subdirectories\n"
         "  -s    Statistics\n\n"
         " http://debin.org/zzip/\n"
         " damien@debin.net\n");
  exit(1);
}


x86 assembly (clang, -O0):
<Help>:
push   %rbp
mov    %rsp,%rbp
lea    0x10e0(%rip),%rdi
call   1030 <printf@plt>
mov    $0x0,%al
call   1040 <PrintVersion@plt>
lea    0xeb2(%rip),%rdi
call   1030 <printf@plt>
mov    $0x1,%edi
call   1050 <exit@plt>

x86 assembly (clang, -O2):
<Help>:
push   %rax
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <PrintVersion@plt>
lea    0xea7(%rip),%rdi
call   1040 <puts@plt>
mov    $0x1,%edi
call   1060 <exit@plt>

LLVM IR (-O0):
@.str = [2 x i8] c"\0A\00"
@.str.1 = [541 x i8] c"\0A usage: zzip [<command>] [<sw1><sw2>...] [<archive>] file1 file2 ...\0A\0A <commands>\0A a Add files to archive\0A e Extract files from archive\0A x eXtract files with full path\0A d Delete files from archive\0A t Test files in archive\0A l List contents of archive\0A\0A <switches>\0A -... Block size (e.g. -3m,-3072k)\0A -a Adaptive block size reduction\0A -mx MaXimum compression\0A -mm MultiMedia compression\0A -q Quiet output to screen\0A -r Recurse subdirectories\0A -s Statistics\0A\0A http://debin.org/zzip/\0A damien@debin.net\0A\00"
define void @Help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%2 = call i32 (...) @PrintVersion()
%3 = call i32 @printf(i8* getelementptr inbounds ([541 x i8], [541 x i8]* @.str.1, i64 0, i64 0))
%4 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@str = [540 x i8] c"\0A usage: zzip [<command>] [<sw1><sw2>...] [<archive>] file1 file2 ...\0A\0A <commands>\0A a Add files to archive\0A e Extract files from archive\0A x eXtract files with full path\0A d Delete files from archive\0A t Test files in archive\0A l List contents of archive\0A\0A <switches>\0A -... Block size (e.g. -3m,-3072k)\0A -a Adaptive block size reduction\0A -mx MaXimum compression\0A -mm MultiMedia compression\0A -q Quiet output to screen\0A -r Recurse subdirectories\0A -s Statistics\0A\0A http://debin.org/zzip/\0A damien@debin.net\00"
define void @Help() {
%1 = tail call i32 @putchar(i32 10)
%2 = tail call i32 (...) @PrintVersion()
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([540 x i8], [540 x i8]* @str, i64 0, i64 0))
%4 = tail call i32 @exit(i32 1)
unreachable
}