#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 *);
int /*<<< orphan*/ stderr;
void usage(char *prog) {
  fprintf(stderr,
          "%s  <-query> [-B] [-f fromhost] [-d delay] [-T time] targets\n"
          "    where <query> is one of:\n"
          "        -t : icmp timestamp request (default)\n"
          "        -m : icmp address mask request\n"
          "    The delay is in microseconds to sleep between packets.\n"
          "    targets is a list of hostnames or addresses\n"
          "    -T specifies the number of seconds to wait for a host to\n"
          "       respond.  The default is 5.\n"
          "    -B specifies \'broadcast\' mode.  icmpquery will wait\n"
          "       for timeout seconds and print all responses.\n"
          "    If you're on a modem, you may wish to use a larger -d and -T\n",
          prog);
}


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

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

LLVM IR (-O0):
@stderr = global i32 0
@.str = [552 x i8] c"%s <-query> [-B] [-f fromhost] [-d delay] [-T time] targets\0A where <query> is one of:\0A -t : icmp timestamp request (default)\0A -m : icmp address mask request\0A The delay is in microseconds to sleep between packets.\0A targets is a list of hostnames or addresses\0A -T specifies the number of seconds to wait for a host to\0A respond. The default is 5.\0A -B specifies 'broadcast' mode. icmpquery will wait\0A for timeout seconds and print all responses.\0A If you're on a modem, you may wish to use a larger -d and -T\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i32, i32* @stderr
%4 = load i8*, i8** %2
%5 = call i32 @fprintf(i32 %3, i8* getelementptr inbounds ([552 x i8], [552 x i8]* @.str, i64 0, i64 0), i8* %4)
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [552 x i8] c"%s <-query> [-B] [-f fromhost] [-d delay] [-T time] targets\0A where <query> is one of:\0A -t : icmp timestamp request (default)\0A -m : icmp address mask request\0A The delay is in microseconds to sleep between packets.\0A targets is a list of hostnames or addresses\0A -T specifies the number of seconds to wait for a host to\0A respond. The default is 5.\0A -B specifies 'broadcast' mode. icmpquery will wait\0A for timeout seconds and print all responses.\0A If you're on a modem, you may wish to use a larger -d and -T\0A\00"
define void @usage(i8* %0) {
%2 = load i32, i32* @stderr
%3 = tail call i32 @fprintf(i32 %2, i8* getelementptr inbounds ([552 x i8], [552 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}