#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 const *);
void usage() {
  const char *usage =
      "Commands:\nhelp                   Show help\ninfo                   "
      "Show info about the files\nopen ID MODE           Open the file. MODE "
      "is passed directly to fopen() call, so all modes are supported\nlock ID "
      "OPERATION      Lock the file. Valid operations are sh, ex, un. nb can "
      "be added to any operation\nclose ID               Close the file\nseek "
      "ID OFFSET WHENCE  Set the file position indicator\ntell ID              "
      "  Show the file position indicator\nread ID [x] LENGTH     Read LENGTH "
      "bytes from the file. If x is set, output will be HEX-formatted like "
      "hexdump -c does\ntruncate ID LENGTH     Set file size to LENGTH bytes\n";
  printf("%s", usage);
}


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

x86 assembly (clang, -O2):
<usage>:
lea    0x1159(%rip),%rdi
lea    0xee2(%rip),%rsi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [624 x i8] c"Commands:\0Ahelp Show help\0Ainfo Show info about the files\0Aopen ID MODE Open the file. MODE is passed directly to fopen() call, so all modes are supported\0Alock ID OPERATION Lock the file. Valid operations are sh, ex, un. nb can be added to any operation\0Aclose ID Close the file\0Aseek ID OFFSET WHENCE Set the file position indicator\0Atell ID Show the file position indicator\0Aread ID [x] LENGTH Read LENGTH bytes from the file. If x is set, output will be HEX-formatted like hexdump -c does\0Atruncate ID LENGTH Set file size to LENGTH bytes\0A\00"
@.str.1 = [3 x i8] c"%s\00"
define void @usage() {
%1 = alloca i8*
store i8* getelementptr inbounds ([624 x i8], [624 x i8]* @.str, i64 0, i64 0), i8** %1
%2 = load i8*, i8** %1
%3 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %2)
ret void
}

LLVM IR (-O2):
@.str = [624 x i8] c"Commands:\0Ahelp Show help\0Ainfo Show info about the files\0Aopen ID MODE Open the file. MODE is passed directly to fopen() call, so all modes are supported\0Alock ID OPERATION Lock the file. Valid operations are sh, ex, un. nb can be added to any operation\0Aclose ID Close the file\0Aseek ID OFFSET WHENCE Set the file position indicator\0Atell ID Show the file position indicator\0Aread ID [x] LENGTH Read LENGTH bytes from the file. If x is set, output will be HEX-formatted like hexdump -c does\0Atruncate ID LENGTH Set file size to LENGTH bytes\0A\00"
@.str.1 = [3 x i8] c"%s\00"
define void @usage() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([624 x i8], [624 x i8]* @.str, i64 0, i64 0))
ret void
}