#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ check_io(int /*<<< orphan*/ *, char *, int /*<<< orphan*/);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, ...);
scalar_t__ get_line(char *, int, int);
int /*<<< orphan*/ output_till_dot(int /*<<< orphan*/ *, char *, char *);
int /*<<< orphan*/ printf(char *, ...);
scalar_t__ strcmp(char *, char *);
scalar_t__ strncmp(char *, char *, int);
void output_author(FILE *output, char *oname) {
  char buf[79 + 1 + 1];
  int more_auths;
  int auth_cnt = 0;
  printf("\nEnter information about each author.  If your entry is after\n");
  printf("%s and before the contest deadline, the judges\n",
         "07Jan2004 00:00 UTC");
  printf("will attempt to EMail back a confirmation to the first author\n");
  do {
    fprintf(output, "---author---\n");
    check_io(output, oname, 0);
    printf("\nAuthor #%d name: ", ++auth_cnt);
    while (get_line(buf, 79 + 1, 79 - 9) <= 0) {
      printf("\nname too long, please re-enter: ");
    }
    fprintf(output, "name:\t%s", buf);
    check_io(output, oname, 0);
    printf("\nEnter the School/Company/Organization of author #%d\n", auth_cnt);
    printf("\nAuthor #%d org: ", auth_cnt);
    while (get_line(buf, 79 + 1, 79 - 9) <= 0) {
      printf("\nline too long, please re-enter: ");
    }
    fprintf(output, "org:\t%s", buf);
    check_io(output, oname, 0);
    printf("\nEnter the postal address for author #%d.  Be sure to include\n",
           auth_cnt);
    printf("your country and do not include your name.\n");
    output_till_dot(output, oname, "addr:");
    printf("\nEnter the EMail address for author #%d.  Use an address from\n",
           auth_cnt);
    printf("a registered domain or well known site.  If you give several\n");
    printf("forms, list them one per line.\n");
    output_till_dot(output, oname, "email:");
    printf("\nEnter the fully qualified home page URL for author #%d\n",
           auth_cnt);
    printf("including the http: part or just enter none: ");
    while (get_line(buf, 79 + 1, 79 - 9) <= 0 ||
           (strncmp(buf, "http://", sizeof("http://") - 1) != 0 &&
            strcmp(buf, "none\n") != 0)) {
      printf("\nURL too long, does not begin with http:// or\n");
      printf("is not the word none\n");
    }
    fprintf(output, "url:\t%s", buf);
    check_io(output, oname, 0);
    printf("\nShould author #%d remain anonymous (enter y or n)? ", auth_cnt);
    while (get_line(buf, 1 + 1, 0) <= 0 || !(buf[0] == 'y' || buf[0] == 'n')) {
      printf("\nplease answer y or n: ");
    }
    fprintf(output, "anon:\t%s", buf);
    check_io(output, oname, 0);
    printf("\nIs there another author (enter y or n)? ");
    while (get_line(buf, 1 + 1, 0) <= 0 || !(buf[0] == 'y' || buf[0] == 'n')) {
      printf("\nplease answer y or n: ");
    }
    if (buf[0] == 'y') {
      more_auths = 1;
    } else {
      more_auths = 0;
    }
  } while (more_auths == 1);
  return;
}


x86 assembly (clang, -O0):
<output_author>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x78(%rbp)
lea    0xe6f(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xea0(%rip),%rdi
lea    0xec9(%rip),%rsi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xecf(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x8(%rbp),%rdi
lea    0xefc(%rip),%rsi
mov    $0x0,%al
call   1080 <fprintf@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
xor    %edx,%edx
call   1090 <check_io@plt>
mov    -0x78(%rbp),%esi
add    $0x1,%esi
mov    %esi,-0x78(%rbp)
lea    0xee4(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    $0x50,%esi
mov    $0x46,%edx
call   1040 <get_line@plt>
cmp    $0x0,%rax
jg     1223 <output_author+0xb3>
lea    0xecc(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    11f3 <output_author+0x83>
mov    -0x8(%rbp),%rdi
lea    -0x70(%rbp),%rdx
lea    0xed3(%rip),%rsi
mov    $0x0,%al
call   1080 <fprintf@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
xor    %edx,%edx
call   1090 <check_io@plt>
mov    -0x78(%rbp),%esi
lea    0xebc(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x78(%rbp),%esi
lea    0xee1(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    $0x50,%esi
mov    $0x46,%edx
call   1040 <get_line@plt>
cmp    $0x0,%rax
jg     129a <output_author+0x12a>
lea    0xec8(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    126a <output_author+0xfa>
mov    -0x8(%rbp),%rdi
lea    -0x70(%rbp),%rdx
lea    0xecf(%rip),%rsi
mov    $0x0,%al
call   1080 <fprintf@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
xor    %edx,%edx
call   1090 <check_io@plt>
mov    -0x78(%rbp),%esi
lea    0xeb7(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xee8(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
lea    0xefe(%rip),%rdx
call   1050 <output_till_dot@plt>
mov    -0x78(%rbp),%esi
lea    0xef5(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf26(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf56(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
lea    0xf60(%rip),%rdx
call   1050 <output_till_dot@plt>
mov    -0x78(%rbp),%esi
lea    0xf58(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf83(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    $0x50,%esi
mov    $0x46,%edx
call   1040 <get_line@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x79(%rbp)
jle    13be <output_author+0x24e>
lea    -0x70(%rbp),%rdi
lea    0xf7a(%rip),%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    $0x0,%rcx
mov    %al,-0x7a(%rbp)
je     13b8 <output_author+0x248>
lea    -0x70(%rbp),%rdi
lea    0xf9a(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x7a(%rbp)
mov    -0x7a(%rbp),%al
mov    %al,-0x79(%rbp)
mov    -0x79(%rbp),%al
test   $0x1,%al
jne    13ce <output_author+0x25e>
jmp    13ef <output_author+0x27f>
lea    0xf2f(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf50(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1352 <output_author+0x1e2>
mov    -0x8(%rbp),%rdi
lea    -0x70(%rbp),%rdx
lea    0xf4b(%rip),%rsi
mov    $0x0,%al
call   1080 <fprintf@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
xor    %edx,%edx
call   1090 <check_io@plt>
mov    -0x78(%rbp),%esi
lea    0xf33(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    $0x2,%esi
xor    %edx,%edx
call   1040 <get_line@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x7b(%rbp)
jle    146e <output_author+0x2fe>
movsbl -0x70(%rbp),%ecx
mov    $0x1,%al
cmp    $0x79,%ecx
mov    %al,-0x7c(%rbp)
je     1466 <output_author+0x2f6>
movsbl -0x70(%rbp),%eax
cmp    $0x6e,%eax
sete   %al
mov    %al,-0x7c(%rbp)
mov    -0x7c(%rbp),%al
xor    $0xff,%al
mov    %al,-0x7b(%rbp)
mov    -0x7b(%rbp),%al
test   $0x1,%al
jne    147e <output_author+0x30e>
jmp    1491 <output_author+0x321>
lea    0xf01(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1425 <output_author+0x2b5>
mov    -0x8(%rbp),%rdi
lea    -0x70(%rbp),%rdx
lea    0xefe(%rip),%rsi
mov    $0x0,%al
call   1080 <fprintf@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
xor    %edx,%edx
call   1090 <check_io@plt>
lea    0xeea(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    $0x2,%esi
xor    %edx,%edx
call   1040 <get_line@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x7d(%rbp)
jle    150d <output_author+0x39d>
movsbl -0x70(%rbp),%ecx
mov    $0x1,%al
cmp    $0x79,%ecx
mov    %al,-0x7e(%rbp)
je     1505 <output_author+0x395>
movsbl -0x70(%rbp),%eax
cmp    $0x6e,%eax
sete   %al
mov    %al,-0x7e(%rbp)
mov    -0x7e(%rbp),%al
xor    $0xff,%al
mov    %al,-0x7d(%rbp)
mov    -0x7d(%rbp),%al
test   $0x1,%al
jne    151d <output_author+0x3ad>
jmp    1530 <output_author+0x3c0>
lea    0xe62(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    14c4 <output_author+0x354>
movsbl -0x70(%rbp),%eax
cmp    $0x79,%eax
jne    1549 <output_author+0x3d9>
movl   $0x1,-0x74(%rbp)
jmp    1550 <output_author+0x3e0>
movl   $0x0,-0x74(%rbp)
jmp    1555 <output_author+0x3e5>
cmpl   $0x1,-0x74(%rbp)
je     11bb <output_author+0x4b>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<output_author>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %rsi,0x10(%rsp)
mov    %rdi,%r15
lea    0x10dd(%rip),%rdi
call   1040 <puts@plt>
lea    0xe47(%rip),%rdi
lea    0xe70(%rip),%rsi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0x10fa(%rip),%rdi
call   1040 <puts@plt>
lea    0xe6a(%rip),%rdi
lea    0xe71(%rip),%rbp
lea    0x20(%rsp),%rbx
lea    0x11ce(%rip),%r12
lea    0x104b(%rip),%r14
xor    %r13d,%r13d
mov    %r15,0x18(%rsp)
mov    $0xd,%esi
mov    $0x1,%edx
mov    %r15,%rcx
call   10b0 <fwrite@plt>
mov    %r15,%rdi
mov    0x10(%rsp),%rsi
xor    %edx,%edx
call   10a0 <check_io@plt>
add    $0x1,%r13d
mov    %rbp,%rdi
mov    %r13d,0xc(%rsp)
mov    %r13d,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    %rbx,%rdi
mov    $0x50,%esi
mov    $0x46,%edx
call   1050 <get_line@plt>
test   %rax,%rax
lea    0xe16(%rip),%rbp
jg     1281 <output_author+0xf1>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rbp,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
mov    %rbx,%rdi
mov    $0x50,%esi
mov    $0x46,%edx
call   1050 <get_line@plt>
test   %rax,%rax
jle    1260 <output_author+0xd0>
mov    0x18(%rsp),%r15
mov    %r15,%rdi
lea    0xdf7(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1090 <fprintf@plt>
mov    %r15,%rdi
mov    0x10(%rsp),%rsi
xor    %edx,%edx
call   10a0 <check_io@plt>
lea    0xde0(%rip),%rdi
mov    0xc(%rsp),%ebp
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0xe02(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    %rbx,%rdi
mov    $0x50,%esi
mov    $0x46,%edx
call   1050 <get_line@plt>
test   %rax,%rax
lea    0xdef(%rip),%rbp
jg     1311 <output_author+0x181>
nopl   0x0(%rax,%rax,1)
mov    %rbp,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
mov    %rbx,%rdi
mov    $0x50,%esi
mov    $0x46,%edx
call   1050 <get_line@plt>
test   %rax,%rax
jle    12f0 <output_author+0x160>
mov    %r15,%rdi
lea    0xddf(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1090 <fprintf@plt>
mov    %r15,%rdi
mov    0x10(%rsp),%rbp
mov    %rbp,%rsi
xor    %edx,%edx
call   10a0 <check_io@plt>
lea    0xdc4(%rip),%rdi
mov    0xc(%rsp),%r13d
mov    %r13d,%esi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0xfb2(%rip),%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
mov    %rbp,%rsi
lea    0xddb(%rip),%rdx
call   1060 <output_till_dot@plt>
lea    0xdd5(%rip),%rdi
mov    %r13d,%esi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0xfae(%rip),%rdi
call   1040 <puts@plt>
lea    0xfdf(%rip),%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
mov    %rbp,%rsi
lea    0xde5(%rip),%rdx
call   1060 <output_till_dot@plt>
lea    0xde0(%rip),%rdi
mov    %r13d,%esi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0xe08(%rip),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0xe28(%rip),%r15
lea    0xfba(%rip),%rbp
jmp    13f0 <output_author+0x260>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %rbp,%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
call   1040 <puts@plt>
mov    %rbx,%rdi
mov    $0x50,%esi
mov    $0x46,%edx
call   1050 <get_line@plt>
test   %rax,%rax
jle    13e0 <output_author+0x250>
mov    %rbx,%rdi
mov    %r15,%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1430 <output_author+0x2a0>
mov    %rbx,%rdi
lea    0xdd6(%rip),%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
jne    13e0 <output_author+0x250>
mov    0x18(%rsp),%r15
mov    %r15,%rdi
lea    0xdc3(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1090 <fprintf@plt>
mov    %r15,%rdi
mov    0x10(%rsp),%rsi
xor    %edx,%edx
call   10a0 <check_io@plt>
lea    0xdab(%rip),%rdi
mov    0xc(%rsp),%r13d
mov    %r13d,%esi
xor    %eax,%eax
call   1070 <printf@plt>
jmp    147a <output_author+0x2ea>
mov    %r14,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
mov    %rbx,%rdi
mov    $0x2,%esi
xor    %edx,%edx
call   1050 <get_line@plt>
test   %rax,%rax
jle    1470 <output_author+0x2e0>
movzbl 0x20(%rsp),%eax
cmp    $0x6e,%al
je     149b <output_author+0x30b>
cmp    $0x79,%al
jne    1470 <output_author+0x2e0>
mov    %r15,%rdi
lea    0xdb2(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1090 <fprintf@plt>
mov    %r15,%rdi
mov    0x10(%rsp),%rsi
xor    %edx,%edx
call   10a0 <check_io@plt>
lea    0xd9b(%rip),%rdi
cs nopw 0x0(%rax,%rax,1)
nop
xor    %eax,%eax
call   1070 <printf@plt>
mov    %rbx,%rdi
mov    $0x2,%esi
xor    %edx,%edx
call   1050 <get_line@plt>
mov    %r14,%rdi
test   %rax,%rax
jle    14d0 <output_author+0x340>
movzbl 0x20(%rsp),%eax
cmp    $0x79,%al
je     1500 <output_author+0x370>
mov    %r14,%rdi
cmp    $0x6e,%al
jne    14d0 <output_author+0x340>
jmp    1513 <output_author+0x383>
lea    0xb3d(%rip),%rdi
lea    0xb44(%rip),%rbp
jmp    11fc <output_author+0x6c>
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [63 x i8] c"\0AEnter information about each author. If your entry is after\0A\00"
@.str.1 = [48 x i8] c"%s and before the contest deadline, the judges\0A\00"
@.str.2 = [20 x i8] c"07Jan2004 00:00 UTC\00"
@.str.3 = [63 x i8] c"will attempt to EMail back a confirmation to the first author\0A\00"
@.str.4 = [14 x i8] c"---author---\0A\00"
@.str.5 = [19 x i8] c"\0AAuthor #%d name: \00"
@.str.6 = [34 x i8] c"\0Aname too long, please re-enter: \00"
@.str.7 = [9 x i8] c"name:\09%s\00"
@.str.8 = [54 x i8] c"\0AEnter the School/Company/Organization of author #%d\0A\00"
@.str.9 = [18 x i8] c"\0AAuthor #%d org: \00"
@.str.10 = [34 x i8] c"\0Aline too long, please re-enter: \00"
@.str.11 = [8 x i8] c"org:\09%s\00"
@.str.12 = [63 x i8] c"\0AEnter the postal address for author #%d. Be sure to include\0A\00"
@.str.13 = [44 x i8] c"your country and do not include your name.\0A\00"
@.str.14 = [6 x i8] c"addr:\00"
@.str.15 = [63 x i8] c"\0AEnter the EMail address for author #%d. Use an address from\0A\00"
@.str.16 = [62 x i8] c"a registered domain or well known site. If you give several\0A\00"
@.str.17 = [32 x i8] c"forms, list them one per line.\0A\00"
@.str.18 = [7 x i8] c"email:\00"
@.str.19 = [57 x i8] c"\0AEnter the fully qualified home page URL for author #%d\0A\00"
@.str.20 = [46 x i8] c"including the http: part or just enter none: \00"
@.str.21 = [8 x i8] c"http://\00"
@.str.22 = [6 x i8] c"none\0A\00"
@.str.23 = [47 x i8] c"\0AURL too long, does not begin with http:// or\0A\00"
@.str.24 = [22 x i8] c"is not the word none\0A\00"
@.str.25 = [8 x i8] c"url:\09%s\00"
@.str.26 = [53 x i8] c"\0AShould author #%d remain anonymous (enter y or n)? \00"
@.str.27 = [24 x i8] c"\0Aplease answer y or n: \00"
@.str.28 = [9 x i8] c"anon:\09%s\00"
@.str.29 = [42 x i8] c"\0AIs there another author (enter y or n)? \00"
define void @output_author(i32* %0, i8* %1) {
%3 = alloca i32*
%4 = alloca i8*
%5 = alloca [81 x i8]
%6 = alloca i32
%7 = alloca i32
store i32* %0, i32** %3
store i8* %1, i8** %4
store i32 0, i32* %7
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str, i64 0, i64 0))
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.2, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.3, i64 0, i64 0))
br label %11
11: ; preds = %152, %2
%12 = load i32*, i32** %3
%13 = call i32 (i32*, i8*, ...) @fprintf(i32* %12, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0))
%14 = load i32*, i32** %3
%15 = load i8*, i8** %4
%16 = call i32 @check_io(i32* %14, i8* %15, i32 0)
%17 = load i32, i32* %7
%18 = add nsw i32 %17, 1
store i32 %18, i32* %7
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.5, i64 0, i64 0), i32 %18)
br label %20
20: ; preds = %24, %11
%21 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%22 = call i64 @get_line(i8* %21, i32 80, i32 70)
%23 = icmp sle i64 %22, 0
br i1 %23, label %24, label %26
24: ; preds = %20
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.6, i64 0, i64 0))
br label %20
26: ; preds = %20
%27 = load i32*, i32** %3
%28 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%29 = call i32 (i32*, i8*, ...) @fprintf(i32* %27, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0), i8* %28)
%30 = load i32*, i32** %3
%31 = load i8*, i8** %4
%32 = call i32 @check_io(i32* %30, i8* %31, i32 0)
%33 = load i32, i32* %7
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.8, i64 0, i64 0), i32 %33)
%35 = load i32, i32* %7
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.9, i64 0, i64 0), i32 %35)
br label %37
37: ; preds = %41, %26
%38 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%39 = call i64 @get_line(i8* %38, i32 80, i32 70)
%40 = icmp sle i64 %39, 0
br i1 %40, label %41, label %43
41: ; preds = %37
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.10, i64 0, i64 0))
br label %37
43: ; preds = %37
%44 = load i32*, i32** %3
%45 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%46 = call i32 (i32*, i8*, ...) @fprintf(i32* %44, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i8* %45)
%47 = load i32*, i32** %3
%48 = load i8*, i8** %4
%49 = call i32 @check_io(i32* %47, i8* %48, i32 0)
%50 = load i32, i32* %7
%51 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.12, i64 0, i64 0), i32 %50)
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.13, i64 0, i64 0))
%53 = load i32*, i32** %3
%54 = load i8*, i8** %4
%55 = call i32 @output_till_dot(i32* %53, i8* %54, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0))
%56 = load i32, i32* %7
%57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.15, i64 0, i64 0), i32 %56)
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.16, i64 0, i64 0))
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.17, i64 0, i64 0))
%60 = load i32*, i32** %3
%61 = load i8*, i8** %4
%62 = call i32 @output_till_dot(i32* %60, i8* %61, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0))
%63 = load i32, i32* %7
%64 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.19, i64 0, i64 0), i32 %63)
%65 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.20, i64 0, i64 0))
br label %66
66: ; preds = %82, %43
%67 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%68 = call i64 @get_line(i8* %67, i32 80, i32 70)
%69 = icmp sle i64 %68, 0
br i1 %69, label %80, label %70
70: ; preds = %66
%71 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%72 = call i64 @strncmp(i8* %71, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0), i32 7)
%73 = icmp ne i64 %72, 0
br i1 %73, label %74, label %78
74: ; preds = %70
%75 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%76 = call i64 @strcmp(i8* %75, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0))
%77 = icmp ne i64 %76, 0
br label %78
78: ; preds = %74, %70
%79 = phi i1 [ false, %70 ], [ %77, %74 ]
br label %80
80: ; preds = %78, %66
%81 = phi i1 [ true, %66 ], [ %79, %78 ]
br i1 %81, label %82, label %85
82: ; preds = %80
%83 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.23, i64 0, i64 0))
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.24, i64 0, i64 0))
br label %66
85: ; preds = %80
%86 = load i32*, i32** %3
%87 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%88 = call i32 (i32*, i8*, ...) @fprintf(i32* %86, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.25, i64 0, i64 0), i8* %87)
%89 = load i32*, i32** %3
%90 = load i8*, i8** %4
%91 = call i32 @check_io(i32* %89, i8* %90, i32 0)
%92 = load i32, i32* %7
%93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.26, i64 0, i64 0), i32 %92)
br label %94
94: ; preds = %113, %85
%95 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%96 = call i64 @get_line(i8* %95, i32 2, i32 0)
%97 = icmp sle i64 %96, 0
br i1 %97, label %111, label %98
98: ; preds = %94
%99 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%100 = load i8, i8* %99
%101 = sext i8 %100 to i32
%102 = icmp eq i32 %101, 121
br i1 %102, label %108, label %103
103: ; preds = %98
%104 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = icmp eq i32 %106, 110
br label %108
108: ; preds = %103, %98
%109 = phi i1 [ true, %98 ], [ %107, %103 ]
%110 = xor i1 %109, true
br label %111
111: ; preds = %108, %94
%112 = phi i1 [ true, %94 ], [ %110, %108 ]
br i1 %112, label %113, label %115
113: ; preds = %111
%114 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.27, i64 0, i64 0))
br label %94
115: ; preds = %111
%116 = load i32*, i32** %3
%117 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%118 = call i32 (i32*, i8*, ...) @fprintf(i32* %116, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.28, i64 0, i64 0), i8* %117)
%119 = load i32*, i32** %3
%120 = load i8*, i8** %4
%121 = call i32 @check_io(i32* %119, i8* %120, i32 0)
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.29, i64 0, i64 0))
br label %123
123: ; preds = %142, %115
%124 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%125 = call i64 @get_line(i8* %124, i32 2, i32 0)
%126 = icmp sle i64 %125, 0
br i1 %126, label %140, label %127
127: ; preds = %123
%128 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%129 = load i8, i8* %128
%130 = sext i8 %129 to i32
%131 = icmp eq i32 %130, 121
br i1 %131, label %137, label %132
132: ; preds = %127
%133 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%134 = load i8, i8* %133
%135 = sext i8 %134 to i32
%136 = icmp eq i32 %135, 110
br label %137
137: ; preds = %132, %127
%138 = phi i1 [ true, %127 ], [ %136, %132 ]
%139 = xor i1 %138, true
br label %140
140: ; preds = %137, %123
%141 = phi i1 [ true, %123 ], [ %139, %137 ]
br i1 %141, label %142, label %144
142: ; preds = %140
%143 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.27, i64 0, i64 0))
br label %123
144: ; preds = %140
%145 = getelementptr inbounds [81 x i8], [81 x i8]* %5, i64 0, i64 0
%146 = load i8, i8* %145
%147 = sext i8 %146 to i32
%148 = icmp eq i32 %147, 121
br i1 %148, label %149, label %150
149: ; preds = %144
store i32 1, i32* %6
br label %151
150: ; preds = %144
store i32 0, i32* %6
br label %151
151: ; preds = %150, %149
br label %152
152: ; preds = %151
%153 = load i32, i32* %6
%154 = icmp eq i32 %153, 1
br i1 %154, label %11, label %155
155: ; preds = %152
ret void
}

LLVM IR (-O2):
@.str.1 = [48 x i8] c"%s and before the contest deadline, the judges\0A\00"
@.str.2 = [20 x i8] c"07Jan2004 00:00 UTC\00"
@.str.4 = [14 x i8] c"---author---\0A\00"
@.str.5 = [19 x i8] c"\0AAuthor #%d name: \00"
@.str.6 = [34 x i8] c"\0Aname too long, please re-enter: \00"
@.str.7 = [9 x i8] c"name:\09%s\00"
@.str.8 = [54 x i8] c"\0AEnter the School/Company/Organization of author #%d\0A\00"
@.str.9 = [18 x i8] c"\0AAuthor #%d org: \00"
@.str.10 = [34 x i8] c"\0Aline too long, please re-enter: \00"
@.str.11 = [8 x i8] c"org:\09%s\00"
@.str.12 = [63 x i8] c"\0AEnter the postal address for author #%d. Be sure to include\0A\00"
@.str.14 = [6 x i8] c"addr:\00"
@.str.15 = [63 x i8] c"\0AEnter the EMail address for author #%d. Use an address from\0A\00"
@.str.18 = [7 x i8] c"email:\00"
@.str.19 = [57 x i8] c"\0AEnter the fully qualified home page URL for author #%d\0A\00"
@.str.20 = [46 x i8] c"including the http: part or just enter none: \00"
@.str.21 = [8 x i8] c"http://\00"
@.str.22 = [6 x i8] c"none\0A\00"
@.str.25 = [8 x i8] c"url:\09%s\00"
@.str.26 = [53 x i8] c"\0AShould author #%d remain anonymous (enter y or n)? \00"
@.str.27 = [24 x i8] c"\0Aplease answer y or n: \00"
@.str.28 = [9 x i8] c"anon:\09%s\00"
@.str.29 = [42 x i8] c"\0AIs there another author (enter y or n)? \00"
@str = [62 x i8] c"\0AEnter information about each author. If your entry is after\00"
@str.30 = [62 x i8] c"will attempt to EMail back a confirmation to the first author\00"
@str.31 = [43 x i8] c"your country and do not include your name.\00"
@str.32 = [61 x i8] c"a registered domain or well known site. If you give several\00"
@str.33 = [31 x i8] c"forms, list them one per line.\00"
@str.34 = [46 x i8] c"\0AURL too long, does not begin with http:// or\00"
@str.35 = [21 x i8] c"is not the word none\00"
define void @output_author(i32* %0, i8* %1) {
%3 = alloca [81 x i8]
%4 = getelementptr inbounds [81 x i8], [81 x i8]* %3, i64 0, i64 0
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str, i64 0, i64 0))
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.2, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str.30, i64 0, i64 0))
br label %8
8: ; preds = %74, %2
%9 = phi i32 [ 0, %2 ], [ %12, %74 ]
%10 = call i64 @fwrite(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i64 13, i64 1, i32* %0)
%11 = call i32 @check_io(i32* %0, i8* %1, i32 0)
%12 = add nuw nsw i32 %9, 1
%13 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.5, i64 0, i64 0), i32 %12)
%14 = call i64 @get_line(i8* %4, i32 80, i32 70)
%15 = icmp slt i64 %14, 1
br i1 %15, label %16, label %20
16: ; preds = %8, %16
%17 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.6, i64 0, i64 0))
%18 = call i64 @get_line(i8* %4, i32 80, i32 70)
%19 = icmp slt i64 %18, 1
br i1 %19, label %16, label %20
20: ; preds = %16, %8
%21 = call i32 (i32*, i8*, ...) @fprintf(i32* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0), i8* %4)
%22 = call i32 @check_io(i32* %0, i8* %1, i32 0)
%23 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @.str.8, i64 0, i64 0), i32 %12)
%24 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.9, i64 0, i64 0), i32 %12)
%25 = call i64 @get_line(i8* %4, i32 80, i32 70)
%26 = icmp slt i64 %25, 1
br i1 %26, label %27, label %31
27: ; preds = %20, %27
%28 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.10, i64 0, i64 0))
%29 = call i64 @get_line(i8* %4, i32 80, i32 70)
%30 = icmp slt i64 %29, 1
br i1 %30, label %27, label %31
31: ; preds = %27, %20
%32 = call i32 (i32*, i8*, ...) @fprintf(i32* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i8* %4)
%33 = call i32 @check_io(i32* %0, i8* %1, i32 0)
%34 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @.str.12, i64 0, i64 0), i32 %12)
%35 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.31, i64 0, i64 0))
%36 = call i32 @output_till_dot(i32* %0, i8* %1, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0))
%37 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @.str.15, i64 0, i64 0), i32 %12)
%38 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([61 x i8], [61 x i8]* @str.32, i64 0, i64 0))
%39 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @str.33, i64 0, i64 0))
%40 = call i32 @output_till_dot(i32* %0, i8* %1, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0))
%41 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @.str.19, i64 0, i64 0), i32 %12)
%42 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @.str.20, i64 0, i64 0))
br label %43
43: ; preds = %52, %31
%44 = call i64 @get_line(i8* %4, i32 80, i32 70)
%45 = icmp slt i64 %44, 1
br i1 %45, label %52, label %46
46: ; preds = %43
%47 = call i64 @strncmp(i8* %4, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0), i32 7)
%48 = icmp eq i64 %47, 0
br i1 %48, label %55, label %49
49: ; preds = %46
%50 = call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0))
%51 = icmp eq i64 %50, 0
br i1 %51, label %55, label %52
52: ; preds = %43, %49
%53 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.34, i64 0, i64 0))
%54 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.35, i64 0, i64 0))
br label %43
55: ; preds = %46, %49
%56 = call i32 (i32*, i8*, ...) @fprintf(i32* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.25, i64 0, i64 0), i8* %4)
%57 = call i32 @check_io(i32* %0, i8* %1, i32 0)
%58 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([53 x i8], [53 x i8]* @.str.26, i64 0, i64 0), i32 %12)
br label %59
59: ; preds = %64, %55
%60 = call i64 @get_line(i8* %4, i32 2, i32 0)
%61 = icmp slt i64 %60, 1
br i1 %61, label %64, label %62
62: ; preds = %59
%63 = load i8, i8* %4
switch i8 %63, label %64 [
i8 121, label %66
i8 110, label %66
]
64: ; preds = %62, %59
%65 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.27, i64 0, i64 0))
br label %59
66: ; preds = %62, %62
%67 = call i32 (i32*, i8*, ...) @fprintf(i32* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.28, i64 0, i64 0), i8* %4)
%68 = call i32 @check_io(i32* %0, i8* %1, i32 0)
br label %69
69: ; preds = %76, %66
%70 = phi i8* [ getelementptr inbounds ([42 x i8], [42 x i8]* @.str.29, i64 0, i64 0), %66 ], [ getelementptr inbounds ([24 x i8], [24 x i8]* @.str.27, i64 0, i64 0), %76 ]
%71 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) %70)
%72 = call i64 @get_line(i8* %4, i32 2, i32 0)
%73 = icmp slt i64 %72, 1
br i1 %73, label %76, label %74
74: ; preds = %69
%75 = load i8, i8* %4
switch i8 %75, label %76 [
i8 121, label %8
i8 110, label %77
]
76: ; preds = %74, %69
br label %69
77: ; preds = %74
ret void
}