#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*/ fprintf(int /*<<< orphan*/, char *, char const *);
int /*<<< orphan*/ free(short *);
int /*<<< orphan*/ nrerror(char *);
scalar_t__ space(int);
int /*<<< orphan*/ stderr;
scalar_t__ strlen(char const *);
short *make_pair_table_pk(const char *structure) {
  short i, j, hx, hx2;
  short length;
  short *stack;
  short *stack2;
  short *table;
  length = (short)strlen(structure);
  stack = (short *)space(sizeof(short) * (length + 1));
  stack2 = (short *)space(sizeof(short) * (length + 1));
  table = (short *)space(sizeof(short) * (length + 2));
  table[0] = length;
  for (hx = 0, hx2 = 0, i = 1; i <= length; i++) {
    switch (structure[i - 1]) {
    case '(':
      stack[hx++] = i;
      break;
    case ')':
      j = stack[--hx];
      if (hx < 0) {
        fprintf(stderr, "%s\n", structure);
        nrerror("unbalanced '()' brackets in make_pair_table_pk");
      }
      table[i] = j;
      table[j] = i;
      break;
    case '[':
      stack2[hx2++] = i;
      break;
    case ']':
      j = stack2[--hx2];
      if (hx2 < 0) {
        fprintf(stderr, "%s\n", structure);
        nrerror("unbalanced '[]' brackets in make_pair_table_pk");
      }
      table[i] = j;
      table[j] = i;
      break;
    default:
      table[i] = 0;
      break;
    }
  }
  if (hx != 0) {
    fprintf(stderr, "%s\n", structure);
    nrerror("unbalanced '()' brackets in make_pair_table_pk");
  } else if (hx2 != 0) {
    fprintf(stderr, "%s\n", structure);
    nrerror("unbalanced '[]' brackets in make_pair_table_pk");
  }
  free(stack);
  free(stack2);
  return (table);
}


x86 assembly (clang, -O0):
<make_pair_table_pk>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
call   1060 <strlen@plt>
mov    %ax,-0x12(%rbp)
movswl -0x12(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x1,%rax
mov    %eax,%edi
call   1040 <space@plt>
mov    %rax,-0x20(%rbp)
movswl -0x12(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x1,%rax
mov    %eax,%edi
call   1040 <space@plt>
mov    %rax,-0x28(%rbp)
movswl -0x12(%rbp),%eax
add    $0x2,%eax
cltq
shl    $0x1,%rax
mov    %eax,%edi
call   1040 <space@plt>
mov    %rax,-0x30(%rbp)
mov    -0x12(%rbp),%cx
mov    -0x30(%rbp),%rax
mov    %cx,(%rax)
movw   $0x0,-0xe(%rbp)
movw   $0x0,-0x10(%rbp)
movw   $0x1,-0xa(%rbp)
movswl -0xa(%rbp),%eax
movswl -0x12(%rbp),%ecx
cmp    %ecx,%eax
jg     138b <make_pair_table_pk+0x23b>
mov    -0x8(%rbp),%rax
movswl -0xa(%rbp),%ecx
add    $0xffffffff,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x34(%rbp)
sub    $0x28,%eax
je     1234 <make_pair_table_pk+0xe4>
jmp    1201 <make_pair_table_pk+0xb1>
mov    -0x34(%rbp),%eax
sub    $0x29,%eax
je     1258 <make_pair_table_pk+0x108>
jmp    1212 <make_pair_table_pk+0xc2>
mov    -0x34(%rbp),%eax
sub    $0x5b,%eax
je     12cd <make_pair_table_pk+0x17d>
jmp    1223 <make_pair_table_pk+0xd3>
mov    -0x34(%rbp),%eax
sub    $0x5d,%eax
je     12f1 <make_pair_table_pk+0x1a1>
jmp    1366 <make_pair_table_pk+0x216>
mov    -0xa(%rbp),%dx
mov    -0x20(%rbp),%rax
mov    -0xe(%rbp),%cx
mov    %cx,%si
add    $0x1,%si
mov    %si,-0xe(%rbp)
movswq %cx,%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1375 <make_pair_table_pk+0x225>
mov    -0x20(%rbp),%rax
mov    -0xe(%rbp),%cx
add    $0xffff,%cx
mov    %cx,-0xe(%rbp)
movswq %cx,%rcx
mov    (%rax,%rcx,2),%ax
mov    %ax,-0xc(%rbp)
movswl -0xe(%rbp),%eax
cmp    $0x0,%eax
jge    12a6 <make_pair_table_pk+0x156>
mov    0x2d58(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xd6b(%rip),%rsi
call   1070 <fprintf@plt>
lea    0xd63(%rip),%rdi
call   1050 <nrerror@plt>
mov    -0xc(%rbp),%dx
mov    -0x30(%rbp),%rax
movswq -0xa(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0xa(%rbp),%dx
mov    -0x30(%rbp),%rax
movswq -0xc(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1375 <make_pair_table_pk+0x225>
mov    -0xa(%rbp),%dx
mov    -0x28(%rbp),%rax
mov    -0x10(%rbp),%cx
mov    %cx,%si
add    $0x1,%si
mov    %si,-0x10(%rbp)
movswq %cx,%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1375 <make_pair_table_pk+0x225>
mov    -0x28(%rbp),%rax
mov    -0x10(%rbp),%cx
add    $0xffff,%cx
mov    %cx,-0x10(%rbp)
movswq %cx,%rcx
mov    (%rax,%rcx,2),%ax
mov    %ax,-0xc(%rbp)
movswl -0x10(%rbp),%eax
cmp    $0x0,%eax
jge    133f <make_pair_table_pk+0x1ef>
mov    0x2cbf(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xcd2(%rip),%rsi
call   1070 <fprintf@plt>
lea    0xcf9(%rip),%rdi
call   1050 <nrerror@plt>
mov    -0xc(%rbp),%dx
mov    -0x30(%rbp),%rax
movswq -0xa(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0xa(%rbp),%dx
mov    -0x30(%rbp),%rax
movswq -0xc(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1375 <make_pair_table_pk+0x225>
mov    -0x30(%rbp),%rax
movswq -0xa(%rbp),%rcx
movw   $0x0,(%rax,%rcx,2)
jmp    137a <make_pair_table_pk+0x22a>
mov    -0xa(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0xa(%rbp)
jmp    11ce <make_pair_table_pk+0x7e>
movswl -0xe(%rbp),%eax
cmp    $0x0,%eax
je     13c2 <make_pair_table_pk+0x272>
mov    0x2c41(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xc54(%rip),%rsi
call   1070 <fprintf@plt>
lea    0xc4c(%rip),%rdi
call   1050 <nrerror@plt>
jmp    13f9 <make_pair_table_pk+0x2a9>
movswl -0x10(%rbp),%eax
cmp    $0x0,%eax
je     13f4 <make_pair_table_pk+0x2a4>
mov    0x2c0a(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xc1d(%rip),%rsi
call   1070 <fprintf@plt>
lea    0xc44(%rip),%rdi
call   1050 <nrerror@plt>
jmp    13f9 <make_pair_table_pk+0x2a9>
mov    -0x20(%rbp),%rdi
call   1030 <free@plt>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
mov    -0x30(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<make_pair_table_pk>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rdi,%r14
call   1060 <strlen@plt>
mov    %rax,%r15
movswl %r15w,%ebx
lea    (%rbx,%rbx,1),%ebp
add    $0x2,%ebp
mov    %ebp,%edi
call   1040 <space@plt>
mov    %rax,%r13
mov    %ebp,%edi
call   1040 <space@plt>
mov    %rax,(%rsp)
lea    (%rbx,%rbx,1),%edi
add    $0x4,%edi
call   1040 <space@plt>
mov    %r15,%rsi
mov    %si,(%rax)
test   %si,%si
jle    1361 <make_pair_table_pk+0x211>
mov    %r14,%rdx
mov    $0x1,%bp
xor    %r14d,%r14d
lea    0xe51(%rip),%rcx
mov    %rcx,0x18(%rsp)
xor    %r15d,%r15d
mov    %rdx,0x8(%rsp)
mov    (%rsp),%r8
mov    %rax,0x10(%rsp)
mov    %rsi,0x20(%rsp)
jmp    11ec <make_pair_table_pk+0x9c>
movw   $0x0,(%rax,%r12,2)
nopw   0x0(%rax,%rax,1)
add    $0x1,%ebp
cmp    %si,%bp
jg     1325 <make_pair_table_pk+0x1d5>
movswq %bp,%r12
movsbl -0x1(%r12,%rdx,1),%ecx
cmp    $0x5a,%ecx
jg     1270 <make_pair_table_pk+0x120>
cmp    $0x28,%ecx
je     12f0 <make_pair_table_pk+0x1a0>
cmp    $0x29,%ecx
jne    11d0 <make_pair_table_pk+0x80>
add    $0xffffffff,%r14d
movswq %r14w,%rcx
mov    %r13,%rbx
movzwl 0x0(%r13,%rcx,2),%r13d
test   %r14w,%r14w
jns    1259 <make_pair_table_pk+0x109>
mov    0x2db9(%rip),%rax
mov    (%rax),%edi
lea    0xdd0(%rip),%rsi
mov    0x8(%rsp),%rdx
call   1070 <fprintf@plt>
lea    0xdc3(%rip),%rdi
call   1050 <nrerror@plt>
mov    0x20(%rsp),%rsi
mov    0x10(%rsp),%rax
mov    (%rsp),%r8
mov    0x8(%rsp),%rdx
movswq %r13w,%rcx
mov    %cx,(%rax,%r12,2)
mov    %bp,(%rax,%rcx,2)
mov    %rbx,%r13
jmp    11e0 <make_pair_table_pk+0x90>
xchg   %ax,%ax
cmp    $0x5b,%ecx
je     1310 <make_pair_table_pk+0x1c0>
cmp    $0x5d,%ecx
jne    11d0 <make_pair_table_pk+0x80>
add    $0xffffffff,%r15d
movswq %r15w,%rcx
movzwl (%r8,%rcx,2),%ebx
test   %r15w,%r15w
jns    12ce <make_pair_table_pk+0x17e>
mov    0x2d44(%rip),%rax
mov    (%rax),%edi
lea    0xd5b(%rip),%rsi
mov    0x8(%rsp),%rdx
call   1070 <fprintf@plt>
lea    0xd7d(%rip),%rdi
call   1050 <nrerror@plt>
mov    0x20(%rsp),%rsi
mov    0x10(%rsp),%rax
mov    (%rsp),%r8
mov    0x8(%rsp),%rdx
movswq %bx,%rcx
mov    %cx,(%rax,%r12,2)
mov    %r12w,(%rax,%rcx,2)
jmp    11e0 <make_pair_table_pk+0x90>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movswq %r14w,%rdi
lea    0x1(%r14),%ecx
mov    %bp,0x0(%r13,%rdi,2)
mov    %ecx,%r14d
jmp    11e0 <make_pair_table_pk+0x90>
cs nopw 0x0(%rax,%rax,1)
movswq %r15w,%rdi
lea    0x1(%r15),%ecx
mov    %bp,(%r8,%rdi,2)
mov    %ecx,%r15d
jmp    11e0 <make_pair_table_pk+0x90>
test   %r14w,%r14w
jne    133d <make_pair_table_pk+0x1ed>
lea    0xd01(%rip),%rcx
mov    %rcx,0x18(%rsp)
test   %r15w,%r15w
je     1361 <make_pair_table_pk+0x211>
mov    0x2c9c(%rip),%rax
mov    (%rax),%edi
lea    0xcb3(%rip),%rsi
call   1070 <fprintf@plt>
mov    0x18(%rsp),%rdi
call   1050 <nrerror@plt>
mov    0x10(%rsp),%rax
mov    %rax,%rbx
mov    %r13,%rdi
call   1030 <free@plt>
mov    (%rsp),%rdi
call   1030 <free@plt>
mov    %rbx,%rax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@stderr = global i32 0
@.str = [4 x i8] c"%s\0A\00"
@.str.1 = [47 x i8] c"unbalanced '()' brackets in make_pair_table_pk\00"
@.str.2 = [47 x i8] c"unbalanced '[]' brackets in make_pair_table_pk\00"
define i16* @make_pair_table_pk(i8* %0) {
%2 = alloca i8*
%3 = alloca i16
%4 = alloca i16
%5 = alloca i16
%6 = alloca i16
%7 = alloca i16
%8 = alloca i16*
%9 = alloca i16*
%10 = alloca i16*
store i8* %0, i8** %2
%11 = load i8*, i8** %2
%12 = call i64 @strlen(i8* %11)
%13 = trunc i64 %12 to i16
store i16 %13, i16* %7
%14 = load i16, i16* %7
%15 = sext i16 %14 to i32
%16 = add nsw i32 %15, 1
%17 = sext i32 %16 to i64
%18 = mul i64 2, %17
%19 = trunc i64 %18 to i32
%20 = call i64 @space(i32 %19)
%21 = inttoptr i64 %20 to i16*
store i16* %21, i16** %8
%22 = load i16, i16* %7
%23 = sext i16 %22 to i32
%24 = add nsw i32 %23, 1
%25 = sext i32 %24 to i64
%26 = mul i64 2, %25
%27 = trunc i64 %26 to i32
%28 = call i64 @space(i32 %27)
%29 = inttoptr i64 %28 to i16*
store i16* %29, i16** %9
%30 = load i16, i16* %7
%31 = sext i16 %30 to i32
%32 = add nsw i32 %31, 2
%33 = sext i32 %32 to i64
%34 = mul i64 2, %33
%35 = trunc i64 %34 to i32
%36 = call i64 @space(i32 %35)
%37 = inttoptr i64 %36 to i16*
store i16* %37, i16** %10
%38 = load i16, i16* %7
%39 = load i16*, i16** %10
%40 = getelementptr inbounds i16, i16* %39, i64 0
store i16 %38, i16* %40
store i16 0, i16* %5
store i16 0, i16* %6
store i16 1, i16* %3
br label %41
41: ; preds = %128, %1
%42 = load i16, i16* %3
%43 = sext i16 %42 to i32
%44 = load i16, i16* %7
%45 = sext i16 %44 to i32
%46 = icmp sle i32 %43, %45
br i1 %46, label %47, label %131
47: ; preds = %41
%48 = load i8*, i8** %2
%49 = load i16, i16* %3
%50 = sext i16 %49 to i32
%51 = sub nsw i32 %50, 1
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %48, i64 %52
%54 = load i8, i8* %53
%55 = sext i8 %54 to i32
switch i32 %55, label %122 [
i32 40, label %56
i32 41, label %63
i32 91, label %89
i32 93, label %96
]
56: ; preds = %47
%57 = load i16, i16* %3
%58 = load i16*, i16** %8
%59 = load i16, i16* %5
%60 = add i16 %59, 1
store i16 %60, i16* %5
%61 = sext i16 %59 to i64
%62 = getelementptr inbounds i16, i16* %58, i64 %61
store i16 %57, i16* %62
br label %127
63: ; preds = %47
%64 = load i16*, i16** %8
%65 = load i16, i16* %5
%66 = add i16 %65, -1
store i16 %66, i16* %5
%67 = sext i16 %66 to i64
%68 = getelementptr inbounds i16, i16* %64, i64 %67
%69 = load i16, i16* %68
store i16 %69, i16* %4
%70 = load i16, i16* %5
%71 = sext i16 %70 to i32
%72 = icmp slt i32 %71, 0
br i1 %72, label %73, label %78
73: ; preds = %63
%74 = load i32, i32* @stderr
%75 = load i8*, i8** %2
%76 = call i32 @fprintf(i32 %74, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %75)
%77 = call i32 @nrerror(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
br label %78
78: ; preds = %73, %63
%79 = load i16, i16* %4
%80 = load i16*, i16** %10
%81 = load i16, i16* %3
%82 = sext i16 %81 to i64
%83 = getelementptr inbounds i16, i16* %80, i64 %82
store i16 %79, i16* %83
%84 = load i16, i16* %3
%85 = load i16*, i16** %10
%86 = load i16, i16* %4
%87 = sext i16 %86 to i64
%88 = getelementptr inbounds i16, i16* %85, i64 %87
store i16 %84, i16* %88
br label %127
89: ; preds = %47
%90 = load i16, i16* %3
%91 = load i16*, i16** %9
%92 = load i16, i16* %6
%93 = add i16 %92, 1
store i16 %93, i16* %6
%94 = sext i16 %92 to i64
%95 = getelementptr inbounds i16, i16* %91, i64 %94
store i16 %90, i16* %95
br label %127
96: ; preds = %47
%97 = load i16*, i16** %9
%98 = load i16, i16* %6
%99 = add i16 %98, -1
store i16 %99, i16* %6
%100 = sext i16 %99 to i64
%101 = getelementptr inbounds i16, i16* %97, i64 %100
%102 = load i16, i16* %101
store i16 %102, i16* %4
%103 = load i16, i16* %6
%104 = sext i16 %103 to i32
%105 = icmp slt i32 %104, 0
br i1 %105, label %106, label %111
106: ; preds = %96
%107 = load i32, i32* @stderr
%108 = load i8*, i8** %2
%109 = call i32 @fprintf(i32 %107, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %108)
%110 = call i32 @nrerror(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0))
br label %111
111: ; preds = %106, %96
%112 = load i16, i16* %4
%113 = load i16*, i16** %10
%114 = load i16, i16* %3
%115 = sext i16 %114 to i64
%116 = getelementptr inbounds i16, i16* %113, i64 %115
store i16 %112, i16* %116
%117 = load i16, i16* %3
%118 = load i16*, i16** %10
%119 = load i16, i16* %4
%120 = sext i16 %119 to i64
%121 = getelementptr inbounds i16, i16* %118, i64 %120
store i16 %117, i16* %121
br label %127
122: ; preds = %47
%123 = load i16*, i16** %10
%124 = load i16, i16* %3
%125 = sext i16 %124 to i64
%126 = getelementptr inbounds i16, i16* %123, i64 %125
store i16 0, i16* %126
br label %127
127: ; preds = %122, %111, %89, %78, %56
br label %128
128: ; preds = %127
%129 = load i16, i16* %3
%130 = add i16 %129, 1
store i16 %130, i16* %3
br label %41
131: ; preds = %41
%132 = load i16, i16* %5
%133 = sext i16 %132 to i32
%134 = icmp ne i32 %133, 0
br i1 %134, label %135, label %140
135: ; preds = %131
%136 = load i32, i32* @stderr
%137 = load i8*, i8** %2
%138 = call i32 @fprintf(i32 %136, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %137)
%139 = call i32 @nrerror(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
br label %150
140: ; preds = %131
%141 = load i16, i16* %6
%142 = sext i16 %141 to i32
%143 = icmp ne i32 %142, 0
br i1 %143, label %144, label %149
144: ; preds = %140
%145 = load i32, i32* @stderr
%146 = load i8*, i8** %2
%147 = call i32 @fprintf(i32 %145, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %146)
%148 = call i32 @nrerror(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0))
br label %149
149: ; preds = %144, %140
br label %150
150: ; preds = %149, %135
%151 = load i16*, i16** %8
%152 = call i32 @free(i16* %151)
%153 = load i16*, i16** %9
%154 = call i32 @free(i16* %153)
%155 = load i16*, i16** %10
ret i16* %155
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [4 x i8] c"%s\0A\00"
@.str.1 = [47 x i8] c"unbalanced '()' brackets in make_pair_table_pk\00"
@.str.2 = [47 x i8] c"unbalanced '[]' brackets in make_pair_table_pk\00"
define i16* @make_pair_table_pk(i8* %0) {
%2 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%3 = trunc i64 %2 to i16
%4 = sext i16 %3 to i32
%5 = shl nsw i32 %4, 1
%6 = add nsw i32 %5, 2
%7 = tail call i64 @space(i32 %6)
%8 = inttoptr i64 %7 to i16*
%9 = tail call i64 @space(i32 %6)
%10 = inttoptr i64 %9 to i16*
%11 = add nsw i32 %5, 4
%12 = tail call i64 @space(i32 %11)
%13 = inttoptr i64 %12 to i16*
store i16 %3, i16* %13
%14 = icmp slt i16 %3, 1
br i1 %14, label %76, label %15
15: ; preds = %1, %62
%16 = phi i16 [ %65, %62 ], [ 1, %1 ]
%17 = phi i16 [ %64, %62 ], [ 0, %1 ]
%18 = phi i16 [ %63, %62 ], [ 0, %1 ]
%19 = sext i16 %16 to i64
%20 = add nsw i64 %19, -1
%21 = getelementptr inbounds i8, i8* %0, i64 %20
%22 = load i8, i8* %21
%23 = sext i8 %22 to i32
switch i32 %23, label %60 [
i32 40, label %24
i32 41, label %28
i32 91, label %42
i32 93, label %46
]
24: ; preds = %15
%25 = add i16 %17, 1
%26 = sext i16 %17 to i64
%27 = getelementptr inbounds i16, i16* %8, i64 %26
store i16 %16, i16* %27
br label %62
28: ; preds = %15
%29 = add i16 %17, -1
%30 = sext i16 %29 to i64
%31 = getelementptr inbounds i16, i16* %8, i64 %30
%32 = load i16, i16* %31
%33 = icmp slt i16 %29, 0
br i1 %33, label %34, label %38
34: ; preds = %28
%35 = load i32, i32* @stderr
%36 = tail call i32 @fprintf(i32 %35, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %0)
%37 = tail call i32 @nrerror(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
br label %38
38: ; preds = %34, %28
%39 = getelementptr inbounds i16, i16* %13, i64 %19
store i16 %32, i16* %39
%40 = sext i16 %32 to i64
%41 = getelementptr inbounds i16, i16* %13, i64 %40
store i16 %16, i16* %41
br label %62
42: ; preds = %15
%43 = add i16 %18, 1
%44 = sext i16 %18 to i64
%45 = getelementptr inbounds i16, i16* %10, i64 %44
store i16 %16, i16* %45
br label %62
46: ; preds = %15
%47 = add i16 %18, -1
%48 = sext i16 %47 to i64
%49 = getelementptr inbounds i16, i16* %10, i64 %48
%50 = load i16, i16* %49
%51 = icmp slt i16 %47, 0
br i1 %51, label %52, label %56
52: ; preds = %46
%53 = load i32, i32* @stderr
%54 = tail call i32 @fprintf(i32 %53, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %0)
%55 = tail call i32 @nrerror(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0))
br label %56
56: ; preds = %52, %46
%57 = getelementptr inbounds i16, i16* %13, i64 %19
store i16 %50, i16* %57
%58 = sext i16 %50 to i64
%59 = getelementptr inbounds i16, i16* %13, i64 %58
store i16 %16, i16* %59
br label %62
60: ; preds = %15
%61 = getelementptr inbounds i16, i16* %13, i64 %19
store i16 0, i16* %61
br label %62
62: ; preds = %24, %38, %42, %56, %60
%63 = phi i16 [ %18, %60 ], [ %47, %56 ], [ %43, %42 ], [ %18, %38 ], [ %18, %24 ]
%64 = phi i16 [ %17, %60 ], [ %17, %56 ], [ %17, %42 ], [ %29, %38 ], [ %25, %24 ]
%65 = add i16 %16, 1
%66 = icmp sgt i16 %65, %3
br i1 %66, label %67, label %15
67: ; preds = %62
%68 = icmp eq i16 %64, 0
br i1 %68, label %69, label %71
69: ; preds = %67
%70 = icmp eq i16 %63, 0
br i1 %70, label %76, label %71
71: ; preds = %69, %67
%72 = phi i8* [ getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0), %67 ], [ getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0), %69 ]
%73 = load i32, i32* @stderr
%74 = tail call i32 @fprintf(i32 %73, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %0)
%75 = tail call i32 @nrerror(i8* %72)
br label %76
76: ; preds = %71, %1, %69
%77 = tail call i32 @free(i16* %8)
%78 = tail call i32 @free(i16* %10)
ret i16* %13
}