#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 *);
int print_help() {
  printf(
      "printable -- version 0.1\n"
      "printable reads from stdin and filters out no ascii (or a subset of) "
      "characters\n"
      "\n"
      "    -p, --printable             printable characters\n"
      "    -A, --ascii                 characters from the ascii set\n"
      "    -a, --alphanum              letters and digits (equivalent to -Ld)\n"
      "    -L, --letter                letters\n"
      "    -b, --blank                 blank (spaces or tabs)\n"
      "    -c, --control               control character\n"
      "    -d, --digit                 digits\n"
      "    -g, --graph                 graphically visible characters (no "
      "blank or new lines)\n"
      "    -l, --lower                 lower case letters\n"
      "    -U, --upper                 upper case letters\n"
      "    -s, --space                 spaces, tabs, form feeds and newlines\n"
      "    -x, --hex                   hexadecial digits\n"
      "\n"
      "    -h, --help                  display this help and exit\n");
  return 0;
}


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

x86 assembly (clang, -O2):
<print_help>:
push   %rax
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [846 x i8] c"printable -- version 0.1\0Aprintable reads from stdin and filters out no ascii (or a subset of) characters\0A\0A -p, --printable printable characters\0A -A, --ascii characters from the ascii set\0A -a, --alphanum letters and digits (equivalent to -Ld)\0A -L, --letter letters\0A -b, --blank blank (spaces or tabs)\0A -c, --control control character\0A -d, --digit digits\0A -g, --graph graphically visible characters (no blank or new lines)\0A -l, --lower lower case letters\0A -U, --upper upper case letters\0A -s, --space spaces, tabs, form feeds and newlines\0A -x, --hex hexadecial digits\0A\0A -h, --help display this help and exit\0A\00"
define i32 @print_help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([846 x i8], [846 x i8]* @.str, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@str = [845 x i8] c"printable -- version 0.1\0Aprintable reads from stdin and filters out no ascii (or a subset of) characters\0A\0A -p, --printable printable characters\0A -A, --ascii characters from the ascii set\0A -a, --alphanum letters and digits (equivalent to -Ld)\0A -L, --letter letters\0A -b, --blank blank (spaces or tabs)\0A -c, --control control character\0A -d, --digit digits\0A -g, --graph graphically visible characters (no blank or new lines)\0A -l, --lower lower case letters\0A -U, --upper upper case letters\0A -s, --space spaces, tabs, form feeds and newlines\0A -x, --hex hexadecial digits\0A\0A -h, --help display this help and exit\00"
define i32 @print_help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([845 x i8], [845 x i8]* @str, i64 0, i64 0))
ret i32 0
}