#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*/ printf(char *, char *);
void usage(char *name) {
  printf(
      "usage %s [options] [\"filter\"]\n"
      "-h\t\tthis text you see right here\n"
      "-V\t\tPrint version and exit.\n"
      "-a\t\tAggregate netflow data.\n"
      "-A <expr>[/net]\tHow to aggregate: ',' sep list of tags see nfdump(1)\n"
      "\t\tor subnet aggregation: srcip4/24, srcip6/64.\n"
      "-b\t\tAggregate netflow records as bidirectional flows.\n"
      "-B\t\tAggregate netflow records as bidirectional flows - Guess "
      "direction.\n"
      "-r <file>\tread input from file\n"
      "-w <file>\twrite output to file\n"
      "-f\t\tread netflow filter from file\n"
      "-n\t\tDefine number of top N. \n"
      "-c\t\tLimit number of records to display\n"
      "-D <dns>\tUse nameserver <dns> for host lookup.\n"
      "-N\t\tPrint plain numbers\n"
      "-s <expr>[/<order>]\tGenerate statistics for <expr> any valid record "
      "element.\n"
      "\t\tand ordered by <order>: packets, bytes, flows, bps pps and bpp.\n"
      "-q\t\tQuiet: Do not print the header and bottom stat lines.\n"
      "-H Add xstat histogram data to flow file.(default 'no')\n"
      "-i <ident>\tChange Ident to <ident> in file given by -r.\n"
      "-j <file>\tCompress/Uncompress file.\n"
      "-z\t\tCompress flows in output file. Used in combination with -w.\n"
      "-l <expr>\tSet limit on packets for line and packed output format.\n"
      "\t\tkey: 32 character string or 64 digit hex string starting with 0x.\n"
      "-L <expr>\tSet limit on bytes for line and packed output format.\n"
      "-I \t\tPrint netflow summary statistics info from file, specified by "
      "-r.\n"
      "-M <expr>\tRead input from multiple directories.\n"
      "\t\t/dir/dir1:dir2:dir3 Read the same files from '/dir/dir1' "
      "'/dir/dir2' and '/dir/dir3'.\n"
      "\t\trequests either -r filename or -R firstfile:lastfile without "
      "pathnames\n"
      "-m\t\tPrint netflow data date sorted. Only useful with -M\n"
      "-R <expr>\tRead input from sequence of files.\n"
      "\t\t/any/dir  Read all files in that directory.\n"
      "\t\t/dir/file Read all files beginning with 'file'.\n"
      "\t\t/dir/file1:file2: Read all files from 'file1' to file2.\n"
      "-o <mode>\tUse <mode> to print out netflow records:\n"
      "\t\t raw      Raw record dump.\n"
      "\t\t line     Standard output line format.\n"
      "\t\t long     Standard output line format with additional fields.\n"
      "\t\t extended Even more information.\n"
      "\t\t csv      ',' separated, machine parseable output format.\n"
      "\t\t pipe     '|' separated legacy machine parseable output format.\n"
      "\t\t\tmode may be extended by '6' for full IPv6 listing. e.g.long6, "
      "extended6.\n"
      "-E <file>\tPrint exporter ans sampling info for collected flows.\n"
      "-v <file>\tverify netflow data file. Print version and blocks.\n"
      "-x <file>\tverify extension records in netflow data file.\n"
      "-X\t\tDump Filtertable and exit (debug option).\n"
      "-Z\t\tCheck filter syntax and exit.\n"
      "-t <time>\ttime window for filtering packets\n"
      "\t\tyyyy/MM/dd.hh:mm:ss[-yyyy/MM/dd.hh:mm:ss]\n",
      name);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [2516 x i8] c"usage %s [options] [\22filter\22]\0A-h\09\09this text you see right here\0A-V\09\09Print version and exit.\0A-a\09\09Aggregate netflow data.\0A-A <expr>[/net]\09How to aggregate: ',' sep list of tags see nfdump(1)\0A\09\09or subnet aggregation: srcip4/24, srcip6/64.\0A-b\09\09Aggregate netflow records as bidirectional flows.\0A-B\09\09Aggregate netflow records as bidirectional flows - Guess direction.\0A-r <file>\09read input from file\0A-w <file>\09write output to file\0A-f\09\09read netflow filter from file\0A-n\09\09Define number of top N. \0A-c\09\09Limit number of records to display\0A-D <dns>\09Use nameserver <dns> for host lookup.\0A-N\09\09Print plain numbers\0A-s <expr>[/<order>]\09Generate statistics for <expr> any valid record element.\0A\09\09and ordered by <order>: packets, bytes, flows, bps pps and bpp.\0A-q\09\09Quiet: Do not print the header and bottom stat lines.\0A-H Add xstat histogram data to flow file.(default 'no')\0A-i <ident>\09Change Ident to <ident> in file given by -r.\0A-j <file>\09Compress/Uncompress file.\0A-z\09\09Compress flows in output file. Used in combination with -w.\0A-l <expr>\09Set limit on packets for line and packed output format.\0A\09\09key: 32 character string or 64 digit hex string starting with 0x.\0A-L <expr>\09Set limit on bytes for line and packed output format.\0A-I \09\09Print netflow summary statistics info from file, specified by -r.\0A-M <expr>\09Read input from multiple directories.\0A\09\09/dir/dir1:dir2:dir3 Read the same files from '/dir/dir1' '/dir/dir2' and '/dir/dir3'.\0A\09\09requests either -r filename or -R firstfile:lastfile without pathnames\0A-m\09\09Print netflow data date sorted. Only useful with -M\0A-R <expr>\09Read input from sequence of files.\0A\09\09/any/dir Read all files in that directory.\0A\09\09/dir/file Read all files beginning with 'file'.\0A\09\09/dir/file1:file2: Read all files from 'file1' to file2.\0A-o <mode>\09Use <mode> to print out netflow records:\0A\09\09 raw Raw record dump.\0A\09\09 line Standard output line format.\0A\09\09 long Standard output line format with additional fields.\0A\09\09 extended Even more information.\0A\09\09 csv ',' separated, machine parseable output format.\0A\09\09 pipe '|' separated legacy machine parseable output format.\0A\09\09\09mode may be extended by '6' for full IPv6 listing. e.g.long6, extended6.\0A-E <file>\09Print exporter ans sampling info for collected flows.\0A-v <file>\09verify netflow data file. Print version and blocks.\0A-x <file>\09verify extension records in netflow data file.\0A-X\09\09Dump Filtertable and exit (debug option).\0A-Z\09\09Check filter syntax and exit.\0A-t <time>\09time window for filtering packets\0A\09\09yyyy/MM/dd.hh:mm:ss[-yyyy/MM/dd.hh:mm:ss]\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([2516 x i8], [2516 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [2516 x i8] c"usage %s [options] [\22filter\22]\0A-h\09\09this text you see right here\0A-V\09\09Print version and exit.\0A-a\09\09Aggregate netflow data.\0A-A <expr>[/net]\09How to aggregate: ',' sep list of tags see nfdump(1)\0A\09\09or subnet aggregation: srcip4/24, srcip6/64.\0A-b\09\09Aggregate netflow records as bidirectional flows.\0A-B\09\09Aggregate netflow records as bidirectional flows - Guess direction.\0A-r <file>\09read input from file\0A-w <file>\09write output to file\0A-f\09\09read netflow filter from file\0A-n\09\09Define number of top N. \0A-c\09\09Limit number of records to display\0A-D <dns>\09Use nameserver <dns> for host lookup.\0A-N\09\09Print plain numbers\0A-s <expr>[/<order>]\09Generate statistics for <expr> any valid record element.\0A\09\09and ordered by <order>: packets, bytes, flows, bps pps and bpp.\0A-q\09\09Quiet: Do not print the header and bottom stat lines.\0A-H Add xstat histogram data to flow file.(default 'no')\0A-i <ident>\09Change Ident to <ident> in file given by -r.\0A-j <file>\09Compress/Uncompress file.\0A-z\09\09Compress flows in output file. Used in combination with -w.\0A-l <expr>\09Set limit on packets for line and packed output format.\0A\09\09key: 32 character string or 64 digit hex string starting with 0x.\0A-L <expr>\09Set limit on bytes for line and packed output format.\0A-I \09\09Print netflow summary statistics info from file, specified by -r.\0A-M <expr>\09Read input from multiple directories.\0A\09\09/dir/dir1:dir2:dir3 Read the same files from '/dir/dir1' '/dir/dir2' and '/dir/dir3'.\0A\09\09requests either -r filename or -R firstfile:lastfile without pathnames\0A-m\09\09Print netflow data date sorted. Only useful with -M\0A-R <expr>\09Read input from sequence of files.\0A\09\09/any/dir Read all files in that directory.\0A\09\09/dir/file Read all files beginning with 'file'.\0A\09\09/dir/file1:file2: Read all files from 'file1' to file2.\0A-o <mode>\09Use <mode> to print out netflow records:\0A\09\09 raw Raw record dump.\0A\09\09 line Standard output line format.\0A\09\09 long Standard output line format with additional fields.\0A\09\09 extended Even more information.\0A\09\09 csv ',' separated, machine parseable output format.\0A\09\09 pipe '|' separated legacy machine parseable output format.\0A\09\09\09mode may be extended by '6' for full IPv6 listing. e.g.long6, extended6.\0A-E <file>\09Print exporter ans sampling info for collected flows.\0A-v <file>\09verify netflow data file. Print version and blocks.\0A-x <file>\09verify extension records in netflow data file.\0A-X\09\09Dump Filtertable and exit (debug option).\0A-Z\09\09Check filter syntax and exit.\0A-t <time>\09time window for filtering packets\0A\09\09yyyy/MM/dd.hh:mm:ss[-yyyy/MM/dd.hh:mm:ss]\0A\00"
define void @usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([2516 x i8], [2516 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}