#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 */
long lrintf(float);
void placea(long ipitch, long *voibuf, long obound, long *vwin, long *awin,
            long *ewin) {
  int allv, winv;
  long i, j, k, l, hrange;
  int ephase;
  long lrange;
  lrange = (3 - 2) * 180 + 1;
  hrange = 3 * 180;
  allv = voibuf[3] == 1;
  allv = allv && voibuf[4] == 1;
  allv = allv && voibuf[5] == 1;
  allv = allv && voibuf[6] == 1;
  allv = allv && voibuf[7] == 1;
  winv = voibuf[6] == 1 || voibuf[7] == 1;
  if ((allv || winv) && (obound == 0)) {
    i = (lrange + ipitch - 1 - awin[2]) / ipitch;
    i *= ipitch;
    i += awin[2];
    l = 156;
    k = (vwin[4] + vwin[5] + 1 - l) / 2;
    awin[4] = i + lrintf((float)(k - i) / ipitch) * ipitch;
    awin[5] = awin[4] + l - 1;
    if (obound >= 2 && awin[5] > vwin[5]) {
      awin[4] -= ipitch;
      awin[5] -= ipitch;
    }
    if ((obound == 1 || obound == 3) && awin[4] < vwin[4]) {
      awin[4] += ipitch;
      awin[5] += ipitch;
    }
    while (awin[5] > hrange) {
      awin[4] -= ipitch;
      awin[5] -= ipitch;
    }
    while (awin[4] < lrange) {
      awin[4] += ipitch;
      awin[5] += ipitch;
    }
    ephase = (1);
  } else {
    awin[4] = vwin[4];
    awin[5] = vwin[5];
    ephase = (0);
  }
  j = (awin[5] - awin[4] + 1) / ipitch * ipitch;
  if (j == 0 || !winv) {
    ewin[4] = vwin[4];
    ewin[5] = vwin[5];
  } else if (!ephase && obound == 2) {
    ewin[4] = awin[5] - j + 1;
    ewin[5] = awin[5];
  } else {
    ewin[4] = awin[4];
    ewin[5] = awin[4] + j - 1;
  }
}


x86 assembly (clang, -O0):
<placea>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movq   $0xb5,-0x70(%rbp)
movq   $0x21c,-0x60(%rbp)
mov    -0x10(%rbp),%rax
cmpq   $0x1,0x18(%rax)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0x71(%rbp)
je     1175 <placea+0x65>
mov    -0x10(%rbp),%rax
cmpq   $0x1,0x20(%rax)
sete   %al
mov    %al,-0x71(%rbp)
mov    -0x71(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0x72(%rbp)
je     119e <placea+0x8e>
mov    -0x10(%rbp),%rax
cmpq   $0x1,0x28(%rax)
sete   %al
mov    %al,-0x72(%rbp)
mov    -0x72(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0x73(%rbp)
je     11c7 <placea+0xb7>
mov    -0x10(%rbp),%rax
cmpq   $0x1,0x30(%rax)
sete   %al
mov    %al,-0x73(%rbp)
mov    -0x73(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0x74(%rbp)
je     11f0 <placea+0xe0>
mov    -0x10(%rbp),%rax
cmpq   $0x1,0x38(%rax)
sete   %al
mov    %al,-0x74(%rbp)
mov    -0x74(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rcx
mov    $0x1,%al
cmpq   $0x1,0x30(%rcx)
mov    %al,-0x75(%rbp)
je     121e <placea+0x10e>
mov    -0x10(%rbp),%rax
cmpq   $0x1,0x38(%rax)
sete   %al
mov    %al,-0x75(%rbp)
mov    -0x75(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x34(%rbp)
jne    123d <placea+0x12d>
cmpl   $0x0,-0x38(%rbp)
je     141e <placea+0x30e>
cmpq   $0x0,-0x18(%rbp)
jne    141e <placea+0x30e>
mov    -0x70(%rbp),%rax
add    -0x8(%rbp),%rax
sub    $0x1,%rax
mov    -0x28(%rbp),%rcx
sub    0x10(%rcx),%rax
cqto
idivq  -0x8(%rbp)
mov    %rax,-0x40(%rbp)
mov    -0x8(%rbp),%rax
imul   -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x28(%rbp),%rax
mov    0x10(%rax),%rax
add    -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
movq   $0x9c,-0x58(%rbp)
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rax
mov    -0x20(%rbp),%rcx
add    0x28(%rcx),%rax
add    $0x1,%rax
sub    -0x58(%rbp),%rax
mov    $0x2,%ecx
cqto
idiv   %rcx
mov    %rax,-0x50(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x50(%rbp),%rax
sub    -0x40(%rbp),%rax
cvtsi2ss %rax,%xmm0
cvtsi2ssq -0x8(%rbp),%xmm1
divss  %xmm1,%xmm0
call   1030 <lrintf@plt>
mov    -0x80(%rbp),%rcx
imul   -0x8(%rbp),%rax
add    %rax,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%rcx
add    -0x58(%rbp),%rcx
sub    $0x1,%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x28(%rax)
cmpq   $0x2,-0x18(%rbp)
jl     1348 <placea+0x238>
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    0x28(%rcx),%rax
jle    1348 <placea+0x238>
mov    -0x8(%rbp),%rdx
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%rcx
sub    %rdx,%rcx
mov    %rcx,0x20(%rax)
mov    -0x8(%rbp),%rdx
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rcx
sub    %rdx,%rcx
mov    %rcx,0x28(%rax)
cmpq   $0x1,-0x18(%rbp)
je     135e <placea+0x24e>
cmpq   $0x3,-0x18(%rbp)
jne    1394 <placea+0x284>
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%rax
mov    -0x20(%rbp),%rcx
cmp    0x20(%rcx),%rax
jge    1394 <placea+0x284>
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%rax
add    0x20(%rax),%rcx
mov    %rcx,0x20(%rax)
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%rax
add    0x28(%rax),%rcx
mov    %rcx,0x28(%rax)
jmp    1399 <placea+0x289>
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rax
cmp    -0x60(%rbp),%rax
jle    13d6 <placea+0x2c6>
mov    -0x8(%rbp),%rdx
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%rcx
sub    %rdx,%rcx
mov    %rcx,0x20(%rax)
mov    -0x8(%rbp),%rdx
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rcx
sub    %rdx,%rcx
mov    %rcx,0x28(%rax)
jmp    1399 <placea+0x289>
jmp    13db <placea+0x2cb>
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%rax
cmp    -0x70(%rbp),%rax
jge    1412 <placea+0x302>
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%rax
add    0x20(%rax),%rcx
mov    %rcx,0x20(%rax)
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%rax
add    0x28(%rax),%rcx
mov    %rcx,0x28(%rax)
jmp    13db <placea+0x2cb>
movl   $0x1,-0x64(%rbp)
jmp    1445 <placea+0x335>
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x20(%rbp),%rax
mov    0x28(%rax),%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,0x28(%rax)
movl   $0x0,-0x64(%rbp)
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rax
mov    -0x28(%rbp),%rcx
sub    0x20(%rcx),%rax
add    $0x1,%rax
cqto
idivq  -0x8(%rbp)
imul   -0x8(%rbp),%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x0,-0x48(%rbp)
je     147d <placea+0x36d>
cmpl   $0x0,-0x38(%rbp)
jne    14a2 <placea+0x392>
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x20(%rbp),%rax
mov    0x28(%rax),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x28(%rax)
jmp    1511 <placea+0x401>
cmpl   $0x0,-0x64(%rbp)
jne    14e4 <placea+0x3d4>
cmpq   $0x2,-0x18(%rbp)
jne    14e4 <placea+0x3d4>
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rcx
sub    -0x48(%rbp),%rcx
add    $0x1,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x28(%rbp),%rax
mov    0x28(%rax),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x28(%rax)
jmp    150c <placea+0x3fc>
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%rcx
add    -0x48(%rbp),%rcx
sub    $0x1,%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,0x28(%rax)
jmp    1511 <placea+0x401>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<placea>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r8,%r13
mov    %rdx,%r14
mov    %rdi,%rbx
cmpq   $0x1,0x18(%rsi)
jne    114a <placea+0x3a>
cmpq   $0x1,0x20(%rsi)
jne    114a <placea+0x3a>
cmpq   $0x1,0x28(%rsi)
jne    114a <placea+0x3a>
cmpq   $0x1,0x30(%rsi)
jne    114a <placea+0x3a>
cmpq   $0x1,0x38(%rsi)
sete   %al
jmp    114c <placea+0x3c>
xor    %eax,%eax
mov    $0x1,%r10b
cmpq   $0x1,0x30(%rsi)
je     115f <placea+0x4f>
cmpq   $0x1,0x38(%rsi)
sete   %r10b
test   %r14,%r14
jne    1198 <placea+0x88>
or     %r10b,%al
je     1198 <placea+0x88>
mov    0x10(%r13),%rsi
mov    %rbx,%rbp
sub    %rsi,%rbp
add    $0xb4,%rbp
mov    %rbp,%rax
or     %rbx,%rax
shr    $0x20,%rax
mov    %r10b,0x7(%rsp)
mov    %r9,%r12
je     11a9 <placea+0x99>
mov    %rbp,%rax
cqto
idiv   %rbx
jmp    11af <placea+0x9f>
mov    0x20(%rcx),%rsi
mov    %rsi,0x20(%r13)
mov    0x28(%rcx),%rdi
jmp    1373 <placea+0x263>
mov    %ebp,%eax
xor    %edx,%edx
div    %ebx
sub    %rdx,%rbp
add    %rsi,%rbp
mov    0x20(%rcx),%rax
mov    %rcx,%r15
mov    0x28(%rcx),%rcx
lea    (%rax,%rcx,1),%rdx
add    %rcx,%rax
add    $0xffffffffffffff65,%rax
shr    $0x3f,%rax
add    %rdx,%rax
add    $0xffffffffffffff65,%rax
sar    %rax
sub    %rbp,%rax
cvtsi2ss %rax,%xmm0
cvtsi2ss %rbx,%xmm1
divss  %xmm1,%xmm0
call   1030 <lrintf@plt>
imul   %rbx,%rax
lea    (%rax,%rbp,1),%rsi
mov    %rsi,0x20(%r13)
cmp    $0x182,%rsi
jl     1229 <placea+0x119>
nopl   0x0(%rax,%rax,1)
sub    %rbx,%rsi
lea    0x9b(%rsi),%rdi
cmp    $0x21c,%rdi
jg     1210 <placea+0x100>
mov    %rsi,0x20(%r13)
jmp    1234 <placea+0x124>
lea    (%rax,%rbp,1),%rdi
add    $0x9b,%rdi
mov    %r12,%r9
mov    0x7(%rsp),%r10b
mov    %r15,%rcx
mov    %rdi,0x28(%r13)
cmp    $0xb4,%rsi
jg     1377 <placea+0x267>
lea    (%rsi,%rbx,1),%rdx
cmp    $0xb6,%rdx
mov    $0xb5,%eax
cmovge %rdx,%rax
xor    %ebp,%ebp
cmp    $0xb5,%rdx
setl   %bpl
add    %rbp,%rdx
sub    %rdx,%rax
mov    %rax,%rdx
or     %rbx,%rdx
shr    $0x20,%rdx
je     128a <placea+0x17a>
xor    %edx,%edx
div    %rbx
jmp    128e <placea+0x17e>
xor    %edx,%edx
div    %ebx
lea    (%rax,%rbp,1),%r11
add    $0x1,%r11
cmp    $0x4,%r11
jb     1360 <placea+0x250>
mov    %r11,%rax
and    $0xfffffffffffffffc,%rax
movq   %rdi,%xmm0
movq   %rbx,%xmm1
pshufd $0x44,%xmm1,%xmm1
lea    -0x4(%rax),%rbp
mov    %rbp,%rdi
shr    $0x2,%rdi
add    $0x1,%rdi
mov    %edi,%edx
and    $0x7,%edx
cmp    $0x1c,%rbp
jae    12d6 <placea+0x1c6>
pxor   %xmm2,%xmm2
jmp    1319 <placea+0x209>
and    $0xfffffffffffffff8,%rdi
movdqa %xmm1,%xmm3
paddq  %xmm1,%xmm3
pxor   %xmm2,%xmm2
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
paddq  %xmm3,%xmm0
paddq  %xmm3,%xmm2
paddq  %xmm3,%xmm0
paddq  %xmm3,%xmm2
paddq  %xmm3,%xmm0
paddq  %xmm3,%xmm2
paddq  %xmm3,%xmm0
paddq  %xmm3,%xmm2
add    $0x8,%rbp
cmp    %rdi,%rbp
jne    12f0 <placea+0x1e0>
mov    %rax,%rdi
imul   %rbx,%rdi
test   %rdx,%rdx
je     1341 <placea+0x231>
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
paddq  %xmm1,%xmm0
paddq  %xmm1,%xmm2
add    $0x1,%rbp
cmp    %rdx,%rbp
jne    1330 <placea+0x220>
paddq  %xmm2,%xmm0
add    %rdi,%rsi
pshufd $0xee,%xmm0,%xmm1
paddq  %xmm0,%xmm1
movq   %xmm1,%rdi
cmp    %rax,%r11
je     136f <placea+0x25f>
nopl   0x0(%rax,%rax,1)
add    %rbx,%rsi
add    %rbx,%rdi
cmp    $0xb5,%rsi
jl     1360 <placea+0x250>
mov    %rsi,0x20(%r13)
mov    %rdi,0x28(%r13)
mov    %rdi,%rbp
sub    %rsi,%rbp
add    $0x1,%rbp
mov    %rbp,%rax
or     %rbx,%rax
shr    $0x20,%rax
je     1397 <placea+0x287>
mov    %rbp,%rax
cqto
idiv   %rbx
jmp    139d <placea+0x28d>
mov    %ebp,%eax
xor    %edx,%edx
div    %ebx
sub    %rdx,%rbp
setne  %al
test   %r10b,%al
je     13bf <placea+0x2af>
cmp    $0x2,%r14
jne    13cd <placea+0x2bd>
sub    %rbp,%rdi
add    $0x1,%rdi
mov    %rdi,0x20(%r9)
mov    0x28(%r13),%rax
jmp    13dc <placea+0x2cc>
mov    0x20(%rcx),%rax
mov    %rax,0x20(%r9)
mov    0x28(%rcx),%rax
jmp    13dc <placea+0x2cc>
mov    %rsi,0x20(%r9)
mov    0x20(%r13),%rax
add    %rbp,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,0x28(%r9)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @placea(i64 %0, i64* nocapture %1, i64 %2, i64* nocapture %3, i64* nocapture %4, i64* nocapture writeonly %5) {
%7 = getelementptr inbounds i64, i64* %1, i64 3
%8 = load i64, i64* %7
%9 = icmp eq i64 %8, 1
br i1 %9, label %10, label %26
10: ; preds = %6
%11 = getelementptr inbounds i64, i64* %1, i64 4
%12 = load i64, i64* %11
%13 = icmp eq i64 %12, 1
br i1 %13, label %14, label %26
14: ; preds = %10
%15 = getelementptr inbounds i64, i64* %1, i64 5
%16 = load i64, i64* %15
%17 = icmp eq i64 %16, 1
br i1 %17, label %18, label %26
18: ; preds = %14
%19 = getelementptr inbounds i64, i64* %1, i64 6
%20 = load i64, i64* %19
%21 = icmp eq i64 %20, 1
br i1 %21, label %22, label %26
22: ; preds = %18
%23 = getelementptr inbounds i64, i64* %1, i64 7
%24 = load i64, i64* %23
%25 = icmp eq i64 %24, 1
br label %26
26: ; preds = %6, %10, %14, %22, %18
%27 = phi i1 [ false, %18 ], [ %25, %22 ], [ false, %14 ], [ false, %10 ], [ false, %6 ]
%28 = getelementptr inbounds i64, i64* %1, i64 6
%29 = load i64, i64* %28
%30 = icmp eq i64 %29, 1
br i1 %30, label %35, label %31
31: ; preds = %26
%32 = getelementptr inbounds i64, i64* %1, i64 7
%33 = load i64, i64* %32
%34 = icmp eq i64 %33, 1
br label %35
35: ; preds = %31, %26
%36 = phi i1 [ true, %26 ], [ %34, %31 ]
%37 = select i1 %27, i1 true, i1 %36
%38 = icmp eq i64 %2, 0
%39 = and i1 %38, %37
br i1 %39, label %40, label %155
40: ; preds = %35
%41 = add nsw i64 %0, 180
%42 = getelementptr inbounds i64, i64* %4, i64 2
%43 = load i64, i64* %42
%44 = sub i64 %41, %43
%45 = srem i64 %44, %0
%46 = sub i64 %44, %45
%47 = add nsw i64 %46, %43
%48 = getelementptr inbounds i64, i64* %3, i64 4
%49 = load i64, i64* %48
%50 = getelementptr inbounds i64, i64* %3, i64 5
%51 = load i64, i64* %50
%52 = add i64 %49, -155
%53 = add i64 %52, %51
%54 = sdiv i64 %53, 2
%55 = sub nsw i64 %54, %47
%56 = sitofp i64 %55 to float
%57 = sitofp i64 %0 to float
%58 = fdiv float %56, %57
%59 = tail call i64 @lrintf(float %58)
%60 = mul nsw i64 %59, %0
%61 = add nsw i64 %60, %47
%62 = getelementptr inbounds i64, i64* %4, i64 4
store i64 %61, i64* %62
%63 = add nsw i64 %61, 155
%64 = getelementptr inbounds i64, i64* %4, i64 5
%65 = icmp sgt i64 %61, 385
br i1 %65, label %66, label %73
66: ; preds = %40, %66
%67 = phi i64 [ %69, %66 ], [ %61, %40 ]
%68 = phi i64 [ %70, %66 ], [ %63, %40 ]
%69 = sub nsw i64 %67, %0
%70 = sub nsw i64 %68, %0
%71 = icmp sgt i64 %70, 540
br i1 %71, label %66, label %72
72: ; preds = %66
store i64 %69, i64* %62
br label %73
73: ; preds = %72, %40
%74 = phi i64 [ %69, %72 ], [ %61, %40 ]
%75 = phi i64 [ %70, %72 ], [ %63, %40 ]
store i64 %75, i64* %64
%76 = icmp slt i64 %74, 181
br i1 %76, label %77, label %165
77: ; preds = %73
%78 = add i64 %74, %0
%79 = call i64 @llvm.smax.i64(i64 %78, i64 181)
%80 = icmp slt i64 %78, 181
%81 = zext i1 %80 to i64
%82 = add i64 %78, %81
%83 = sub i64 %79, %82
%84 = udiv i64 %83, %0
%85 = add i64 %84, %81
%86 = add i64 %85, 1
%87 = icmp ult i64 %86, 4
br i1 %87, label %146, label %88
88: ; preds = %77
%89 = and i64 %86, -4
%90 = mul i64 %89, %0
%91 = add i64 %74, %90
%92 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %75, i64 0
%93 = insertelement <2 x i64> poison, i64 %0, i64 0
%94 = shufflevector <2 x i64> %93, <2 x i64> poison, <2 x i32> zeroinitializer
%95 = insertelement <2 x i64> poison, i64 %0, i64 0
%96 = shufflevector <2 x i64> %95, <2 x i64> poison, <2 x i32> zeroinitializer
%97 = add i64 %89, -4
%98 = lshr exact i64 %97, 2
%99 = add nuw nsw i64 %98, 1
%100 = and i64 %99, 7
%101 = icmp ult i64 %97, 28
br i1 %101, label %126, label %102
102: ; preds = %88
%103 = and i64 %99, 9223372036854775800
%104 = shl <2 x i64> %94, <i64 1, i64 1>
%105 = shl <2 x i64> %96, <i64 1, i64 1>
%106 = shl <2 x i64> %94, <i64 1, i64 1>
%107 = shl <2 x i64> %96, <i64 1, i64 1>
%108 = shl <2 x i64> %94, <i64 1, i64 1>
%109 = shl <2 x i64> %96, <i64 1, i64 1>
%110 = shl <2 x i64> %94, <i64 1, i64 1>
%111 = shl <2 x i64> %96, <i64 1, i64 1>
br label %112
112: ; preds = %112, %102
%113 = phi <2 x i64> [ %92, %102 ], [ %122, %112 ]
%114 = phi <2 x i64> [ zeroinitializer, %102 ], [ %123, %112 ]
%115 = phi i64 [ 0, %102 ], [ %124, %112 ]
%116 = add <2 x i64> %113, %104
%117 = add <2 x i64> %114, %105
%118 = add <2 x i64> %116, %106
%119 = add <2 x i64> %117, %107
%120 = add <2 x i64> %118, %108
%121 = add <2 x i64> %119, %109
%122 = add <2 x i64> %120, %110
%123 = add <2 x i64> %121, %111
%124 = add i64 %115, 8
%125 = icmp eq i64 %124, %103
br i1 %125, label %126, label %112
126: ; preds = %112, %88
%127 = phi <2 x i64> [ undef, %88 ], [ %122, %112 ]
%128 = phi <2 x i64> [ undef, %88 ], [ %123, %112 ]
%129 = phi <2 x i64> [ %92, %88 ], [ %122, %112 ]
%130 = phi <2 x i64> [ zeroinitializer, %88 ], [ %123, %112 ]
%131 = icmp eq i64 %100, 0
br i1 %131, label %140, label %132
132: ; preds = %126, %132
%133 = phi <2 x i64> [ %136, %132 ], [ %129, %126 ]
%134 = phi <2 x i64> [ %137, %132 ], [ %130, %126 ]
%135 = phi i64 [ %138, %132 ], [ 0, %126 ]
%136 = add <2 x i64> %133, %94
%137 = add <2 x i64> %134, %96
%138 = add i64 %135, 1
%139 = icmp eq i64 %138, %100
br i1 %139, label %140, label %132
140: ; preds = %132, %126
%141 = phi <2 x i64> [ %127, %126 ], [ %136, %132 ]
%142 = phi <2 x i64> [ %128, %126 ], [ %137, %132 ]
%143 = add <2 x i64> %142, %141
%144 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %143)
%145 = icmp eq i64 %86, %89
br i1 %145, label %162, label %146
146: ; preds = %77, %140
%147 = phi i64 [ %75, %77 ], [ %144, %140 ]
%148 = phi i64 [ %74, %77 ], [ %91, %140 ]
br label %149
149: ; preds = %146, %149
%150 = phi i64 [ %153, %149 ], [ %147, %146 ]
%151 = phi i64 [ %152, %149 ], [ %148, %146 ]
%152 = add nsw i64 %151, %0
%153 = add nsw i64 %150, %0
%154 = icmp slt i64 %152, 181
br i1 %154, label %149, label %162
155: ; preds = %35
%156 = getelementptr inbounds i64, i64* %3, i64 4
%157 = load i64, i64* %156
%158 = getelementptr inbounds i64, i64* %4, i64 4
store i64 %157, i64* %158
%159 = getelementptr inbounds i64, i64* %3, i64 5
%160 = load i64, i64* %159
%161 = getelementptr inbounds i64, i64* %4, i64 5
store i64 %160, i64* %161
br label %165
162: ; preds = %149, %140
%163 = phi i64 [ %91, %140 ], [ %152, %149 ]
%164 = phi i64 [ %144, %140 ], [ %153, %149 ]
store i64 %163, i64* %62
store i64 %164, i64* %64
br label %165
165: ; preds = %73, %162, %155
%166 = phi i64 [ %74, %73 ], [ %163, %162 ], [ %157, %155 ]
%167 = phi i64 [ %75, %73 ], [ %164, %162 ], [ %160, %155 ]
%168 = getelementptr inbounds i64, i64* %4, i64 5
%169 = getelementptr inbounds i64, i64* %4, i64 4
%170 = sub nsw i64 %167, %166
%171 = add nsw i64 %170, 1
%172 = srem i64 %171, %0
%173 = sub i64 %171, %172
%174 = icmp ne i64 %173, 0
%175 = select i1 %174, i1 %36, i1 false
br i1 %175, label %182, label %176
176: ; preds = %165
%177 = getelementptr inbounds i64, i64* %3, i64 4
%178 = load i64, i64* %177
%179 = getelementptr inbounds i64, i64* %5, i64 4
store i64 %178, i64* %179
%180 = getelementptr inbounds i64, i64* %3, i64 5
%181 = load i64, i64* %180
br label %194
182: ; preds = %165
%183 = icmp eq i64 %2, 2
br i1 %183, label %184, label %189
184: ; preds = %182
%185 = add i64 %167, 1
%186 = sub i64 %185, %173
%187 = getelementptr inbounds i64, i64* %5, i64 4
store i64 %186, i64* %187
%188 = load i64, i64* %168
br label %194
189: ; preds = %182
%190 = getelementptr inbounds i64, i64* %5, i64 4
store i64 %166, i64* %190
%191 = load i64, i64* %169
%192 = add i64 %173, -1
%193 = add i64 %192, %191
br label %194
194: ; preds = %184, %189, %176
%195 = phi i64 [ %188, %184 ], [ %193, %189 ], [ %181, %176 ]
%196 = getelementptr inbounds i64, i64* %5, i64 5
store i64 %195, i64* %196
ret void
}