#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 */
typedef struct TYPE_4__ TYPE_1__;

/* Type definitions */
struct TYPE_4__ {
  int x;
  int y;
};
typedef TYPE_1__ XPoint;

/* Variables and functions */
int cos(double);
int sin(double);
void shape_set_single_arrow(int length, int aux_length, int use_split,
                            int angle, XPoint arrow_source[],
                            XPoint arrow_dester[]) {
  int x_offset, y_offset, x_aux_offset, y_aux_offset;
  double rad_angle;
  switch (angle) {
  case 0:
    x_offset = length;
    y_offset = 0;
    x_aux_offset = aux_length;
    y_aux_offset = 0;
    break;
  case 90:
    x_offset = 0;
    y_offset = -length;
    x_aux_offset = 0;
    y_aux_offset = -aux_length;
    break;
  case 180:
    x_offset = -length;
    y_offset = 0;
    x_aux_offset = -aux_length;
    y_aux_offset = 0;
    break;
  case 270:
    x_offset = 0;
    y_offset = length;
    x_aux_offset = 0;
    y_aux_offset = aux_length;
    break;
  default:
    rad_angle = ((double)angle) * 3.14159265358979323846 / 180.0;
    x_offset = (int)(cos(rad_angle) * length);
    y_offset = -(int)(sin(rad_angle) * length);
    x_aux_offset = (int)(cos(rad_angle) * aux_length);
    y_aux_offset = -(int)(sin(rad_angle) * aux_length);
    break;
  }
  if (use_split) {
    arrow_source[0].x = 0;
    arrow_source[0].y = 0;
    arrow_dester[0].x = x_aux_offset;
    arrow_dester[0].y = y_aux_offset;
    arrow_source[1].x = x_aux_offset;
    arrow_source[1].y = y_aux_offset;
    arrow_dester[1].x = x_offset;
    arrow_dester[1].y = y_offset;
    return;
  }
  arrow_source[1].x = 0;
  arrow_source[1].y = 0;
  arrow_dester[1].x = x_offset;
  arrow_dester[1].y = y_offset;
  if (x_offset == 0) {
    arrow_source[0].x = -1;
    arrow_source[0].y = 0;
    arrow_dester[0].x = -1;
    arrow_dester[0].y = y_offset;
    arrow_source[2].x = 1;
    arrow_source[2].y = 0;
    arrow_dester[2].x = 1;
    arrow_dester[2].y = y_offset;
  } else if (y_offset == 0) {
    arrow_source[0].x = 0;
    arrow_source[0].y = -1;
    arrow_dester[0].x = x_offset;
    arrow_dester[0].y = -1;
    arrow_source[2].x = 0;
    arrow_source[2].y = 1;
    arrow_dester[2].x = x_offset;
    arrow_dester[2].y = 1;
  } else if (angle == 45 || angle == 135 || angle == 225 || angle == 315) {
    arrow_source[0].x = 0;
    arrow_source[0].y = (y_offset < 0) ? -1 : 1;
    arrow_dester[0].x = x_offset + ((x_offset < 0) ? 1 : -1);
    arrow_dester[0].y = y_offset;
    arrow_source[2].x = (x_offset < 0) ? -1 : 1;
    arrow_source[2].y = 0;
    arrow_dester[2].x = x_offset;
    arrow_dester[2].y = y_offset + ((y_offset < 0) ? 1 : -1);
  } else {
    arrow_source[0].x = (x_offset < 0) ? 1 : -1;
    arrow_source[0].y = 0;
    arrow_dester[0].x = x_offset + ((x_offset < 0) ? 1 : -1);
    arrow_dester[0].y = y_offset;
    arrow_source[2].x = 0;
    arrow_source[2].y = (y_offset < 0) ? 1 : -1;
    arrow_dester[2].x = x_offset;
    arrow_dester[2].y = y_offset + ((y_offset < 0) ? 1 : -1);
  }
}


x86 assembly (clang, -O0):
<shape_set_single_arrow>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8,-0x18(%rbp)
mov    %r9,-0x20(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x3c(%rbp)
test   %eax,%eax
je     1186 <shape_set_single_arrow+0x66>
jmp    114f <shape_set_single_arrow+0x2f>
mov    -0x3c(%rbp),%eax
sub    $0x5a,%eax
je     11a5 <shape_set_single_arrow+0x85>
jmp    1160 <shape_set_single_arrow+0x40>
mov    -0x3c(%rbp),%eax
sub    $0xb4,%eax
je     11c8 <shape_set_single_arrow+0xa8>
jmp    1173 <shape_set_single_arrow+0x53>
mov    -0x3c(%rbp),%eax
sub    $0x10e,%eax
je     11eb <shape_set_single_arrow+0xcb>
jmp    120a <shape_set_single_arrow+0xea>
mov    -0x4(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
jmp    127c <shape_set_single_arrow+0x15c>
movl   $0x0,-0x24(%rbp)
xor    %eax,%eax
sub    -0x4(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
xor    %eax,%eax
sub    -0x8(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    127c <shape_set_single_arrow+0x15c>
xor    %eax,%eax
sub    -0x4(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
xor    %eax,%eax
sub    -0x8(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
jmp    127c <shape_set_single_arrow+0x15c>
movl   $0x0,-0x24(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    127c <shape_set_single_arrow+0x15c>
cvtsi2sdl -0x10(%rbp),%xmm0
movsd  0xdf1(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xddd(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1040 <cos@plt>
imul   -0x4(%rbp),%eax
mov    %eax,-0x24(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1030 <sin@plt>
mov    %eax,%ecx
imul   -0x4(%rbp),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1040 <cos@plt>
imul   -0x8(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1030 <sin@plt>
mov    %eax,%ecx
imul   -0x8(%rbp),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0xc(%rbp)
je     12db <shape_set_single_arrow+0x1bb>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0x4(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0xc(%rax)
jmp    153f <shape_set_single_arrow+0x41f>
mov    -0x18(%rbp),%rax
movl   $0x0,0x8(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0xc(%rax)
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0xc(%rax)
cmpl   $0x0,-0x24(%rbp)
jne    1368 <shape_set_single_arrow+0x248>
mov    -0x18(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0x4(%rax)
mov    -0x20(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x18(%rbp),%rax
movl   $0x1,0x10(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0x14(%rax)
mov    -0x20(%rbp),%rax
movl   $0x1,0x10(%rax)
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x14(%rax)
jmp    153f <shape_set_single_arrow+0x41f>
cmpl   $0x0,-0x28(%rbp)
jne    13cb <shape_set_single_arrow+0x2ab>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x18(%rbp),%rax
movl   $0xffffffff,0x4(%rax)
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
movl   $0xffffffff,0x4(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0x10(%rax)
mov    -0x18(%rbp),%rax
movl   $0x1,0x14(%rax)
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x20(%rbp),%rax
movl   $0x1,0x14(%rax)
jmp    153a <shape_set_single_arrow+0x41a>
cmpl   $0x2d,-0x10(%rbp)
je     13fc <shape_set_single_arrow+0x2dc>
cmpl   $0x87,-0x10(%rbp)
je     13fc <shape_set_single_arrow+0x2dc>
cmpl   $0xe1,-0x10(%rbp)
je     13fc <shape_set_single_arrow+0x2dc>
cmpl   $0x13b,-0x10(%rbp)
jne    149b <shape_set_single_arrow+0x37b>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x28(%rbp),%edx
mov    $0x1,%ecx
mov    $0xffffffff,%eax
cmp    $0x0,%edx
cmovl  %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x24(%rbp),%ecx
mov    -0x24(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%edx
cmp    $0x0,%esi
cmovl  %edx,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x24(%rbp),%edx
mov    $0x1,%ecx
mov    $0xffffffff,%eax
cmp    $0x0,%edx
cmovl  %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0x14(%rax)
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x28(%rbp),%ecx
mov    -0x28(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%edx
cmp    $0x0,%esi
cmovl  %edx,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x14(%rax)
jmp    1535 <shape_set_single_arrow+0x415>
mov    -0x24(%rbp),%edx
mov    $0xffffffff,%ecx
mov    $0x1,%eax
cmp    $0x0,%edx
cmovl  %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0x4(%rax)
mov    -0x24(%rbp),%ecx
mov    -0x24(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%edx
cmp    $0x0,%esi
cmovl  %edx,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0x10(%rax)
mov    -0x28(%rbp),%edx
mov    $0xffffffff,%ecx
mov    $0x1,%eax
cmp    $0x0,%edx
cmovl  %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x14(%rax)
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x28(%rbp),%ecx
mov    -0x28(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%edx
cmp    $0x0,%esi
cmovl  %edx,%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x14(%rax)
jmp    153a <shape_set_single_arrow+0x41a>
jmp    153f <shape_set_single_arrow+0x41f>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<shape_set_single_arrow>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %r9,%r12
mov    %ecx,%r14d
mov    %esi,%r13d
mov    %edi,%ebx
cmp    $0xb3,%ecx
jg     1153 <shape_set_single_arrow+0x33>
test   %r14d,%r14d
je     1175 <shape_set_single_arrow+0x55>
cmp    $0x5a,%r14d
jne    11c4 <shape_set_single_arrow+0xa4>
neg    %ebx
neg    %r13d
jmp    1165 <shape_set_single_arrow+0x45>
cmp    $0xb4,%r14d
je     1187 <shape_set_single_arrow+0x67>
cmp    $0x10e,%r14d
jne    11c4 <shape_set_single_arrow+0xa4>
xor    %ebp,%ebp
mov    %ebx,%r15d
xor    %ebx,%ebx
test   %edx,%edx
jne    119d <shape_set_single_arrow+0x7d>
jmp    1241 <shape_set_single_arrow+0x121>
mov    %r14d,%r15d
mov    %r13d,%ebp
mov    %r14d,%r13d
test   %edx,%edx
jne    119d <shape_set_single_arrow+0x7d>
jmp    1241 <shape_set_single_arrow+0x121>
neg    %ebx
neg    %r13d
xor    %r15d,%r15d
mov    %r13d,%ebp
xor    %r13d,%r13d
test   %edx,%edx
je     1241 <shape_set_single_arrow+0x121>
movq   $0x0,(%r8)
mov    %ebp,(%r12)
mov    %r13d,0x4(%r12)
mov    %ebp,0x8(%r8)
mov    %r13d,0xc(%r8)
mov    %ebx,0x8(%r12)
mov    $0x1,%eax
jmp    1390 <shape_set_single_arrow+0x270>
cvtsi2sd %r14d,%xmm0
mulsd  0xe2f(%rip),%xmm0
divsd  0xe2f(%rip),%xmm0
movsd  %xmm0,(%rsp)
mov    %r8,0x10(%rsp)
mov    %edx,0xc(%rsp)
call   1040 <cos@plt>
imul   %ebx,%eax
mov    %eax,0x8(%rsp)
movsd  (%rsp),%xmm0
call   1030 <sin@plt>
mov    %eax,%r15d
imul   %ebx,%r15d
neg    %r15d
movsd  (%rsp),%xmm0
call   1040 <cos@plt>
mov    %eax,%ebp
imul   %r13d,%ebp
movsd  (%rsp),%xmm0
call   1030 <sin@plt>
mov    0xc(%rsp),%edx
mov    0x10(%rsp),%r8
imul   %r13d,%eax
neg    %eax
mov    %eax,%r13d
mov    0x8(%rsp),%eax
mov    %eax,%ebx
test   %edx,%edx
jne    119d <shape_set_single_arrow+0x7d>
movq   $0x0,0x8(%r8)
mov    %ebx,0x8(%r12)
mov    %r15d,0xc(%r12)
test   %ebx,%ebx
je     127d <shape_set_single_arrow+0x15d>
test   %r15d,%r15d
je     12a8 <shape_set_single_arrow+0x188>
cmp    $0xe0,%r14d
jg     12e0 <shape_set_single_arrow+0x1c0>
cmp    $0x2d,%r14d
je     12f2 <shape_set_single_arrow+0x1d2>
cmp    $0x87,%r14d
je     12f2 <shape_set_single_arrow+0x1d2>
jmp    1343 <shape_set_single_arrow+0x223>
mov    $0xffffffff,%eax
mov    %rax,(%r8)
movl   $0xffffffff,(%r12)
ff
mov    %r15d,0x4(%r12)
movq   $0x1,0x10(%r8)
movl   $0x1,0x10(%r12)
jmp    138b <shape_set_single_arrow+0x26b>
movabs $0xffffffff00000000,%rax
ff ff ff
mov    %rax,(%r8)
mov    %ebx,(%r12)
movl   $0xffffffff,0x4(%r12)
ff ff
movabs $0x100000000,%rax
mov    %rax,0x10(%r8)
mov    %ebx,0x10(%r12)
mov    $0x1,%r15d
jmp    138b <shape_set_single_arrow+0x26b>
cmp    $0x13b,%r14d
je     12f2 <shape_set_single_arrow+0x1d2>
cmp    $0xe1,%r14d
jne    1343 <shape_set_single_arrow+0x223>
movl   $0x0,(%r8)
mov    %r15d,%eax
not    %eax
shr    $0x1f,%eax
add    %eax,%eax
add    $0xffffffff,%eax
mov    %eax,0x4(%r8)
mov    %ebx,%eax
shr    $0x1f,%eax
lea    (%rbx,%rax,2),%eax
add    $0xffffffff,%eax
mov    %eax,(%r12)
mov    %r15d,0x4(%r12)
mov    %ebx,%eax
not    %eax
shr    $0x1f,%eax
add    %eax,%eax
add    $0xffffffff,%eax
mov    %eax,0x10(%r8)
movl   $0x0,0x14(%r8)
mov    %ebx,0x10(%r12)
mov    %r15d,%eax
shr    $0x1f,%eax
jmp    1383 <shape_set_single_arrow+0x263>
mov    %ebx,%eax
shr    $0x1f,%eax
lea    (%rax,%rax,1),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%r8)
movl   $0x0,0x4(%r8)
lea    -0x1(%rbx,%rax,2),%eax
mov    %eax,(%r12)
mov    %r15d,0x4(%r12)
movl   $0x0,0x10(%r8)
mov    %r15d,%eax
shr    $0x1f,%eax
lea    (%rax,%rax,1),%ecx
add    $0xffffffff,%ecx
mov    %ecx,0x14(%r8)
mov    %ebx,0x10(%r12)
lea    (%r15,%rax,2),%r15d
add    $0xffffffff,%r15d
mov    $0x2,%eax
mov    %r15d,0x4(%r12,%rax,8)
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
%struct.TYPE_4__ = type { i32, i32 }
define void @shape_set_single_arrow(i32 %0, i32 %1, i32 %2, i32 %3, %struct.TYPE_4__* writeonly %4, %struct.TYPE_4__* writeonly %5) {
switch i32 %3, label %14 [
i32 0, label %28
i32 90, label %7
i32 180, label %10
i32 270, label %13
]
7: ; preds = %6
%8 = sub nsw i32 0, %0
%9 = sub nsw i32 0, %1
br label %28
10: ; preds = %6
%11 = sub nsw i32 0, %0
%12 = sub nsw i32 0, %1
br label %28
13: ; preds = %6
br label %28
14: ; preds = %6
%15 = sitofp i32 %3 to double
%16 = fmul double %15, 0x400921FB54442D18
%17 = fdiv double %16, 1.800000e+02
%18 = tail call i32 @cos(double %17)
%19 = mul nsw i32 %18, %0
%20 = tail call i32 @sin(double %17)
%21 = mul i32 %20, %0
%22 = sub i32 0, %21
%23 = tail call i32 @cos(double %17)
%24 = mul nsw i32 %23, %1
%25 = tail call i32 @sin(double %17)
%26 = mul i32 %25, %1
%27 = sub i32 0, %26
br label %28
28: ; preds = %6, %14, %13, %10, %7
%29 = phi i32 [ %22, %14 ], [ %0, %13 ], [ 0, %10 ], [ %8, %7 ], [ %3, %6 ]
%30 = phi i32 [ %24, %14 ], [ 0, %13 ], [ %12, %10 ], [ 0, %7 ], [ %1, %6 ]
%31 = phi i32 [ %27, %14 ], [ %1, %13 ], [ 0, %10 ], [ %9, %7 ], [ %3, %6 ]
%32 = phi i32 [ %19, %14 ], [ 0, %13 ], [ %11, %10 ], [ 0, %7 ], [ %0, %6 ]
%33 = icmp eq i32 %2, 0
br i1 %33, label %42, label %34
34: ; preds = %28
%35 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 0
store i32 0, i32* %35
%36 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 1
store i32 0, i32* %36
%37 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 0
store i32 %30, i32* %37
%38 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 1
store i32 %31, i32* %38
%39 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 1, i32 0
store i32 %30, i32* %39
%40 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 1, i32 1
store i32 %31, i32* %40
%41 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 1, i32 0
store i32 %32, i32* %41
br label %97
42: ; preds = %28
%43 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 1, i32 0
store i32 0, i32* %43
%44 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 1, i32 1
store i32 0, i32* %44
%45 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 1, i32 0
store i32 %32, i32* %45
%46 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 1, i32 1
store i32 %29, i32* %46
%47 = icmp eq i32 %32, 0
br i1 %47, label %48, label %56
48: ; preds = %42
%49 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 0
store i32 -1, i32* %49
%50 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 1
store i32 0, i32* %50
%51 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 0
store i32 -1, i32* %51
%52 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 1
store i32 %29, i32* %52
%53 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 2, i32 0
store i32 1, i32* %53
%54 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 2, i32 1
store i32 0, i32* %54
%55 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 2, i32 0
store i32 1, i32* %55
br label %97
56: ; preds = %42
%57 = icmp eq i32 %29, 0
br i1 %57, label %58, label %66
58: ; preds = %56
%59 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 0
store i32 0, i32* %59
%60 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 1
store i32 -1, i32* %60
%61 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 0
store i32 %32, i32* %61
%62 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 1
store i32 -1, i32* %62
%63 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 2, i32 0
store i32 0, i32* %63
%64 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 2, i32 1
store i32 1, i32* %64
%65 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 2, i32 0
store i32 %32, i32* %65
br label %97
66: ; preds = %56
switch i32 %3, label %83 [
i32 315, label %67
i32 225, label %67
i32 135, label %67
i32 45, label %67
]
67: ; preds = %66, %66, %66, %66
%68 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 0
store i32 0, i32* %68
%69 = icmp slt i32 %29, 0
%70 = select i1 %69, i32 -1, i32 1
%71 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 1
store i32 %70, i32* %71
%72 = icmp slt i32 %32, 0
%73 = select i1 %72, i32 1, i32 -1
%74 = add nsw i32 %73, %32
%75 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 0
store i32 %74, i32* %75
%76 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 1
store i32 %29, i32* %76
%77 = select i1 %72, i32 -1, i32 1
%78 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 2, i32 0
store i32 %77, i32* %78
%79 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 2, i32 1
store i32 0, i32* %79
%80 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 2, i32 0
store i32 %32, i32* %80
%81 = select i1 %69, i32 1, i32 -1
%82 = add nsw i32 %81, %29
br label %97
83: ; preds = %66
%84 = icmp sgt i32 %32, -1
%85 = select i1 %84, i32 -1, i32 1
%86 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 0
store i32 %85, i32* %86
%87 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 0, i32 1
store i32 0, i32* %87
%88 = add nsw i32 %85, %32
%89 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 0
store i32 %88, i32* %89
%90 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 0, i32 1
store i32 %29, i32* %90
%91 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 2, i32 0
store i32 0, i32* %91
%92 = icmp sgt i32 %29, -1
%93 = select i1 %92, i32 -1, i32 1
%94 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i64 2, i32 1
store i32 %93, i32* %94
%95 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 2, i32 0
store i32 %32, i32* %95
%96 = add nsw i32 %93, %29
br label %97
97: ; preds = %48, %67, %83, %58, %34
%98 = phi i64 [ 2, %48 ], [ 2, %67 ], [ 2, %83 ], [ 2, %58 ], [ 1, %34 ]
%99 = phi i32 [ %29, %48 ], [ %82, %67 ], [ %96, %83 ], [ 1, %58 ], [ %29, %34 ]
%100 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %5, i64 %98, i32 1
store i32 %99, i32* %100
ret void
}