unsigned long long makingCandy(unsigned long long m, unsigned long long w,
                               unsigned long long p, unsigned long long sum,
                               unsigned long long n) {
  unsigned long long ret = 0;
  if (n > sum) {
    if (m > (n - sum) / w) {
      ret = 1;
    } else {
      if (0 == (n - sum) % (m * w)) {
        ret = (n - sum) / (m * w);
      } else {
        ret = (n - sum) / (m * w) + 1;
      }
      unsigned long long added = 1;
      while (added <= (n - sum) / p + 1) {
        unsigned long long days = 0;
        if (0 == (p * added - sum) % (m * w)) {
          days = (p * added - sum) / (m * w);
        } else {
          days = (p * added - sum) / (m * w) + 1;
        }
        if (days >= ret) {
          break;
        }
        unsigned long long new_m = m, new_w = w;
        if (m == w) {
          if (0 == added % 2) {
            new_m += added / 2;
            new_w += added / 2;
          } else {
            new_m += added / 2 + 1;
            new_w += added / 2;
          }
        } else {
          if (m > w) {
            if (added <= m - w) {
              new_w += added;
            } else {
              unsigned long long new_added = added - m + w;
              new_w = new_m;
              if (0 == new_added % 2) {
                new_m += new_added / 2;
                new_w += new_added / 2;
              } else {
                new_m += new_added / 2 + 1;
                new_w += new_added / 2;
              }
            }
          } else {
            if (added <= w - m) {
              new_m += added;
            } else {
              unsigned long long new_added = added - w + m;
              new_m = new_w;
              if (0 == new_added % 2) {
                new_m += new_added / 2;
                new_w += new_added / 2;
              } else {
                new_m += new_added / 2 + 1;
                new_w += new_added / 2;
              }
            }
          }
        }
        days +=
            makingCandy(new_m, new_w, p, sum + days * (m * w) - added * p, n);
        if (days < ret) {
          ret = days;
        }
        added++;
      }
    }
  }
  return ret;
}


x86 assembly (clang, -O0):
<makingCandy>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movq   $0x0,-0x30(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jbe    14dd <makingCandy+0x3cd>
mov    -0x8(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x28(%rbp),%rax
sub    -0x20(%rbp),%rax
xor    %ecx,%ecx
mov    %ecx,%edx
divq   -0x10(%rbp)
mov    %rax,%rcx
mov    -0x68(%rbp),%rax
cmp    %rcx,%rax
jbe    1177 <makingCandy+0x67>
movq   $0x1,-0x30(%rbp)
jmp    14d8 <makingCandy+0x3c8>
mov    -0x28(%rbp),%rax
sub    -0x20(%rbp),%rax
mov    -0x8(%rbp),%rcx
imul   -0x10(%rbp),%rcx
xor    %edx,%edx
div    %rcx
xor    %eax,%eax
cmp    %rdx,%rax
jne    11b7 <makingCandy+0xa7>
mov    -0x28(%rbp),%rax
sub    -0x20(%rbp),%rax
mov    -0x8(%rbp),%rcx
imul   -0x10(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    %rax,-0x30(%rbp)
jmp    11d5 <makingCandy+0xc5>
mov    -0x28(%rbp),%rax
sub    -0x20(%rbp),%rax
mov    -0x8(%rbp),%rcx
imul   -0x10(%rbp),%rcx
xor    %edx,%edx
div    %rcx
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movq   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x28(%rbp),%rax
sub    -0x20(%rbp),%rax
xor    %ecx,%ecx
mov    %ecx,%edx
divq   -0x18(%rbp)
mov    %rax,%rcx
mov    -0x70(%rbp),%rax
add    $0x1,%rcx
cmp    %rcx,%rax
ja     14d3 <makingCandy+0x3c3>
movq   $0x0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
imul   -0x38(%rbp),%rax
sub    -0x20(%rbp),%rax
mov    -0x8(%rbp),%rcx
imul   -0x10(%rbp),%rcx
xor    %edx,%edx
div    %rcx
xor    %eax,%eax
cmp    %rdx,%rax
jne    125b <makingCandy+0x14b>
mov    -0x18(%rbp),%rax
imul   -0x38(%rbp),%rax
sub    -0x20(%rbp),%rax
mov    -0x8(%rbp),%rcx
imul   -0x10(%rbp),%rcx
xor    %edx,%edx
div    %rcx
mov    %rax,-0x40(%rbp)
jmp    127e <makingCandy+0x16e>
mov    -0x18(%rbp),%rax
imul   -0x38(%rbp),%rax
sub    -0x20(%rbp),%rax
mov    -0x8(%rbp),%rcx
imul   -0x10(%rbp),%rcx
xor    %edx,%edx
div    %rcx
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jb     1291 <makingCandy+0x181>
jmp    14d3 <makingCandy+0x3c3>
mov    -0x8(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x8(%rbp),%rax
cmp    -0x10(%rbp),%rax
jne    1310 <makingCandy+0x200>
mov    -0x38(%rbp),%rcx
and    $0x1,%rcx
xor    %eax,%eax
cmp    %rcx,%rax
jne    12e7 <makingCandy+0x1d7>
mov    -0x38(%rbp),%rax
shr    $0x1,%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
shr    $0x1,%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    130b <makingCandy+0x1fb>
mov    -0x38(%rbp),%rax
shr    $0x1,%rax
add    $0x1,%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
shr    $0x1,%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    146b <makingCandy+0x35b>
mov    -0x8(%rbp),%rax
cmp    -0x10(%rbp),%rax
jbe    13c2 <makingCandy+0x2b2>
mov    -0x38(%rbp),%rax
mov    -0x8(%rbp),%rcx
sub    -0x10(%rbp),%rcx
cmp    %rcx,%rax
ja     1344 <makingCandy+0x234>
mov    -0x38(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    13bd <makingCandy+0x2ad>
mov    -0x38(%rbp),%rax
sub    -0x8(%rbp),%rax
add    -0x10(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rcx
and    $0x1,%rcx
xor    %eax,%eax
cmp    %rcx,%rax
jne    1394 <makingCandy+0x284>
mov    -0x58(%rbp),%rax
shr    $0x1,%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x58(%rbp),%rax
shr    $0x1,%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    13b8 <makingCandy+0x2a8>
mov    -0x58(%rbp),%rax
shr    $0x1,%rax
add    $0x1,%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x58(%rbp),%rax
shr    $0x1,%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    13bd <makingCandy+0x2ad>
jmp    1466 <makingCandy+0x356>
mov    -0x38(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    -0x8(%rbp),%rcx
cmp    %rcx,%rax
ja     13e8 <makingCandy+0x2d8>
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
jmp    1461 <makingCandy+0x351>
mov    -0x38(%rbp),%rax
sub    -0x10(%rbp),%rax
add    -0x8(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x60(%rbp),%rcx
and    $0x1,%rcx
xor    %eax,%eax
cmp    %rcx,%rax
jne    1438 <makingCandy+0x328>
mov    -0x60(%rbp),%rax
shr    $0x1,%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x60(%rbp),%rax
shr    $0x1,%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    145c <makingCandy+0x34c>
mov    -0x60(%rbp),%rax
shr    $0x1,%rax
add    $0x1,%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x60(%rbp),%rax
shr    $0x1,%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    1461 <makingCandy+0x351>
jmp    1466 <makingCandy+0x356>
jmp    146b <makingCandy+0x35b>
mov    -0x48(%rbp),%rdi
mov    -0x50(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    -0x20(%rbp),%rcx
mov    -0x40(%rbp),%rax
mov    -0x8(%rbp),%r8
imul   -0x10(%rbp),%r8
imul   %r8,%rax
add    %rax,%rcx
mov    -0x38(%rbp),%rax
imul   -0x18(%rbp),%rax
sub    %rax,%rcx
mov    -0x28(%rbp),%r8
call   1030 <makingCandy@plt>
add    -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    14c2 <makingCandy+0x3b2>
mov    -0x40(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    11dd <makingCandy+0xcd>
jmp    14d8 <makingCandy+0x3c8>
jmp    14dd <makingCandy+0x3cd>
mov    -0x30(%rbp),%rax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<makingCandy>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rcx,%r9
mov    %r8,0x30(%rsp)
mov    %r8,%rcx
sub    %r9,%rcx
jbe    114d <makingCandy+0x3d>
mov    %rdx,%r10
mov    %rsi,%r11
mov    %rdi,%r12
mov    %rcx,%rax
or     %rsi,%rax
shr    $0x20,%rax
je     1151 <makingCandy+0x41>
mov    %rcx,%rax
xor    %edx,%edx
div    %r11
jmp    1158 <makingCandy+0x48>
xor    %ebp,%ebp
jmp    11ba <makingCandy+0xaa>
mov    %ecx,%eax
xor    %edx,%edx
div    %r11d
mov    $0x1,%ebp
cmp    %r12,%rax
jb     11ba <makingCandy+0xaa>
mov    %r11,%r13
imul   %r12,%r13
mov    %rcx,%rax
or     %r13,%rax
shr    $0x20,%rax
je     1182 <makingCandy+0x72>
mov    %rcx,%rax
xor    %edx,%edx
div    %r13
mov    %rax,%rbp
jmp    118b <makingCandy+0x7b>
mov    %ecx,%eax
xor    %edx,%edx
div    %r13d
mov    %eax,%ebp
cmp    $0x1,%rdx
sbb    $0xffffffffffffffff,%rbp
mov    %rcx,%rax
or     %r10,%rax
shr    $0x20,%rax
je     11ae <makingCandy+0x9e>
mov    %rcx,%rax
xor    %edx,%edx
div    %r10
inc    %rax
je     11ba <makingCandy+0xaa>
jmp    11cc <makingCandy+0xbc>
mov    %ecx,%eax
xor    %edx,%edx
div    %r10d
inc    %rax
jne    11cc <makingCandy+0xbc>
mov    %rbp,%rax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r11,%rcx
sub    %r12,%rcx
mov    %rcx,0x10(%rsp)
mov    %r12,%rcx
sub    %r11,%rcx
mov    %rcx,0x8(%rsp)
lea    0x1(%r12),%rcx
mov    %rcx,(%rsp)
mov    $0x1,%r15d
mov    %r11,0x28(%rsp)
mov    %r12,0x20(%rsp)
mov    %rax,0x18(%rsp)
jmp    1269 <makingCandy+0x159>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %rdi,%rsi
mov    (%rsp),%rax
add    %rax,%rdi
add    %r11,%rsi
mov    %r14,%rax
imul   %r13,%rax
mov    %r9,%rcx
sub    %rbx,%rcx
add    %rax,%rcx
mov    %r10,%rdx
mov    0x30(%rsp),%r8
mov    %r9,%rbx
mov    %r10,%r12
call   1030 <makingCandy@plt>
mov    %r12,%r10
mov    %rbx,%r9
add    %r14,%rax
cmp    %rbp,%rax
cmovb  %rax,%rbp
add    $0x1,%r15
cmp    0x18(%rsp),%r15
mov    0x28(%rsp),%r11
mov    0x20(%rsp),%r12
ja     11ba <makingCandy+0xaa>
mov    %r15,%rbx
imul   %r10,%rbx
mov    %rbx,%rax
sub    %r9,%rax
mov    %rax,%rcx
or     %r13,%rcx
shr    $0x20,%rcx
je     1290 <makingCandy+0x180>
xor    %edx,%edx
div    %r13
mov    %rax,%r14
jmp    1298 <makingCandy+0x188>
nopl   0x0(%rax)
xor    %edx,%edx
div    %r13d
mov    %eax,%r14d
cmp    $0x1,%rdx
sbb    $0xffffffffffffffff,%r14
cmp    %rbp,%r14
jae    11ba <makingCandy+0xaa>
cmp    %r11,%r12
jne    12d0 <makingCandy+0x1c0>
mov    %r15,%rdi
shr    %rdi
test   $0x1,%r15b
jne    1210 <makingCandy+0x100>
add    %r11,%rdi
mov    %rdi,%rsi
jmp    121d <makingCandy+0x10d>
nopl   0x0(%rax)
jbe    1300 <makingCandy+0x1f0>
cmp    0x8(%rsp),%r15
jbe    1323 <makingCandy+0x213>
mov    %r15,%rax
sub    %r12,%rax
add    %r11,%rax
mov    %rax,%rdi
shr    %rdi
test   $0x1,%al
jne    133b <makingCandy+0x22b>
add    %r12,%rdi
mov    %rdi,%rsi
jmp    121d <makingCandy+0x10d>
nopw   0x0(%rax,%rax,1)
cmp    0x10(%rsp),%r15
jbe    132f <makingCandy+0x21f>
mov    %r15,%rsi
sub    %r11,%rsi
add    %r12,%rsi
mov    %esi,%edi
and    $0x1,%edi
shr    %rsi
add    %r11,%rsi
add    %rsi,%rdi
jmp    121d <makingCandy+0x10d>
lea    (%r15,%r11,1),%rsi
mov    %r12,%rdi
jmp    121d <makingCandy+0x10d>
lea    (%r15,%r12,1),%rdi
mov    %r11,%rsi
jmp    121d <makingCandy+0x10d>
mov    %rdi,%rsi
mov    (%rsp),%rax
add    %rax,%rdi
add    %r12,%rsi
jmp    121d <makingCandy+0x10d>

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

LLVM IR (-O2):
define i64 @makingCandy(i64 %0, i64 %1, i64 %2, i64 %3, i64 %4) {
%6 = icmp ugt i64 %4, %3
br i1 %6, label %7, label %87
7: ; preds = %5
%8 = sub i64 %4, %3
%9 = udiv i64 %8, %1
%10 = icmp ult i64 %9, %0
br i1 %10, label %87, label %11
11: ; preds = %7
%12 = mul i64 %1, %0
%13 = urem i64 %8, %12
%14 = icmp ne i64 %13, 0
%15 = udiv i64 %8, %12
%16 = zext i1 %14 to i64
%17 = add i64 %15, %16
%18 = udiv i64 %8, %2
%19 = add i64 %18, 1
%20 = icmp eq i64 %19, 0
br i1 %20, label %87, label %21
21: ; preds = %11
%22 = icmp eq i64 %0, %1
%23 = icmp ugt i64 %0, %1
%24 = sub i64 %1, %0
%25 = sub i64 %0, %1
%26 = add i64 %0, 1
br label %27
27: ; preds = %21, %75
%28 = phi i64 [ %17, %21 ], [ %84, %75 ]
%29 = phi i64 [ 1, %21 ], [ %85, %75 ]
%30 = mul i64 %29, %2
%31 = sub i64 %30, %3
%32 = urem i64 %31, %12
%33 = icmp ne i64 %32, 0
%34 = udiv i64 %31, %12
%35 = zext i1 %33 to i64
%36 = add i64 %34, %35
%37 = icmp ult i64 %36, %28
br i1 %37, label %38, label %87
38: ; preds = %27
br i1 %22, label %39, label %48
39: ; preds = %38
%40 = and i64 %29, 1
%41 = icmp eq i64 %40, 0
%42 = lshr i64 %29, 1
br i1 %41, label %43, label %45
43: ; preds = %39
%44 = add i64 %42, %1
br label %75
45: ; preds = %39
%46 = add i64 %26, %42
%47 = add i64 %42, %1
br label %75
48: ; preds = %38
br i1 %23, label %49, label %64
49: ; preds = %48
%50 = icmp ugt i64 %29, %25
br i1 %50, label %53, label %51
51: ; preds = %49
%52 = add i64 %29, %1
br label %75
53: ; preds = %49
%54 = sub i64 %29, %0
%55 = add i64 %54, %1
%56 = and i64 %55, 1
%57 = icmp eq i64 %56, 0
%58 = lshr i64 %55, 1
br i1 %57, label %59, label %61
59: ; preds = %53
%60 = add i64 %58, %0
br label %75
61: ; preds = %53
%62 = add i64 %26, %58
%63 = add i64 %58, %0
br label %75
64: ; preds = %48
%65 = icmp ugt i64 %29, %24
br i1 %65, label %68, label %66
66: ; preds = %64
%67 = add i64 %29, %0
br label %75
68: ; preds = %64
%69 = sub i64 %29, %1
%70 = add i64 %69, %0
%71 = and i64 %70, 1
%72 = lshr i64 %70, 1
%73 = add i64 %72, %1
%74 = add i64 %73, %71
br label %75
75: ; preds = %68, %45, %43, %66, %51, %61, %59
%76 = phi i64 [ %44, %43 ], [ %46, %45 ], [ %0, %51 ], [ %67, %66 ], [ %60, %59 ], [ %62, %61 ], [ %74, %68 ]
%77 = phi i64 [ %44, %43 ], [ %47, %45 ], [ %52, %51 ], [ %1, %66 ], [ %60, %59 ], [ %63, %61 ], [ %73, %68 ]
%78 = mul i64 %36, %12
%79 = sub i64 %3, %30
%80 = add i64 %79, %78
%81 = tail call i64 @makingCandy(i64 %76, i64 %77, i64 %2, i64 %80, i64 %4)
%82 = add i64 %81, %36
%83 = icmp ult i64 %82, %28
%84 = select i1 %83, i64 %82, i64 %28
%85 = add i64 %29, 1
%86 = icmp ugt i64 %85, %19
br i1 %86, label %87, label %27
87: ; preds = %75, %27, %11, %7, %5
%88 = phi i64 [ 0, %5 ], [ 1, %7 ], [ %17, %11 ], [ %84, %75 ], [ %28, %27 ]
ret i64 %88
}