itoROMAN(value, p, size) int value;
char *p;
int size;
{
  int i;
  int j;
  int k;
  int aval;
  char c[100];
  int rem;
  aval = abs(value);
  c[0] = '\0';
  i = 1;
  if (aval == 0) {
    c[i++] = '0';
    goto done_100;
  }
  aval = aval % 100;
  if (aval > 0) {
    if ((aval % 5 == 0) && (aval % 10 != 0))
      c[i++] = 'V';
    else {
      rem = aval % 10;
      if (rem == 9) {
        c[i++] = 'X';
        c[i++] = 'I';
      } else if (rem == 8) {
        c[i++] = 'I';
        c[i++] = 'I';
        c[i++] = 'I';
        c[i++] = 'V';
      } else if (rem == 7) {
        c[i++] = 'I';
        c[i++] = 'I';
        c[i++] = 'V';
      } else if (rem == 6) {
        c[i++] = 'I';
        c[i++] = 'V';
      } else if (rem == 4) {
        c[i++] = 'V';
        c[i++] = 'I';
      } else {
        for (j = 0; j < rem; j++)
          c[i++] = 'I';
      }
    }
    aval /= 10;
    if (aval == 0)
      goto done_100;
    rem = aval % 10;
    if (rem == 4) {
      c[i++] = 'L';
      c[i++] = 'X';
    } else if (rem == 5) {
      c[i++] = 'L';
    } else if (rem < 4) {
      for (j = 0; j < rem; j++)
        c[i++] = 'X';
    } else {
      for (j = 0; j < rem - 5; j++)
        c[i++] = 'X';
      c[i++] = 'L';
    }
  }
done_100:
  aval = abs(value);
  aval /= 100;
  if (aval > 0) {
    rem = aval % 10;
    if (rem == 4) {
      c[i++] = 'D';
      c[i++] = 'C';
    }
    if (rem == 5) {
      c[i++] = 'D';
    } else if (rem < 4) {
      for (j = 0; j < rem; j++)
        c[i++] = 'C';
    } else if (rem == 9) {
      c[i++] = 'M';
      c[i++] = 'C';
    } else if (rem < 9) {
      for (j = 0; j < rem - 5; j++)
        c[i++] = 'C';
      c[i++] = 'D';
    }
  }
  aval /= 10;
  if (aval > 0) {
    rem = aval % 10;
    if (rem < 4) {
      for (j = 0; j < rem; j++)
        c[i++] = 'M';
    }
  }
  if (value < 0)
    c[i++] = '-';
  for (j = 0; j < i; ++j)
    *p++ = c[i - j - 1];
  return (i);
}


x86 assembly (clang, -O0):
<itoROMAN>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x4(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x24(%rbp)
movb   $0x0,-0x90(%rbp)
movl   $0x1,-0x18(%rbp)
cmpl   $0x0,-0x24(%rbp)
jne    1162 <itoROMAN+0x52>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x30,-0x90(%rbp,%rax,1)
30
jmp    14d2 <itoROMAN+0x3c2>
mov    -0x24(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jle    14cd <itoROMAN+0x3bd>
mov    -0x24(%rbp),%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    11bc <itoROMAN+0xac>
mov    -0x24(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     11bc <itoROMAN+0xac>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x56,-0x90(%rbp,%rax,1)
56
jmp    138f <itoROMAN+0x27f>
mov    -0x24(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x94(%rbp)
cmpl   $0x9,-0x94(%rbp)
jne    1209 <itoROMAN+0xf9>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x58,-0x90(%rbp,%rax,1)
58
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
jmp    138a <itoROMAN+0x27a>
cmpl   $0x8,-0x94(%rbp)
jne    126f <itoROMAN+0x15f>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x56,-0x90(%rbp,%rax,1)
56
jmp    1385 <itoROMAN+0x275>
cmpl   $0x7,-0x94(%rbp)
jne    12c0 <itoROMAN+0x1b0>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x56,-0x90(%rbp,%rax,1)
56
jmp    1380 <itoROMAN+0x270>
cmpl   $0x6,-0x94(%rbp)
jne    12fc <itoROMAN+0x1ec>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x56,-0x90(%rbp,%rax,1)
56
jmp    137b <itoROMAN+0x26b>
cmpl   $0x4,-0x94(%rbp)
jne    1338 <itoROMAN+0x228>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x56,-0x90(%rbp,%rax,1)
56
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
jmp    1376 <itoROMAN+0x266>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x94(%rbp),%eax
jge    1371 <itoROMAN+0x261>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x49,-0x90(%rbp,%rax,1)
49
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    133f <itoROMAN+0x22f>
jmp    1376 <itoROMAN+0x266>
jmp    137b <itoROMAN+0x26b>
jmp    1380 <itoROMAN+0x270>
jmp    1385 <itoROMAN+0x275>
jmp    138a <itoROMAN+0x27a>
jmp    138f <itoROMAN+0x27f>
mov    -0x24(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jne    13ac <itoROMAN+0x29c>
jmp    14d2 <itoROMAN+0x3c2>
mov    -0x24(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x94(%rbp)
cmpl   $0x4,-0x94(%rbp)
jne    13f9 <itoROMAN+0x2e9>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x4c,-0x90(%rbp,%rax,1)
4c
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x58,-0x90(%rbp,%rax,1)
58
jmp    14c8 <itoROMAN+0x3b8>
cmpl   $0x5,-0x94(%rbp)
jne    1420 <itoROMAN+0x310>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x4c,-0x90(%rbp,%rax,1)
4c
jmp    14c3 <itoROMAN+0x3b3>
cmpl   $0x4,-0x94(%rbp)
jge    146b <itoROMAN+0x35b>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x94(%rbp),%eax
jge    1466 <itoROMAN+0x356>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x58,-0x90(%rbp,%rax,1)
58
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1434 <itoROMAN+0x324>
jmp    14be <itoROMAN+0x3ae>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x94(%rbp),%ecx
sub    $0x5,%ecx
cmp    %ecx,%eax
jge    14a9 <itoROMAN+0x399>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x58,-0x90(%rbp,%rax,1)
58
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1472 <itoROMAN+0x362>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x4c,-0x90(%rbp,%rax,1)
4c
jmp    14c3 <itoROMAN+0x3b3>
jmp    14c8 <itoROMAN+0x3b8>
jmp    14cd <itoROMAN+0x3bd>
jmp    14d2 <itoROMAN+0x3c2>
mov    -0x4(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jle    165f <itoROMAN+0x54f>
mov    -0x24(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x94(%rbp)
cmpl   $0x4,-0x94(%rbp)
jne    153d <itoROMAN+0x42d>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x44,-0x90(%rbp,%rax,1)
44
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x43,-0x90(%rbp,%rax,1)
43
cmpl   $0x5,-0x94(%rbp)
jne    1564 <itoROMAN+0x454>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x44,-0x90(%rbp,%rax,1)
44
jmp    165a <itoROMAN+0x54a>
cmpl   $0x4,-0x94(%rbp)
jge    15af <itoROMAN+0x49f>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x94(%rbp),%eax
jge    15aa <itoROMAN+0x49a>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x43,-0x90(%rbp,%rax,1)
43
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1578 <itoROMAN+0x468>
jmp    1655 <itoROMAN+0x545>
cmpl   $0x9,-0x94(%rbp)
jne    15eb <itoROMAN+0x4db>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x4d,-0x90(%rbp,%rax,1)
4d
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x43,-0x90(%rbp,%rax,1)
43
jmp    1650 <itoROMAN+0x540>
cmpl   $0x9,-0x94(%rbp)
jge    164b <itoROMAN+0x53b>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x94(%rbp),%ecx
sub    $0x5,%ecx
cmp    %ecx,%eax
jge    1636 <itoROMAN+0x526>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x43,-0x90(%rbp,%rax,1)
43
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    15ff <itoROMAN+0x4ef>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x44,-0x90(%rbp,%rax,1)
44
jmp    1650 <itoROMAN+0x540>
jmp    1655 <itoROMAN+0x545>
jmp    165a <itoROMAN+0x54a>
jmp    165f <itoROMAN+0x54f>
mov    -0x24(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jle    16d8 <itoROMAN+0x5c8>
mov    -0x24(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x94(%rbp)
cmpl   $0x4,-0x94(%rbp)
jge    16d3 <itoROMAN+0x5c3>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x94(%rbp),%eax
jge    16ce <itoROMAN+0x5be>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x4d,-0x90(%rbp,%rax,1)
4d
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    169c <itoROMAN+0x58c>
jmp    16d3 <itoROMAN+0x5c3>
jmp    16d8 <itoROMAN+0x5c8>
cmpl   $0x0,-0x4(%rbp)
jge    16f7 <itoROMAN+0x5e7>
mov    -0x18(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x18(%rbp)
cltq
movb   $0x2d,-0x90(%rbp,%rax,1)
2d
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    173b <itoROMAN+0x62b>
mov    -0x18(%rbp),%eax
sub    -0x1c(%rbp),%eax
sub    $0x1,%eax
cltq
mov    -0x90(%rbp,%rax,1),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    16fe <itoROMAN+0x5ee>
mov    -0x18(%rbp),%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<itoROMAN>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %rsi,%r15
mov    %edi,%ebp
mov    %edi,%r13d
neg    %r13d
cmovs  %edi,%r13d
movb   $0x0,0x10(%rsp)
mov    %r13d,%esi
jae    118a <itoROMAN+0x7a>
imul   $0x51eb851f,%rsi,%rax
shr    $0x25,%rax
imul   $0x64,%eax,%eax
mov    %r13d,%ebx
sub    %eax,%ebx
je     119a <itoROMAN+0x8a>
imul   $0xffffffcd,%ebx,%ecx
movzbl %bl,%r12d
imul   $0xcd,%r12d,%eax
shr    $0xa,%eax
and    $0xfffffffe,%eax
lea    (%rax,%rax,4),%edx
mov    %r12d,%eax
sub    %dl,%al
cmp    $0x33,%cl
ja     11a5 <itoROMAN+0x95>
test   %al,%al
je     11a5 <itoROMAN+0x95>
movb   $0x56,0x11(%rsp)
mov    $0x2,%r14d
cmp    $0xa,%ebx
jae    1251 <itoROMAN+0x141>
jmp    13f7 <itoROMAN+0x2e7>
movb   $0x30,0x11(%rsp)
mov    $0x2,%r14d
jmp    13f7 <itoROMAN+0x2e7>
mov    $0x1,%r14d
jmp    13f7 <itoROMAN+0x2e7>
movzbl %al,%r14d
lea    -0x4(%r14),%eax
cmp    $0x5,%eax
ja     11cb <itoROMAN+0xbb>
lea    0xe57(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movw   $0x4956,0x11(%rsp)
jmp    1242 <itoROMAN+0x132>
test   %r14d,%r14d
je     132b <itoROMAN+0x21b>
lea    0x11(%rsp),%rdi
mov    %r14d,%edx
mov    %rsi,0x8(%rsp)
mov    $0x49,%esi
call   1030 <memset@plt>
mov    0x8(%rsp),%rsi
add    $0x1,%r14d
cmp    $0xa,%ebx
jae    1251 <itoROMAN+0x141>
jmp    13f7 <itoROMAN+0x2e7>
movw   $0x5649,0x11(%rsp)
jmp    1242 <itoROMAN+0x132>
movw   $0x4949,0x11(%rsp)
movb   $0x56,0x13(%rsp)
mov    $0x4,%r14d
cmp    $0xa,%ebx
jae    1251 <itoROMAN+0x141>
jmp    13f7 <itoROMAN+0x2e7>
movl   $0x56494949,0x11(%rsp)
56
mov    $0x5,%r14d
cmp    $0xa,%ebx
jae    1251 <itoROMAN+0x141>
jmp    13f7 <itoROMAN+0x2e7>
movw   $0x4958,0x11(%rsp)
mov    $0x3,%r14d
cmp    $0xa,%ebx
jb     13f7 <itoROMAN+0x2e7>
movzbl %bl,%eax
imul   $0xcd,%eax,%edx
shr    $0xb,%edx
imul   $0xcd,%edx,%eax
shr    $0xa,%eax
and    $0xfffffffe,%eax
lea    (%rax,%rax,4),%ecx
mov    %edx,%eax
sub    %cl,%al
cmp    $0x5,%al
je     13eb <itoROMAN+0x2db>
movzbl %al,%ebx
cmp    $0x4,%ebx
jne    1293 <itoROMAN+0x183>
mov    %r14d,%eax
movw   $0x584c,0x10(%rsp,%rax,1)
add    $0x2,%r14d
jmp    13f7 <itoROMAN+0x2e7>
cmp    $0x4,%al
jae    12f2 <itoROMAN+0x1e2>
mov    %rsi,%rbx
mov    %r14d,%eax
lea    (%rsp,%rax,1),%rdi
add    $0x10,%rdi
add    $0xffffffff,%edx
add    $0x1,%rdx
mov    $0x58,%esi
call   1030 <memset@plt>
imul   $0x51eb851f,%r12,%rax
shr    $0x25,%rax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
mov    $0xcccccccd,%ecx
imul   %r12,%rcx
shr    $0x23,%rcx
sub    %ecx,%eax
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
add    $0xffffffff,%ecx
cmp    %ecx,%eax
jne    12e0 <itoROMAN+0x1d0>
sub    %ecx,%r14d
mov    %rbx,%rsi
jmp    13f7 <itoROMAN+0x2e7>
cmp    $0x6,%al
jb     13eb <itoROMAN+0x2db>
mov    %rsi,0x8(%rsp)
mov    %r14d,%r14d
lea    (%rsp,%r14,1),%rdi
add    $0x10,%rdi
add    $0xfffffffb,%ebx
mov    $0x58,%esi
mov    %rbx,%rdx
call   1030 <memset@plt>
xor    %eax,%eax
cmp    $0x4,%ebx
jae    133f <itoROMAN+0x22f>
mov    0x8(%rsp),%rsi
jmp    13b0 <itoROMAN+0x2a0>
mov    $0x1,%r14d
cmp    $0xa,%ebx
jae    1251 <itoROMAN+0x141>
jmp    13f7 <itoROMAN+0x2e7>
mov    %ebx,%eax
and    $0xfffffffc,%eax
movd   %r14d,%xmm0
lea    -0x4(%rax),%esi
mov    %esi,%edx
shr    $0x2,%edx
add    $0x1,%edx
mov    %edx,%ecx
and    $0x7,%ecx
cmp    $0x1c,%esi
mov    0x8(%rsp),%rsi
jae    1369 <itoROMAN+0x259>
pxor   %xmm1,%xmm1
jmp    1385 <itoROMAN+0x275>
and    $0xfffffff8,%edx
pxor   %xmm1,%xmm1
movdqa 0xc88(%rip),%xmm2
paddq  %xmm2,%xmm0
paddq  %xmm2,%xmm1
add    $0xfffffff8,%edx
jne    1378 <itoROMAN+0x268>
test   %ecx,%ecx
je     139a <itoROMAN+0x28a>
pcmpeqd %xmm2,%xmm2
psubq  %xmm2,%xmm0
psubq  %xmm2,%xmm1
add    $0xffffffff,%ecx
jne    138d <itoROMAN+0x27d>
paddq  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddq  %xmm0,%xmm1
movq   %xmm1,%r14
cmp    %eax,%ebx
je     13eb <itoROMAN+0x2db>
imul   $0x51eb851f,%r12,%rcx
shr    $0x25,%rcx
lea    (%rcx,%rcx,4),%ecx
lea    (%rax,%rcx,2),%eax
mov    $0xcccccccd,%ecx
imul   %r12,%rcx
shr    $0x23,%rcx
sub    %ecx,%eax
add    $0x5,%eax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
add    $0xffffffffffffffff,%rcx
cmp    %ecx,%eax
jne    13e0 <itoROMAN+0x2d0>
sub    %rcx,%r14
mov    %r14d,%eax
add    $0x1,%r14d
movb   $0x4c,0x10(%rsp,%rax,1)
cmp    $0x64,%r13d
jb     160b <itoROMAN+0x4fb>
imul   $0x51eb851f,%rsi,%r12
shr    $0x25,%r12
mov    $0xcccccccd,%eax
imul   %r12,%rax
shr    $0x23,%rax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
mov    %r12d,%ebx
sub    %eax,%ebx
cmp    $0x5,%ebx
je     143f <itoROMAN+0x32f>
cmp    $0x4,%ebx
jne    14b8 <itoROMAN+0x3a8>
movslq %r14d,%rax
movw   $0x4344,0x10(%rsp,%rax,1)
add    $0x2,%r14d
movslq %r14d,%rax
add    $0x1,%r14d
movb   $0x44,0x10(%rsp,%rax,1)
cmp    $0x3e8,%r13d
jb     160b <itoROMAN+0x4fb>
imul   $0x10624dd3,%rsi,%rbx
shr    $0x26,%rbx
mov    $0xcccccccd,%eax
imul   %rbx,%rax
shr    $0x23,%rax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
mov    %eax,%ecx
neg    %ecx
add    %ebx,%ecx
add    $0xffffffff,%ecx
cmp    $0x2,%ecx
ja     160b <itoROMAN+0x4fb>
mov    %rsi,%r13
mov    %ebx,%r12d
sub    %eax,%r12d
movslq %r14d,%r14
lea    (%rsp,%r14,1),%rdi
add    $0x10,%rdi
mov    %r12d,%edx
mov    $0x4d,%esi
call   1030 <memset@plt>
xor    %eax,%eax
cmp    $0x4,%r12d
jae    151e <itoROMAN+0x40e>
mov    %r13,%rsi
jmp    15e4 <itoROMAN+0x4d4>
jae    1506 <itoROMAN+0x3f6>
test   %ebx,%ebx
je     144b <itoROMAN+0x33b>
movslq %r14d,%r14
lea    (%rsp,%r14,1),%rdi
add    $0x10,%rdi
mov    %rsi,0x8(%rsp)
imul   $0x10624dd3,%rsi,%rax
shr    $0x26,%rax
add    %eax,%eax
lea    (%rax,%rax,4),%edx
not    %edx
add    %r12d,%edx
add    $0x1,%rdx
mov    $0x43,%esi
call   1030 <memset@plt>
xor    %eax,%eax
cmp    $0x4,%ebx
jae    177c <itoROMAN+0x66c>
mov    0x8(%rsp),%rsi
jmp    18e7 <itoROMAN+0x7d7>
cmp    $0x9,%ebx
jne    1547 <itoROMAN+0x437>
movslq %r14d,%rax
movw   $0x434d,0x10(%rsp,%rax,1)
add    $0x2,%r14d
jmp    144b <itoROMAN+0x33b>
mov    %r12d,%eax
and    $0xc,%eax
movq   %r14,%xmm0
lea    -0x4(%rax),%esi
mov    %esi,%edx
shr    $0x2,%edx
add    $0x1,%edx
mov    %edx,%ecx
and    $0x7,%ecx
cmp    $0x1c,%esi
jae    1585 <itoROMAN+0x475>
pxor   %xmm1,%xmm1
mov    %r13,%rsi
jmp    15ad <itoROMAN+0x49d>
cmp    $0x6,%ebx
jb     143f <itoROMAN+0x32f>
mov    %rsi,0x8(%rsp)
movslq %r14d,%r14
lea    (%rsp,%r14,1),%rdi
add    $0x10,%rdi
add    $0xfffffffb,%ebx
mov    $0x43,%esi
mov    %rbx,%rdx
call   1030 <memset@plt>
xor    %eax,%eax
cmp    $0x4,%ebx
jae    1910 <itoROMAN+0x800>
mov    0x8(%rsp),%rsi
jmp    1987 <itoROMAN+0x877>
and    $0xfffffff8,%edx
pxor   %xmm1,%xmm1
movdqa 0xa6c(%rip),%xmm2
mov    %r13,%rsi
nopw   0x0(%rax,%rax,1)
paddq  %xmm2,%xmm0
paddq  %xmm2,%xmm1
add    $0xfffffff8,%edx
jne    15a0 <itoROMAN+0x490>
test   %ecx,%ecx
je     15cd <itoROMAN+0x4bd>
pcmpeqd %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
psubq  %xmm2,%xmm0
psubq  %xmm2,%xmm1
add    $0xffffffff,%ecx
jne    15c0 <itoROMAN+0x4b0>
paddq  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddq  %xmm0,%xmm1
movq   %xmm1,%r14
cmp    %eax,%r12d
je     160b <itoROMAN+0x4fb>
mov    $0xd1b71759,%ecx
imul   %rsi,%rcx
shr    $0x2d,%rcx
lea    (%rcx,%rcx,4),%ecx
lea    (%rax,%rcx,2),%eax
sub    %ebx,%eax
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rcx
cmp    %ecx,%eax
jne    1600 <itoROMAN+0x4f0>
sub    %rcx,%r14
test   %ebp,%ebp
jns    161b <itoROMAN+0x50b>
movslq %r14d,%rax
add    $0x1,%r14d
movb   $0x2d,0x10(%rsp,%rax,1)
test   %r14d,%r14d
jle    1875 <itoROMAN+0x765>
mov    %r14d,%r9d
cmp    $0x8,%r14d
jae    1635 <itoROMAN+0x525>
xor    %r10d,%r10d
jmp    17b0 <itoROMAN+0x6a0>
lea    -0x1(%r9),%rcx
lea    -0x1(%r14),%edx
mov    %edx,%esi
sub    %ecx,%esi
xor    %r10d,%r10d
cmp    %edx,%esi
jg     17b0 <itoROMAN+0x6a0>
shr    $0x20,%rcx
jne    17b0 <itoROMAN+0x6a0>
cmp    $0x20,%r14d
jae    1664 <itoROMAN+0x554>
xor    %r10d,%r10d
jmp    171b <itoROMAN+0x60b>
mov    %r9d,%r10d
and    $0xffffffe0,%r10d
xor    %ecx,%ecx
pxor   %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movslq %edx,%rdx
movdqu -0xf(%rsp,%rdx,1),%xmm1
movdqu 0x1(%rsp,%rdx,1),%xmm2
movdqa %xmm2,%xmm3
punpcklbw %xmm0,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
punpckhbw %xmm0,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
packuswb %xmm3,%xmm2
movdqa %xmm1,%xmm3
punpcklbw %xmm0,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
punpckhbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm3,%xmm1
movdqu %xmm2,(%r15,%rcx,1)
movdqu %xmm1,0x10(%r15,%rcx,1)
add    $0x20,%rcx
add    $0xffffffe0,%edx
cmp    %rcx,%r10
jne    1680 <itoROMAN+0x570>
cmp    %r9,%r10
je     1875 <itoROMAN+0x765>
test   $0x18,%r9b
je     17ad <itoROMAN+0x69d>
mov    %r10,%rcx
mov    %r9d,%r10d
and    $0xfffffff8,%r10d
lea    (%r15,%r10,1),%rdx
mov    %ecx,%esi
not    %esi
add    %r14d,%esi
pxor   %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq %esi,%rsi
movq   0x9(%rsp,%rsi,1),%xmm1
punpcklbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm1,%xmm1
movq   %xmm1,(%r15,%rcx,1)
add    $0x8,%rcx
add    $0xfffffff8,%esi
cmp    %rcx,%r10
jne    1740 <itoROMAN+0x630>
cmp    %r9,%r10
jne    17b3 <itoROMAN+0x6a3>
jmp    1875 <itoROMAN+0x765>
mov    %ebx,%eax
and    $0xc,%eax
movq   %r14,%xmm0
lea    -0x4(%rax),%esi
mov    %esi,%edx
shr    $0x2,%edx
add    $0x1,%edx
mov    %edx,%ecx
and    $0x7,%ecx
cmp    $0x1c,%esi
jae    1887 <itoROMAN+0x777>
pxor   %xmm1,%xmm1
mov    0x8(%rsp),%rsi
jmp    18ad <itoROMAN+0x79d>
add    %r10,%r15
mov    %r15,%rdx
mov    %r10,%r8
not    %r8
add    %r9,%r8
mov    %r9,%rsi
and    $0x3,%rsi
je     17fd <itoROMAN+0x6ed>
mov    %r10d,%edi
not    %edi
add    %r14d,%edi
neg    %rsi
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    (%rdi,%rbx,1),%ecx
movslq %ecx,%rcx
movzbl 0x10(%rsp,%rcx,1),%ecx
mov    %cl,(%rdx)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rbx
cmp    %rbx,%rsi
jne    17e0 <itoROMAN+0x6d0>
sub    %rbx,%r10
cmp    $0x3,%r8
jb     1875 <itoROMAN+0x765>
mov    $0xfffffffc,%esi
sub    %r10d,%esi
mov    $0xfffffffd,%edi
sub    %r10d,%edi
mov    $0xfffffffe,%ebx
sub    %r10d,%ebx
mov    %r10d,%ecx
not    %ecx
lea    (%r9,%rcx,1),%ebp
movslq %ebp,%rbp
movzbl 0x10(%rsp,%rbp,1),%eax
mov    %al,(%rdx)
lea    (%rbx,%r9,1),%eax
cltq
movzbl 0x10(%rsp,%rax,1),%eax
mov    %al,0x1(%rdx)
lea    (%rdi,%r9,1),%eax
cltq
movzbl 0x10(%rsp,%rax,1),%eax
mov    %al,0x2(%rdx)
lea    (%rsi,%r9,1),%eax
cltq
movzbl 0x10(%rsp,%rax,1),%eax
mov    %al,0x3(%rdx)
add    $0x4,%r10
add    $0xfffffffffffffffc,%rsi
add    $0xfffffffffffffffc,%rdi
add    $0xfffffffffffffffc,%rbx
add    $0xfffffffffffffffc,%rcx
add    $0x4,%rdx
cmp    %r10,%r9
jne    1820 <itoROMAN+0x710>
mov    %r14d,%eax
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
and    $0xfffffff8,%edx
pxor   %xmm1,%xmm1
movdqa 0x76a(%rip),%xmm2
mov    0x8(%rsp),%rsi
nopl   0x0(%rax,%rax,1)
paddq  %xmm2,%xmm0
paddq  %xmm2,%xmm1
add    $0xfffffff8,%edx
jne    18a0 <itoROMAN+0x790>
test   %ecx,%ecx
je     18cd <itoROMAN+0x7bd>
pcmpeqd %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
psubq  %xmm2,%xmm0
psubq  %xmm2,%xmm1
add    $0xffffffff,%ecx
jne    18c0 <itoROMAN+0x7b0>
paddq  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddq  %xmm0,%xmm1
movq   %xmm1,%r14
cmp    %eax,%ebx
je     144b <itoROMAN+0x33b>
imul   $0x10624dd3,%rsi,%rcx
shr    $0x26,%rcx
lea    (%rcx,%rcx,4),%ecx
lea    (%rax,%rcx,2),%eax
sub    %r12d,%eax
xor    %ecx,%ecx
nopl   (%rax)
add    $0xffffffffffffffff,%rcx
cmp    %ecx,%eax
jne    1900 <itoROMAN+0x7f0>
sub    %rcx,%r14
jmp    144b <itoROMAN+0x33b>
mov    %ebx,%eax
and    $0xfffffffc,%eax
movq   %r14,%xmm0
lea    -0x4(%rax),%esi
mov    %esi,%edx
shr    $0x2,%edx
add    $0x1,%edx
mov    %edx,%ecx
and    $0x7,%ecx
cmp    $0x1c,%esi
jae    1935 <itoROMAN+0x825>
pxor   %xmm1,%xmm1
jmp    1951 <itoROMAN+0x841>
and    $0xfffffff8,%edx
pxor   %xmm1,%xmm1
movdqa 0x6bc(%rip),%xmm2
paddq  %xmm2,%xmm0
paddq  %xmm2,%xmm1
add    $0xfffffff8,%edx
jne    1944 <itoROMAN+0x834>
test   %ecx,%ecx
mov    0x8(%rsp),%rsi
je     196d <itoROMAN+0x85d>
pcmpeqd %xmm2,%xmm2
xchg   %ax,%ax
psubq  %xmm2,%xmm0
psubq  %xmm2,%xmm1
add    $0xffffffff,%ecx
jne    1960 <itoROMAN+0x850>
paddq  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddq  %xmm0,%xmm1
movq   %xmm1,%r14
cmp    %eax,%ebx
je     143f <itoROMAN+0x32f>
imul   $0x10624dd3,%rsi,%rcx
shr    $0x26,%rcx
lea    (%rcx,%rcx,4),%ecx
lea    (%rax,%rcx,2),%eax
sub    %r12d,%eax
add    $0x5,%eax
xor    %ecx,%ecx
add    $0xffffffffffffffff,%rcx
cmp    %ecx,%eax
jne    19a0 <itoROMAN+0x890>
sub    %rcx,%r14
jmp    143f <itoROMAN+0x32f>

LLVM IR (-O0):
define i32 @itoROMAN(i32 %0, i8* %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 [100 x i8]
%12 = alloca i32
store i32 %0, i32* %4
store i8* %1, i8** %5
store i32 %2, i32* %6
%13 = load i32, i32* %4
%14 = call i32 @abs(i32 %13)
store i32 %14, i32* %10
%15 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 0
store i8 0, i8* %15
store i32 1, i32* %7
%16 = load i32, i32* %10
%17 = icmp eq i32 %16, 0
br i1 %17, label %18, label %23
18: ; preds = %3
%19 = load i32, i32* %7
%20 = add nsw i32 %19, 1
store i32 %20, i32* %7
%21 = sext i32 %19 to i64
%22 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %21
store i8 48, i8* %22
br label %202
23: ; preds = %3
%24 = load i32, i32* %10
%25 = srem i32 %24, 100
store i32 %25, i32* %10
%26 = load i32, i32* %10
%27 = icmp sgt i32 %26, 0
br i1 %27, label %28, label %201
28: ; preds = %23
%29 = load i32, i32* %10
%30 = srem i32 %29, 5
%31 = icmp eq i32 %30, 0
br i1 %31, label %32, label %41
32: ; preds = %28
%33 = load i32, i32* %10
%34 = srem i32 %33, 10
%35 = icmp ne i32 %34, 0
br i1 %35, label %36, label %41
36: ; preds = %32
%37 = load i32, i32* %7
%38 = add nsw i32 %37, 1
store i32 %38, i32* %7
%39 = sext i32 %37 to i64
%40 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %39
store i8 86, i8* %40
br label %134
41: ; preds = %32, %28
%42 = load i32, i32* %10
%43 = srem i32 %42, 10
store i32 %43, i32* %12
%44 = load i32, i32* %12
%45 = icmp eq i32 %44, 9
br i1 %45, label %46, label %55
46: ; preds = %41
%47 = load i32, i32* %7
%48 = add nsw i32 %47, 1
store i32 %48, i32* %7
%49 = sext i32 %47 to i64
%50 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %49
store i8 88, i8* %50
%51 = load i32, i32* %7
%52 = add nsw i32 %51, 1
store i32 %52, i32* %7
%53 = sext i32 %51 to i64
%54 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %53
store i8 73, i8* %54
br label %133
55: ; preds = %41
%56 = load i32, i32* %12
%57 = icmp eq i32 %56, 8
br i1 %57, label %58, label %75
58: ; preds = %55
%59 = load i32, i32* %7
%60 = add nsw i32 %59, 1
store i32 %60, i32* %7
%61 = sext i32 %59 to i64
%62 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %61
store i8 73, i8* %62
%63 = load i32, i32* %7
%64 = add nsw i32 %63, 1
store i32 %64, i32* %7
%65 = sext i32 %63 to i64
%66 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %65
store i8 73, i8* %66
%67 = load i32, i32* %7
%68 = add nsw i32 %67, 1
store i32 %68, i32* %7
%69 = sext i32 %67 to i64
%70 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %69
store i8 73, i8* %70
%71 = load i32, i32* %7
%72 = add nsw i32 %71, 1
store i32 %72, i32* %7
%73 = sext i32 %71 to i64
%74 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %73
store i8 86, i8* %74
br label %132
75: ; preds = %55
%76 = load i32, i32* %12
%77 = icmp eq i32 %76, 7
br i1 %77, label %78, label %91
78: ; preds = %75
%79 = load i32, i32* %7
%80 = add nsw i32 %79, 1
store i32 %80, i32* %7
%81 = sext i32 %79 to i64
%82 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %81
store i8 73, i8* %82
%83 = load i32, i32* %7
%84 = add nsw i32 %83, 1
store i32 %84, i32* %7
%85 = sext i32 %83 to i64
%86 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %85
store i8 73, i8* %86
%87 = load i32, i32* %7
%88 = add nsw i32 %87, 1
store i32 %88, i32* %7
%89 = sext i32 %87 to i64
%90 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %89
store i8 86, i8* %90
br label %131
91: ; preds = %75
%92 = load i32, i32* %12
%93 = icmp eq i32 %92, 6
br i1 %93, label %94, label %103
94: ; preds = %91
%95 = load i32, i32* %7
%96 = add nsw i32 %95, 1
store i32 %96, i32* %7
%97 = sext i32 %95 to i64
%98 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %97
store i8 73, i8* %98
%99 = load i32, i32* %7
%100 = add nsw i32 %99, 1
store i32 %100, i32* %7
%101 = sext i32 %99 to i64
%102 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %101
store i8 86, i8* %102
br label %130
103: ; preds = %91
%104 = load i32, i32* %12
%105 = icmp eq i32 %104, 4
br i1 %105, label %106, label %115
106: ; preds = %103
%107 = load i32, i32* %7
%108 = add nsw i32 %107, 1
store i32 %108, i32* %7
%109 = sext i32 %107 to i64
%110 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %109
store i8 86, i8* %110
%111 = load i32, i32* %7
%112 = add nsw i32 %111, 1
store i32 %112, i32* %7
%113 = sext i32 %111 to i64
%114 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %113
store i8 73, i8* %114
br label %129
115: ; preds = %103
store i32 0, i32* %8
br label %116
116: ; preds = %125, %115
%117 = load i32, i32* %8
%118 = load i32, i32* %12
%119 = icmp slt i32 %117, %118
br i1 %119, label %120, label %128
120: ; preds = %116
%121 = load i32, i32* %7
%122 = add nsw i32 %121, 1
store i32 %122, i32* %7
%123 = sext i32 %121 to i64
%124 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %123
store i8 73, i8* %124
br label %125
125: ; preds = %120
%126 = load i32, i32* %8
%127 = add nsw i32 %126, 1
store i32 %127, i32* %8
br label %116
128: ; preds = %116
br label %129
129: ; preds = %128, %106
br label %130
130: ; preds = %129, %94
br label %131
131: ; preds = %130, %78
br label %132
132: ; preds = %131, %58
br label %133
133: ; preds = %132, %46
br label %134
134: ; preds = %133, %36
%135 = load i32, i32* %10
%136 = sdiv i32 %135, 10
store i32 %136, i32* %10
%137 = load i32, i32* %10
%138 = icmp eq i32 %137, 0
br i1 %138, label %139, label %140
139: ; preds = %134
br label %202
140: ; preds = %134
%141 = load i32, i32* %10
%142 = srem i32 %141, 10
store i32 %142, i32* %12
%143 = load i32, i32* %12
%144 = icmp eq i32 %143, 4
br i1 %144, label %145, label %154
145: ; preds = %140
%146 = load i32, i32* %7
%147 = add nsw i32 %146, 1
store i32 %147, i32* %7
%148 = sext i32 %146 to i64
%149 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %148
store i8 76, i8* %149
%150 = load i32, i32* %7
%151 = add nsw i32 %150, 1
store i32 %151, i32* %7
%152 = sext i32 %150 to i64
%153 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %152
store i8 88, i8* %153
br label %200
154: ; preds = %140
%155 = load i32, i32* %12
%156 = icmp eq i32 %155, 5
br i1 %156, label %157, label %162
157: ; preds = %154
%158 = load i32, i32* %7
%159 = add nsw i32 %158, 1
store i32 %159, i32* %7
%160 = sext i32 %158 to i64
%161 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %160
store i8 76, i8* %161
br label %199
162: ; preds = %154
%163 = load i32, i32* %12
%164 = icmp slt i32 %163, 4
br i1 %164, label %165, label %179
165: ; preds = %162
store i32 0, i32* %8
br label %166
166: ; preds = %175, %165
%167 = load i32, i32* %8
%168 = load i32, i32* %12
%169 = icmp slt i32 %167, %168
br i1 %169, label %170, label %178
170: ; preds = %166
%171 = load i32, i32* %7
%172 = add nsw i32 %171, 1
store i32 %172, i32* %7
%173 = sext i32 %171 to i64
%174 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %173
store i8 88, i8* %174
br label %175
175: ; preds = %170
%176 = load i32, i32* %8
%177 = add nsw i32 %176, 1
store i32 %177, i32* %8
br label %166
178: ; preds = %166
br label %198
179: ; preds = %162
store i32 0, i32* %8
br label %180
180: ; preds = %190, %179
%181 = load i32, i32* %8
%182 = load i32, i32* %12
%183 = sub nsw i32 %182, 5
%184 = icmp slt i32 %181, %183
br i1 %184, label %185, label %193
185: ; preds = %180
%186 = load i32, i32* %7
%187 = add nsw i32 %186, 1
store i32 %187, i32* %7
%188 = sext i32 %186 to i64
%189 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %188
store i8 88, i8* %189
br label %190
190: ; preds = %185
%191 = load i32, i32* %8
%192 = add nsw i32 %191, 1
store i32 %192, i32* %8
br label %180
193: ; preds = %180
%194 = load i32, i32* %7
%195 = add nsw i32 %194, 1
store i32 %195, i32* %7
%196 = sext i32 %194 to i64
%197 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %196
store i8 76, i8* %197
br label %198
198: ; preds = %193, %178
br label %199
199: ; preds = %198, %157
br label %200
200: ; preds = %199, %145
br label %201
201: ; preds = %200, %23
br label %202
202: ; preds = %201, %139, %18
%203 = load i32, i32* %4
%204 = call i32 @abs(i32 %203)
store i32 %204, i32* %10
%205 = load i32, i32* %10
%206 = sdiv i32 %205, 100
store i32 %206, i32* %10
%207 = load i32, i32* %10
%208 = icmp sgt i32 %207, 0
br i1 %208, label %209, label %286
209: ; preds = %202
%210 = load i32, i32* %10
%211 = srem i32 %210, 10
store i32 %211, i32* %12
%212 = load i32, i32* %12
%213 = icmp eq i32 %212, 4
br i1 %213, label %214, label %223
214: ; preds = %209
%215 = load i32, i32* %7
%216 = add nsw i32 %215, 1
store i32 %216, i32* %7
%217 = sext i32 %215 to i64
%218 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %217
store i8 68, i8* %218
%219 = load i32, i32* %7
%220 = add nsw i32 %219, 1
store i32 %220, i32* %7
%221 = sext i32 %219 to i64
%222 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %221
store i8 67, i8* %222
br label %223
223: ; preds = %214, %209
%224 = load i32, i32* %12
%225 = icmp eq i32 %224, 5
br i1 %225, label %226, label %231
226: ; preds = %223
%227 = load i32, i32* %7
%228 = add nsw i32 %227, 1
store i32 %228, i32* %7
%229 = sext i32 %227 to i64
%230 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %229
store i8 68, i8* %230
br label %285
231: ; preds = %223
%232 = load i32, i32* %12
%233 = icmp slt i32 %232, 4
br i1 %233, label %234, label %248
234: ; preds = %231
store i32 0, i32* %8
br label %235
235: ; preds = %244, %234
%236 = load i32, i32* %8
%237 = load i32, i32* %12
%238 = icmp slt i32 %236, %237
br i1 %238, label %239, label %247
239: ; preds = %235
%240 = load i32, i32* %7
%241 = add nsw i32 %240, 1
store i32 %241, i32* %7
%242 = sext i32 %240 to i64
%243 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %242
store i8 67, i8* %243
br label %244
244: ; preds = %239
%245 = load i32, i32* %8
%246 = add nsw i32 %245, 1
store i32 %246, i32* %8
br label %235
247: ; preds = %235
br label %284
248: ; preds = %231
%249 = load i32, i32* %12
%250 = icmp eq i32 %249, 9
br i1 %250, label %251, label %260
251: ; preds = %248
%252 = load i32, i32* %7
%253 = add nsw i32 %252, 1
store i32 %253, i32* %7
%254 = sext i32 %252 to i64
%255 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %254
store i8 77, i8* %255
%256 = load i32, i32* %7
%257 = add nsw i32 %256, 1
store i32 %257, i32* %7
%258 = sext i32 %256 to i64
%259 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %258
store i8 67, i8* %259
br label %283
260: ; preds = %248
%261 = load i32, i32* %12
%262 = icmp slt i32 %261, 9
br i1 %262, label %263, label %282
263: ; preds = %260
store i32 0, i32* %8
br label %264
264: ; preds = %274, %263
%265 = load i32, i32* %8
%266 = load i32, i32* %12
%267 = sub nsw i32 %266, 5
%268 = icmp slt i32 %265, %267
br i1 %268, label %269, label %277
269: ; preds = %264
%270 = load i32, i32* %7
%271 = add nsw i32 %270, 1
store i32 %271, i32* %7
%272 = sext i32 %270 to i64
%273 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %272
store i8 67, i8* %273
br label %274
274: ; preds = %269
%275 = load i32, i32* %8
%276 = add nsw i32 %275, 1
store i32 %276, i32* %8
br label %264
277: ; preds = %264
%278 = load i32, i32* %7
%279 = add nsw i32 %278, 1
store i32 %279, i32* %7
%280 = sext i32 %278 to i64
%281 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %280
store i8 68, i8* %281
br label %282
282: ; preds = %277, %260
br label %283
283: ; preds = %282, %251
br label %284
284: ; preds = %283, %247
br label %285
285: ; preds = %284, %226
br label %286
286: ; preds = %285, %202
%287 = load i32, i32* %10
%288 = sdiv i32 %287, 10
store i32 %288, i32* %10
%289 = load i32, i32* %10
%290 = icmp sgt i32 %289, 0
br i1 %290, label %291, label %311
291: ; preds = %286
%292 = load i32, i32* %10
%293 = srem i32 %292, 10
store i32 %293, i32* %12
%294 = load i32, i32* %12
%295 = icmp slt i32 %294, 4
br i1 %295, label %296, label %310
296: ; preds = %291
store i32 0, i32* %8
br label %297
297: ; preds = %306, %296
%298 = load i32, i32* %8
%299 = load i32, i32* %12
%300 = icmp slt i32 %298, %299
br i1 %300, label %301, label %309
301: ; preds = %297
%302 = load i32, i32* %7
%303 = add nsw i32 %302, 1
store i32 %303, i32* %7
%304 = sext i32 %302 to i64
%305 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %304
store i8 77, i8* %305
br label %306
306: ; preds = %301
%307 = load i32, i32* %8
%308 = add nsw i32 %307, 1
store i32 %308, i32* %8
br label %297
309: ; preds = %297
br label %310
310: ; preds = %309, %291
br label %311
311: ; preds = %310, %286
%312 = load i32, i32* %4
%313 = icmp slt i32 %312, 0
br i1 %313, label %314, label %319
314: ; preds = %311
%315 = load i32, i32* %7
%316 = add nsw i32 %315, 1
store i32 %316, i32* %7
%317 = sext i32 %315 to i64
%318 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %317
store i8 45, i8* %318
br label %319
319: ; preds = %314, %311
store i32 0, i32* %8
br label %320
320: ; preds = %334, %319
%321 = load i32, i32* %8
%322 = load i32, i32* %7
%323 = icmp slt i32 %321, %322
br i1 %323, label %324, label %337
324: ; preds = %320
%325 = load i32, i32* %7
%326 = load i32, i32* %8
%327 = sub nsw i32 %325, %326
%328 = sub nsw i32 %327, 1
%329 = sext i32 %328 to i64
%330 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 %329
%331 = load i8, i8* %330
%332 = load i8*, i8** %5
%333 = getelementptr inbounds i8, i8* %332, i32 1
store i8* %333, i8** %5
store i8 %331, i8* %332
br label %334
334: ; preds = %324
%335 = load i32, i32* %8
%336 = add nsw i32 %335, 1
store i32 %336, i32* %8
br label %320
337: ; preds = %320
%338 = load i32, i32* %7
ret i32 %338
}

LLVM IR (-O2):
define i32 @itoROMAN(i32 %0, i8* nocapture writeonly %1, i32 %2) {
%4 = alloca [100 x i8]
%5 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 0
%6 = tail call i32 @llvm.abs.i32(i32 %0, i1 true)
store i8 0, i8* %5
%7 = icmp eq i32 %0, 0
br i1 %7, label %8, label %10
8: ; preds = %3
%9 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
store i8 48, i8* %9
br label %146
10: ; preds = %3
%11 = urem i32 %6, 100
%12 = icmp eq i32 %11, 0
br i1 %12, label %146, label %13
13: ; preds = %10
%14 = trunc i32 %11 to i8
%15 = urem i8 %14, 5
%16 = icmp ne i8 %15, 0
%17 = urem i8 %14, 10
%18 = zext i8 %17 to i32
%19 = icmp eq i8 %17, 0
%20 = or i1 %16, %19
br i1 %20, label %23, label %21
21: ; preds = %13
%22 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
store i8 86, i8* %22
br label %47
23: ; preds = %13
switch i32 %18, label %24 [
i32 9, label %29
i32 8, label %32
i32 7, label %37
i32 6, label %41
i32 4, label %44
]
24: ; preds = %23
br i1 %19, label %47, label %25
25: ; preds = %24
%26 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
%27 = zext i8 %17 to i64
%28 = add nuw nsw i32 %18, 1
br label %47
29: ; preds = %23
%30 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
store i8 88, i8* %30
%31 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 2
store i8 73, i8* %31
br label %47
32: ; preds = %23
%33 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
store i8 73, i8* %33
%34 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 2
store i8 73, i8* %34
%35 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 3
store i8 73, i8* %35
%36 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 4
store i8 86, i8* %36
br label %47
37: ; preds = %23
%38 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
store i8 73, i8* %38
%39 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 2
store i8 73, i8* %39
%40 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 3
store i8 86, i8* %40
br label %47
41: ; preds = %23
%42 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
store i8 73, i8* %42
%43 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 2
store i8 86, i8* %43
br label %47
44: ; preds = %23
%45 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
store i8 86, i8* %45
%46 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 2
store i8 73, i8* %46
br label %47
47: ; preds = %25, %24, %29, %37, %44, %41, %32, %21
%48 = phi i32 [ 2, %21 ], [ 3, %29 ], [ 5, %32 ], [ 4, %37 ], [ 3, %41 ], [ 3, %44 ], [ 1, %24 ], [ %28, %25 ]
%49 = icmp ult i32 %11, 10
br i1 %49, label %146, label %50
50: ; preds = %47
%51 = trunc i32 %11 to i8
%52 = udiv i8 %51, 10
%53 = zext i8 %52 to i64
%54 = urem i8 %52, 10
%55 = zext i8 %54 to i32
switch i32 %55, label %67 [
i32 4, label %56
i32 5, label %63
]
56: ; preds = %50
%57 = add nuw nsw i32 %48, 1
%58 = zext i32 %48 to i64
%59 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %58
store i8 76, i8* %59
%60 = add nuw nsw i32 %48, 2
%61 = zext i32 %57 to i64
%62 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %61
store i8 88, i8* %62
br label %146
63: ; preds = %50
%64 = add nuw nsw i32 %48, 1
%65 = zext i32 %48 to i64
%66 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %65
store i8 76, i8* %66
br label %146
67: ; preds = %50
%68 = icmp ult i8 %54, 4
br i1 %68, label %118, label %69
69: ; preds = %67
%70 = icmp ugt i8 %54, 5
br i1 %70, label %71, label %139
71: ; preds = %69
%72 = zext i32 %48 to i64
%73 = getelementptr [100 x i8], [100 x i8]* %4, i64 0, i64 %72
%74 = add nsw i32 %55, -5
%75 = zext i32 %74 to i64
%76 = icmp ult i32 %74, 4
br i1 %76, label %115, label %77
77: ; preds = %71
%78 = and i32 %74, -4
%79 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %72, i64 0
%80 = add nsw i32 %78, -4
%81 = lshr exact i32 %80, 2
%82 = add nuw nsw i32 %81, 1
%83 = and i32 %82, 7
%84 = icmp ult i32 %80, 28
br i1 %84, label %95, label %85
85: ; preds = %77
%86 = and i32 %82, 2147483640
br label %87
87: ; preds = %87, %85
%88 = phi <2 x i64> [ %79, %85 ], [ %91, %87 ]
%89 = phi <2 x i64> [ zeroinitializer, %85 ], [ %92, %87 ]
%90 = phi i32 [ 0, %85 ], [ %93, %87 ]
%91 = add <2 x i64> %88, <i64 8, i64 8>
%92 = add <2 x i64> %89, <i64 8, i64 8>
%93 = add i32 %90, 8
%94 = icmp eq i32 %93, %86
br i1 %94, label %95, label %87
95: ; preds = %87, %77
%96 = phi <2 x i64> [ undef, %77 ], [ %91, %87 ]
%97 = phi <2 x i64> [ undef, %77 ], [ %92, %87 ]
%98 = phi <2 x i64> [ %79, %77 ], [ %91, %87 ]
%99 = phi <2 x i64> [ zeroinitializer, %77 ], [ %92, %87 ]
%100 = icmp eq i32 %83, 0
br i1 %100, label %109, label %101
101: ; preds = %95, %101
%102 = phi <2 x i64> [ %105, %101 ], [ %98, %95 ]
%103 = phi <2 x i64> [ %106, %101 ], [ %99, %95 ]
%104 = phi i32 [ %107, %101 ], [ 0, %95 ]
%105 = add <2 x i64> %102, <i64 1, i64 1>
%106 = add <2 x i64> %103, <i64 1, i64 1>
%107 = add i32 %104, 1
%108 = icmp eq i32 %107, %83
br i1 %108, label %109, label %101
109: ; preds = %101, %95
%110 = phi <2 x i64> [ %96, %95 ], [ %105, %101 ]
%111 = phi <2 x i64> [ %97, %95 ], [ %106, %101 ]
%112 = add <2 x i64> %111, %110
%113 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %112)
%114 = icmp eq i32 %74, %78
br i1 %114, label %136, label %115
115: ; preds = %71, %109
%116 = phi i64 [ %72, %71 ], [ %113, %109 ]
%117 = phi i32 [ 0, %71 ], [ %78, %109 ]
br label %130
118: ; preds = %67
%119 = zext i32 %48 to i64
%120 = getelementptr [100 x i8], [100 x i8]* %4, i64 0, i64 %119
%121 = add nuw nsw i64 %53, 4294967295
%122 = and i64 %121, 4294967295
%123 = add nuw nsw i64 %122, 1
br label %124
124: ; preds = %118, %124
%125 = phi i64 [ %119, %118 ], [ %127, %124 ]
%126 = phi i32 [ 0, %118 ], [ %128, %124 ]
%127 = add nuw nsw i64 %125, 1
%128 = add nuw nsw i32 %126, 1
%129 = icmp eq i32 %128, %55
br i1 %129, label %144, label %124
130: ; preds = %115, %130
%131 = phi i64 [ %133, %130 ], [ %116, %115 ]
%132 = phi i32 [ %134, %130 ], [ %117, %115 ]
%133 = add nuw nsw i64 %131, 1
%134 = add nuw nsw i32 %132, 1
%135 = icmp eq i32 %134, %74
br i1 %135, label %136, label %130
136: ; preds = %130, %109
%137 = phi i64 [ %113, %109 ], [ %133, %130 ]
%138 = trunc i64 %137 to i32
br label %139
139: ; preds = %136, %69
%140 = phi i32 [ %48, %69 ], [ %138, %136 ]
%141 = add nuw nsw i32 %140, 1
%142 = zext i32 %140 to i64
%143 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %142
store i8 76, i8* %143
br label %146
144: ; preds = %124
%145 = trunc i64 %127 to i32
br label %146
146: ; preds = %144, %10, %63, %139, %56, %47, %8
%147 = phi i32 [ 2, %8 ], [ %48, %47 ], [ %60, %56 ], [ %64, %63 ], [ %141, %139 ], [ 1, %10 ], [ %145, %144 ]
%148 = icmp ult i32 %6, 100
br i1 %148, label %362, label %149
149: ; preds = %146
%150 = udiv i32 %6, 100
%151 = urem i32 %150, 10
switch i32 %151, label %163 [
i32 4, label %152
i32 5, label %159
]
152: ; preds = %149
%153 = add nsw i32 %147, 1
%154 = sext i32 %147 to i64
%155 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %154
store i8 68, i8* %155
%156 = add nsw i32 %147, 2
%157 = sext i32 %153 to i64
%158 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %157
store i8 67, i8* %158
br label %291
159: ; preds = %149
%160 = add nsw i32 %147, 1
%161 = sext i32 %147 to i64
%162 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %161
store i8 68, i8* %162
br label %299
163: ; preds = %149
%164 = icmp ult i32 %151, 4
br i1 %164, label %165, label %224
165: ; preds = %163
%166 = icmp eq i32 %151, 0
br i1 %166, label %299, label %167
167: ; preds = %165
%168 = sext i32 %147 to i64
%169 = getelementptr [100 x i8], [100 x i8]* %4, i64 0, i64 %168
%170 = add nsw i32 %150, -1
%171 = udiv i32 %6, 1000
%172 = mul nsw i32 %171, -10
%173 = add nsw i32 %172, %170
%174 = zext i32 %173 to i64
%175 = add nuw nsw i64 %174, 1
%176 = icmp ult i32 %151, 4
br i1 %176, label %215, label %177
177: ; preds = %167
%178 = and i32 %151, 12
%179 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %168, i64 0
%180 = add nsw i32 %178, -4
%181 = lshr exact i32 %180, 2
%182 = add nuw nsw i32 %181, 1
%183 = and i32 %182, 7
%184 = icmp ult i32 %180, 28
br i1 %184, label %195, label %185
185: ; preds = %177
%186 = and i32 %182, 2147483640
br label %187
187: ; preds = %187, %185
%188 = phi <2 x i64> [ %179, %185 ], [ %191, %187 ]
%189 = phi <2 x i64> [ zeroinitializer, %185 ], [ %192, %187 ]
%190 = phi i32 [ 0, %185 ], [ %193, %187 ]
%191 = add <2 x i64> %188, <i64 8, i64 8>
%192 = add <2 x i64> %189, <i64 8, i64 8>
%193 = add i32 %190, 8
%194 = icmp eq i32 %193, %186
br i1 %194, label %195, label %187
195: ; preds = %187, %177
%196 = phi <2 x i64> [ undef, %177 ], [ %191, %187 ]
%197 = phi <2 x i64> [ undef, %177 ], [ %192, %187 ]
%198 = phi <2 x i64> [ %179, %177 ], [ %191, %187 ]
%199 = phi <2 x i64> [ zeroinitializer, %177 ], [ %192, %187 ]
%200 = icmp eq i32 %183, 0
br i1 %200, label %209, label %201
201: ; preds = %195, %201
%202 = phi <2 x i64> [ %205, %201 ], [ %198, %195 ]
%203 = phi <2 x i64> [ %206, %201 ], [ %199, %195 ]
%204 = phi i32 [ %207, %201 ], [ 0, %195 ]
%205 = add <2 x i64> %202, <i64 1, i64 1>
%206 = add <2 x i64> %203, <i64 1, i64 1>
%207 = add i32 %204, 1
%208 = icmp eq i32 %207, %183
br i1 %208, label %209, label %201
209: ; preds = %201, %195
%210 = phi <2 x i64> [ %196, %195 ], [ %205, %201 ]
%211 = phi <2 x i64> [ %197, %195 ], [ %206, %201 ]
%212 = add <2 x i64> %211, %210
%213 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %212)
%214 = icmp eq i32 %151, %178
br i1 %214, label %296, label %215
215: ; preds = %167, %209
%216 = phi i64 [ %168, %167 ], [ %213, %209 ]
%217 = phi i32 [ 0, %167 ], [ %178, %209 ]
br label %218
218: ; preds = %215, %218
%219 = phi i64 [ %221, %218 ], [ %216, %215 ]
%220 = phi i32 [ %222, %218 ], [ %217, %215 ]
%221 = add nsw i64 %219, 1
%222 = add nuw nsw i32 %220, 1
%223 = icmp eq i32 %222, %151
br i1 %223, label %296, label %218
224: ; preds = %163
%225 = icmp eq i32 %151, 9
br i1 %225, label %275, label %226
226: ; preds = %224
%227 = icmp ugt i32 %151, 5
br i1 %227, label %228, label %291
228: ; preds = %226
%229 = sext i32 %147 to i64
%230 = getelementptr [100 x i8], [100 x i8]* %4, i64 0, i64 %229
%231 = add nsw i32 %151, -5
%232 = zext i32 %231 to i64
%233 = icmp ult i32 %231, 4
br i1 %233, label %272, label %234
234: ; preds = %228
%235 = and i32 %231, -4
%236 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %229, i64 0
%237 = add nsw i32 %235, -4
%238 = lshr exact i32 %237, 2
%239 = add nuw nsw i32 %238, 1
%240 = and i32 %239, 7
%241 = icmp ult i32 %237, 28
br i1 %241, label %252, label %242
242: ; preds = %234
%243 = and i32 %239, 2147483640
br label %244
244: ; preds = %244, %242
%245 = phi <2 x i64> [ %236, %242 ], [ %248, %244 ]
%246 = phi <2 x i64> [ zeroinitializer, %242 ], [ %249, %244 ]
%247 = phi i32 [ 0, %242 ], [ %250, %244 ]
%248 = add <2 x i64> %245, <i64 8, i64 8>
%249 = add <2 x i64> %246, <i64 8, i64 8>
%250 = add i32 %247, 8
%251 = icmp eq i32 %250, %243
br i1 %251, label %252, label %244
252: ; preds = %244, %234
%253 = phi <2 x i64> [ undef, %234 ], [ %248, %244 ]
%254 = phi <2 x i64> [ undef, %234 ], [ %249, %244 ]
%255 = phi <2 x i64> [ %236, %234 ], [ %248, %244 ]
%256 = phi <2 x i64> [ zeroinitializer, %234 ], [ %249, %244 ]
%257 = icmp eq i32 %240, 0
br i1 %257, label %266, label %258
258: ; preds = %252, %258
%259 = phi <2 x i64> [ %262, %258 ], [ %255, %252 ]
%260 = phi <2 x i64> [ %263, %258 ], [ %256, %252 ]
%261 = phi i32 [ %264, %258 ], [ 0, %252 ]
%262 = add <2 x i64> %259, <i64 1, i64 1>
%263 = add <2 x i64> %260, <i64 1, i64 1>
%264 = add i32 %261, 1
%265 = icmp eq i32 %264, %240
br i1 %265, label %266, label %258
266: ; preds = %258, %252
%267 = phi <2 x i64> [ %253, %252 ], [ %262, %258 ]
%268 = phi <2 x i64> [ %254, %252 ], [ %263, %258 ]
%269 = add <2 x i64> %268, %267
%270 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %269)
%271 = icmp eq i32 %231, %235
br i1 %271, label %288, label %272
272: ; preds = %228, %266
%273 = phi i64 [ %229, %228 ], [ %270, %266 ]
%274 = phi i32 [ 0, %228 ], [ %235, %266 ]
br label %282
275: ; preds = %224
%276 = add nsw i32 %147, 1
%277 = sext i32 %147 to i64
%278 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %277
store i8 77, i8* %278
%279 = add nsw i32 %147, 2
%280 = sext i32 %276 to i64
%281 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %280
store i8 67, i8* %281
br label %299
282: ; preds = %272, %282
%283 = phi i64 [ %285, %282 ], [ %273, %272 ]
%284 = phi i32 [ %286, %282 ], [ %274, %272 ]
%285 = add nsw i64 %283, 1
%286 = add nuw nsw i32 %284, 1
%287 = icmp eq i32 %286, %231
br i1 %287, label %288, label %282
288: ; preds = %282, %266
%289 = phi i64 [ %270, %266 ], [ %285, %282 ]
%290 = trunc i64 %289 to i32
br label %291
291: ; preds = %152, %288, %226
%292 = phi i32 [ %147, %226 ], [ %290, %288 ], [ %156, %152 ]
%293 = add nsw i32 %292, 1
%294 = sext i32 %292 to i64
%295 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %294
store i8 68, i8* %295
br label %299
296: ; preds = %218, %209
%297 = phi i64 [ %213, %209 ], [ %221, %218 ]
%298 = trunc i64 %297 to i32
br label %299
299: ; preds = %296, %165, %159, %275, %291
%300 = phi i32 [ %160, %159 ], [ %279, %275 ], [ %293, %291 ], [ %147, %165 ], [ %298, %296 ]
%301 = icmp ult i32 %6, 1000
br i1 %301, label %362, label %302
302: ; preds = %299
%303 = udiv i32 %6, 1000
%304 = urem i32 %303, 10
%305 = add nsw i32 %304, -1
%306 = icmp ult i32 %305, 3
br i1 %306, label %307, label %362
307: ; preds = %302
%308 = sext i32 %300 to i64
%309 = getelementptr [100 x i8], [100 x i8]* %4, i64 0, i64 %308
%310 = zext i32 %304 to i64
%311 = icmp ult i32 %304, 4
br i1 %311, label %350, label %312
312: ; preds = %307
%313 = and i32 %304, 12
%314 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %308, i64 0
%315 = add nsw i32 %313, -4
%316 = lshr exact i32 %315, 2
%317 = add nuw nsw i32 %316, 1
%318 = and i32 %317, 7
%319 = icmp ult i32 %315, 28
br i1 %319, label %330, label %320
320: ; preds = %312
%321 = and i32 %317, 2147483640
br label %322
322: ; preds = %322, %320
%323 = phi <2 x i64> [ %314, %320 ], [ %326, %322 ]
%324 = phi <2 x i64> [ zeroinitializer, %320 ], [ %327, %322 ]
%325 = phi i32 [ 0, %320 ], [ %328, %322 ]
%326 = add <2 x i64> %323, <i64 8, i64 8>
%327 = add <2 x i64> %324, <i64 8, i64 8>
%328 = add i32 %325, 8
%329 = icmp eq i32 %328, %321
br i1 %329, label %330, label %322
330: ; preds = %322, %312
%331 = phi <2 x i64> [ undef, %312 ], [ %326, %322 ]
%332 = phi <2 x i64> [ undef, %312 ], [ %327, %322 ]
%333 = phi <2 x i64> [ %314, %312 ], [ %326, %322 ]
%334 = phi <2 x i64> [ zeroinitializer, %312 ], [ %327, %322 ]
%335 = icmp eq i32 %318, 0
br i1 %335, label %344, label %336
336: ; preds = %330, %336
%337 = phi <2 x i64> [ %340, %336 ], [ %333, %330 ]
%338 = phi <2 x i64> [ %341, %336 ], [ %334, %330 ]
%339 = phi i32 [ %342, %336 ], [ 0, %330 ]
%340 = add <2 x i64> %337, <i64 1, i64 1>
%341 = add <2 x i64> %338, <i64 1, i64 1>
%342 = add i32 %339, 1
%343 = icmp eq i32 %342, %318
br i1 %343, label %344, label %336
344: ; preds = %336, %330
%345 = phi <2 x i64> [ %331, %330 ], [ %340, %336 ]
%346 = phi <2 x i64> [ %332, %330 ], [ %341, %336 ]
%347 = add <2 x i64> %346, %345
%348 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %347)
%349 = icmp eq i32 %304, %313
br i1 %349, label %359, label %350
350: ; preds = %307, %344
%351 = phi i64 [ %308, %307 ], [ %348, %344 ]
%352 = phi i32 [ 0, %307 ], [ %313, %344 ]
br label %353
353: ; preds = %350, %353
%354 = phi i64 [ %356, %353 ], [ %351, %350 ]
%355 = phi i32 [ %357, %353 ], [ %352, %350 ]
%356 = add nsw i64 %354, 1
%357 = add nuw nsw i32 %355, 1
%358 = icmp eq i32 %357, %304
br i1 %358, label %359, label %353
359: ; preds = %353, %344
%360 = phi i64 [ %348, %344 ], [ %356, %353 ]
%361 = trunc i64 %360 to i32
br label %362
362: ; preds = %359, %146, %302, %299
%363 = phi i32 [ %300, %302 ], [ %300, %299 ], [ %147, %146 ], [ %361, %359 ]
%364 = icmp slt i32 %0, 0
br i1 %364, label %365, label %369
365: ; preds = %362
%366 = add nsw i32 %363, 1
%367 = sext i32 %363 to i64
%368 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %367
store i8 45, i8* %368
br label %369
369: ; preds = %365, %362
%370 = phi i32 [ %366, %365 ], [ %363, %362 ]
%371 = icmp sgt i32 %370, 0
br i1 %371, label %372, label %493
372: ; preds = %369
%373 = zext i32 %370 to i64
%374 = icmp ult i32 %370, 8
br i1 %374, label %435, label %375
375: ; preds = %372
%376 = add nsw i64 %373, -1
%377 = add i32 %370, -1
%378 = trunc i64 %376 to i32
%379 = sub i32 %377, %378
%380 = icmp sgt i32 %379, %377
%381 = icmp ugt i64 %376, 4294967295
%382 = or i1 %380, %381
br i1 %382, label %435, label %383
383: ; preds = %375
%384 = icmp ult i32 %370, 32
br i1 %384, label %414, label %385
385: ; preds = %383
%386 = and i64 %373, 4294967264
br label %387
387: ; preds = %387, %385
%388 = phi i64 [ 0, %385 ], [ %406, %387 ]
%389 = getelementptr i8, i8* %1, i64 %388
%390 = trunc i64 %388 to i32
%391 = xor i32 %390, -1
%392 = add i32 %370, %391
%393 = sext i32 %392 to i64
%394 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %393
%395 = getelementptr inbounds i8, i8* %394, i64 -15
%396 = bitcast i8* %395 to <16 x i8>*
%397 = load <16 x i8>, <16 x i8>* %396
%398 = shufflevector <16 x i8> %397, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%399 = getelementptr inbounds i8, i8* %394, i64 -31
%400 = bitcast i8* %399 to <16 x i8>*
%401 = load <16 x i8>, <16 x i8>* %400
%402 = shufflevector <16 x i8> %401, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%403 = bitcast i8* %389 to <16 x i8>*
store <16 x i8> %398, <16 x i8>* %403
%404 = getelementptr i8, i8* %389, i64 16
%405 = bitcast i8* %404 to <16 x i8>*
store <16 x i8> %402, <16 x i8>* %405
%406 = add nuw i64 %388, 32
%407 = icmp eq i64 %406, %386
br i1 %407, label %408, label %387
408: ; preds = %387
%409 = icmp eq i64 %386, %373
br i1 %409, label %493, label %410
410: ; preds = %408
%411 = getelementptr i8, i8* %1, i64 %386
%412 = and i64 %373, 24
%413 = icmp eq i64 %412, 0
br i1 %413, label %435, label %414
414: ; preds = %383, %410
%415 = phi i64 [ %386, %410 ], [ 0, %383 ]
%416 = and i64 %373, 4294967288
%417 = getelementptr i8, i8* %1, i64 %416
br label %418
418: ; preds = %418, %414
%419 = phi i64 [ %415, %414 ], [ %431, %418 ]
%420 = getelementptr i8, i8* %1, i64 %419
%421 = trunc i64 %419 to i32
%422 = xor i32 %421, -1
%423 = add i32 %370, %422
%424 = sext i32 %423 to i64
%425 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %424
%426 = getelementptr inbounds i8, i8* %425, i64 -7
%427 = bitcast i8* %426 to <8 x i8>*
%428 = load <8 x i8>, <8 x i8>* %427
%429 = shufflevector <8 x i8> %428, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%430 = bitcast i8* %420 to <8 x i8>*
store <8 x i8> %429, <8 x i8>* %430
%431 = add nuw i64 %419, 8
%432 = icmp eq i64 %431, %416
br i1 %432, label %433, label %418
433: ; preds = %418
%434 = icmp eq i64 %416, %373
br i1 %434, label %493, label %435
435: ; preds = %375, %372, %410, %433
%436 = phi i64 [ 0, %372 ], [ 0, %375 ], [ %386, %410 ], [ %416, %433 ]
%437 = phi i8* [ %1, %372 ], [ %1, %375 ], [ %411, %410 ], [ %417, %433 ]
%438 = xor i64 %436, -1
%439 = add nsw i64 %438, %373
%440 = and i64 %373, 3
%441 = icmp eq i64 %440, 0
br i1 %441, label %456, label %442
442: ; preds = %435, %442
%443 = phi i64 [ %453, %442 ], [ %436, %435 ]
%444 = phi i8* [ %452, %442 ], [ %437, %435 ]
%445 = phi i64 [ %454, %442 ], [ 0, %435 ]
%446 = trunc i64 %443 to i32
%447 = xor i32 %446, -1
%448 = add i32 %370, %447
%449 = sext i32 %448 to i64
%450 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %449
%451 = load i8, i8* %450
%452 = getelementptr inbounds i8, i8* %444, i64 1
store i8 %451, i8* %444
%453 = add nuw nsw i64 %443, 1
%454 = add i64 %445, 1
%455 = icmp eq i64 %454, %440
br i1 %455, label %456, label %442
456: ; preds = %442, %435
%457 = phi i64 [ %436, %435 ], [ %453, %442 ]
%458 = phi i8* [ %437, %435 ], [ %452, %442 ]
%459 = icmp ult i64 %439, 3
br i1 %459, label %493, label %460
460: ; preds = %456, %460
%461 = phi i64 [ %491, %460 ], [ %457, %456 ]
%462 = phi i8* [ %490, %460 ], [ %458, %456 ]
%463 = trunc i64 %461 to i32
%464 = xor i32 %463, -1
%465 = add i32 %370, %464
%466 = sext i32 %465 to i64
%467 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %466
%468 = load i8, i8* %467
%469 = getelementptr inbounds i8, i8* %462, i64 1
store i8 %468, i8* %462
%470 = trunc i64 %461 to i32
%471 = sub i32 -2, %470
%472 = add i32 %370, %471
%473 = sext i32 %472 to i64
%474 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %473
%475 = load i8, i8* %474
%476 = getelementptr inbounds i8, i8* %462, i64 2
store i8 %475, i8* %469
%477 = trunc i64 %461 to i32
%478 = sub i32 -3, %477
%479 = add i32 %370, %478
%480 = sext i32 %479 to i64
%481 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %480
%482 = load i8, i8* %481
%483 = getelementptr inbounds i8, i8* %462, i64 3
store i8 %482, i8* %476
%484 = trunc i64 %461 to i32
%485 = sub i32 -4, %484
%486 = add i32 %370, %485
%487 = sext i32 %486 to i64
%488 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %487
%489 = load i8, i8* %488
%490 = getelementptr inbounds i8, i8* %462, i64 4
store i8 %489, i8* %483
%491 = add nuw nsw i64 %461, 4
%492 = icmp eq i64 %491, %373
br i1 %492, label %493, label %460
493: ; preds = %456, %460, %408, %433, %369
ret i32 %370
}