#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ malloc(int);
char *intToRoman(int num) {
  int m = num / 1000;
  int c = num % 1000 / 100;
  int x = num % 100 / 10;
  int i = num % 10;
  int cl = c < 4 ? c : (c == 4 || c == 9 ? 2 : c - 4);
  ;
  int xl = x < 4 ? x : (x == 4 || x == 9 ? 2 : x - 4);
  ;
  int il = i < 4 ? i : (i == 4 || i == 9 ? 2 : i - 4);
  ;
  int l = m + cl + xl + il;
  char *r = (char *)malloc((l + 1) * sizeof(char));
  r[l] = '\0';
  int k = 0;
  for (int j = 0; j < m; j++) {
    r[k] = 'M';
    k++;
  }
  if (c < 4) {
    for (int j = 0; j < c; j++)
      r[k++] = 'C';
  } else if (c == 4) {
    r[k++] = 'C';
    r[k++] = 'D';
  } else if (c == 9) {
    r[k++] = 'C';
    r[k++] = 'M';
  } else {
    r[k++] = 'D';
    for (int j = 0; j < c - 5; j++)
      r[k++] = 'C';
  }
  if (x < 4) {
    for (int j = 0; j < x; j++)
      r[k++] = 'X';
  } else if (x == 4) {
    r[k++] = 'X';
    r[k++] = 'L';
  } else if (x == 9) {
    r[k++] = 'X';
    r[k++] = 'C';
  } else {
    r[k++] = 'L';
    for (int j = 0; j < x - 5; j++)
      r[k++] = 'X';
  }
  if (i < 4) {
    for (int j = 0; j < i; j++)
      r[k++] = 'I';
  } else if (i == 4) {
    r[k++] = 'I';
    r[k++] = 'V';
  } else if (i == 9) {
    r[k++] = 'I';
    r[k++] = 'X';
  } else {
    r[k++] = 'V';
    for (int j = 0; j < i - 5; j++)
      r[k++] = 'I';
  }
  return r;
}


x86 assembly (clang, -O0):
<intToRoman>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x10(%rbp)
mov    -0x4(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
cmpl   $0x4,-0xc(%rbp)
jge    117c <intToRoman+0x6c>
mov    -0xc(%rbp),%eax
mov    %eax,-0x54(%rbp)
jmp    11ac <intToRoman+0x9c>
cmpl   $0x4,-0xc(%rbp)
je     1190 <intToRoman+0x80>
cmpl   $0x9,-0xc(%rbp)
jne    119d <intToRoman+0x8d>
mov    $0x2,%eax
mov    %eax,-0x58(%rbp)
jmp    11a6 <intToRoman+0x96>
mov    -0xc(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x4,-0x10(%rbp)
jge    11c7 <intToRoman+0xb7>
mov    -0x10(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    11f7 <intToRoman+0xe7>
cmpl   $0x4,-0x10(%rbp)
je     11db <intToRoman+0xcb>
cmpl   $0x9,-0x10(%rbp)
jne    11e8 <intToRoman+0xd8>
mov    $0x2,%eax
mov    %eax,-0x60(%rbp)
jmp    11f1 <intToRoman+0xe1>
mov    -0x10(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x4,-0x14(%rbp)
jge    1212 <intToRoman+0x102>
mov    -0x14(%rbp),%eax
mov    %eax,-0x64(%rbp)
jmp    1242 <intToRoman+0x132>
cmpl   $0x4,-0x14(%rbp)
je     1226 <intToRoman+0x116>
cmpl   $0x9,-0x14(%rbp)
jne    1233 <intToRoman+0x123>
mov    $0x2,%eax
mov    %eax,-0x68(%rbp)
jmp    123c <intToRoman+0x12c>
mov    -0x14(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
add    -0x18(%rbp),%eax
add    -0x1c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x0,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x24(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    12b7 <intToRoman+0x1a7>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movb   $0x4d,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1288 <intToRoman+0x178>
cmpl   $0x4,-0xc(%rbp)
jge    12fd <intToRoman+0x1ed>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12f8 <intToRoman+0x1e8>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x43,(%rax,%rcx,1)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12c8 <intToRoman+0x1b8>
jmp    13d4 <intToRoman+0x2c4>
cmpl   $0x4,-0xc(%rbp)
jne    1338 <intToRoman+0x228>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x43,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x44,(%rax,%rcx,1)
jmp    13cf <intToRoman+0x2bf>
cmpl   $0x9,-0xc(%rbp)
jne    1373 <intToRoman+0x263>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x43,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x4d,(%rax,%rcx,1)
jmp    13ca <intToRoman+0x2ba>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x44,(%rax,%rcx,1)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x5,%ecx
cmp    %ecx,%eax
jge    13c5 <intToRoman+0x2b5>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x43,(%rax,%rcx,1)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1390 <intToRoman+0x280>
jmp    13ca <intToRoman+0x2ba>
jmp    13cf <intToRoman+0x2bf>
jmp    13d4 <intToRoman+0x2c4>
cmpl   $0x4,-0x10(%rbp)
jge    141a <intToRoman+0x30a>
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1415 <intToRoman+0x305>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    13e5 <intToRoman+0x2d5>
jmp    14f1 <intToRoman+0x3e1>
cmpl   $0x4,-0x10(%rbp)
jne    1455 <intToRoman+0x345>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x4c,(%rax,%rcx,1)
jmp    14ec <intToRoman+0x3dc>
cmpl   $0x9,-0x10(%rbp)
jne    1490 <intToRoman+0x380>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x43,(%rax,%rcx,1)
jmp    14e7 <intToRoman+0x3d7>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x4c,(%rax,%rcx,1)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    $0x5,%ecx
cmp    %ecx,%eax
jge    14e2 <intToRoman+0x3d2>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    14ad <intToRoman+0x39d>
jmp    14e7 <intToRoman+0x3d7>
jmp    14ec <intToRoman+0x3dc>
jmp    14f1 <intToRoman+0x3e1>
cmpl   $0x4,-0x14(%rbp)
jge    1537 <intToRoman+0x427>
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1532 <intToRoman+0x422>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x49,(%rax,%rcx,1)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1502 <intToRoman+0x3f2>
jmp    160e <intToRoman+0x4fe>
cmpl   $0x4,-0x14(%rbp)
jne    1572 <intToRoman+0x462>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x49,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x56,(%rax,%rcx,1)
jmp    1609 <intToRoman+0x4f9>
cmpl   $0x9,-0x14(%rbp)
jne    15ad <intToRoman+0x49d>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x49,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x58,(%rax,%rcx,1)
jmp    1604 <intToRoman+0x4f4>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x56,(%rax,%rcx,1)
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x5,%ecx
cmp    %ecx,%eax
jge    15ff <intToRoman+0x4ef>
mov    -0x30(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x34(%rbp)
movslq %ecx,%rcx
movb   $0x49,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    15ca <intToRoman+0x4ba>
jmp    1604 <intToRoman+0x4f4>
jmp    1609 <intToRoman+0x4f9>
jmp    160e <intToRoman+0x4fe>
mov    -0x30(%rbp),%rax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<intToRoman>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %edi,%r12d
movslq %edi,%r15
imul   $0x10624dd3,%r15,%rbx
mov    %rbx,%rax
shr    $0x3f,%rax
sar    $0x26,%rbx
add    %eax,%ebx
imul   $0x3e8,%ebx,%eax
imul   $0x51eb851f,%r15,%rcx
mov    %r15d,%ebp
imul   $0x66666667,%r15,%rdx
sub    %eax,%r15d
movswl %r15w,%eax
mov    %eax,0x1c(%rsp)
imul   $0x147b,%eax,%r14d
mov    %r14d,%eax
shr    $0x1f,%eax
sar    $0x13,%r14d
add    %eax,%r14d
mov    %rcx,%rax
shr    $0x3f,%rax
sar    $0x25,%rcx
add    %eax,%ecx
imul   $0x64,%ecx,%eax
sub    %eax,%ebp
movsbl %bpl,%eax
imul   $0x67,%eax,%eax
movzwl %ax,%eax
movswl %ax,%ecx
shr    $0xf,%eax
shr    $0xa,%ecx
add    %al,%cl
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x22,%rdx
add    %eax,%edx
add    %edx,%edx
lea    (%rdx,%rdx,4),%esi
mov    %r14d,%eax
cmp    $0x190,%r15d
jl     11e6 <intToRoman+0xc6>
lea    -0x384(%r15),%edx
lea    -0x4(%r14),%eax
cmp    $0x64,%edx
mov    $0x2,%edx
cmovb  %edx,%eax
lea    -0x190(%r15),%edi
cmp    $0x64,%edi
cmovb  %edx,%eax
movsbl %cl,%edx
mov    %r12d,%edi
sub    %esi,%edi
mov    %edx,%ecx
cmp    $0x28,%ebp
jl     1212 <intToRoman+0xf2>
lea    -0x5a(%rbp),%esi
lea    -0x4(%rdx),%ecx
cmp    $0xa,%esi
mov    $0x2,%r8d
cmovb  %r8d,%ecx
lea    -0x28(%rbp),%esi
cmp    $0xa,%esi
cmovb  %r8d,%ecx
mov    %rdx,0x20(%rsp)
mov    %rbp,0x10(%rsp)
mov    %edi,%edx
cmp    $0x4,%edi
jl     1237 <intToRoman+0x117>
lea    -0x4(%rdi),%edx
cmp    $0x9,%edi
mov    $0x2,%esi
cmove  %esi,%edx
cmp    $0x4,%edi
cmove  %esi,%edx
mov    %rdi,0x8(%rsp)
add    %ebx,%eax
add    %ecx,%eax
lea    (%rax,%rdx,1),%ebp
lea    (%rdx,%rax,1),%edi
add    $0x1,%edi
call   1040 <malloc@plt>
movslq %ebp,%rcx
mov    %rax,%rbp
movb   $0x0,(%rax,%rcx,1)
xor    %r13d,%r13d
cmp    $0x3e8,%r12d
jl     127e <intToRoman+0x15e>
add    $0xffffffff,%ebx
add    $0x1,%rbx
mov    %rbp,%rdi
mov    $0x4d,%esi
mov    %rbx,%rdx
call   1030 <memset@plt>
mov    %ebx,%r13d
cmp    $0x18f,%r15d
jg     12cb <intToRoman+0x1ab>
cmp    $0x64,%r15w
jl     1398 <intToRoman+0x278>
mov    %r13d,%r13d
mov    %rbp,%rdi
add    %r13,%rdi
cmp    $0x2,%r14d
mov    $0x1,%ebx
cmovge %r14d,%ebx
mov    $0x43,%esi
mov    %rbx,%rdx
call   1030 <memset@plt>
xor    %eax,%eax
cmp    $0x4,%ebx
jae    130a <intToRoman+0x1ea>
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%rsi
jmp    1413 <intToRoman+0x2f3>
lea    -0x190(%r15),%eax
cmp    $0x63,%eax
ja     12ea <intToRoman+0x1ca>
mov    %r13d,%eax
movw   $0x4443,0x0(%rbp,%rax,1)
add    $0x2,%r13d
jmp    1398 <intToRoman+0x278>
add    $0xfffffc7c,%r15d
mov    %r13d,%eax
cmp    $0x63,%r15d
ja     1342 <intToRoman+0x222>
movw   $0x4d43,0x0(%rbp,%rax,1)
add    $0x2,%r13d
jmp    1398 <intToRoman+0x278>
mov    %ebx,%eax
and    $0x7ffffffc,%eax
movd   %r13d,%xmm0
lea    -0x4(%rax),%esi
mov    %esi,%edi
shr    $0x2,%edi
add    $0x1,%edi
mov    %edi,%ecx
and    $0x7,%ecx
cmp    $0x1c,%esi
jae    13b0 <intToRoman+0x290>
pxor   %xmm1,%xmm1
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%rsi
jmp    13dd <intToRoman+0x2bd>
movb   $0x44,0x0(%rbp,%rax,1)
add    $0x1,%r13d
cmpl   $0x258,0x1c(%rsp)
jl     1398 <intToRoman+0x278>
mov    %r13d,%r13d
mov    %rbp,%r15
mov    %rbp,%rdi
add    %r13,%rdi
cmp    $0x7,%r14d
mov    $0x6,%ebp
cmovge %r14d,%ebp
lea    -0x5(%rbp),%ebx
mov    $0x43,%esi
mov    %rbx,%rdx
call   1030 <memset@plt>
xor    %eax,%eax
cmp    $0x4,%ebx
jae    1528 <intToRoman+0x408>
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%rsi
jmp    1633 <intToRoman+0x513>
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%rsi
cmp    $0x27,%esi
jle    1434 <intToRoman+0x314>
jmp    1657 <intToRoman+0x537>
and    $0xfffffff8,%edi
pxor   %xmm1,%xmm1
movdqa 0xc41(%rip),%xmm2
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%rsi
nopl   0x0(%rax)
paddq  %xmm2,%xmm0
paddq  %xmm2,%xmm1
add    $0xfffffff8,%edi
jne    13d0 <intToRoman+0x2b0>
test   %ecx,%ecx
je     13fd <intToRoman+0x2dd>
pcmpeqd %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
psubq  %xmm2,%xmm0
psubq  %xmm2,%xmm1
add    $0xffffffff,%ecx
jne    13f0 <intToRoman+0x2d0>
paddq  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddq  %xmm0,%xmm1
movq   %xmm1,%r13
cmp    %eax,%ebx
je     142b <intToRoman+0x30b>
sub    %ebx,%eax
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rcx
cmp    %ecx,%eax
jne    1420 <intToRoman+0x300>
sub    %rcx,%r13
cmp    $0x27,%esi
jg     1657 <intToRoman+0x537>
cmp    $0xa,%sil
jl     171a <intToRoman+0x5fa>
mov    %rbp,%rax
movslq %r13d,%rbp
mov    %rax,%r14
lea    (%rax,%rbp,1),%rdi
mov    0x20(%rsp),%rax
cmp    $0x2,%eax
mov    $0x1,%ebx
cmovge %eax,%ebx
mov    $0x58,%esi
mov    %rbx,%rdx
call   1030 <memset@plt>
lea    0x1(%rbx),%ecx
and    $0xfffffffe,%ecx
add    $0xffffffff,%ebx
movd   %ebx,%xmm0
pshufd $0x50,%xmm0,%xmm0
movq   %rbp,%xmm2
pcmpeqd %xmm3,%xmm3
movdqa %xmm2,%xmm1
psubq  %xmm3,%xmm1
xor    %eax,%eax
cmp    $0x2,%ecx
je     14d0 <intToRoman+0x3b0>
movdqa 0xb76(%rip),%xmm3
paddq  %xmm2,%xmm3
mov    $0x2,%eax
cmp    $0x4,%ecx
jne    14b2 <intToRoman+0x392>
movdqa %xmm1,%xmm2
movdqa %xmm3,%xmm1
jmp    14d0 <intToRoman+0x3b0>
movdqa 0xb66(%rip),%xmm1
paddq  %xmm2,%xmm1
mov    $0x4,%eax
cmp    $0x6,%ecx
jne    155e <intToRoman+0x43e>
movdqa %xmm3,%xmm2
mov    0x8(%rsp),%rdx
mov    %r14,%rbp
movd   %eax,%xmm3
pshufd $0x50,%xmm3,%xmm3
por    0xb67(%rip),%xmm3
movdqa 0xb6f(%rip),%xmm4
pxor   %xmm4,%xmm0
pxor   %xmm4,%xmm3
pcmpgtd %xmm0,%xmm3
pxor   %xmm0,%xmm0
pcmpgtd %xmm3,%xmm0
punpckldq %xmm0,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm1,%xmm3
por    %xmm2,%xmm3
pshufd $0xee,%xmm3,%xmm0
paddq  %xmm3,%xmm0
movd   %xmm0,%r13d
jmp    171a <intToRoman+0x5fa>
mov    %ebx,%eax
and    $0xfffffffc,%eax
movd   %r13d,%xmm0
lea    -0x4(%rax),%esi
mov    %esi,%edi
shr    $0x2,%edi
add    $0x1,%edi
mov    %edi,%ecx
and    $0x7,%ecx
cmp    $0x1c,%esi
jae    15d7 <intToRoman+0x4b7>
pxor   %xmm1,%xmm1
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%rsi
jmp    15fd <intToRoman+0x4dd>
movdqa 0xaca(%rip),%xmm3
paddq  %xmm2,%xmm3
mov    $0x6,%eax
cmp    $0x8,%ecx
je     14a8 <intToRoman+0x388>
movdqa 0xac0(%rip),%xmm1
paddq  %xmm2,%xmm1
mov    $0x8,%eax
cmp    $0xa,%ecx
je     14cc <intToRoman+0x3ac>
movdqa 0xad6(%rip),%xmm3
paddq  %xmm2,%xmm3
mov    $0xa,%eax
cmp    $0xc,%ecx
je     14a8 <intToRoman+0x388>
movdqa 0xacc(%rip),%xmm1
paddq  %xmm2,%xmm1
mov    $0xc,%eax
cmp    $0xe,%ecx
mov    0x8(%rsp),%rdx
mov    %r14,%rbp
jne    1816 <intToRoman+0x6f6>
movdqa %xmm3,%xmm2
jmp    14d8 <intToRoman+0x3b8>
and    $0xfffffff8,%edi
pxor   %xmm1,%xmm1
movdqa 0xa1a(%rip),%xmm2
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%rsi
paddq  %xmm2,%xmm0
paddq  %xmm2,%xmm1
add    $0xfffffff8,%edi
jne    15f0 <intToRoman+0x4d0>
test   %ecx,%ecx
je     161d <intToRoman+0x4fd>
pcmpeqd %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
psubq  %xmm2,%xmm0
psubq  %xmm2,%xmm1
add    $0xffffffff,%ecx
jne    1610 <intToRoman+0x4f0>
paddq  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddq  %xmm0,%xmm1
movq   %xmm1,%r13
cmp    %eax,%ebx
je     164b <intToRoman+0x52b>
sub    %ebp,%eax
add    $0x5,%eax
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rcx
cmp    %ecx,%eax
jne    1640 <intToRoman+0x520>
sub    %rcx,%r13
mov    %r15,%rbp
cmp    $0x27,%esi
jle    1434 <intToRoman+0x314>
lea    -0x28(%rsi),%eax
cmp    $0x9,%eax
ja     1672 <intToRoman+0x552>
movslq %r13d,%rax
movw   $0x4c58,0x0(%rbp,%rax,1)
add    $0x2,%r13d
jmp    171a <intToRoman+0x5fa>
mov    %esi,%eax
add    $0xffffffa6,%eax
cmp    $0x9,%eax
ja     168f <intToRoman+0x56f>
movslq %r13d,%rax
movw   $0x4358,0x0(%rbp,%rax,1)
add    $0x2,%r13d
jmp    171a <intToRoman+0x5fa>
movslq %r13d,%r13
movb   $0x4c,0x0(%rbp,%r13,1)
add    $0x1,%r13d
cmp    $0x3c,%sil
jl     171a <intToRoman+0x5fa>
movslq %r13d,%rbx
mov    %rbp,%r14
lea    (%rbx,%rbp,1),%rdi
mov    0x20(%rsp),%rax
cmp    $0x7,%eax
mov    $0x6,%ebp
cmovge %eax,%ebp
lea    -0x5(%rbp),%edx
mov    $0x58,%esi
call   1030 <memset@plt>
lea    -0x4(%rbp),%ecx
and    $0xfffffffe,%ecx
add    $0xfffffffa,%ebp
movd   %ebp,%xmm0
pshufd $0x50,%xmm0,%xmm1
movq   %rbx,%xmm2
pcmpeqd %xmm3,%xmm3
movdqa %xmm2,%xmm0
psubq  %xmm3,%xmm0
xor    %eax,%eax
cmp    $0x2,%ecx
je     17d0 <intToRoman+0x6b0>
movdqa 0x911(%rip),%xmm3
paddq  %xmm2,%xmm3
mov    $0x2,%eax
cmp    $0x4,%ecx
jne    178b <intToRoman+0x66b>
movdqa %xmm0,%xmm2
movdqa %xmm3,%xmm0
jmp    17d0 <intToRoman+0x6b0>
cmp    $0x3,%edx
jg     1730 <intToRoman+0x610>
test   %edx,%edx
jle    1779 <intToRoman+0x659>
movslq %r13d,%rax
mov    %rbp,%rdi
add    %rax,%rdi
mov    %edx,%edx
jmp    176f <intToRoman+0x64f>
cmp    $0x9,%edx
je     1746 <intToRoman+0x626>
cmp    $0x4,%edx
jne    1752 <intToRoman+0x632>
movslq %r13d,%rax
movw   $0x5649,0x0(%rbp,%rax,1)
jmp    1779 <intToRoman+0x659>
movslq %r13d,%rax
movw   $0x5849,0x0(%rbp,%rax,1)
jmp    1779 <intToRoman+0x659>
movslq %r13d,%rax
movb   $0x56,0x0(%rbp,%rax,1)
cmp    $0x6,%edx
jb     1779 <intToRoman+0x659>
add    $0xfffffffb,%edx
add    $0x1,%r13d
movslq %r13d,%rax
mov    %rbp,%rdi
add    %rax,%rdi
mov    $0x49,%esi
call   1030 <memset@plt>
mov    %rbp,%rax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movdqa 0x88d(%rip),%xmm0
paddq  %xmm2,%xmm0
mov    $0x4,%eax
cmp    $0x6,%ecx
je     17cc <intToRoman+0x6ac>
movdqa 0x887(%rip),%xmm3
paddq  %xmm2,%xmm3
mov    $0x6,%eax
cmp    $0x8,%ecx
je     170d <intToRoman+0x5ed>
movdqa %xmm2,%xmm0
paddq  0x879(%rip),%xmm0
mov    $0x8,%eax
movdqa %xmm3,%xmm2
mov    0x8(%rsp),%rdx
mov    %r14,%rbp
movd   %eax,%xmm3
pshufd $0x50,%xmm3,%xmm3
por    0x867(%rip),%xmm3
movdqa 0x86f(%rip),%xmm4
pxor   %xmm4,%xmm1
pxor   %xmm4,%xmm3
pcmpgtd %xmm1,%xmm3
pxor   %xmm1,%xmm1
pcmpgtd %xmm3,%xmm1
punpckldq %xmm1,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm0,%xmm3
jmp    1511 <intToRoman+0x3f1>
movdqa %xmm2,%xmm3
paddq  0x7de(%rip),%xmm3
mov    $0xe,%eax
movdqa %xmm1,%xmm2
movdqa %xmm3,%xmm1
jmp    14d8 <intToRoman+0x3b8>

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

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