void add(char str1[], char str2[], char sum[]) {
  int i, j;
  for (i = 0; i < 300; i++)
    sum[i] = str1[i] + str2[i];
  for (i = 0; i < 300; i++) {
    if (sum[i] > 9) {
      sum[i + 1] = sum[i + 1] + sum[i] / 10;
      sum[i] = sum[i] % 10;
    }
  }
}


x86 assembly (clang, -O0):
<add>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x12c,-0x1c(%rbp)
jge    1159 <add+0x59>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1117 <add+0x17>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x12c,-0x1c(%rbp)
jge    11f5 <add+0xf5>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
jle    11e2 <add+0xe2>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x24(%rbp),%eax
add    %ecx,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11e7 <add+0xe7>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1160 <add+0x60>
pop    %rbp
ret

x86 assembly (clang, -O2):
<add>:
lea    0x12c(%rdx),%rax
lea    0x12c(%rdi),%rcx
cmp    %rdx,%rcx
seta   %r9b
lea    0x12c(%rsi),%rcx
cmp    %rdi,%rax
seta   %r10b
cmp    %rdx,%rcx
seta   %cl
cmp    %rsi,%rax
seta   %r8b
xor    %eax,%eax
test   %r10b,%r9b
jne    1320 <add+0x220>
and    %r8b,%cl
jne    1320 <add+0x220>
movdqu (%rdi),%xmm0
movdqu 0x10(%rdi),%xmm1
movdqu (%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0x10(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,(%rdx)
movdqu %xmm0,0x10(%rdx)
movdqu 0x20(%rdi),%xmm0
movdqu 0x30(%rdi),%xmm1
movdqu 0x20(%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0x30(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,0x20(%rdx)
movdqu %xmm0,0x30(%rdx)
movdqu 0x40(%rdi),%xmm0
movdqu 0x50(%rdi),%xmm1
movdqu 0x40(%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0x50(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,0x40(%rdx)
movdqu %xmm0,0x50(%rdx)
movdqu 0x60(%rdi),%xmm0
movdqu 0x70(%rdi),%xmm1
movdqu 0x60(%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0x70(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,0x60(%rdx)
movdqu %xmm0,0x70(%rdx)
movdqu 0x80(%rdi),%xmm0
movdqu 0x90(%rdi),%xmm1
movdqu 0x80(%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0x90(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,0x80(%rdx)
movdqu %xmm0,0x90(%rdx)
movdqu 0xa0(%rdi),%xmm0
movdqu 0xb0(%rdi),%xmm1
movdqu 0xa0(%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0xb0(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,0xa0(%rdx)
movdqu %xmm0,0xb0(%rdx)
movdqu 0xc0(%rdi),%xmm0
movdqu 0xd0(%rdi),%xmm1
movdqu 0xc0(%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0xd0(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,0xc0(%rdx)
movdqu %xmm0,0xd0(%rdx)
movdqu 0xe0(%rdi),%xmm0
movdqu 0xf0(%rdi),%xmm1
movdqu 0xe0(%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0xf0(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,0xe0(%rdx)
movdqu %xmm0,0xf0(%rdx)
movdqu 0x100(%rdi),%xmm0
movdqu 0x110(%rdi),%xmm1
movdqu 0x100(%rsi),%xmm2
paddb  %xmm0,%xmm2
movdqu 0x110(%rsi),%xmm0
paddb  %xmm1,%xmm0
movdqu %xmm2,0x100(%rdx)
movdqu %xmm0,0x110(%rdx)
movq   0x120(%rdi),%xmm0
movq   0x120(%rsi),%xmm1
paddb  %xmm0,%xmm1
movq   %xmm1,0x120(%rdx)
mov    $0x128,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rsi,%rax,1),%ecx
add    (%rdi,%rax,1),%cl
mov    %cl,(%rdx,%rax,1)
movzbl 0x1(%rsi,%rax,1),%ecx
add    0x1(%rdi,%rax,1),%cl
mov    %cl,0x1(%rdx,%rax,1)
movzbl 0x2(%rsi,%rax,1),%ecx
add    0x2(%rdi,%rax,1),%cl
mov    %cl,0x2(%rdx,%rax,1)
movzbl 0x3(%rsi,%rax,1),%ecx
add    0x3(%rdi,%rax,1),%cl
mov    %cl,0x3(%rdx,%rax,1)
add    $0x4,%rax
cmp    $0x12c,%rax
jne    1320 <add+0x220>
mov    $0x1,%eax
jmp    137c <add+0x27c>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rax
cmp    $0x12d,%rax
je     13a4 <add+0x2a4>
movzbl -0x1(%rdx,%rax,1),%ecx
cmp    $0xa,%cl
jl     1370 <add+0x270>
movzbl %cl,%esi
imul   $0xcd,%esi,%esi
shr    $0xb,%esi
add    %sil,(%rdx,%rax,1)
add    %esi,%esi
lea    (%rsi,%rsi,4),%esi
sub    %sil,%cl
mov    %cl,-0x1(%rdx,%rax,1)
jmp    1370 <add+0x270>
ret

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

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