int *make_scales(int from_size, int to_size, int tail) {
  int *scales;
  int smaller = ({
    const typeof(from_size) _x = (from_size);
    const typeof(to_size) _y = (to_size);
    (void)(&_x == &_y);
    _x < _y ? _x : _y;
  });
  int bigger = ({
    const typeof(from_size) _x = (from_size);
    const typeof(to_size) _y = (to_size);
    (void)(&_x == &_y);
    _x > _y ? _x : _y;
  });
  register int i = 0, k = 0;
  int eps;
  ;
  scales = calloc(smaller + tail, sizeof(int));
  if (smaller <= 1) {
    scales[0] = bigger;
    return scales;
  } else if (smaller == bigger) {
    for (i = 0; i < smaller; i++)
      scales[i] = 1;
    return scales;
  }
  if (from_size >= to_size)
    tail = 0;
  if (tail != 0) {
    bigger -= tail;
    if ((smaller -= tail) == 1) {
      scales[0] = bigger;
      return scales;
    }
  } else if (smaller == 2) {
    scales[1] = bigger / 2;
    scales[0] = bigger - scales[1];
    return scales;
  }
  eps = -bigger / 2;
  ;
  for (i = 0; i < bigger; i++) {
    ++scales[k];
    eps += smaller;
    ;
    if (eps + eps >= bigger) {
      ++k;
      eps -= bigger;
    }
  }
  return scales;
}


x86 assembly (clang, -O0):
<make_scales>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jge    1144 <make_scales+0x34>
mov    -0x28(%rbp),%eax
mov    %eax,-0x50(%rbp)
jmp    114a <make_scales+0x3a>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jle    1179 <make_scales+0x69>
mov    -0x38(%rbp),%eax
mov    %eax,-0x54(%rbp)
jmp    117f <make_scales+0x6f>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x24(%rbp),%eax
add    -0x14(%rbp),%eax
movslq %eax,%rdi
mov    $0x4,%esi
call   1030 <calloc@plt>
mov    %rax,-0x20(%rbp)
cmpl   $0x1,-0x24(%rbp)
jg     11d0 <make_scales+0xc0>
mov    -0x34(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1330 <make_scales+0x220>
mov    -0x24(%rbp),%eax
cmp    -0x34(%rbp),%eax
jne    1219 <make_scales+0x109>
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    120c <make_scales+0xfc>
mov    -0x20(%rbp),%rax
movslq -0x44(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    11e3 <make_scales+0xd3>
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1330 <make_scales+0x220>
jmp    121e <make_scales+0x10e>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jl     1231 <make_scales+0x121>
movl   $0x0,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
je     1275 <make_scales+0x165>
mov    -0x14(%rbp),%ecx
mov    -0x34(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x24(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
cmp    $0x1,%eax
jne    1270 <make_scales+0x160>
mov    -0x34(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1330 <make_scales+0x220>
jmp    12b5 <make_scales+0x1a5>
cmpl   $0x2,-0x24(%rbp)
jne    12b0 <make_scales+0x1a0>
mov    -0x34(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x34(%rbp),%ecx
mov    -0x20(%rbp),%rax
sub    0x4(%rax),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1330 <make_scales+0x220>
jmp    12b5 <make_scales+0x1a5>
xor    %eax,%eax
sub    -0x34(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x4c(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1328 <make_scales+0x218>
mov    -0x20(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
add    $0x1,%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x4c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jl     1315 <make_scales+0x205>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x4c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x4c(%rbp)
jmp    131a <make_scales+0x20a>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12cc <make_scales+0x1bc>
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<make_scales>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %edx,%r14d
mov    %esi,%ebp
mov    %edi,%ebx
cmp    %esi,%edi
mov    %esi,%r12d
cmovl  %edi,%r12d
mov    %esi,%r15d
cmovg  %edi,%r15d
lea    (%r12,%r14,1),%eax
movslq %eax,%rdi
mov    $0x4,%esi
call   1030 <calloc@plt>
cmp    $0x2,%r12d
jge    114e <make_scales+0x3e>
mov    %r15d,(%rax)
jmp    12e0 <make_scales+0x1d0>
cmp    %r15d,%r12d
jne    1163 <make_scales+0x53>
mov    %r12d,%ecx
cmp    $0x8,%r12d
jae    117a <make_scales+0x6a>
xor    %edx,%edx
jmp    12d0 <make_scales+0x1c0>
cmp    %ebp,%ebx
jge    11a0 <make_scales+0x90>
test   %r14d,%r14d
je     11a0 <make_scales+0x90>
sub    %r14d,%r15d
sub    %r14d,%r12d
cmp    $0x1,%r12d
je     1146 <make_scales+0x36>
jmp    11b9 <make_scales+0xa9>
mov    %ecx,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rbp
mov    %rbp,%rdi
shr    $0x3,%rdi
add    $0x1,%rdi
mov    %edi,%esi
and    $0x7,%esi
cmp    $0x38,%rbp
jae    1213 <make_scales+0x103>
xor    %ebp,%ebp
jmp    1291 <make_scales+0x181>
cmp    $0x2,%r12d
jne    11b9 <make_scales+0xa9>
mov    %r15d,%ecx
shr    $0x1f,%ecx
add    %r15d,%ecx
sar    %ecx
mov    %ecx,0x4(%rax)
sub    %ecx,%r15d
jmp    1146 <make_scales+0x36>
test   %r15d,%r15d
jle    12e0 <make_scales+0x1d0>
mov    %r15d,%edx
shr    %edx
movl   $0x1,(%rax)
mov    %r12d,%ecx
sub    %edx,%ecx
lea    (%rcx,%rcx,1),%edx
cmp    %r15d,%edx
setl   %bl
cmp    $0x1,%r15d
je     12e0 <make_scales+0x1d0>
xor    %esi,%esi
cmp    %r15d,%edx
setge  %sil
lea    -0x1(%r15),%r8d
cmp    $0x2,%r15d
jne    12e9 <make_scales+0x1d9>
mov    %esi,%ebp
test   $0x1,%r8b
je     12e0 <make_scales+0x1d0>
mov    %ebp,%ecx
addl   $0x1,(%rax,%rcx,4)
jmp    12e0 <make_scales+0x1d0>
and    $0xfffffffffffffff8,%rdi
xor    %ebp,%ebp
movaps 0xde0(%rip),%xmm0
movups %xmm0,(%rax,%rbp,4)
movups %xmm0,0x10(%rax,%rbp,4)
movups %xmm0,0x20(%rax,%rbp,4)
movups %xmm0,0x30(%rax,%rbp,4)
movups %xmm0,0x40(%rax,%rbp,4)
movups %xmm0,0x50(%rax,%rbp,4)
movups %xmm0,0x60(%rax,%rbp,4)
movups %xmm0,0x70(%rax,%rbp,4)
movups %xmm0,0x80(%rax,%rbp,4)
movups %xmm0,0x90(%rax,%rbp,4)
movups %xmm0,0xa0(%rax,%rbp,4)
movups %xmm0,0xb0(%rax,%rbp,4)
movups %xmm0,0xc0(%rax,%rbp,4)
movups %xmm0,0xd0(%rax,%rbp,4)
movups %xmm0,0xe0(%rax,%rbp,4)
movups %xmm0,0xf0(%rax,%rbp,4)
add    $0x40,%rbp
add    $0xfffffffffffffff8,%rdi
jne    1220 <make_scales+0x110>
test   %rsi,%rsi
je     12c2 <make_scales+0x1b2>
lea    (%rax,%rbp,4),%rdi
add    $0x10,%rdi
shl    $0x5,%rsi
xor    %ebp,%ebp
movaps 0xd55(%rip),%xmm0
nopl   0x0(%rax,%rax,1)
movups %xmm0,-0x10(%rdi,%rbp,1)
movups %xmm0,(%rdi,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%rsi
jne    12b0 <make_scales+0x1a0>
cmp    %rcx,%rdx
je     12e0 <make_scales+0x1d0>
nopw   0x0(%rax,%rax,1)
movl   $0x1,(%rax,%rdx,4)
add    $0x1,%rdx
cmp    %rdx,%rcx
jne    12d0 <make_scales+0x1c0>
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r8d,%edi
and    $0xfffffffe,%edi
jmp    1329 <make_scales+0x219>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %dl,%bl
add    %ebx,%esi
sub    %ebp,%ecx
addl   $0x1,(%rax,%rsi,4)
add    %r12d,%ecx
lea    (%rcx,%rcx,1),%edx
xor    %ebp,%ebp
cmp    %r15d,%edx
setl   %bl
setge  %bpl
add    %esi,%ebp
mov    %ebp,%esi
add    $0xfffffffe,%edi
je     11fe <make_scales+0xee>
xor    %ebp,%ebp
mov    $0x0,%edx
test   $0x1,%bl
jne    1338 <make_scales+0x228>
mov    %r15d,%edx
sub    %edx,%ecx
mov    %esi,%edx
addl   $0x1,(%rax,%rdx,4)
add    %r12d,%ecx
lea    (%rcx,%rcx,1),%edx
xor    %ebx,%ebx
cmp    %r15d,%edx
setge  %dl
jl     1300 <make_scales+0x1f0>
mov    %r15d,%ebp
jmp    1300 <make_scales+0x1f0>

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

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