int StackFill(int mode, int n, int a, int f, int d, long int *stack) {
  int lvar = 0;
  switch (mode) {
  case 1:
  case 21:
    stack[0] += 1;
    lvar = stack[0];
    stack[lvar] = (0x0000 | (n << 9) | (a << 5) | f);
    break;
  case 2:
    for (int i = 0; i < d; i++) {
      int aa = a + i;
      stack[0] += 1;
      lvar = stack[0];
      stack[lvar] = (0x0000 | (n << 9) | (aa << 5) | f);
    }
    break;
  case 3:
    for (int i = 0; i < d; i++) {
      int nn = n + i;
      stack[0] += 1;
      lvar = stack[0];
      stack[lvar] = (0x0000 | (nn << 9) | (a << 5) | f);
    }
    break;
  case 11:
    stack[0] += 1;
    lvar = stack[0];
    stack[lvar] = (0x4000 | (n << 9) | (a << 5) | f);
    break;
  case 12:
    for (int i = 0; i < d; i++) {
      int aa = a + i;
      stack[0] += 1;
      lvar = stack[0];
      stack[lvar] = (0x4000 | (n << 9) | (aa << 5) | f);
    }
    break;
  case 13:
    for (int i = 0; i < d; i++) {
      int nn = n + i;
      stack[0] += 1;
      lvar = stack[0];
      stack[lvar] = (0x4000 | (nn << 9) | (a << 5) | f);
    }
    break;
  case 50:
    stack[0] += 1;
    lvar = stack[0];
    stack[lvar] = (0x0000 | (0 << 9) | (0 << 5) | 16);
    stack[0] += 1;
    lvar = stack[0];
    stack[lvar] = d;
    break;
  default:
    break;
  }
  return stack[0];
}


x86 assembly (clang, -O0):
<StackFill>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x4(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x50(%rbp)
sub    $0x31,%eax
ja     13cb <StackFill+0x2cb>
mov    -0x50(%rbp),%rax
lea    0xec1(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
shl    $0x9,%eax
or     $0x0,%eax
mov    -0xc(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
or     -0x10(%rbp),%eax
movslq %eax,%rdx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
jmp    13d0 <StackFill+0x2d0>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11ed <StackFill+0xed>
mov    -0xc(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
shl    $0x9,%eax
or     $0x0,%eax
mov    -0x2c(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
or     -0x10(%rbp),%eax
movslq %eax,%rdx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    118f <StackFill+0x8f>
jmp    13d0 <StackFill+0x2d0>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1257 <StackFill+0x157>
mov    -0x8(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %eax,-0x24(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x9,%eax
or     $0x0,%eax
mov    -0xc(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
or     -0x10(%rbp),%eax
movslq %eax,%rdx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11f9 <StackFill+0xf9>
jmp    13d0 <StackFill+0x2d0>
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
shl    $0x9,%eax
or     $0x4000,%eax
mov    -0xc(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
or     -0x10(%rbp),%eax
movslq %eax,%rdx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
jmp    13d0 <StackFill+0x2d0>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1305 <StackFill+0x205>
mov    -0xc(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
shl    $0x9,%eax
or     $0x4000,%eax
mov    -0x3c(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
or     -0x10(%rbp),%eax
movslq %eax,%rdx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    12a5 <StackFill+0x1a5>
jmp    13d0 <StackFill+0x2d0>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1371 <StackFill+0x271>
mov    -0x8(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %eax,-0x24(%rbp)
mov    -0x44(%rbp),%eax
shl    $0x9,%eax
or     $0x4000,%eax
mov    -0xc(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
or     -0x10(%rbp),%eax
movslq %eax,%rdx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1311 <StackFill+0x211>
jmp    13d0 <StackFill+0x2d0>
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
movq   $0x10,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %eax,-0x24(%rbp)
movslq -0x14(%rbp),%rdx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
jmp    13d0 <StackFill+0x2d0>
jmp    13d0 <StackFill+0x2d0>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<StackFill>:
add    $0xffffffff,%edi
cmp    $0x31,%edi
ja     13d8 <StackFill+0x2d8>
lea    0xeed(%rip),%rax
movslq (%rax,%rdi,4),%rdi
add    %rax,%rdi
jmp    *%rdi
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
shl    $0x9,%esi
shl    $0x5,%edx
or     %esi,%edx
or     %ecx,%edx
mov    %edx,%r8d
jmp    13cf <StackFill+0x2cf>
test   %r8d,%r8d
jle    13d8 <StackFill+0x2d8>
shl    $0x9,%esi
or     %ecx,%esi
xor    %r11d,%r11d
cmp    $0x1,%r8d
je     119b <StackFill+0x9b>
mov    %r8d,%r10d
and    $0xfffffffe,%r10d
mov    %edx,%edi
shl    $0x5,%edi
xor    %r11d,%r11d
xchg   %ax,%ax
mov    (%r9),%rcx
add    $0x1,%rcx
mov    %rcx,(%r9)
mov    %esi,%eax
or     %edi,%eax
cltq
movslq %ecx,%rcx
mov    %rax,(%r9,%rcx,8)
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
lea    0x20(%rdi),%ecx
or     %esi,%ecx
movslq %ecx,%rcx
cltq
mov    %rcx,(%r9,%rax,8)
add    $0x2,%r11d
add    $0x40,%edi
cmp    %r11d,%r10d
jne    1160 <StackFill+0x60>
test   $0x1,%r8b
je     13d8 <StackFill+0x2d8>
add    %edx,%r11d
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
shl    $0x5,%r11d
or     %r11d,%esi
movslq %esi,%rcx
jmp    13d2 <StackFill+0x2d2>
test   %r8d,%r8d
jle    13d8 <StackFill+0x2d8>
shl    $0x5,%edx
or     %ecx,%edx
xor    %r11d,%r11d
cmp    $0x1,%r8d
je     1231 <StackFill+0x131>
mov    %r8d,%r10d
and    $0xfffffffe,%r10d
mov    %esi,%edi
shl    $0x9,%edi
xor    %r11d,%r11d
nopw   0x0(%rax,%rax,1)
mov    (%r9),%rcx
add    $0x1,%rcx
mov    %rcx,(%r9)
mov    %edx,%eax
or     %edi,%eax
cltq
movslq %ecx,%rcx
mov    %rax,(%r9,%rcx,8)
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
lea    0x200(%rdi),%ecx
or     %edx,%ecx
movslq %ecx,%rcx
cltq
mov    %rcx,(%r9,%rax,8)
add    $0x2,%r11d
add    $0x400,%edi
cmp    %r11d,%r10d
jne    11f0 <StackFill+0xf0>
test   $0x1,%r8b
je     13d8 <StackFill+0x2d8>
add    %esi,%r11d
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
shl    $0x9,%r11d
or     %r11d,%edx
movslq %edx,%rcx
jmp    13d2 <StackFill+0x2d2>
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
shl    $0x9,%esi
shl    $0x5,%edx
or     %ecx,%esi
or     %edx,%esi
or     $0x4000,%esi
mov    %esi,%r8d
jmp    13cf <StackFill+0x2cf>
test   %r8d,%r8d
jle    13d8 <StackFill+0x2d8>
shl    $0x9,%esi
or     %ecx,%esi
xor    %r11d,%r11d
cmp    $0x1,%r8d
je     12e6 <StackFill+0x1e6>
mov    %r8d,%r10d
and    $0xfffffffe,%r10d
mov    %edx,%edi
shl    $0x5,%edi
xor    %r11d,%r11d
nop
mov    (%r9),%rcx
add    $0x1,%rcx
mov    %rcx,(%r9)
mov    %esi,%eax
or     %edi,%eax
or     $0x4000,%eax
cltq
movslq %ecx,%rcx
mov    %rax,(%r9,%rcx,8)
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
lea    0x20(%rdi),%ecx
or     %esi,%ecx
or     $0x4000,%ecx
movslq %ecx,%rcx
cltq
mov    %rcx,(%r9,%rax,8)
add    $0x2,%r11d
add    $0x40,%edi
cmp    %r11d,%r10d
jne    12a0 <StackFill+0x1a0>
test   $0x1,%r8b
je     13d8 <StackFill+0x2d8>
add    %edx,%r11d
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
shl    $0x5,%r11d
or     %r11d,%esi
or     $0x4000,%esi
movslq %esi,%rcx
jmp    13d2 <StackFill+0x2d2>
test   %r8d,%r8d
jle    13d8 <StackFill+0x2d8>
shl    $0x5,%edx
or     %ecx,%edx
xor    %r11d,%r11d
cmp    $0x1,%r8d
je     138c <StackFill+0x28c>
mov    %r8d,%r10d
and    $0xfffffffe,%r10d
mov    %esi,%edi
shl    $0x9,%edi
xor    %r11d,%r11d
nopl   0x0(%rax,%rax,1)
mov    (%r9),%rcx
add    $0x1,%rcx
mov    %rcx,(%r9)
mov    %edx,%eax
or     %edi,%eax
or     $0x4000,%eax
cltq
movslq %ecx,%rcx
mov    %rax,(%r9,%rcx,8)
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
lea    0x200(%rdi),%ecx
or     %edx,%ecx
or     $0x4000,%ecx
movslq %ecx,%rcx
cltq
mov    %rcx,(%r9,%rax,8)
add    $0x2,%r11d
add    $0x400,%edi
cmp    %r11d,%r10d
jne    1340 <StackFill+0x240>
test   $0x1,%r8b
je     13d8 <StackFill+0x2d8>
add    %esi,%r11d
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
shl    $0x9,%r11d
or     %r11d,%edx
or     $0x4000,%edx
movslq %edx,%rcx
jmp    13d2 <StackFill+0x2d2>
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
cltq
movq   $0x10,(%r9,%rax,8)
mov    (%r9),%rax
add    $0x1,%rax
mov    %rax,(%r9)
movslq %r8d,%rcx
cltq
mov    %rcx,(%r9,%rax,8)
mov    (%r9),%eax
ret

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

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