#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 *, char *);
void showhelp() {
  printf(
      "\nThe program has a linker, a deleter and a test mode. By default it's "
      "in\nlinker mode. It gets into deleter mode if it's invoked as %s, and "
      "into\ntest mode if it's invoked as %s. Linker/deleter/test mode may "
      "be\nforced with the -l/-d/-t switches.\n\nIn linker mode it mirrors the "
      "directory tree under <from> to under <where>\nand symlinks files there. "
      "The symlinks point to the basename of the file\nprocessed, prefixed "
      "with <prefix>. If <prefix> is not given, it defaults\nto the absolute "
      "pathname of <from> (ie., the symlink points to the\ncorrect absolute "
      "filename).\n\nIn deleter mode it deletes non-broken symlinks (empty "
      "directories) of\nthe form <where>/foo, where <from>/foo is an existing "
      "file (directory).\n(A dir is also considered empty if it gets empty "
      "during the deletion\nprocedure.)\n\nIn test mode it tests whether "
      "symlinks/dirs under <where> corresponding\nto files/dirs under <from> "
      "exist, and whether are they created properly.\n\nIf extra arguments are "
      "given, then they will be treated as files named\nrelatively from "
      "<from>, and they will be proceeded individually \n(no mass action is "
      "taken). If \"-\" is among these extra arguments,\nthen individual file "
      "names are also read from stdin; if \"0-\" is among\nthem, individual "
      "file names are also read from stdin, being separated\nby  "
      "'\\0'.\n\nOptions common for all modes:\n\n  -h\t\tprint this message "
      "and exit\n  -U <user>\tskip file under <from> if it's not owned by "
      "<user>\n  -G <group>\tskip file under <from> if it doesn't belong to "
      "<group>\n  -v/-q\t\tincrease/decrease verbosity level\n  \t\t(currently "
      "0, 1, 2 are in use, default is 1)\n\nOptions in linker mode are:\n\n  "
      "-r\t\tproduce relative symlinks\n  -f\t\toverwrite existing files\n  -m "
      "<mode>\tcreate new directories with mode <mode> ( &'d with umask!)\n  "
      "-o\t\tforce <mode> given by -m for all processed directories \n  "
      "\t\t(if -m is not used, the mode of the actually processed\n  \t\tdir "
      "is forced)\n  -u <user>\tnewly created dirs/symlinks shall be owned by "
      "<user>\n  -g <group>\tnewly created dirs/symlinks shall belong to "
      "<group>\n  -D\t\tonly directories are proceeded \n  -p "
      "<prefix>\tprepend <prefix> to link targets \n  \nOptions in deleter "
      "mode are:\n\n  -f\t\tdelete corresponding file even it's not a "
      "symlink\n  -m <mode>\tdeletes <where>/foo only if <from>/foo is of mode "
      "<mode>\n  -o\t\tonly broken symlinks are deleted\n  -u <user>\tdeletes "
      "<where>/foo only if it belongs to <user>\n  -g <group>\tdeletes "
      "<where>/foo only if it belongs to <group>\n  -D\t\tdon't delete "
      "directories \n  -t\t\tdelete only if entry passes test (as in test "
      "mode)\n \nOptions in test mode are:\n\n  -r\t\ttest symlinks as if they "
      "were created using -r in linker mode\n  -m <mode>\tskip foo if "
      "<from>/foo isn't of mode <mode>\n  -u <user>\tskip foo if <where>/foo "
      "is not owned by <user>\n  -g <group>\tskip foo if <where>/foo doesn't "
      "belong to <group>\n  -p <prefix>\ttest links assuming they were created "
      "using \"-p <prefix>\" \n\nReturn values: 0 - success; 1 - fatal error; "
      "2 - some act failed but\njust kept on doing; 3 - arguments imply "
      "nothing happens (eg., bad\noptions used)\n",
      "recdeleter", "reclinktester");
}


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

x86 assembly (clang, -O2):
<showhelp>:
lea    0xee9(%rip),%rdi
lea    0x1a9c(%rip),%rsi
lea    0x1aa0(%rip),%rdx
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [3002 x i8] c"\0AThe program has a linker, a deleter and a test mode. By default it's in\0Alinker mode. It gets into deleter mode if it's invoked as %s, and into\0Atest mode if it's invoked as %s. Linker/deleter/test mode may be\0Aforced with the -l/-d/-t switches.\0A\0AIn linker mode it mirrors the directory tree under <from> to under <where>\0Aand symlinks files there. The symlinks point to the basename of the file\0Aprocessed, prefixed with <prefix>. If <prefix> is not given, it defaults\0Ato the absolute pathname of <from> (ie., the symlink points to the\0Acorrect absolute filename).\0A\0AIn deleter mode it deletes non-broken symlinks (empty directories) of\0Athe form <where>/foo, where <from>/foo is an existing file (directory).\0A(A dir is also considered empty if it gets empty during the deletion\0Aprocedure.)\0A\0AIn test mode it tests whether symlinks/dirs under <where> corresponding\0Ato files/dirs under <from> exist, and whether are they created properly.\0A\0AIf extra arguments are given, then they will be treated as files named\0Arelatively from <from>, and they will be proceeded individually \0A(no mass action is taken). If \22-\22 is among these extra arguments,\0Athen individual file names are also read from stdin; if \220-\22 is among\0Athem, individual file names are also read from stdin, being separated\0Aby '\\0'.\0A\0AOptions common for all modes:\0A\0A -h\09\09print this message and exit\0A -U <user>\09skip file under <from> if it's not owned by <user>\0A -G <group>\09skip file under <from> if it doesn't belong to <group>\0A -v/-q\09\09increase/decrease verbosity level\0A \09\09(currently 0, 1, 2 are in use, default is 1)\0A\0AOptions in linker mode are:\0A\0A -r\09\09produce relative symlinks\0A -f\09\09overwrite existing files\0A -m <mode>\09create new directories with mode <mode> ( &'d with umask!)\0A -o\09\09force <mode> given by -m for all processed directories \0A \09\09(if -m is not used, the mode of the actually processed\0A \09\09dir is forced)\0A -u <user>\09newly created dirs/symlinks shall be owned by <user>\0A -g <group>\09newly created dirs/symlinks shall belong to <group>\0A -D\09\09only directories are proceeded \0A -p <prefix>\09prepend <prefix> to link targets \0A \0AOptions in deleter mode are:\0A\0A -f\09\09delete corresponding file even it's not a symlink\0A -m <mode>\09deletes <where>/foo only if <from>/foo is of mode <mode>\0A -o\09\09only broken symlinks are deleted\0A -u <user>\09deletes <where>/foo only if it belongs to <user>\0A -g <group>\09deletes <where>/foo only if it belongs to <group>\0A -D\09\09don't delete directories \0A -t\09\09delete only if entry passes test (as in test mode)\0A \0AOptions in test mode are:\0A\0A -r\09\09test symlinks as if they were created using -r in linker mode\0A -m <mode>\09skip foo if <from>/foo isn't of mode <mode>\0A -u <user>\09skip foo if <where>/foo is not owned by <user>\0A -g <group>\09skip foo if <where>/foo doesn't belong to <group>\0A -p <prefix>\09test links assuming they were created using \22-p <prefix>\22 \0A\0AReturn values: 0 - success; 1 - fatal error; 2 - some act failed but\0Ajust kept on doing; 3 - arguments imply nothing happens (eg., bad\0Aoptions used)\0A\00"
@.str.1 = [11 x i8] c"recdeleter\00"
@.str.2 = [14 x i8] c"reclinktester\00"
define void @showhelp() {
%1 = call i32 @printf(i8* getelementptr inbounds ([3002 x i8], [3002 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.2, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [3002 x i8] c"\0AThe program has a linker, a deleter and a test mode. By default it's in\0Alinker mode. It gets into deleter mode if it's invoked as %s, and into\0Atest mode if it's invoked as %s. Linker/deleter/test mode may be\0Aforced with the -l/-d/-t switches.\0A\0AIn linker mode it mirrors the directory tree under <from> to under <where>\0Aand symlinks files there. The symlinks point to the basename of the file\0Aprocessed, prefixed with <prefix>. If <prefix> is not given, it defaults\0Ato the absolute pathname of <from> (ie., the symlink points to the\0Acorrect absolute filename).\0A\0AIn deleter mode it deletes non-broken symlinks (empty directories) of\0Athe form <where>/foo, where <from>/foo is an existing file (directory).\0A(A dir is also considered empty if it gets empty during the deletion\0Aprocedure.)\0A\0AIn test mode it tests whether symlinks/dirs under <where> corresponding\0Ato files/dirs under <from> exist, and whether are they created properly.\0A\0AIf extra arguments are given, then they will be treated as files named\0Arelatively from <from>, and they will be proceeded individually \0A(no mass action is taken). If \22-\22 is among these extra arguments,\0Athen individual file names are also read from stdin; if \220-\22 is among\0Athem, individual file names are also read from stdin, being separated\0Aby '\\0'.\0A\0AOptions common for all modes:\0A\0A -h\09\09print this message and exit\0A -U <user>\09skip file under <from> if it's not owned by <user>\0A -G <group>\09skip file under <from> if it doesn't belong to <group>\0A -v/-q\09\09increase/decrease verbosity level\0A \09\09(currently 0, 1, 2 are in use, default is 1)\0A\0AOptions in linker mode are:\0A\0A -r\09\09produce relative symlinks\0A -f\09\09overwrite existing files\0A -m <mode>\09create new directories with mode <mode> ( &'d with umask!)\0A -o\09\09force <mode> given by -m for all processed directories \0A \09\09(if -m is not used, the mode of the actually processed\0A \09\09dir is forced)\0A -u <user>\09newly created dirs/symlinks shall be owned by <user>\0A -g <group>\09newly created dirs/symlinks shall belong to <group>\0A -D\09\09only directories are proceeded \0A -p <prefix>\09prepend <prefix> to link targets \0A \0AOptions in deleter mode are:\0A\0A -f\09\09delete corresponding file even it's not a symlink\0A -m <mode>\09deletes <where>/foo only if <from>/foo is of mode <mode>\0A -o\09\09only broken symlinks are deleted\0A -u <user>\09deletes <where>/foo only if it belongs to <user>\0A -g <group>\09deletes <where>/foo only if it belongs to <group>\0A -D\09\09don't delete directories \0A -t\09\09delete only if entry passes test (as in test mode)\0A \0AOptions in test mode are:\0A\0A -r\09\09test symlinks as if they were created using -r in linker mode\0A -m <mode>\09skip foo if <from>/foo isn't of mode <mode>\0A -u <user>\09skip foo if <where>/foo is not owned by <user>\0A -g <group>\09skip foo if <where>/foo doesn't belong to <group>\0A -p <prefix>\09test links assuming they were created using \22-p <prefix>\22 \0A\0AReturn values: 0 - success; 1 - fatal error; 2 - some act failed but\0Ajust kept on doing; 3 - arguments imply nothing happens (eg., bad\0Aoptions used)\0A\00"
@.str.1 = [11 x i8] c"recdeleter\00"
@.str.2 = [14 x i8] c"reclinktester\00"
define void @showhelp() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([3002 x i8], [3002 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.2, i64 0, i64 0))
ret void
}