#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*/ page_init();
int print_lines(char *, int);
int help_subs() {
  int cmd;
  page_init();
  if ((cmd = print_lines("Valid substitutions are:\n", 1)) ||
      (cmd = print_lines(
           "\na	Current article number\nA	Full name of current article "
           "(%P/%c/%a)\nb	Destination of last save command, often a "
           "mailbox\nB	Bytes to ignore at beginning of last saved article\n",
           0)) ||
      (cmd = print_lines(
           "c	Current newsgroup, directory form\nC	Current newsgroup, dot "
           "form\nd	Full name of newsgroup directory (%P/%c)\nD	"
           "Distribution line from current article",
           0)) ||
      (cmd = print_lines(
           "f	Who the current article is from\nF	Newsgroups to followup "
           "to (from Newsgroups and Followup-To)\nh	(This help "
           "message)\nH	Host name (yours)\ni	Message-I.D. line from current "
           "article, with <>\nI	Reference indicator mark (see -F switch)\n",
           0)) ||
      (cmd = print_lines(
           "l	News administrator's login name, if any\nL	Login name "
           "(yours)\nm	Current mode, first letter of (init, newsgroup, "
           "article, pager,\n		Add, Catchup, Delete bogus, Mailbox, "
           "Resudirribe)\nM	Number of article marked with M\nn	"
           "Newsgroups from current article\nN	Full name (yours)\n",
           0)) ||
      (cmd = print_lines(
           "o	Organization (yours)\nO	Original working directory (where you "
           "ran rn from)\np	Your private news directory (from "
           "-d)\nP	Public news spool directory\n",
           0)) ||
      (cmd = print_lines(
           "r	Last reference (parent article id)\nR	References list for "
           "followup article\ns	Subject, with all Re's and (nf)'s stripped "
           "off\nS	Subject, with one Re stripped off",
           0)) ||
      (cmd = print_lines(
           "t	New To line derived from From and Reply-To (Internet "
           "format)\nT	New To line derived from Path\nu	Number of "
           "unread articles\nU	Number of unread articles not counting current "
           "article\nx	News library directory\nX	Rn library "
           "directory\nz	Length of current article in bytes\n",
           0)) ||
      (cmd = print_lines(
           "~	Your home directory\n.	Directory containing . files\n$	"
           "Current process number\n/	Last search string\nESC	Run preceding "
           "command through % interpretation\n",
           0)))
    return cmd;
  return 0;
}


x86 assembly (clang, -O0):
<help_subs>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    $0x0,%al
call   1040 <page_init@plt>
lea    0xeca(%rip),%rdi
mov    $0x1,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_subs+0xfc>
lea    0xec7(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_subs+0xfc>
lea    0xf5b(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_subs+0xfc>
lea    0xfd7(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_subs+0xfc>
lea    0x10a5(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_subs+0xfc>
lea    0x1199(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_subs+0xfc>
lea    0x1212(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_subs+0xfc>
lea    0x1299(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
jne    121c <help_subs+0xfc>
lea    0x1389(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
mov    %eax,-0x8(%rbp)
cmp    $0x0,%eax
je     1227 <help_subs+0x107>
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    122e <help_subs+0x10e>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<help_subs>:
push   %rax
xor    %eax,%eax
call   1040 <page_init@plt>
lea    0xed1(%rip),%rdi
mov    $0x1,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_subs+0x9b>
lea    0xed6(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_subs+0x9b>
lea    0xf72(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_subs+0x9b>
lea    0xff6(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_subs+0x9b>
lea    0x10cc(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_subs+0x9b>
lea    0x11c8(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_subs+0x9b>
lea    0x1249(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
jne    11bb <help_subs+0x9b>
lea    0x12d8(%rip),%rdi
xor    %esi,%esi
call   1030 <print_lines@plt>
test   %eax,%eax
je     11bd <help_subs+0x9d>
pop    %rcx
ret
lea    0x13ce(%rip),%rdi
xor    %esi,%esi
pop    %rax
jmp    1030 <print_lines@plt>

LLVM IR (-O0):
@.str = [26 x i8] c"Valid substitutions are:\0A\00"
@.str.1 = [174 x i8] c"\0Aa\09Current article number\0AA\09Full name of current article (%P/%c/%a)\0Ab\09Destination of last save command, often a mailbox\0AB\09Bytes to ignore at beginning of last saved article\0A\00"
@.str.2 = [150 x i8] c"c\09Current newsgroup, directory form\0AC\09Current newsgroup, dot form\0Ad\09Full name of newsgroup directory (%P/%c)\0AD\09Distribution line from current article\00"
@.str.3 = [232 x i8] c"f\09Who the current article is from\0AF\09Newsgroups to followup to (from Newsgroups and Followup-To)\0Ah\09(This help message)\0AH\09Host name (yours)\0Ai\09Message-I.D. line from current article, with <>\0AI\09Reference indicator mark (see -F switch)\0A\00"
@.str.4 = [270 x i8] c"l\09News administrator's login name, if any\0AL\09Login name (yours)\0Am\09Current mode, first letter of (init, newsgroup, article, pager,\0A\09\09Add, Catchup, Delete bogus, Mailbox, Resudirribe)\0AM\09Number of article marked with M\0An\09Newsgroups from current article\0AN\09Full name (yours)\0A\00"
@.str.5 = [147 x i8] c"o\09Organization (yours)\0AO\09Original working directory (where you ran rn from)\0Ap\09Your private news directory (from -d)\0AP\09Public news spool directory\0A\00"
@.str.6 = [161 x i8] c"r\09Last reference (parent article id)\0AR\09References list for followup article\0As\09Subject, with all Re's and (nf)'s stripped off\0AS\09Subject, with one Re stripped off\00"
@.str.7 = [266 x i8] c"t\09New To line derived from From and Reply-To (Internet format)\0AT\09New To line derived from Path\0Au\09Number of unread articles\0AU\09Number of unread articles not counting current article\0Ax\09News library directory\0AX\09Rn library directory\0Az\09Length of current article in bytes\0A\00"
@.str.8 = [151 x i8] c"~\09Your home directory\0A.\09Directory containing . files\0A$\09Current process number\0A/\09Last search string\0AESC\09Run preceding command through % interpretation\0A\00"
define i32 @help_subs() {
%1 = alloca i32
%2 = alloca i32
%3 = call i32 (...) @page_init()
%4 = call i32 @print_lines(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i32 1)
store i32 %4, i32* %2
%5 = icmp ne i32 %4, 0
br i1 %5, label %30, label %6
6: ; preds = %0
%7 = call i32 @print_lines(i8* getelementptr inbounds ([174 x i8], [174 x i8]* @.str.1, i64 0, i64 0), i32 0)
store i32 %7, i32* %2
%8 = icmp ne i32 %7, 0
br i1 %8, label %30, label %9
9: ; preds = %6
%10 = call i32 @print_lines(i8* getelementptr inbounds ([150 x i8], [150 x i8]* @.str.2, i64 0, i64 0), i32 0)
store i32 %10, i32* %2
%11 = icmp ne i32 %10, 0
br i1 %11, label %30, label %12
12: ; preds = %9
%13 = call i32 @print_lines(i8* getelementptr inbounds ([232 x i8], [232 x i8]* @.str.3, i64 0, i64 0), i32 0)
store i32 %13, i32* %2
%14 = icmp ne i32 %13, 0
br i1 %14, label %30, label %15
15: ; preds = %12
%16 = call i32 @print_lines(i8* getelementptr inbounds ([270 x i8], [270 x i8]* @.str.4, i64 0, i64 0), i32 0)
store i32 %16, i32* %2
%17 = icmp ne i32 %16, 0
br i1 %17, label %30, label %18
18: ; preds = %15
%19 = call i32 @print_lines(i8* getelementptr inbounds ([147 x i8], [147 x i8]* @.str.5, i64 0, i64 0), i32 0)
store i32 %19, i32* %2
%20 = icmp ne i32 %19, 0
br i1 %20, label %30, label %21
21: ; preds = %18
%22 = call i32 @print_lines(i8* getelementptr inbounds ([161 x i8], [161 x i8]* @.str.6, i64 0, i64 0), i32 0)
store i32 %22, i32* %2
%23 = icmp ne i32 %22, 0
br i1 %23, label %30, label %24
24: ; preds = %21
%25 = call i32 @print_lines(i8* getelementptr inbounds ([266 x i8], [266 x i8]* @.str.7, i64 0, i64 0), i32 0)
store i32 %25, i32* %2
%26 = icmp ne i32 %25, 0
br i1 %26, label %30, label %27
27: ; preds = %24
%28 = call i32 @print_lines(i8* getelementptr inbounds ([151 x i8], [151 x i8]* @.str.8, i64 0, i64 0), i32 0)
store i32 %28, i32* %2
%29 = icmp ne i32 %28, 0
br i1 %29, label %30, label %32
30: ; preds = %27, %24, %21, %18, %15, %12, %9, %6, %0
%31 = load i32, i32* %2
store i32 %31, i32* %1
br label %33
32: ; preds = %27
store i32 0, i32* %1
br label %33
33: ; preds = %32, %30
%34 = load i32, i32* %1
ret i32 %34
}

LLVM IR (-O2):
@.str = [26 x i8] c"Valid substitutions are:\0A\00"
@.str.1 = [174 x i8] c"\0Aa\09Current article number\0AA\09Full name of current article (%P/%c/%a)\0Ab\09Destination of last save command, often a mailbox\0AB\09Bytes to ignore at beginning of last saved article\0A\00"
@.str.2 = [150 x i8] c"c\09Current newsgroup, directory form\0AC\09Current newsgroup, dot form\0Ad\09Full name of newsgroup directory (%P/%c)\0AD\09Distribution line from current article\00"
@.str.3 = [232 x i8] c"f\09Who the current article is from\0AF\09Newsgroups to followup to (from Newsgroups and Followup-To)\0Ah\09(This help message)\0AH\09Host name (yours)\0Ai\09Message-I.D. line from current article, with <>\0AI\09Reference indicator mark (see -F switch)\0A\00"
@.str.4 = [270 x i8] c"l\09News administrator's login name, if any\0AL\09Login name (yours)\0Am\09Current mode, first letter of (init, newsgroup, article, pager,\0A\09\09Add, Catchup, Delete bogus, Mailbox, Resudirribe)\0AM\09Number of article marked with M\0An\09Newsgroups from current article\0AN\09Full name (yours)\0A\00"
@.str.5 = [147 x i8] c"o\09Organization (yours)\0AO\09Original working directory (where you ran rn from)\0Ap\09Your private news directory (from -d)\0AP\09Public news spool directory\0A\00"
@.str.6 = [161 x i8] c"r\09Last reference (parent article id)\0AR\09References list for followup article\0As\09Subject, with all Re's and (nf)'s stripped off\0AS\09Subject, with one Re stripped off\00"
@.str.7 = [266 x i8] c"t\09New To line derived from From and Reply-To (Internet format)\0AT\09New To line derived from Path\0Au\09Number of unread articles\0AU\09Number of unread articles not counting current article\0Ax\09News library directory\0AX\09Rn library directory\0Az\09Length of current article in bytes\0A\00"
@.str.8 = [151 x i8] c"~\09Your home directory\0A.\09Directory containing . files\0A$\09Current process number\0A/\09Last search string\0AESC\09Run preceding command through % interpretation\0A\00"
define i32 @help_subs() {
%1 = tail call i32 (...) @page_init()
%2 = tail call i32 @print_lines(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i32 1)
%3 = icmp eq i32 %2, 0
br i1 %3, label %4, label %27
4: ; preds = %0
%5 = tail call i32 @print_lines(i8* getelementptr inbounds ([174 x i8], [174 x i8]* @.str.1, i64 0, i64 0), i32 0)
%6 = icmp eq i32 %5, 0
br i1 %6, label %7, label %27
7: ; preds = %4
%8 = tail call i32 @print_lines(i8* getelementptr inbounds ([150 x i8], [150 x i8]* @.str.2, i64 0, i64 0), i32 0)
%9 = icmp eq i32 %8, 0
br i1 %9, label %10, label %27
10: ; preds = %7
%11 = tail call i32 @print_lines(i8* getelementptr inbounds ([232 x i8], [232 x i8]* @.str.3, i64 0, i64 0), i32 0)
%12 = icmp eq i32 %11, 0
br i1 %12, label %13, label %27
13: ; preds = %10
%14 = tail call i32 @print_lines(i8* getelementptr inbounds ([270 x i8], [270 x i8]* @.str.4, i64 0, i64 0), i32 0)
%15 = icmp eq i32 %14, 0
br i1 %15, label %16, label %27
16: ; preds = %13
%17 = tail call i32 @print_lines(i8* getelementptr inbounds ([147 x i8], [147 x i8]* @.str.5, i64 0, i64 0), i32 0)
%18 = icmp eq i32 %17, 0
br i1 %18, label %19, label %27
19: ; preds = %16
%20 = tail call i32 @print_lines(i8* getelementptr inbounds ([161 x i8], [161 x i8]* @.str.6, i64 0, i64 0), i32 0)
%21 = icmp eq i32 %20, 0
br i1 %21, label %22, label %27
22: ; preds = %19
%23 = tail call i32 @print_lines(i8* getelementptr inbounds ([266 x i8], [266 x i8]* @.str.7, i64 0, i64 0), i32 0)
%24 = icmp eq i32 %23, 0
br i1 %24, label %25, label %27
25: ; preds = %22
%26 = tail call i32 @print_lines(i8* getelementptr inbounds ([151 x i8], [151 x i8]* @.str.8, i64 0, i64 0), i32 0)
br label %27
27: ; preds = %25, %0, %4, %7, %10, %13, %16, %19, %22
%28 = phi i32 [ %2, %0 ], [ %5, %4 ], [ %8, %7 ], [ %11, %10 ], [ %14, %13 ], [ %17, %16 ], [ %20, %19 ], [ %23, %22 ], [ %26, %25 ]
ret i32 %28
}