#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, int /*<<< orphan*/ *);
void usage(FILE *fp) {
  char *help =
      "cissy [options]\n"
      "\t-i <inputfile>\t\t (defaults to stdin)\n"
      "\t-o <outputfile>\t\t (defaults to stdout)\n"
      "\n"
      "\t-c <columns>\t\t specify columns to output eg. [2][5-8][12-]\n"
      "\t-d <delimiter>\t\t set the input and output delimiter\n"
      "\t\t\t\t defaults to ','\n"
      "\t-di <input delimiter>\t set the input delimiter\n"
      "\t-do <output delimiter>\t set the output delimiter\n"
      "\n"
      "\t-q <quote character>\t defaults to \"\n"
      "\t-qi <quote input character>\n"
      "\t-qo <quote output character>\n"
      "\n"
      "\t-ed \t\t\t dos end of line \\r\\n\n"
      "\t-eu \t\t\t unix end of line \\n\n"
      "\t-em \t\t\t mac end of line \\r\n"
      "\n"
      "\t-b \t\t\t allow binary data\n"
      "\t-v \t\t\t send processing info to stderr\n"
      "\t-h \t\t\t help\n"
      "";
  fprintf(fp, help, NULL);
}


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

x86 assembly (clang, -O2):
<usage>:
lea    0xee9(%rip),%rsi
xor    %edx,%edx
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@.str = [592 x i8] c"cissy [options]\0A\09-i <inputfile>\09\09 (defaults to stdin)\0A\09-o <outputfile>\09\09 (defaults to stdout)\0A\0A\09-c <columns>\09\09 specify columns to output eg. [2][5-8][12-]\0A\09-d <delimiter>\09\09 set the input and output delimiter\0A\09\09\09\09 defaults to ','\0A\09-di <input delimiter>\09 set the input delimiter\0A\09-do <output delimiter>\09 set the output delimiter\0A\0A\09-q <quote character>\09 defaults to \22\0A\09-qi <quote input character>\0A\09-qo <quote output character>\0A\0A\09-ed \09\09\09 dos end of line \\r\\n\0A\09-eu \09\09\09 unix end of line \\n\0A\09-em \09\09\09 mac end of line \\r\0A\0A\09-b \09\09\09 allow binary data\0A\09-v \09\09\09 send processing info to stderr\0A\09-h \09\09\09 help\0A\00"
define void @usage(i32* %0) {
%2 = alloca i32*
%3 = alloca i8*
store i32* %0, i32** %2
store i8* getelementptr inbounds ([592 x i8], [592 x i8]* @.str, i64 0, i64 0), i8** %3
%4 = load i32*, i32** %2
%5 = load i8*, i8** %3
%6 = call i32 @fprintf(i32* %4, i8* %5, i32* null)
ret void
}

LLVM IR (-O2):
@.str = [592 x i8] c"cissy [options]\0A\09-i <inputfile>\09\09 (defaults to stdin)\0A\09-o <outputfile>\09\09 (defaults to stdout)\0A\0A\09-c <columns>\09\09 specify columns to output eg. [2][5-8][12-]\0A\09-d <delimiter>\09\09 set the input and output delimiter\0A\09\09\09\09 defaults to ','\0A\09-di <input delimiter>\09 set the input delimiter\0A\09-do <output delimiter>\09 set the output delimiter\0A\0A\09-q <quote character>\09 defaults to \22\0A\09-qi <quote input character>\0A\09-qo <quote output character>\0A\0A\09-ed \09\09\09 dos end of line \\r\\n\0A\09-eu \09\09\09 unix end of line \\n\0A\09-em \09\09\09 mac end of line \\r\0A\0A\09-b \09\09\09 allow binary data\0A\09-v \09\09\09 send processing info to stderr\0A\09-h \09\09\09 help\0A\00"
define void @usage(i32* nocapture %0) {
%2 = tail call i32 @fprintf(i32* %0, i8* getelementptr inbounds ([592 x i8], [592 x i8]* @.str, i64 0, i64 0), i32* null)
ret void
}