#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 usage() {
  printf(
      "[usage] <progname>	[-c | --create ] //create semaphor \n 	[ -d | "
      "--destroy ] //destroy semaphor \n 	[ -p | --pop ] //Do the "
      "p-operation on the given semaphor \n 	[ -v | --vop] // Do the "
      "v-operation on the given semaphor \n 	[ -r | --rights ] // Define "
      "the rights to use for newly created semaphors \n 	[ -k | --key ] "
      "// Define the Key to use for the newly created semaphor\n 	[ -i | "
      "--init-value] //Set the default value while creation \n 		\n\n "
      "	Examples \n	$ <prog> --create --rights 0600 --value 100 --key "
      "12345 \n	# creates a semaphor. If it is created, this will be a nop. "
      "\n\n	$ <prog> --destroy --key 12345 \n	# destroys the "
      "previously created semaphor \n	# It exits with 0 if successful and 1 "
      "if otherwise \n\n	$ <prog> --key 12345 --pop \n	# Does the "
      "p-Op on the Semaphor (key: 12345) \n\n	$ <prog> --key 12345 --vop "
      "\n	# Does the v-Op on the Semaphor (key: 12345)\n	The standard "
      "values for permission and value are 0600 and 0\n");
}


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

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

LLVM IR (-O0):
@.str = [915 x i8] c"[usage] <progname>\09[-c | --create ] //create semaphor \0A \09[ -d | --destroy ] //destroy semaphor \0A \09[ -p | --pop ] //Do the p-operation on the given semaphor \0A \09[ -v | --vop] // Do the v-operation on the given semaphor \0A \09[ -r | --rights ] // Define the rights to use for newly created semaphors \0A \09[ -k | --key ] // Define the Key to use for the newly created semaphor\0A \09[ -i | --init-value] //Set the default value while creation \0A \09\09\0A\0A \09Examples \0A\09$ <prog> --create --rights 0600 --value 100 --key 12345 \0A\09# creates a semaphor. If it is created, this will be a nop. \0A\0A\09$ <prog> --destroy --key 12345 \0A\09# destroys the previously created semaphor \0A\09# It exits with 0 if successful and 1 if otherwise \0A\0A\09$ <prog> --key 12345 --pop \0A\09# Does the p-Op on the Semaphor (key: 12345) \0A\0A\09$ <prog> --key 12345 --vop \0A\09# Does the v-Op on the Semaphor (key: 12345)\0A\09The standard values for permission and value are 0600 and 0\0A\00"
define void @usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([915 x i8], [915 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [914 x i8] c"[usage] <progname>\09[-c | --create ] //create semaphor \0A \09[ -d | --destroy ] //destroy semaphor \0A \09[ -p | --pop ] //Do the p-operation on the given semaphor \0A \09[ -v | --vop] // Do the v-operation on the given semaphor \0A \09[ -r | --rights ] // Define the rights to use for newly created semaphors \0A \09[ -k | --key ] // Define the Key to use for the newly created semaphor\0A \09[ -i | --init-value] //Set the default value while creation \0A \09\09\0A\0A \09Examples \0A\09$ <prog> --create --rights 0600 --value 100 --key 12345 \0A\09# creates a semaphor. If it is created, this will be a nop. \0A\0A\09$ <prog> --destroy --key 12345 \0A\09# destroys the previously created semaphor \0A\09# It exits with 0 if successful and 1 if otherwise \0A\0A\09$ <prog> --key 12345 --pop \0A\09# Does the p-Op on the Semaphor (key: 12345) \0A\0A\09$ <prog> --key 12345 --vop \0A\09# Does the v-Op on the Semaphor (key: 12345)\0A\09The standard values for permission and value are 0600 and 0\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([914 x i8], [914 x i8]* @str, i64 0, i64 0))
ret void
}