#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 show_help(void) {
  printf(
      "Usage:\n"
      "semtest <options>\n\n"
      "-a       --affinity      bind tasks to cores explicitly\n"
      "-A       --no_affinity   do not set affinity, let the scheduler move "
      "tasks\n"
      "-i ITER  --iterations    run threads for ITER iterations\n"
      "-I INTER --interval      time between each semaphore-iteration\n"
      "-F       --feather       let each task-pair have a cpu-pair "
      "exclusively\n"
      "-g       --graph         dump output eatable by a graphing tool\n"
      "-G       --group         Group semaphore master and slave on same core\n"
      "-h       --help          show this help\n"
      "-n CPUS  --num_cpus      test on number of cores\n"
      "-N CPUS  --ignore_cpus   ignore the (commaseparated) list of cpus, "
      "0-indexed\n"
      "-p PRIO  --priority      run with given (real-time) priority\n"
      "-P       --pid           print pid (or tid) of all marco-polo pair\n"
      "-r       --policy_rr     use SCHED_RR instead of the default SCHED_FIFO "
      "for rt-priorities\n"
      "-t LIMIT --event_trace   enable event-tracing when running, tag "
      "occurences exceeding LIMIT us\n"
      "-q		 --quiet	     limit output to summary only\n"
      "\n");
}


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

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

LLVM IR (-O0):
@.str = [1011 x i8] c"Usage:\0Asemtest <options>\0A\0A-a --affinity bind tasks to cores explicitly\0A-A --no_affinity do not set affinity, let the scheduler move tasks\0A-i ITER --iterations run threads for ITER iterations\0A-I INTER --interval time between each semaphore-iteration\0A-F --feather let each task-pair have a cpu-pair exclusively\0A-g --graph dump output eatable by a graphing tool\0A-G --group Group semaphore master and slave on same core\0A-h --help show this help\0A-n CPUS --num_cpus test on number of cores\0A-N CPUS --ignore_cpus ignore the (commaseparated) list of cpus, 0-indexed\0A-p PRIO --priority run with given (real-time) priority\0A-P --pid print pid (or tid) of all marco-polo pair\0A-r --policy_rr use SCHED_RR instead of the default SCHED_FIFO for rt-priorities\0A-t LIMIT --event_trace enable event-tracing when running, tag occurences exceeding LIMIT us\0A-q\09\09 --quiet\09 limit output to summary only\0A\0A\00"
define void @show_help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([1011 x i8], [1011 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [1010 x i8] c"Usage:\0Asemtest <options>\0A\0A-a --affinity bind tasks to cores explicitly\0A-A --no_affinity do not set affinity, let the scheduler move tasks\0A-i ITER --iterations run threads for ITER iterations\0A-I INTER --interval time between each semaphore-iteration\0A-F --feather let each task-pair have a cpu-pair exclusively\0A-g --graph dump output eatable by a graphing tool\0A-G --group Group semaphore master and slave on same core\0A-h --help show this help\0A-n CPUS --num_cpus test on number of cores\0A-N CPUS --ignore_cpus ignore the (commaseparated) list of cpus, 0-indexed\0A-p PRIO --priority run with given (real-time) priority\0A-P --pid print pid (or tid) of all marco-polo pair\0A-r --policy_rr use SCHED_RR instead of the default SCHED_FIFO for rt-priorities\0A-t LIMIT --event_trace enable event-tracing when running, tag occurences exceeding LIMIT us\0A-q\09\09 --quiet\09 limit output to summary only\0A\00"
define void @show_help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1010 x i8], [1010 x i8]* @str, i64 0, i64 0))
ret void
}