#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 print_usage(char *argv0) {
  printf("Usage: %s [OPTIONS]\n"
         "  --collector IPADDR  connect to collector at IP address IPADDR.\n"
         "                      Default is 127.0.0.1\n"
         "  --port P            use port P instead of standard port number\n"
         "                      which is 4739 or 4740 if DTLS is used.\n"
         "  --udp               use UDP as transport protocol (default)\n"
         "  --sctp              use SCTP as transport protocol\n"
         "  --dtls_over_udp     use DTLS over UDP as transport protocol\n"
         "  --dtls_over_sctp    use DTLS over SCTP as transport protocol\n"
         "  --mtu V             set maximum transmission unit (MTU) to V\n"
         "The following options apply to DTLS only\n"
         "  --peer_fqdn N       peer must present certificate which contains\n"
         "                      the FQDN N.\n"
         "  --cert F            X.509 certificate chain in PEM format is "
         "stored in F\n"
         "  --key F             private key for certificate is stored in F\n"
         "  --CAfile F          search F for CA certificates\n"
         "  --CApath D          search directory D for CA certificates\n",
         argv0);
}


x86 assembly (clang, -O0):
<print_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):
<print_usage>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [952 x i8] c"Usage: %s [OPTIONS]\0A --collector IPADDR connect to collector at IP address IPADDR.\0A Default is 127.0.0.1\0A --port P use port P instead of standard port number\0A which is 4739 or 4740 if DTLS is used.\0A --udp use UDP as transport protocol (default)\0A --sctp use SCTP as transport protocol\0A --dtls_over_udp use DTLS over UDP as transport protocol\0A --dtls_over_sctp use DTLS over SCTP as transport protocol\0A --mtu V set maximum transmission unit (MTU) to V\0AThe following options apply to DTLS only\0A --peer_fqdn N peer must present certificate which contains\0A the FQDN N.\0A --cert F X.509 certificate chain in PEM format is stored in F\0A --key F private key for certificate is stored in F\0A --CAfile F search F for CA certificates\0A --CApath D search directory D for CA certificates\0A\00"
define void @print_usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([952 x i8], [952 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [952 x i8] c"Usage: %s [OPTIONS]\0A --collector IPADDR connect to collector at IP address IPADDR.\0A Default is 127.0.0.1\0A --port P use port P instead of standard port number\0A which is 4739 or 4740 if DTLS is used.\0A --udp use UDP as transport protocol (default)\0A --sctp use SCTP as transport protocol\0A --dtls_over_udp use DTLS over UDP as transport protocol\0A --dtls_over_sctp use DTLS over SCTP as transport protocol\0A --mtu V set maximum transmission unit (MTU) to V\0AThe following options apply to DTLS only\0A --peer_fqdn N peer must present certificate which contains\0A the FQDN N.\0A --cert F X.509 certificate chain in PEM format is stored in F\0A --key F private key for certificate is stored in F\0A --CAfile F search F for CA certificates\0A --CApath D search directory D for CA certificates\0A\00"
define void @print_usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([952 x i8], [952 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}