#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 *, char *, char *, int, int,
                           int, int, int);
int /*<<< orphan*/ stderr;
void show_usage(void) {
  fprintf(
      stderr,
      "\n"
      "Usage: queryperf [-d datafile] [-s server_addr] [-p port] [-q "
      "num_queries]\n"
      "                 [-b bufsize] [-t timeout] [-n] [-l limit] [-f family] "
      "[-1]\n"
      "                 [-i interval] [-r arraysize] [-u unit] [-H histfile]\n"
      "                 [-T qps] [-e] [-D] [-c] [-v] [-h]\n"
      "  -d specifies the input data file (default: stdin)\n"
      "  -s sets the server to query (default: %s)\n"
      "  -p sets the port on which to query the server (default: %s)\n"
      "  -q specifies the maximum number of queries outstanding (default: %d)\n"
      "  -t specifies the timeout for query completion in seconds (default: "
      "%d)\n"
      "  -n causes configuration changes to be ignored\n"
      "  -l specifies how a limit for how long to run tests in seconds (no "
      "default)\n"
      "  -1 run through input only once (default: multiple iff limit given)\n"
      "  -b set input/output buffer size in kilobytes (default: %d k)\n"
      "  -i specifies interval of intermediate outputs in seconds (default: "
      "0=none)\n"
      "  -f specify address family of DNS transport, inet or inet6 (default: "
      "any)\n"
      "  -r set RTT statistics array size (default: %d)\n"
      "  -u set RTT statistics time unit in usec (default: %d)\n"
      "  -H specifies RTT histogram data file (default: none)\n"
      "  -T specify the target qps (default: 0=unspecified)\n"
      "  -e enable EDNS 0\n"
      "  -D set the DNSSEC OK bit (implies EDNS)\n"
      "  -c print the number of packets with each rcode\n"
      "  -v verbose: report the RCODE of each response on stdout\n"
      "  -h print this usage\n"
      "\n",
      "127.0.0.1", "53", 20, 5, 32, 50000, 100);
}


x86 assembly (clang, -O0):
<show_usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    0x2ec1(%rip),%rax
mov    (%rax),%edi
lea    0xed8(%rip),%rsi
lea    0x143e(%rip),%rdx
lea    0x1441(%rip),%rcx
mov    $0x14,%r8d
mov    $0x5,%r9d
movl   $0x20,(%rsp)
movl   $0xc350,0x8(%rsp)
movl   $0x64,0x10(%rsp)
call   1030 <fprintf@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<show_usage>:
push   %rax
mov    0x2ec8(%rip),%rax
mov    (%rax),%edi
sub    $0x8,%rsp
lea    0xedb(%rip),%rsi
lea    0x1441(%rip),%rdx
lea    0x1444(%rip),%rcx
mov    $0x14,%r8d
mov    $0x5,%r9d
push   $0x64
push   $0xc350
push   $0x20
call   1030 <fprintf@plt>
add    $0x20,%rsp
pop    %rax
ret

LLVM IR (-O0):
@stderr = global i32 0
@.str = [1389 x i8] c"\0AUsage: queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries]\0A [-b bufsize] [-t timeout] [-n] [-l limit] [-f family] [-1]\0A [-i interval] [-r arraysize] [-u unit] [-H histfile]\0A [-T qps] [-e] [-D] [-c] [-v] [-h]\0A -d specifies the input data file (default: stdin)\0A -s sets the server to query (default: %s)\0A -p sets the port on which to query the server (default: %s)\0A -q specifies the maximum number of queries outstanding (default: %d)\0A -t specifies the timeout for query completion in seconds (default: %d)\0A -n causes configuration changes to be ignored\0A -l specifies how a limit for how long to run tests in seconds (no default)\0A -1 run through input only once (default: multiple iff limit given)\0A -b set input/output buffer size in kilobytes (default: %d k)\0A -i specifies interval of intermediate outputs in seconds (default: 0=none)\0A -f specify address family of DNS transport, inet or inet6 (default: any)\0A -r set RTT statistics array size (default: %d)\0A -u set RTT statistics time unit in usec (default: %d)\0A -H specifies RTT histogram data file (default: none)\0A -T specify the target qps (default: 0=unspecified)\0A -e enable EDNS 0\0A -D set the DNSSEC OK bit (implies EDNS)\0A -c print the number of packets with each rcode\0A -v verbose: report the RCODE of each response on stdout\0A -h print this usage\0A\0A\00"
@.str.1 = [10 x i8] c"127.0.0.1\00"
@.str.2 = [3 x i8] c"53\00"
define void @show_usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([1389 x i8], [1389 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 20, i32 5, i32 32, i32 50000, i32 100)
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [1389 x i8] c"\0AUsage: queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries]\0A [-b bufsize] [-t timeout] [-n] [-l limit] [-f family] [-1]\0A [-i interval] [-r arraysize] [-u unit] [-H histfile]\0A [-T qps] [-e] [-D] [-c] [-v] [-h]\0A -d specifies the input data file (default: stdin)\0A -s sets the server to query (default: %s)\0A -p sets the port on which to query the server (default: %s)\0A -q specifies the maximum number of queries outstanding (default: %d)\0A -t specifies the timeout for query completion in seconds (default: %d)\0A -n causes configuration changes to be ignored\0A -l specifies how a limit for how long to run tests in seconds (no default)\0A -1 run through input only once (default: multiple iff limit given)\0A -b set input/output buffer size in kilobytes (default: %d k)\0A -i specifies interval of intermediate outputs in seconds (default: 0=none)\0A -f specify address family of DNS transport, inet or inet6 (default: any)\0A -r set RTT statistics array size (default: %d)\0A -u set RTT statistics time unit in usec (default: %d)\0A -H specifies RTT histogram data file (default: none)\0A -T specify the target qps (default: 0=unspecified)\0A -e enable EDNS 0\0A -D set the DNSSEC OK bit (implies EDNS)\0A -c print the number of packets with each rcode\0A -v verbose: report the RCODE of each response on stdout\0A -h print this usage\0A\0A\00"
@.str.1 = [10 x i8] c"127.0.0.1\00"
@.str.2 = [3 x i8] c"53\00"
define void @show_usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([1389 x i8], [1389 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 20, i32 5, i32 32, i32 50000, i32 100)
ret void
}