int x_do_comment(buf, bsize, lenp)
char *buf;
int bsize;
int *lenp;
{
  int i, j;
  int len = *lenp;
  if (len == 0)
    return 1;
  if (buf[0] == '#') {
    int saw_nl = 0;
    for (j = 0, i = 1; i < len; i++) {
      if (!saw_nl || buf[i] != '#')
        buf[j++] = buf[i];
      saw_nl = buf[i] == '\n';
    }
    *lenp = j;
    return 0;
  } else {
    int n = 1;
    for (i = 0; i < len; i++)
      if (buf[i] == '\n')
        n++;
    if (len + n >= bsize)
      return -1;
    for (i = len, j = len + n; --i >= 0;) {
      if (buf[i] == '\n')
        buf[--j] = '#';
      buf[--j] = buf[i];
    }
    buf[0] = '#';
    *lenp += n;
    return 1;
  }
}


x86 assembly (clang, -O0):
<x_do_comment>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jne    112e <x_do_comment+0x2e>
movl   $0x1,-0x4(%rbp)
jmp    12c7 <x_do_comment+0x1c7>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    11db <x_do_comment+0xdb>
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jge    11c6 <x_do_comment+0xc6>
cmpl   $0x0,-0x30(%rbp)
je     117e <x_do_comment+0x7e>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
je     119e <x_do_comment+0x9e>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1153 <x_do_comment+0x53>
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    12c7 <x_do_comment+0x1c7>
movl   $0x1,-0x34(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jge    1226 <x_do_comment+0x126>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    1213 <x_do_comment+0x113>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1218 <x_do_comment+0x118>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11e9 <x_do_comment+0xe9>
mov    -0x2c(%rbp),%eax
add    -0x34(%rbp),%eax
cmp    -0x14(%rbp),%eax
jl     1241 <x_do_comment+0x141>
movl   $0xffffffff,-0x4(%rbp)
jmp    12c7 <x_do_comment+0x1c7>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
cmp    $0x0,%eax
jl     12ae <x_do_comment+0x1ae>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    128b <x_do_comment+0x18b>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x23,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1250 <x_do_comment+0x150>
mov    -0x10(%rbp),%rax
movb   $0x23,(%rax)
mov    -0x34(%rbp),%ecx
mov    -0x20(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<x_do_comment>:
mov    (%rdx),%r8d
test   %r8,%r8
je     1169 <x_do_comment+0x69>
mov    (%rdi),%al
cmp    $0x23,%al
jne    116f <x_do_comment+0x6f>
xor    %r10d,%r10d
mov    $0x0,%eax
cmp    $0x2,%r8d
jl     1356 <x_do_comment+0x256>
xor    %ecx,%ecx
mov    $0x1,%eax
xor    %r10d,%r10d
jmp    1155 <x_do_comment+0x55>
nopl   0x0(%rax)
movslq %r10d,%rcx
add    $0x1,%r10d
mov    %r9b,(%rdi,%rcx,1)
movzbl (%rdi,%rax,1),%esi
xor    %ecx,%ecx
cmp    $0xa,%sil
sete   %cl
add    $0x1,%rax
cmp    %rax,%r8
je     1333 <x_do_comment+0x233>
movzbl (%rdi,%rax,1),%r9d
test   %ecx,%ecx
je     1130 <x_do_comment+0x30>
mov    $0x23,%sil
cmp    $0x23,%r9b
je     113f <x_do_comment+0x3f>
jmp    1130 <x_do_comment+0x30>
mov    $0x1,%eax
ret
test   %r8d,%r8d
jle    1337 <x_do_comment+0x237>
xor    %r10d,%r10d
cmp    $0xa,%al
sete   %r10b
add    $0x1,%r10d
cmp    $0x1,%r8d
je     12e5 <x_do_comment+0x1e5>
lea    -0x1(%r8),%r9
mov    $0x1,%eax
cmp    $0x8,%r9
jb     12d0 <x_do_comment+0x1d0>
mov    %r9,%rax
and    $0xfffffffffffffff8,%rax
movd   %r10d,%xmm0
lea    -0x8(%rax),%rcx
mov    %rcx,%r10
shr    $0x3,%r10
add    $0x1,%r10
test   %rcx,%rcx
je     135a <x_do_comment+0x25a>
mov    %r10,%r11
and    $0xfffffffffffffffe,%r11
pxor   %xmm1,%xmm1
mov    $0x1,%ecx
movdqa 0xe22(%rip),%xmm2
movdqa 0xe2a(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
movd   (%rdi,%rcx,1),%xmm5
movd   0x4(%rdi,%rcx,1),%xmm4
pcmpeqb %xmm2,%xmm5
punpcklbw %xmm5,%xmm5
punpcklwd %xmm5,%xmm5
pand   %xmm3,%xmm5
paddd  %xmm0,%xmm5
pcmpeqb %xmm2,%xmm4
punpcklbw %xmm4,%xmm4
punpcklwd %xmm4,%xmm4
pand   %xmm3,%xmm4
paddd  %xmm1,%xmm4
movd   0x8(%rdi,%rcx,1),%xmm0
movd   0xc(%rdi,%rcx,1),%xmm1
pcmpeqb %xmm2,%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
pand   %xmm3,%xmm0
paddd  %xmm5,%xmm0
pcmpeqb %xmm2,%xmm1
punpcklbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm1
pand   %xmm3,%xmm1
paddd  %xmm4,%xmm1
add    $0x10,%rcx
add    $0xfffffffffffffffe,%r11
jne    11f0 <x_do_comment+0xf0>
test   $0x1,%r10b
je     12aa <x_do_comment+0x1aa>
movd   (%rdi,%rcx,1),%xmm2
movd   0x4(%rdi,%rcx,1),%xmm3
movdqa 0xd86(%rip),%xmm4
pcmpeqb %xmm4,%xmm2
punpcklbw %xmm2,%xmm2
punpcklwd %xmm2,%xmm2
movdqa 0xd82(%rip),%xmm5
pand   %xmm5,%xmm2
paddd  %xmm2,%xmm0
pcmpeqb %xmm4,%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
pand   %xmm5,%xmm3
paddd  %xmm3,%xmm1
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%r10d
cmp    %rax,%r9
je     12e5 <x_do_comment+0x1e5>
or     $0x1,%rax
xchg   %ax,%ax
xor    %ecx,%ecx
cmpb   $0xa,(%rdi,%rax,1)
sete   %cl
add    %ecx,%r10d
add    $0x1,%rax
cmp    %rax,%r8
jne    12d0 <x_do_comment+0x1d0>
lea    (%r8,%r10,1),%ecx
mov    $0xffffffff,%eax
cmp    %esi,%ecx
jge    1359 <x_do_comment+0x259>
test   %r8d,%r8d
jle    134b <x_do_comment+0x24b>
add    $0x1,%r8
jmp    1315 <x_do_comment+0x215>
nopl   (%rax)
movslq %ecx,%rcx
mov    %al,-0x1(%rdi,%rcx,1)
add    $0xffffffffffffffff,%rcx
add    $0xffffffffffffffff,%r8
cmp    $0x1,%r8
jbe    134b <x_do_comment+0x24b>
lea    -0x2(%r8),%esi
movzbl (%rdi,%rsi,1),%eax
cmp    $0xa,%al
jne    1300 <x_do_comment+0x200>
movslq %ecx,%rcx
movb   $0x23,-0x1(%rdi,%rcx,1)
add    $0xffffffffffffffff,%rcx
movzbl (%rdi,%rsi,1),%eax
jmp    1300 <x_do_comment+0x200>
xor    %eax,%eax
jmp    1356 <x_do_comment+0x256>
add    $0x1,%r8d
mov    $0xffffffff,%eax
mov    $0x1,%r10d
cmp    %esi,%r8d
jge    1359 <x_do_comment+0x259>
movb   $0x23,(%rdi)
add    (%rdx),%r10d
mov    $0x1,%eax
mov    %r10d,(%rdx)
ret
pxor   %xmm1,%xmm1
mov    $0x1,%ecx
test   $0x1,%r10b
jne    1267 <x_do_comment+0x167>
jmp    12aa <x_do_comment+0x1aa>

LLVM IR (-O0):
define i32 @x_do_comment(i8* %0, i32 %1, i32* %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
store i8* %0, i8** %5
store i32 %1, i32* %6
store i32* %2, i32** %7
%13 = load i32*, i32** %7
%14 = load i32, i32* %13
store i32 %14, i32* %10
%15 = load i32, i32* %10
%16 = icmp eq i32 %15, 0
br i1 %16, label %17, label %18
17: ; preds = %3
store i32 1, i32* %4
br label %134
18: ; preds = %3
%19 = load i8*, i8** %5
%20 = getelementptr inbounds i8, i8* %19, i64 0
%21 = load i8, i8* %20
%22 = sext i8 %21 to i32
%23 = icmp eq i32 %22, 35
br i1 %23, label %24, label %66
24: ; preds = %18
store i32 0, i32* %11
store i32 0, i32* %9
store i32 1, i32* %8
br label %25
25: ; preds = %60, %24
%26 = load i32, i32* %8
%27 = load i32, i32* %10
%28 = icmp slt i32 %26, %27
br i1 %28, label %29, label %63
29: ; preds = %25
%30 = load i32, i32* %11
%31 = icmp ne i32 %30, 0
br i1 %31, label %32, label %40
32: ; preds = %29
%33 = load i8*, i8** %5
%34 = load i32, i32* %8
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds i8, i8* %33, i64 %35
%37 = load i8, i8* %36
%38 = sext i8 %37 to i32
%39 = icmp ne i32 %38, 35
br i1 %39, label %40, label %51
40: ; preds = %32, %29
%41 = load i8*, i8** %5
%42 = load i32, i32* %8
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i8, i8* %41, i64 %43
%45 = load i8, i8* %44
%46 = load i8*, i8** %5
%47 = load i32, i32* %9
%48 = add nsw i32 %47, 1
store i32 %48, i32* %9
%49 = sext i32 %47 to i64
%50 = getelementptr inbounds i8, i8* %46, i64 %49
store i8 %45, i8* %50
br label %51
51: ; preds = %40, %32
%52 = load i8*, i8** %5
%53 = load i32, i32* %8
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i8, i8* %52, i64 %54
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
%58 = icmp eq i32 %57, 10
%59 = zext i1 %58 to i32
store i32 %59, i32* %11
br label %60
60: ; preds = %51
%61 = load i32, i32* %8
%62 = add nsw i32 %61, 1
store i32 %62, i32* %8
br label %25
63: ; preds = %25
%64 = load i32, i32* %9
%65 = load i32*, i32** %7
store i32 %64, i32* %65
store i32 0, i32* %4
br label %134
66: ; preds = %18
store i32 1, i32* %12
store i32 0, i32* %8
br label %67
67: ; preds = %83, %66
%68 = load i32, i32* %8
%69 = load i32, i32* %10
%70 = icmp slt i32 %68, %69
br i1 %70, label %71, label %86
71: ; preds = %67
%72 = load i8*, i8** %5
%73 = load i32, i32* %8
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds i8, i8* %72, i64 %74
%76 = load i8, i8* %75
%77 = sext i8 %76 to i32
%78 = icmp eq i32 %77, 10
br i1 %78, label %79, label %82
79: ; preds = %71
%80 = load i32, i32* %12
%81 = add nsw i32 %80, 1
store i32 %81, i32* %12
br label %82
82: ; preds = %79, %71
br label %83
83: ; preds = %82
%84 = load i32, i32* %8
%85 = add nsw i32 %84, 1
store i32 %85, i32* %8
br label %67
86: ; preds = %67
%87 = load i32, i32* %10
%88 = load i32, i32* %12
%89 = add nsw i32 %87, %88
%90 = load i32, i32* %6
%91 = icmp sge i32 %89, %90
br i1 %91, label %92, label %93
92: ; preds = %86
store i32 -1, i32* %4
br label %134
93: ; preds = %86
%94 = load i32, i32* %10
store i32 %94, i32* %8
%95 = load i32, i32* %10
%96 = load i32, i32* %12
%97 = add nsw i32 %95, %96
store i32 %97, i32* %9
br label %98
98: ; preds = %116, %93
%99 = load i32, i32* %8
%100 = add nsw i32 %99, -1
store i32 %100, i32* %8
%101 = icmp sge i32 %100, 0
br i1 %101, label %102, label %127
102: ; preds = %98
%103 = load i8*, i8** %5
%104 = load i32, i32* %8
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds i8, i8* %103, i64 %105
%107 = load i8, i8* %106
%108 = sext i8 %107 to i32
%109 = icmp eq i32 %108, 10
br i1 %109, label %110, label %116
110: ; preds = %102
%111 = load i8*, i8** %5
%112 = load i32, i32* %9
%113 = add nsw i32 %112, -1
store i32 %113, i32* %9
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds i8, i8* %111, i64 %114
store i8 35, i8* %115
br label %116
116: ; preds = %110, %102
%117 = load i8*, i8** %5
%118 = load i32, i32* %8
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds i8, i8* %117, i64 %119
%121 = load i8, i8* %120
%122 = load i8*, i8** %5
%123 = load i32, i32* %9
%124 = add nsw i32 %123, -1
store i32 %124, i32* %9
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds i8, i8* %122, i64 %125
store i8 %121, i8* %126
br label %98
127: ; preds = %98
%128 = load i8*, i8** %5
%129 = getelementptr inbounds i8, i8* %128, i64 0
store i8 35, i8* %129
%130 = load i32, i32* %12
%131 = load i32*, i32** %7
%132 = load i32, i32* %131
%133 = add nsw i32 %132, %130
store i32 %133, i32* %131
store i32 1, i32* %4
br label %134
134: ; preds = %127, %92, %63, %17
%135 = load i32, i32* %4
ret i32 %135
}

LLVM IR (-O2):
define i32 @x_do_comment(i8* nocapture %0, i32 %1, i32* nocapture %2) {
%4 = load i32, i32* %2
%5 = icmp eq i32 %4, 0
br i1 %5, label %168, label %6
6: ; preds = %3
%7 = load i8, i8* %0
%8 = icmp eq i8 %7, 35
br i1 %8, label %95, label %9
9: ; preds = %6
%10 = icmp sgt i32 %4, 0
br i1 %10, label %11, label %135
11: ; preds = %9
%12 = zext i32 %4 to i64
%13 = icmp eq i8 %7, 10
%14 = select i1 %13, i32 2, i32 1
%15 = icmp eq i32 %4, 1
br i1 %15, label %131, label %16
16: ; preds = %11
%17 = add nsw i64 %12, -1
%18 = icmp ult i64 %17, 8
br i1 %18, label %92, label %19
19: ; preds = %16
%20 = and i64 %17, -8
%21 = or i64 %20, 1
%22 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %14, i64 0
%23 = add nsw i64 %20, -8
%24 = lshr exact i64 %23, 3
%25 = add nuw nsw i64 %24, 1
%26 = and i64 %25, 1
%27 = icmp eq i64 %23, 0
br i1 %27, label %66, label %28
28: ; preds = %19
%29 = and i64 %25, 4611686018427387902
br label %30
30: ; preds = %30, %28
%31 = phi i64 [ 0, %28 ], [ %61, %30 ]
%32 = phi <4 x i32> [ %22, %28 ], [ %59, %30 ]
%33 = phi <4 x i32> [ zeroinitializer, %28 ], [ %60, %30 ]
%34 = phi i64 [ 0, %28 ], [ %62, %30 ]
%35 = or i64 %31, 1
%36 = getelementptr inbounds i8, i8* %0, i64 %35
%37 = bitcast i8* %36 to <4 x i8>*
%38 = load <4 x i8>, <4 x i8>* %37
%39 = getelementptr inbounds i8, i8* %36, i64 4
%40 = bitcast i8* %39 to <4 x i8>*
%41 = load <4 x i8>, <4 x i8>* %40
%42 = icmp eq <4 x i8> %38, <i8 10, i8 10, i8 10, i8 10>
%43 = icmp eq <4 x i8> %41, <i8 10, i8 10, i8 10, i8 10>
%44 = zext <4 x i1> %42 to <4 x i32>
%45 = zext <4 x i1> %43 to <4 x i32>
%46 = add <4 x i32> %32, %44
%47 = add <4 x i32> %33, %45
%48 = or i64 %31, 9
%49 = getelementptr inbounds i8, i8* %0, i64 %48
%50 = bitcast i8* %49 to <4 x i8>*
%51 = load <4 x i8>, <4 x i8>* %50
%52 = getelementptr inbounds i8, i8* %49, i64 4
%53 = bitcast i8* %52 to <4 x i8>*
%54 = load <4 x i8>, <4 x i8>* %53
%55 = icmp eq <4 x i8> %51, <i8 10, i8 10, i8 10, i8 10>
%56 = icmp eq <4 x i8> %54, <i8 10, i8 10, i8 10, i8 10>
%57 = zext <4 x i1> %55 to <4 x i32>
%58 = zext <4 x i1> %56 to <4 x i32>
%59 = add <4 x i32> %46, %57
%60 = add <4 x i32> %47, %58
%61 = add nuw i64 %31, 16
%62 = add i64 %34, 2
%63 = icmp eq i64 %62, %29
br i1 %63, label %64, label %30
64: ; preds = %30
%65 = or i64 %61, 1
br label %66
66: ; preds = %64, %19
%67 = phi <4 x i32> [ undef, %19 ], [ %59, %64 ]
%68 = phi <4 x i32> [ undef, %19 ], [ %60, %64 ]
%69 = phi i64 [ 1, %19 ], [ %65, %64 ]
%70 = phi <4 x i32> [ %22, %19 ], [ %59, %64 ]
%71 = phi <4 x i32> [ zeroinitializer, %19 ], [ %60, %64 ]
%72 = icmp eq i64 %26, 0
br i1 %72, label %86, label %73
73: ; preds = %66
%74 = getelementptr inbounds i8, i8* %0, i64 %69
%75 = bitcast i8* %74 to <4 x i8>*
%76 = load <4 x i8>, <4 x i8>* %75
%77 = getelementptr inbounds i8, i8* %74, i64 4
%78 = bitcast i8* %77 to <4 x i8>*
%79 = load <4 x i8>, <4 x i8>* %78
%80 = icmp eq <4 x i8> %76, <i8 10, i8 10, i8 10, i8 10>
%81 = icmp eq <4 x i8> %79, <i8 10, i8 10, i8 10, i8 10>
%82 = zext <4 x i1> %80 to <4 x i32>
%83 = zext <4 x i1> %81 to <4 x i32>
%84 = add <4 x i32> %70, %82
%85 = add <4 x i32> %71, %83
br label %86
86: ; preds = %66, %73
%87 = phi <4 x i32> [ %67, %66 ], [ %84, %73 ]
%88 = phi <4 x i32> [ %68, %66 ], [ %85, %73 ]
%89 = add <4 x i32> %88, %87
%90 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %89)
%91 = icmp eq i64 %17, %20
br i1 %91, label %131, label %92
92: ; preds = %16, %86
%93 = phi i64 [ 1, %16 ], [ %21, %86 ]
%94 = phi i32 [ %14, %16 ], [ %90, %86 ]
br label %121
95: ; preds = %6
%96 = icmp sgt i32 %4, 1
br i1 %96, label %97, label %165
97: ; preds = %95
%98 = zext i32 %4 to i64
br label %99
99: ; preds = %97, %114
%100 = phi i64 [ 1, %97 ], [ %119, %114 ]
%101 = phi i32 [ 0, %97 ], [ %118, %114 ]
%102 = phi i32 [ 0, %97 ], [ %116, %114 ]
%103 = icmp ne i32 %101, 0
%104 = getelementptr inbounds i8, i8* %0, i64 %100
%105 = load i8, i8* %104
%106 = icmp eq i8 %105, 35
%107 = select i1 %103, i1 %106, i1 false
br i1 %107, label %114, label %108
108: ; preds = %99
%109 = getelementptr inbounds i8, i8* %0, i64 %100
%110 = add nsw i32 %102, 1
%111 = sext i32 %102 to i64
%112 = getelementptr inbounds i8, i8* %0, i64 %111
store i8 %105, i8* %112
%113 = load i8, i8* %109
br label %114
114: ; preds = %99, %108
%115 = phi i8 [ %113, %108 ], [ 35, %99 ]
%116 = phi i32 [ %110, %108 ], [ %102, %99 ]
%117 = icmp eq i8 %115, 10
%118 = zext i1 %117 to i32
%119 = add nuw nsw i64 %100, 1
%120 = icmp eq i64 %119, %98
br i1 %120, label %165, label %99
121: ; preds = %92, %121
%122 = phi i64 [ %129, %121 ], [ %93, %92 ]
%123 = phi i32 [ %128, %121 ], [ %94, %92 ]
%124 = getelementptr inbounds i8, i8* %0, i64 %122
%125 = load i8, i8* %124
%126 = icmp eq i8 %125, 10
%127 = zext i1 %126 to i32
%128 = add nuw nsw i32 %123, %127
%129 = add nuw nsw i64 %122, 1
%130 = icmp eq i64 %129, %12
br i1 %130, label %131, label %121
131: ; preds = %121, %86, %11
%132 = phi i32 [ %14, %11 ], [ %90, %86 ], [ %128, %121 ]
%133 = add nsw i32 %132, %4
%134 = icmp slt i32 %133, %1
br i1 %134, label %138, label %168
135: ; preds = %9
%136 = add nsw i32 %4, 1
%137 = icmp slt i32 %136, %1
br i1 %137, label %161, label %168
138: ; preds = %131
br i1 %10, label %139, label %161
139: ; preds = %138
%140 = zext i32 %4 to i64
br label %141
141: ; preds = %139, %154
%142 = phi i64 [ %140, %139 ], [ %144, %154 ]
%143 = phi i32 [ %133, %139 ], [ %157, %154 ]
%144 = add nsw i64 %142, -1
%145 = and i64 %144, 4294967295
%146 = getelementptr inbounds i8, i8* %0, i64 %145
%147 = load i8, i8* %146
%148 = icmp eq i8 %147, 10
br i1 %148, label %149, label %154
149: ; preds = %141
%150 = add nsw i32 %143, -1
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds i8, i8* %0, i64 %151
store i8 35, i8* %152
%153 = load i8, i8* %146
br label %154
154: ; preds = %149, %141
%155 = phi i8 [ %153, %149 ], [ %147, %141 ]
%156 = phi i32 [ %150, %149 ], [ %143, %141 ]
%157 = add nsw i32 %156, -1
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds i8, i8* %0, i64 %158
store i8 %155, i8* %159
%160 = icmp ugt i64 %142, 1
br i1 %160, label %141, label %161
161: ; preds = %154, %135, %138
%162 = phi i32 [ %132, %138 ], [ 1, %135 ], [ %132, %154 ]
store i8 35, i8* %0
%163 = load i32, i32* %2
%164 = add nsw i32 %163, %162
br label %165
165: ; preds = %114, %95, %161
%166 = phi i32 [ %164, %161 ], [ 0, %95 ], [ %116, %114 ]
%167 = phi i32 [ 1, %161 ], [ 0, %95 ], [ 0, %114 ]
store i32 %166, i32* %2
br label %168
168: ; preds = %165, %135, %131, %3
%169 = phi i32 [ 1, %3 ], [ -1, %131 ], [ -1, %135 ], [ %167, %165 ]
ret i32 %169
}