#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) {
  char *r = (char *)malloc(16 * sizeof(char));
  char *cr = r;
  int i;
  for (i = num / 1000; i > 0; --i)
    *cr++ = 'M';
  num %= 1000;
  if (num >= 900) {
    cr[0] = 'C';
    cr[1] = 'M';
    cr += 2;
    num -= 900;
  } else if (num >= 500) {
    *cr++ = 'D';
    num -= 500;
  } else if (num >= 400) {
    cr[0] = 'C';
    cr[1] = 'D';
    cr += 2;
    num -= 400;
  }
  for (i = num / 100; i > 0; --i)
    *cr++ = 'C';
  num %= 100;
  if (num >= 90) {
    cr[0] = 'X';
    cr[1] = 'C';
    cr += 2;
    num -= 90;
  } else if (num >= 50) {
    *cr++ = 'L';
    num -= 50;
  } else if (num >= 40) {
    cr[0] = 'X';
    cr[1] = 'L';
    cr += 2;
    num -= 40;
  }
  for (i = num / 10; i > 0; --i)
    *cr++ = 'X';
  num %= 10;
  if (9 == num) {
    cr[0] = 'I';
    cr[1] = 'X';
    cr += 2;
    num -= 9;
  } else if (num >= 5) {
    *cr++ = 'V';
    num -= 5;
  } else if (4 == num) {
    cr[0] = 'I';
    cr[1] = 'V';
    cr += 2;
    num -= 4;
  }
  for (i = num; i > 0; --i)
    *cr++ = 'I';
  *cr = 0;
  return r;
}


x86 assembly (clang, -O0):
<intToRoman>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    $0x10,%edi
call   1030 <malloc@plt>
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1169 <intToRoman+0x59>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x4d,(%rax)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    113f <intToRoman+0x2f>
mov    -0x4(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x4(%rbp)
cmpl   $0x384,-0x4(%rbp)
jl     11af <intToRoman+0x9f>
mov    -0x18(%rbp),%rax
movb   $0x43,(%rax)
mov    -0x18(%rbp),%rax
movb   $0x4d,0x1(%rax)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x384,%eax
mov    %eax,-0x4(%rbp)
jmp    121b <intToRoman+0x10b>
cmpl   $0x1f4,-0x4(%rbp)
jl     11de <intToRoman+0xce>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x44,(%rax)
mov    -0x4(%rbp),%eax
sub    $0x1f4,%eax
mov    %eax,-0x4(%rbp)
jmp    1216 <intToRoman+0x106>
cmpl   $0x190,-0x4(%rbp)
jl     1211 <intToRoman+0x101>
mov    -0x18(%rbp),%rax
movb   $0x43,(%rax)
mov    -0x18(%rbp),%rax
movb   $0x44,0x1(%rax)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x190,%eax
mov    %eax,-0x4(%rbp)
jmp    1216 <intToRoman+0x106>
jmp    121b <intToRoman+0x10b>
mov    -0x4(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1253 <intToRoman+0x143>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x43,(%rax)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1229 <intToRoman+0x119>
mov    -0x4(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0x4(%rbp)
cmpl   $0x5a,-0x4(%rbp)
jl     1294 <intToRoman+0x184>
mov    -0x18(%rbp),%rax
movb   $0x58,(%rax)
mov    -0x18(%rbp),%rax
movb   $0x43,0x1(%rax)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x5a,%eax
mov    %eax,-0x4(%rbp)
jmp    12f6 <intToRoman+0x1e6>
cmpl   $0x32,-0x4(%rbp)
jl     12be <intToRoman+0x1ae>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x4c,(%rax)
mov    -0x4(%rbp),%eax
sub    $0x32,%eax
mov    %eax,-0x4(%rbp)
jmp    12f1 <intToRoman+0x1e1>
cmpl   $0x28,-0x4(%rbp)
jl     12ec <intToRoman+0x1dc>
mov    -0x18(%rbp),%rax
movb   $0x58,(%rax)
mov    -0x18(%rbp),%rax
movb   $0x4c,0x1(%rax)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x28,%eax
mov    %eax,-0x4(%rbp)
jmp    12f1 <intToRoman+0x1e1>
jmp    12f6 <intToRoman+0x1e6>
mov    -0x4(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    132e <intToRoman+0x21e>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x58,(%rax)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1304 <intToRoman+0x1f4>
mov    -0x4(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x4(%rbp)
mov    $0x9,%eax
cmp    -0x4(%rbp),%eax
jne    1373 <intToRoman+0x263>
mov    -0x18(%rbp),%rax
movb   $0x49,(%rax)
mov    -0x18(%rbp),%rax
movb   $0x58,0x1(%rax)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x9,%eax
mov    %eax,-0x4(%rbp)
jmp    13d9 <intToRoman+0x2c9>
cmpl   $0x5,-0x4(%rbp)
jl     139d <intToRoman+0x28d>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x56,(%rax)
mov    -0x4(%rbp),%eax
sub    $0x5,%eax
mov    %eax,-0x4(%rbp)
jmp    13d4 <intToRoman+0x2c4>
mov    $0x4,%eax
cmp    -0x4(%rbp),%eax
jne    13cf <intToRoman+0x2bf>
mov    -0x18(%rbp),%rax
movb   $0x49,(%rax)
mov    -0x18(%rbp),%rax
movb   $0x56,0x1(%rax)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x4(%rbp)
jmp    13d4 <intToRoman+0x2c4>
jmp    13d9 <intToRoman+0x2c9>
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1409 <intToRoman+0x2f9>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x49,(%rax)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    13df <intToRoman+0x2cf>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<intToRoman>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %edi,%ebp
mov    $0x10,%edi
call   1040 <malloc@plt>
mov    %rax,%r14
mov    %rax,%r15
cmp    $0x3e8,%ebp
jl     116a <intToRoman+0x4a>
mov    %ebp,%eax
imul   $0x10624dd3,%rax,%rbx
shr    $0x26,%rbx
add    $0xffffffff,%ebx
lea    0x1(%rbx),%rdx
mov    %r14,%rdi
mov    $0x4d,%esi
call   1030 <memset@plt>
lea    (%r14,%rbx,1),%r15
add    $0x1,%r15
movslq %ebp,%rax
imul   $0x10624dd3,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x26,%rax
add    %ecx,%eax
imul   $0x3e8,%eax,%eax
sub    %eax,%ebp
cmp    $0x384,%ebp
jl     11a3 <intToRoman+0x83>
movw   $0x4d43,(%r15)
add    $0x2,%r15
add    $0xfffffc7c,%ebp
jmp    11d3 <intToRoman+0xb3>
cmp    $0x1f4,%ebp
jl     11bb <intToRoman+0x9b>
movb   $0x44,(%r15)
add    $0x1,%r15
add    $0xfffffe0c,%ebp
jmp    11d3 <intToRoman+0xb3>
cmp    $0x190,%ebp
jl     11d3 <intToRoman+0xb3>
movw   $0x4443,(%r15)
add    $0x2,%r15
add    $0xfffffe70,%ebp
cmp    $0x64,%bp
jl     1210 <intToRoman+0xf0>
movswl %bp,%eax
imul   $0x147b,%eax,%ebx
mov    %ebx,%eax
shr    $0x1f,%eax
sar    $0x13,%ebx
add    %eax,%ebx
test   %ebx,%ebx
mov    $0x1,%eax
cmovle %ebx,%eax
sub    %eax,%ebx
lea    0x1(%rbx),%rdx
mov    %r15,%rdi
mov    $0x43,%esi
call   1030 <memset@plt>
add    %rbx,%r15
add    $0x1,%r15
movswl %bp,%eax
imul   $0x147b,%eax,%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
sar    $0x13,%eax
add    %ecx,%eax
imul   $0x64,%eax,%eax
sub    %eax,%ebp
movswl %bp,%ebx
cmp    $0x5a,%bx
jl     1240 <intToRoman+0x120>
movw   $0x4358,(%r15)
add    $0x2,%r15
add    $0xffffffa6,%ebx
jmp    1266 <intToRoman+0x146>
cmp    $0x32,%bp
jl     1253 <intToRoman+0x133>
movb   $0x4c,(%r15)
add    $0x1,%r15
add    $0xffffffce,%ebx
jmp    1266 <intToRoman+0x146>
cmp    $0x28,%bp
jl     1266 <intToRoman+0x146>
movw   $0x4c58,(%r15)
add    $0x2,%r15
add    $0xffffffd8,%ebx
cmp    $0xa,%bl
jl     1294 <intToRoman+0x174>
movzbl %bl,%eax
imul   $0xcd,%eax,%eax
shr    $0xb,%eax
add    $0xff,%al
movzbl %al,%ebp
lea    0x1(%rbp),%rdx
mov    %r15,%rdi
mov    $0x58,%esi
call   1030 <memset@plt>
add    %rbp,%r15
add    $0x1,%r15
movsbl %bl,%eax
imul   $0x67,%eax,%eax
movzwl %ax,%eax
movswl %ax,%ecx
shr    $0xf,%eax
shr    $0xa,%ecx
add    %al,%cl
movzbl %cl,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
sub    %al,%bl
cmp    $0x9,%bl
jne    12bf <intToRoman+0x19f>
movw   $0x5849,(%r15)
jmp    12df <intToRoman+0x1bf>
movsbl %bl,%ebp
cmp    $0x5,%bl
jl     12d4 <intToRoman+0x1b4>
movb   $0x56,(%r15)
add    $0x1,%r15
add    $0xfffffffb,%ebp
jmp    12e5 <intToRoman+0x1c5>
cmp    $0x4,%bl
jne    12e5 <intToRoman+0x1c5>
movw   $0x5649,(%r15)
add    $0x2,%r15
jmp    1302 <intToRoman+0x1e2>
test   %ebp,%ebp
jle    1302 <intToRoman+0x1e2>
mov    %ebp,%edx
mov    %r15,%rdi
mov    $0x49,%esi
call   1030 <memset@plt>
add    $0xffffffff,%ebp
add    %rbp,%r15
add    $0x1,%r15
movb   $0x0,(%r15)
mov    %r14,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i8* @intToRoman(i32 %0) {
%2 = tail call i64 @malloc(i32 16)
%3 = inttoptr i64 %2 to i8*
%4 = icmp sgt i32 %0, 999
br i1 %4, label %5, label %11
5: ; preds = %1
%6 = udiv i32 %0, 1000
%7 = add nsw i32 %6, -1
%8 = zext i32 %7 to i64
%9 = add nuw nsw i64 %8, 1
%10 = getelementptr i8, i8* %3, i64 %9
br label %11
11: ; preds = %5, %1
%12 = phi i8* [ %3, %1 ], [ %10, %5 ]
%13 = srem i32 %0, 1000
%14 = icmp sgt i32 %13, 899
br i1 %14, label %15, label %19
15: ; preds = %11
store i8 67, i8* %12
%16 = getelementptr inbounds i8, i8* %12, i64 1
store i8 77, i8* %16
%17 = getelementptr inbounds i8, i8* %12, i64 2
%18 = add nsw i32 %13, -900
br label %30
19: ; preds = %11
%20 = icmp sgt i32 %13, 499
br i1 %20, label %21, label %24
21: ; preds = %19
%22 = getelementptr inbounds i8, i8* %12, i64 1
store i8 68, i8* %12
%23 = add nsw i32 %13, -500
br label %30
24: ; preds = %19
%25 = icmp sgt i32 %13, 399
br i1 %25, label %26, label %30
26: ; preds = %24
store i8 67, i8* %12
%27 = getelementptr inbounds i8, i8* %12, i64 1
store i8 68, i8* %27
%28 = getelementptr inbounds i8, i8* %12, i64 2
%29 = add nsw i32 %13, -400
br label %30
30: ; preds = %21, %26, %24, %15
%31 = phi i32 [ %18, %15 ], [ %23, %21 ], [ %29, %26 ], [ %13, %24 ]
%32 = phi i8* [ %17, %15 ], [ %22, %21 ], [ %28, %26 ], [ %12, %24 ]
%33 = trunc i32 %31 to i16
%34 = sdiv i16 %33, 100
%35 = sext i16 %34 to i32
%36 = icmp sgt i16 %33, 99
br i1 %36, label %37, label %43
37: ; preds = %30
%38 = call i32 @llvm.smin.i32(i32 %35, i32 1)
%39 = sub nsw i32 %35, %38
%40 = zext i32 %39 to i64
%41 = add nuw nsw i64 %40, 1
%42 = getelementptr i8, i8* %32, i64 %41
br label %43
43: ; preds = %37, %30
%44 = phi i8* [ %32, %30 ], [ %42, %37 ]
%45 = trunc i32 %31 to i16
%46 = srem i16 %45, 100
%47 = sext i16 %46 to i32
%48 = icmp sgt i16 %46, 89
br i1 %48, label %49, label %53
49: ; preds = %43
store i8 88, i8* %44
%50 = getelementptr inbounds i8, i8* %44, i64 1
store i8 67, i8* %50
%51 = getelementptr inbounds i8, i8* %44, i64 2
%52 = add nsw i32 %47, -90
br label %64
53: ; preds = %43
%54 = icmp sgt i16 %46, 49
br i1 %54, label %55, label %58
55: ; preds = %53
%56 = getelementptr inbounds i8, i8* %44, i64 1
store i8 76, i8* %44
%57 = add nsw i32 %47, -50
br label %64
58: ; preds = %53
%59 = icmp sgt i16 %46, 39
br i1 %59, label %60, label %64
60: ; preds = %58
store i8 88, i8* %44
%61 = getelementptr inbounds i8, i8* %44, i64 1
store i8 76, i8* %61
%62 = getelementptr inbounds i8, i8* %44, i64 2
%63 = add nsw i32 %47, -40
br label %64
64: ; preds = %55, %60, %58, %49
%65 = phi i32 [ %52, %49 ], [ %57, %55 ], [ %63, %60 ], [ %47, %58 ]
%66 = phi i8* [ %51, %49 ], [ %56, %55 ], [ %62, %60 ], [ %44, %58 ]
%67 = trunc i32 %65 to i8
%68 = icmp sgt i8 %67, 9
br i1 %68, label %69, label %75
69: ; preds = %64
%70 = udiv i8 %67, 10
%71 = add nsw i8 %70, -1
%72 = zext i8 %71 to i64
%73 = add nuw nsw i64 %72, 1
%74 = getelementptr i8, i8* %66, i64 %73
br label %75
75: ; preds = %69, %64
%76 = phi i8* [ %66, %64 ], [ %74, %69 ]
%77 = trunc i32 %65 to i8
%78 = srem i8 %77, 10
%79 = sext i8 %78 to i32
%80 = icmp eq i8 %78, 9
br i1 %80, label %81, label %84
81: ; preds = %75
store i8 73, i8* %76
%82 = getelementptr inbounds i8, i8* %76, i64 1
store i8 88, i8* %82
%83 = getelementptr inbounds i8, i8* %76, i64 2
br label %104
84: ; preds = %75
%85 = icmp sgt i8 %78, 4
br i1 %85, label %86, label %89
86: ; preds = %84
%87 = getelementptr inbounds i8, i8* %76, i64 1
store i8 86, i8* %76
%88 = add nsw i32 %79, -5
br label %94
89: ; preds = %84
%90 = icmp eq i8 %78, 4
br i1 %90, label %91, label %94
91: ; preds = %89
store i8 73, i8* %76
%92 = getelementptr inbounds i8, i8* %76, i64 1
store i8 86, i8* %92
%93 = getelementptr inbounds i8, i8* %76, i64 2
br label %104
94: ; preds = %86, %89
%95 = phi i32 [ %88, %86 ], [ %79, %89 ]
%96 = phi i8* [ %87, %86 ], [ %76, %89 ]
%97 = icmp sgt i32 %95, 0
br i1 %97, label %98, label %104
98: ; preds = %94
%99 = zext i32 %95 to i64
%100 = add nsw i32 %95, -1
%101 = zext i32 %100 to i64
%102 = add nuw nsw i64 %101, 1
%103 = getelementptr i8, i8* %96, i64 %102
br label %104
104: ; preds = %91, %81, %98, %94
%105 = phi i8* [ %96, %94 ], [ %103, %98 ], [ %93, %91 ], [ %83, %81 ]
store i8 0, i8* %105
ret i8* %3
}