int bcd_add(char *s, char *t, int n, char *u) {
  char sc[n], tc[n];
  int is;
  for (is = 0; is < n; is++) {
    sc[is] = s[is];
  }
  int it;
  for (it = 0; it < n; it++) {
    tc[it] = t[it];
  }
  int maxd;
  if (sc[0] > tc[0]) {
    maxd = sc[0] - 48;
  } else if (tc[0] > sc[0]) {
    maxd = tc[0] - 48;
  } else {
    maxd = sc[0] - 48;
  }
  int i;
  for (i = 1; i <= (maxd - (sc[0] - 48) + 1); i++) {
    sc[(sc[0] - 48) + i] = '0';
  }
  int j;
  for (j = 1; j <= (maxd - (tc[0] - 48) + 1); j++) {
    tc[(tc[0] - 48) + j] = '0';
  }
  int k;
  for (k = 0; k < n; k++) {
    u[k] = '0';
  }
  u[0] = '1';
  int l;
  for (l = 1; l <= maxd + 1; l++) {
    if (((sc[l] - 48) + (tc[l] - 48)) >= 10) {
      u[l] = (u[l] - 48) + (sc[l] - 48) + (tc[l] - 48) - 10 + 48;
      u[l + 1] = '1';
    } else {
      u[l] = (u[l] - 48) + (sc[l] - 48) + (tc[l] - 48) + 48;
    }
  }
  if ((u[maxd + 1] - 48) == 0) {
    u[0] = maxd + 48;
  } else {
    u[0] = (maxd + 1) + 48;
  }
  return 0;
}


x86 assembly (clang, -O0):
<bcd_add>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x14(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x28(%rbp)
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x68(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x30(%rbp)
mov    -0x14(%rbp),%eax
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x60(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1193 <bcd_add+0x93>
mov    -0x68(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq -0x3c(%rbp),%rdx
mov    (%rcx,%rdx,1),%dl
movslq -0x3c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1163 <bcd_add+0x63>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11ca <bcd_add+0xca>
mov    -0x60(%rbp),%rax
mov    -0x10(%rbp),%rcx
movslq -0x40(%rbp),%rdx
mov    (%rcx,%rdx,1),%dl
movslq -0x40(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    119a <bcd_add+0x9a>
mov    -0x60(%rbp),%rcx
mov    -0x68(%rbp),%rax
movsbl (%rax),%eax
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jle    11f2 <bcd_add+0xf2>
mov    -0x68(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x44(%rbp)
jmp    122c <bcd_add+0x12c>
mov    -0x68(%rbp),%rcx
mov    -0x60(%rbp),%rax
movsbl (%rax),%eax
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jle    121a <bcd_add+0x11a>
mov    -0x60(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x44(%rbp)
jmp    1227 <bcd_add+0x127>
mov    -0x68(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x44(%rbp)
jmp    122c <bcd_add+0x12c>
movl   $0x1,-0x48(%rbp)
mov    -0x68(%rbp),%rdx
mov    -0x48(%rbp),%eax
mov    -0x44(%rbp),%ecx
movsbl (%rdx),%edx
sub    $0x30,%edx
sub    %edx,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     1272 <bcd_add+0x172>
mov    -0x68(%rbp),%rax
movsbl (%rax),%ecx
sub    $0x30,%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1233 <bcd_add+0x133>
movl   $0x1,-0x4c(%rbp)
mov    -0x60(%rbp),%rdx
mov    -0x4c(%rbp),%eax
mov    -0x44(%rbp),%ecx
movsbl (%rdx),%edx
sub    $0x30,%edx
sub    %edx,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     12b8 <bcd_add+0x1b8>
mov    -0x60(%rbp),%rax
movsbl (%rax),%ecx
sub    $0x30,%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1279 <bcd_add+0x179>
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12e5 <bcd_add+0x1e5>
mov    -0x20(%rbp),%rax
movslq -0x50(%rbp),%rcx
movb   $0x30,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    12bf <bcd_add+0x1bf>
mov    -0x20(%rbp),%rax
movb   $0x31,(%rax)
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     13db <bcd_add+0x2db>
mov    -0x60(%rbp),%rcx
mov    -0x68(%rbp),%rax
movslq -0x54(%rbp),%rdx
movsbl (%rax,%rdx,1),%eax
sub    $0x30,%eax
movslq -0x54(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
cmp    $0xa,%eax
jl     1387 <bcd_add+0x287>
mov    -0x60(%rbp),%rcx
mov    -0x68(%rbp),%rdx
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rsi
movsbl (%rax,%rsi,1),%eax
sub    $0x30,%eax
movslq -0x54(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
sub    $0x30,%edx
add    %edx,%eax
movslq -0x54(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
sub    $0xa,%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x31,(%rax,%rcx,1)
jmp    13c8 <bcd_add+0x2c8>
mov    -0x60(%rbp),%rcx
mov    -0x68(%rbp),%rdx
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rsi
movsbl (%rax,%rsi,1),%eax
sub    $0x30,%eax
movslq -0x54(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
sub    $0x30,%edx
add    %edx,%eax
movslq -0x54(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    13cd <bcd_add+0x2cd>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    12f3 <bcd_add+0x1f3>
mov    -0x20(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
cmp    $0x0,%eax
jne    140b <bcd_add+0x30b>
mov    -0x44(%rbp),%eax
add    $0x30,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
jmp    141c <bcd_add+0x31c>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
add    $0x30,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rsp
xor    %eax,%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bcd_add>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rcx,%r14
mov    %edx,%r13d
mov    %rsp,%rbx
lea    0xf(%r13),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rbx
mov    %rbx,%rsp
mov    %rsp,%r15
sub    %rax,%r15
mov    %r15,%rsp
mov    %edx,-0x2c(%rbp)
test   %edx,%edx
mov    %r13,-0x38(%rbp)
jle    1180 <bcd_add+0x60>
mov    %rsi,%r12
mov    %rdi,%rsi
mov    %rbx,%rdi
mov    %r13,%rdx
call   1040 <memcpy@plt>
mov    %r15,%rdi
mov    %r12,%rsi
mov    %r13,%rdx
call   1040 <memcpy@plt>
mov    (%r15),%al
jmp    1180 <bcd_add+0x60>
movsbl (%rbx),%ecx
cmp    %cl,%al
movzbl %al,%edx
mov    %ecx,%r12d
cmovg  %edx,%r12d
cmp    %dl,%cl
cmovg  %ecx,%r12d
movsbl %r12b,%r13d
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
add    %edx,%ecx
add    $0xffffffd1,%ecx
movslq %ecx,%rcx
movb   $0x30,(%rbx,%rcx,1)
movsbl (%rbx),%ecx
mov    %r13d,%esi
sub    %ecx,%esi
add    $0x1,%edx
cmp    %esi,%edx
jle    11a0 <bcd_add+0x80>
cmp    %al,%r12b
jl     11ed <bcd_add+0xcd>
movsbl %al,%ecx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
add    %eax,%ecx
add    $0xffffffd1,%ecx
movslq %ecx,%rcx
movb   $0x30,(%r15,%rcx,1)
movsbl (%r15),%ecx
mov    %r13d,%edx
sub    %ecx,%edx
add    $0x1,%eax
cmp    %edx,%eax
jle    11d0 <bcd_add+0xb0>
cmpl   $0x0,-0x2c(%rbp)
jle    1204 <bcd_add+0xe4>
mov    %r14,%rdi
mov    $0x30,%esi
mov    -0x38(%rbp),%rdx
call   1030 <memset@plt>
movb   $0x31,(%r14)
cmp    $0x30,%r12b
jge    1235 <bcd_add+0x115>
movslq %r13d,%rax
cmpb   $0x30,-0x2f(%rax,%r14,1)
sete   %al
sub    %al,%r12b
add    $0x1,%r12b
mov    %r12b,(%r14)
xor    %eax,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    -0x2e(%r13),%r8d
mov    $0x1,%ecx
jmp    1255 <bcd_add+0x135>
add    %al,%dl
add    %sil,%dl
add    $0xa0,%dl
mov    %dl,(%r14,%rcx,1)
add    $0x1,%rcx
cmp    %r8,%rcx
je     120e <bcd_add+0xee>
movsbl (%rbx,%rcx,1),%edx
movsbl (%r15,%rcx,1),%esi
lea    (%rdx,%rsi,1),%edi
add    $0xffffffa0,%edi
movzbl (%r14,%rcx,1),%eax
cmp    $0xa,%edi
jl     1240 <bcd_add+0x120>
add    $0xffffffd0,%esi
add    %esi,%edx
add    %al,%dl
add    $0xc6,%dl
mov    %dl,(%r14,%rcx,1)
movb   $0x31,0x1(%r14,%rcx,1)
jmp    124c <bcd_add+0x12c>

LLVM IR (-O0):
define i32 @bcd_add(i8* %0, i8* %1, i32 %2, i8* %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i64
%11 = alloca i64
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
store i8* %3, i8** %8
%19 = load i32, i32* %7
%20 = zext i32 %19 to i64
%21 = call i8* @llvm.stacksave()
store i8* %21, i8** %9
%22 = alloca i8, i64 %20
store i64 %20, i64* %10
%23 = load i32, i32* %7
%24 = zext i32 %23 to i64
%25 = alloca i8, i64 %24
store i64 %24, i64* %11
store i32 0, i32* %12
br label %26
26: ; preds = %39, %4
%27 = load i32, i32* %12
%28 = load i32, i32* %7
%29 = icmp slt i32 %27, %28
br i1 %29, label %30, label %42
30: ; preds = %26
%31 = load i8*, i8** %5
%32 = load i32, i32* %12
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i8, i8* %31, i64 %33
%35 = load i8, i8* %34
%36 = load i32, i32* %12
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %22, i64 %37
store i8 %35, i8* %38
br label %39
39: ; preds = %30
%40 = load i32, i32* %12
%41 = add nsw i32 %40, 1
store i32 %41, i32* %12
br label %26
42: ; preds = %26
store i32 0, i32* %13
br label %43
43: ; preds = %56, %42
%44 = load i32, i32* %13
%45 = load i32, i32* %7
%46 = icmp slt i32 %44, %45
br i1 %46, label %47, label %59
47: ; preds = %43
%48 = load i8*, i8** %6
%49 = load i32, i32* %13
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i8, i8* %48, i64 %50
%52 = load i8, i8* %51
%53 = load i32, i32* %13
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i8, i8* %25, i64 %54
store i8 %52, i8* %55
br label %56
56: ; preds = %47
%57 = load i32, i32* %13
%58 = add nsw i32 %57, 1
store i32 %58, i32* %13
br label %43
59: ; preds = %43
%60 = getelementptr inbounds i8, i8* %22, i64 0
%61 = load i8, i8* %60
%62 = sext i8 %61 to i32
%63 = getelementptr inbounds i8, i8* %25, i64 0
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = icmp sgt i32 %62, %65
br i1 %66, label %67, label %72
67: ; preds = %59
%68 = getelementptr inbounds i8, i8* %22, i64 0
%69 = load i8, i8* %68
%70 = sext i8 %69 to i32
%71 = sub nsw i32 %70, 48
store i32 %71, i32* %14
br label %91
72: ; preds = %59
%73 = getelementptr inbounds i8, i8* %25, i64 0
%74 = load i8, i8* %73
%75 = sext i8 %74 to i32
%76 = getelementptr inbounds i8, i8* %22, i64 0
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
%79 = icmp sgt i32 %75, %78
br i1 %79, label %80, label %85
80: ; preds = %72
%81 = getelementptr inbounds i8, i8* %25, i64 0
%82 = load i8, i8* %81
%83 = sext i8 %82 to i32
%84 = sub nsw i32 %83, 48
store i32 %84, i32* %14
br label %90
85: ; preds = %72
%86 = getelementptr inbounds i8, i8* %22, i64 0
%87 = load i8, i8* %86
%88 = sext i8 %87 to i32
%89 = sub nsw i32 %88, 48
store i32 %89, i32* %14
br label %90
90: ; preds = %85, %80
br label %91
91: ; preds = %90, %67
store i32 1, i32* %15
br label %92
92: ; preds = %111, %91
%93 = load i32, i32* %15
%94 = load i32, i32* %14
%95 = getelementptr inbounds i8, i8* %22, i64 0
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = sub nsw i32 %97, 48
%99 = sub nsw i32 %94, %98
%100 = add nsw i32 %99, 1
%101 = icmp sle i32 %93, %100
br i1 %101, label %102, label %114
102: ; preds = %92
%103 = getelementptr inbounds i8, i8* %22, i64 0
%104 = load i8, i8* %103
%105 = sext i8 %104 to i32
%106 = sub nsw i32 %105, 48
%107 = load i32, i32* %15
%108 = add nsw i32 %106, %107
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds i8, i8* %22, i64 %109
store i8 48, i8* %110
br label %111
111: ; preds = %102
%112 = load i32, i32* %15
%113 = add nsw i32 %112, 1
store i32 %113, i32* %15
br label %92
114: ; preds = %92
store i32 1, i32* %16
br label %115
115: ; preds = %134, %114
%116 = load i32, i32* %16
%117 = load i32, i32* %14
%118 = getelementptr inbounds i8, i8* %25, i64 0
%119 = load i8, i8* %118
%120 = sext i8 %119 to i32
%121 = sub nsw i32 %120, 48
%122 = sub nsw i32 %117, %121
%123 = add nsw i32 %122, 1
%124 = icmp sle i32 %116, %123
br i1 %124, label %125, label %137
125: ; preds = %115
%126 = getelementptr inbounds i8, i8* %25, i64 0
%127 = load i8, i8* %126
%128 = sext i8 %127 to i32
%129 = sub nsw i32 %128, 48
%130 = load i32, i32* %16
%131 = add nsw i32 %129, %130
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds i8, i8* %25, i64 %132
store i8 48, i8* %133
br label %134
134: ; preds = %125
%135 = load i32, i32* %16
%136 = add nsw i32 %135, 1
store i32 %136, i32* %16
br label %115
137: ; preds = %115
store i32 0, i32* %17
br label %138
138: ; preds = %147, %137
%139 = load i32, i32* %17
%140 = load i32, i32* %7
%141 = icmp slt i32 %139, %140
br i1 %141, label %142, label %150
142: ; preds = %138
%143 = load i8*, i8** %8
%144 = load i32, i32* %17
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i8, i8* %143, i64 %145
store i8 48, i8* %146
br label %147
147: ; preds = %142
%148 = load i32, i32* %17
%149 = add nsw i32 %148, 1
store i32 %149, i32* %17
br label %138
150: ; preds = %138
%151 = load i8*, i8** %8
%152 = getelementptr inbounds i8, i8* %151, i64 0
store i8 49, i8* %152
store i32 1, i32* %18
br label %153
153: ; preds = %236, %150
%154 = load i32, i32* %18
%155 = load i32, i32* %14
%156 = add nsw i32 %155, 1
%157 = icmp sle i32 %154, %156
br i1 %157, label %158, label %239
158: ; preds = %153
%159 = load i32, i32* %18
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds i8, i8* %22, i64 %160
%162 = load i8, i8* %161
%163 = sext i8 %162 to i32
%164 = sub nsw i32 %163, 48
%165 = load i32, i32* %18
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds i8, i8* %25, i64 %166
%168 = load i8, i8* %167
%169 = sext i8 %168 to i32
%170 = sub nsw i32 %169, 48
%171 = add nsw i32 %164, %170
%172 = icmp sge i32 %171, 10
br i1 %172, label %173, label %207
173: ; preds = %158
%174 = load i8*, i8** %8
%175 = load i32, i32* %18
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds i8, i8* %174, i64 %176
%178 = load i8, i8* %177
%179 = sext i8 %178 to i32
%180 = sub nsw i32 %179, 48
%181 = load i32, i32* %18
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i8, i8* %22, i64 %182
%184 = load i8, i8* %183
%185 = sext i8 %184 to i32
%186 = sub nsw i32 %185, 48
%187 = add nsw i32 %180, %186
%188 = load i32, i32* %18
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds i8, i8* %25, i64 %189
%191 = load i8, i8* %190
%192 = sext i8 %191 to i32
%193 = sub nsw i32 %192, 48
%194 = add nsw i32 %187, %193
%195 = sub nsw i32 %194, 10
%196 = add nsw i32 %195, 48
%197 = trunc i32 %196 to i8
%198 = load i8*, i8** %8
%199 = load i32, i32* %18
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds i8, i8* %198, i64 %200
store i8 %197, i8* %201
%202 = load i8*, i8** %8
%203 = load i32, i32* %18
%204 = add nsw i32 %203, 1
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds i8, i8* %202, i64 %205
store i8 49, i8* %206
br label %235
207: ; preds = %158
%208 = load i8*, i8** %8
%209 = load i32, i32* %18
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i8, i8* %208, i64 %210
%212 = load i8, i8* %211
%213 = sext i8 %212 to i32
%214 = sub nsw i32 %213, 48
%215 = load i32, i32* %18
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds i8, i8* %22, i64 %216
%218 = load i8, i8* %217
%219 = sext i8 %218 to i32
%220 = sub nsw i32 %219, 48
%221 = add nsw i32 %214, %220
%222 = load i32, i32* %18
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds i8, i8* %25, i64 %223
%225 = load i8, i8* %224
%226 = sext i8 %225 to i32
%227 = sub nsw i32 %226, 48
%228 = add nsw i32 %221, %227
%229 = add nsw i32 %228, 48
%230 = trunc i32 %229 to i8
%231 = load i8*, i8** %8
%232 = load i32, i32* %18
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i8, i8* %231, i64 %233
store i8 %230, i8* %234
br label %235
235: ; preds = %207, %173
br label %236
236: ; preds = %235
%237 = load i32, i32* %18
%238 = add nsw i32 %237, 1
store i32 %238, i32* %18
br label %153
239: ; preds = %153
%240 = load i8*, i8** %8
%241 = load i32, i32* %14
%242 = add nsw i32 %241, 1
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds i8, i8* %240, i64 %243
%245 = load i8, i8* %244
%246 = sext i8 %245 to i32
%247 = sub nsw i32 %246, 48
%248 = icmp eq i32 %247, 0
br i1 %248, label %249, label %255
249: ; preds = %239
%250 = load i32, i32* %14
%251 = add nsw i32 %250, 48
%252 = trunc i32 %251 to i8
%253 = load i8*, i8** %8
%254 = getelementptr inbounds i8, i8* %253, i64 0
store i8 %252, i8* %254
br label %262
255: ; preds = %239
%256 = load i32, i32* %14
%257 = add nsw i32 %256, 1
%258 = add nsw i32 %257, 48
%259 = trunc i32 %258 to i8
%260 = load i8*, i8** %8
%261 = getelementptr inbounds i8, i8* %260, i64 0
store i8 %259, i8* %261
br label %262
262: ; preds = %255, %249
%263 = load i8*, i8** %9
ret i32 0
}

LLVM IR (-O2):
define i32 @bcd_add(i8* nocapture %0, i8* nocapture %1, i32 %2, i8* nocapture %3) {
%5 = zext i32 %2 to i64
%6 = alloca i8, i64 %5
%7 = alloca i8, i64 %5
%8 = icmp sgt i32 %2, 0
br i1 %8, label %9, label %11
9: ; preds = %4
%10 = load i8, i8* %7
br label %11
11: ; preds = %9, %4
%12 = phi i8 [ %10, %9 ], [ undef, %4 ]
%13 = load i8, i8* %6
%14 = icmp sgt i8 %13, %12
%15 = icmp sgt i8 %12, %13
%16 = select i1 %15, i8 %12, i8 %13
%17 = select i1 %14, i8 %13, i8 %16
%18 = sext i8 %17 to i32
%19 = sext i8 %13 to i32
br label %24
20: ; preds = %24
%21 = icmp slt i8 %17, %12
br i1 %21, label %36, label %22
22: ; preds = %20
%23 = sext i8 %12 to i32
br label %38
24: ; preds = %11, %24
%25 = phi i32 [ %33, %24 ], [ %19, %11 ]
%26 = phi i32 [ %31, %24 ], [ 1, %11 ]
%27 = add nsw i32 %25, -48
%28 = add nsw i32 %27, %26
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8, i8* %6, i64 %29
store i8 48, i8* %30
%31 = add nuw nsw i32 %26, 1
%32 = load i8, i8* %6
%33 = sext i8 %32 to i32
%34 = sub nsw i32 %18, %33
%35 = icmp sgt i32 %26, %34
br i1 %35, label %20, label %24
36: ; preds = %38, %20
br i1 %8, label %37, label %50
37: ; preds = %36
br label %50
38: ; preds = %22, %38
%39 = phi i32 [ %47, %38 ], [ %23, %22 ]
%40 = phi i32 [ %45, %38 ], [ 1, %22 ]
%41 = add nsw i32 %39, -48
%42 = add nsw i32 %41, %40
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i8, i8* %7, i64 %43
store i8 48, i8* %44
%45 = add nuw nsw i32 %40, 1
%46 = load i8, i8* %7
%47 = sext i8 %46 to i32
%48 = sub nsw i32 %18, %47
%49 = icmp sgt i32 %40, %48
br i1 %49, label %36, label %38
50: ; preds = %37, %36
store i8 49, i8* %3
%51 = icmp slt i8 %17, 48
br i1 %51, label %85, label %52
52: ; preds = %50
%53 = add nsw i32 %18, -46
%54 = zext i32 %53 to i64
br label %55
55: ; preds = %52, %82
%56 = phi i64 [ 1, %52 ], [ %83, %82 ]
%57 = getelementptr inbounds i8, i8* %6, i64 %56
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
%60 = add nsw i32 %59, -48
%61 = getelementptr inbounds i8, i8* %7, i64 %56
%62 = load i8, i8* %61
%63 = sext i8 %62 to i32
%64 = add nsw i32 %63, -48
%65 = add nsw i32 %64, %60
%66 = icmp sgt i32 %65, 9
%67 = getelementptr inbounds i8, i8* %3, i64 %56
%68 = load i8, i8* %67
br i1 %66, label %69, label %77
69: ; preds = %55
%70 = add nsw i32 %59, 160
%71 = add nsw i32 %70, %64
%72 = trunc i32 %71 to i8
%73 = add i8 %68, %72
%74 = add i8 %73, 38
store i8 %74, i8* %67
%75 = add nuw nsw i64 %56, 1
%76 = getelementptr inbounds i8, i8* %3, i64 %75
store i8 49, i8* %76
br label %82
77: ; preds = %55
%78 = add i8 %58, -96
%79 = add i8 %78, %68
%80 = add i8 %79, %62
store i8 %80, i8* %67
%81 = add nuw nsw i64 %56, 1
br label %82
82: ; preds = %69, %77
%83 = phi i64 [ %75, %69 ], [ %81, %77 ]
%84 = icmp eq i64 %83, %54
br i1 %84, label %85, label %55
85: ; preds = %82, %50
%86 = add nsw i32 %18, -47
%87 = add i8 %17, -48
%88 = sext i32 %86 to i64
%89 = getelementptr inbounds i8, i8* %3, i64 %88
%90 = load i8, i8* %89
%91 = icmp eq i8 %90, 48
%92 = select i1 %91, i8 48, i8 49
%93 = add i8 %92, %87
store i8 %93, i8* %3
ret i32 0
}