#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*/ puts(char *);
void usage() {
  puts("itrace [options]\n"
       "-c, --command     Program to be started and traced\n"
       "-C, --comments    Show comments after disassembled instruction\n"
       "-h, --help        Show this help\n"
       "-i, --ignore-libs Disable tracing of libraries segments\n"
       "-I, --show-count  Show the number of instructions executed\n"
       "-m, --maps        Show the maps file after execution\n"
       "-n, --max-inst    Max number of instruction to trace\n"
       "-o, --offset      Address to start tracing\n"
       "-p, --pid         Attach to supplied pid\n"
       "-q, --quiet       Do not show default output\n"
       "-r, --show-regs   Dump registers on each instruction\n"
       "-s, --show-stack  Dump part of stack from top on each instruction\n"
       "-S, --syntax      Choose the syntax to be used on disassemble\n"
       "-v, --version     Show the version\n");
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <puts@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
lea    0xee9(%rip),%rdi
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [731 x i8] c"itrace [options]\0A-c, --command Program to be started and traced\0A-C, --comments Show comments after disassembled instruction\0A-h, --help Show this help\0A-i, --ignore-libs Disable tracing of libraries segments\0A-I, --show-count Show the number of instructions executed\0A-m, --maps Show the maps file after execution\0A-n, --max-inst Max number of instruction to trace\0A-o, --offset Address to start tracing\0A-p, --pid Attach to supplied pid\0A-q, --quiet Do not show default output\0A-r, --show-regs Dump registers on each instruction\0A-s, --show-stack Dump part of stack from top on each instruction\0A-S, --syntax Choose the syntax to be used on disassemble\0A-v, --version Show the version\0A\00"
define void @usage() {
%1 = call i32 @puts(i8* getelementptr inbounds ([731 x i8], [731 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [731 x i8] c"itrace [options]\0A-c, --command Program to be started and traced\0A-C, --comments Show comments after disassembled instruction\0A-h, --help Show this help\0A-i, --ignore-libs Disable tracing of libraries segments\0A-I, --show-count Show the number of instructions executed\0A-m, --maps Show the maps file after execution\0A-n, --max-inst Max number of instruction to trace\0A-o, --offset Address to start tracing\0A-p, --pid Attach to supplied pid\0A-q, --quiet Do not show default output\0A-r, --show-regs Dump registers on each instruction\0A-s, --show-stack Dump part of stack from top on each instruction\0A-S, --syntax Choose the syntax to be used on disassemble\0A-v, --version Show the version\0A\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([731 x i8], [731 x i8]* @.str, i64 0, i64 0))
ret void
}