int S_ADD(char a[], int a_sz, char b[], int b_sz) {
  int i = 1, n = 0;
  if (a_sz < b_sz) {
    while (i <= b_sz) {
      if (a_sz - i >= 0)
        a[b_sz - i] = a[a_sz - i];
      else
        a[b_sz - i] = '0';
      i++;
    }
    a_sz = b_sz;
  }
  i = 1;
  while (i <= a_sz && i <= b_sz) {
    a[a_sz - i] += b[b_sz - i] + n - '0';
    n = 0;
    if (a[a_sz - i] > '9') {
      n = 1;
      a[a_sz - i] -= 10;
    }
    i++;
  }
  if (n != 0) {
    i = 0;
    while (i < a_sz) {
      a[a_sz - i] = a[a_sz - i - 1];
      i++;
    }
    a[0] = '0' + n;
    a_sz++;
  }
  a[a_sz] = 0;
  return a_sz;
}


x86 assembly (clang, -O0):
<S_ADD>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movl   $0x1,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1196 <S_ADD+0x96>
jmp    1131 <S_ADD+0x31>
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     1190 <S_ADD+0x90>
mov    -0xc(%rbp),%eax
sub    -0x20(%rbp),%eax
cmp    $0x0,%eax
jl     1171 <S_ADD+0x71>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1182 <S_ADD+0x82>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1131 <S_ADD+0x31>
mov    -0x1c(%rbp),%eax
mov    %eax,-0xc(%rbp)
movl   $0x1,-0x20(%rbp)
mov    -0x20(%rbp),%ecx
xor    %eax,%eax
cmp    -0xc(%rbp),%ecx
mov    %al,-0x25(%rbp)
jg     11ba <S_ADD+0xba>
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
setle  %al
mov    %al,-0x25(%rbp)
mov    -0x25(%rbp),%al
test   $0x1,%al
jne    11ca <S_ADD+0xca>
jmp    1244 <S_ADD+0x144>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
add    -0x24(%rbp),%esi
sub    $0x30,%esi
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
add    %esi,%edx
mov    %dl,(%rax,%rcx,1)
movl   $0x0,-0x24(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1236 <S_ADD+0x136>
movl   $0x1,-0x24(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
sub    $0xa,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    119d <S_ADD+0x9d>
cmpl   $0x0,-0x24(%rbp)
je     12a9 <S_ADD+0x1a9>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1292 <S_ADD+0x192>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1255 <S_ADD+0x155>
mov    -0x24(%rbp),%eax
add    $0x30,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<S_ADD>:
push   %rbp
push   %rbx
cmp    %ecx,%esi
jge    11ac <S_ADD+0xac>
test   %ecx,%ecx
jle    129b <S_ADD+0x19b>
movslq %esi,%r8
mov    %ecx,%r9d
mov    $0x1,%r10d
cmp    $0x1,%ecx
jne    113c <S_ADD+0x3c>
mov    %ecx,%esi
test   $0x1,%r9b
je     11ac <S_ADD+0xac>
sub    %r10,%r8
js     11a1 <S_ADD+0xa1>
mov    %r8d,%eax
mov    (%rdi,%rax,1),%al
jmp    11a3 <S_ADD+0xa3>
lea    (%r9,%rdi,1),%rsi
add    $0xffffffffffffffff,%rsi
lea    -0x1(%r8),%rbx
mov    %r9d,%r11d
and    $0xfffffffe,%r11d
neg    %r11
mov    $0x1,%r10d
jmp    117e <S_ADD+0x7e>
nopw   0x0(%rax,%rax,1)
mov    %bpl,-0x1(%rsi)
add    $0xfffffffffffffffe,%rsi
add    $0xfffffffffffffffe,%rbx
lea    (%r11,%r10,1),%rax
add    $0x2,%rax
add    $0x2,%r10
cmp    $0x1,%rax
je     1123 <S_ADD+0x23>
mov    $0x30,%bpl
mov    $0x30,%al
test   %rbx,%rbx
js     118e <S_ADD+0x8e>
mov    %ebx,%eax
movzbl (%rdi,%rax,1),%eax
mov    %al,(%rsi)
mov    %rbx,%rax
add    $0xffffffffffffffff,%rax
js     1160 <S_ADD+0x60>
mov    %eax,%eax
movzbl (%rdi,%rax,1),%ebp
jmp    1160 <S_ADD+0x60>
mov    $0x30,%al
sub    %r10,%r9
mov    %al,(%rdi,%r9,1)
mov    %ecx,%esi
test   %esi,%esi
jle    1299 <S_ADD+0x199>
test   %ecx,%ecx
jle    1299 <S_ADD+0x199>
mov    %ecx,%eax
mov    %esi,%r8d
lea    -0x1(%rsi),%ebp
add    $0xffffffff,%ecx
cmp    %ecx,%ebp
cmovb  %ebp,%ecx
add    $0x2,%ecx
lea    (%rdi,%r8,1),%r9
add    %rax,%rdx
neg    %rcx
mov    $0xffffffffffffffff,%r10
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
or     $0xd0,%al
add    (%rdx,%r10,1),%al
mov    %eax,%ebx
add    (%r9,%r10,1),%bl
lea    -0xa(%rbx),%ebp
cmp    $0x3a,%bl
movzbl %bl,%eax
movzbl %bpl,%ebp
cmovl  %eax,%ebp
setge  %al
mov    %bpl,(%r9,%r10,1)
add    $0xffffffffffffffff,%r10
cmp    %r10,%rcx
jne    11f0 <S_ADD+0xf0>
cmp    $0x3a,%bl
jl     1299 <S_ADD+0x199>
test   %esi,%esi
jle    1293 <S_ADD+0x193>
lea    -0x1(%r8),%rax
mov    %r8d,%ecx
and    $0x3,%ecx
cmp    $0x3,%rax
jae    123e <S_ADD+0x13e>
xor    %eax,%eax
test   %rcx,%rcx
jne    1269 <S_ADD+0x169>
jmp    1293 <S_ADD+0x193>
lea    (%rdi,%r8,1),%rdx
mov    %r8d,%ebx
and    $0xfffffffc,%ebx
neg    %rbx
xor    %eax,%eax
nopl   (%rax)
mov    -0x4(%rdx,%rax,1),%ebp
mov    %ebp,-0x3(%rdx,%rax,1)
add    $0xfffffffffffffffc,%rax
cmp    %rax,%rbx
jne    1250 <S_ADD+0x150>
neg    %rax
test   %rcx,%rcx
je     1293 <S_ADD+0x193>
sub    %rax,%r8
add    %rdi,%r8
neg    %rcx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl -0x1(%r8,%rax,1),%edx
mov    %dl,(%r8,%rax,1)
add    $0xffffffffffffffff,%rax
cmp    %rax,%rcx
jne    1280 <S_ADD+0x180>
movb   $0x31,(%rdi)
add    $0x1,%esi
mov    %esi,%ecx
movslq %ecx,%rax
movb   $0x0,(%rdi,%rax,1)
pop    %rbx
pop    %rbp
ret

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

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