#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 *);
void help(void) {
  printf(
      "Available commands:\n"
      "trace <category>: Trace the system calls in <category>\n"
      "\tcategory must be one of the following:\n"
      "\t\tprocess-control, file-management, all\n"
      "redirect <stream> <filename>: Redirect the <stream> of the executable\n"
      "\tto file <filename> \n"
      "\tstream must be one of the following:\n");
  printf(
      "\t\tstdin, stdout, stderr\n"
      "blocking-mode <mode>: Tell whether to stop execution at a system call\n"
      "\tmode must be one of the following:\n"
      "\t\ton, off\n"
      "go: Run the executable according to the options given already\n"
      "quit: Quit picodb\n"
      "help: Print the above message\n");
}


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

x86 assembly (clang, -O2):
<help>:
push   %rax
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
lea    0xff8(%rip),%rdi
pop    %rax
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [285 x i8] c"Available commands:\0Atrace <category>: Trace the system calls in <category>\0A\09category must be one of the following:\0A\09\09process-control, file-management, all\0Aredirect <stream> <filename>: Redirect the <stream> of the executable\0A\09to file <filename> \0A\09stream must be one of the following:\0A\00"
@.str.1 = [251 x i8] c"\09\09stdin, stdout, stderr\0Ablocking-mode <mode>: Tell whether to stop execution at a system call\0A\09mode must be one of the following:\0A\09\09on, off\0Ago: Run the executable according to the options given already\0Aquit: Quit picodb\0Ahelp: Print the above message\0A\00"
define void @help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([285 x i8], [285 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([251 x i8], [251 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [284 x i8] c"Available commands:\0Atrace <category>: Trace the system calls in <category>\0A\09category must be one of the following:\0A\09\09process-control, file-management, all\0Aredirect <stream> <filename>: Redirect the <stream> of the executable\0A\09to file <filename> \0A\09stream must be one of the following:\00"
@str.2 = [250 x i8] c"\09\09stdin, stdout, stderr\0Ablocking-mode <mode>: Tell whether to stop execution at a system call\0A\09mode must be one of the following:\0A\09\09on, off\0Ago: Run the executable according to the options given already\0Aquit: Quit picodb\0Ahelp: Print the above message\00"
define void @help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([284 x i8], [284 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([250 x i8], [250 x i8]* @str.2, i64 0, i64 0))
ret void
}