#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 *, int, int, char *, int, int);
void print_usage(char *exe) {
  printf(
      "Usage: %s [-p port] [-w workers] [-M broker] [-P brokerPort] [-K "
      "brokerKeepAlive] [-h]\n\n"
      "Options:\n"
      "  -p port          : tcp port number to listen on (default: %d)\n"
      "  -w workers       : number of worker threads to start for accepting "
      "connections (default: %d)\n"
      "  -v verbosity     : 0 <= verbosity <= 4 (default: 4)\n"
      "  -l logfile       : file to log into (default: stderr)\n"
      "  -M MqttSrvAddr   : the hostname or ip address of the broker to "
      "connect to (default: %s)\n"
      "  -P MqttSrvPort   : the port of that mqtt server (default: %d)\n"
      "  -K MqttKeepAlive : mqtt keep alive interval in seconds (default: %d)\n"
      "  -h               : display this help message\n",
      exe, 80, 4, "192.168.10.238", 1883, 182);
}


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
mov    $0x50,%edx
mov    $0x4,%ecx
lea    0x1147(%rip),%r8
mov    $0x75b,%r9d
movl   $0xb6,(%rsp)
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_usage>:
push   %rax
mov    %rdi,%rsi
movl   $0xb6,(%rsp)
lea    0xede(%rip),%rdi
lea    0x1156(%rip),%r8
mov    $0x50,%edx
mov    $0x4,%ecx
mov    $0x75b,%r9d
call   1030 <printf@plt>
pop    %rax
ret

LLVM IR (-O0):
@.str = [639 x i8] c"Usage: %s [-p port] [-w workers] [-M broker] [-P brokerPort] [-K brokerKeepAlive] [-h]\0A\0AOptions:\0A -p port : tcp port number to listen on (default: %d)\0A -w workers : number of worker threads to start for accepting connections (default: %d)\0A -v verbosity : 0 <= verbosity <= 4 (default: 4)\0A -l logfile : file to log into (default: stderr)\0A -M MqttSrvAddr : the hostname or ip address of the broker to connect to (default: %s)\0A -P MqttSrvPort : the port of that mqtt server (default: %d)\0A -K MqttKeepAlive : mqtt keep alive interval in seconds (default: %d)\0A -h : display this help message\0A\00"
@.str.1 = [15 x i8] c"192.168.10.238\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 ([639 x i8], [639 x i8]* @.str, i64 0, i64 0), i8* %3, i32 80, i32 4, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 1883, i32 182)
ret void
}

LLVM IR (-O2):
@.str = [639 x i8] c"Usage: %s [-p port] [-w workers] [-M broker] [-P brokerPort] [-K brokerKeepAlive] [-h]\0A\0AOptions:\0A -p port : tcp port number to listen on (default: %d)\0A -w workers : number of worker threads to start for accepting connections (default: %d)\0A -v verbosity : 0 <= verbosity <= 4 (default: 4)\0A -l logfile : file to log into (default: stderr)\0A -M MqttSrvAddr : the hostname or ip address of the broker to connect to (default: %s)\0A -P MqttSrvPort : the port of that mqtt server (default: %d)\0A -K MqttKeepAlive : mqtt keep alive interval in seconds (default: %d)\0A -h : display this help message\0A\00"
@.str.1 = [15 x i8] c"192.168.10.238\00"
define void @print_usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([639 x i8], [639 x i8]* @.str, i64 0, i64 0), i8* %0, i32 80, i32 4, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 1883, i32 182)
ret void
}