#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 */
double DBL_MAX;
void dboxScale(double *lb, double *ub, double *scl, int m, int div) {
  register int i;
  if (!lb) {
    if (!ub)
      return;
    else {
      if (div) {
        for (i = m; i-- > 0;)
          if (ub[i] != DBL_MAX)
            ub[i] = ub[i] / scl[i];
      } else {
        for (i = m; i-- > 0;)
          if (ub[i] != DBL_MAX)
            ub[i] = ub[i] * scl[i];
      }
    }
  } else if (!ub) {
    if (div) {
      for (i = m; i-- > 0;)
        if (lb[i] != -DBL_MAX)
          lb[i] = lb[i] / scl[i];
    } else {
      for (i = m; i-- > 0;)
        if (lb[i] != -DBL_MAX)
          lb[i] = lb[i] * scl[i];
    }
  } else {
    if (div) {
      for (i = m; i-- > 0;) {
        if (ub[i] != DBL_MAX)
          ub[i] = ub[i] / scl[i];
        if (lb[i] != -DBL_MAX)
          lb[i] = lb[i] / scl[i];
      }
    } else {
      for (i = m; i-- > 0;) {
        if (ub[i] != DBL_MAX)
          ub[i] = ub[i] * scl[i];
        if (lb[i] != -DBL_MAX)
          lb[i] = lb[i] * scl[i];
      }
    }
  }
}


x86 assembly (clang, -O0):
<dboxScale>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
cmpq   $0x0,-0x8(%rbp)
jne    122e <dboxScale+0x12e>
cmpq   $0x0,-0x10(%rbp)
jne    1132 <dboxScale+0x32>
jmp    1538 <dboxScale+0x438>
cmpl   $0x0,-0x20(%rbp)
je     11b0 <dboxScale+0xb0>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    11ab <dboxScale+0xab>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2e76(%rip),%rax
ucomisd (%rax),%xmm0
jne    117f <dboxScale+0x7f>
jp     117f <dboxScale+0x7f>
jmp    11a6 <dboxScale+0xa6>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1142 <dboxScale+0x42>
jmp    1224 <dboxScale+0x124>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    121f <dboxScale+0x11f>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2e02(%rip),%rax
ucomisd (%rax),%xmm0
jne    11f3 <dboxScale+0xf3>
jp     11f3 <dboxScale+0xf3>
jmp    121a <dboxScale+0x11a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    11b6 <dboxScale+0xb6>
jmp    1224 <dboxScale+0x124>
jmp    1229 <dboxScale+0x129>
jmp    1538 <dboxScale+0x438>
cmpq   $0x0,-0x10(%rbp)
jne    1366 <dboxScale+0x266>
cmpl   $0x0,-0x20(%rbp)
je     12d2 <dboxScale+0x1d2>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    12cd <dboxScale+0x1cd>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2d6f(%rip),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
ucomisd %xmm1,%xmm0
jne    12a1 <dboxScale+0x1a1>
jp     12a1 <dboxScale+0x1a1>
jmp    12c8 <dboxScale+0x1c8>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1249 <dboxScale+0x149>
jmp    1361 <dboxScale+0x261>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    135c <dboxScale+0x25c>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2ce0(%rip),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
ucomisd %xmm1,%xmm0
jne    1330 <dboxScale+0x230>
jp     1330 <dboxScale+0x230>
jmp    1357 <dboxScale+0x257>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    12d8 <dboxScale+0x1d8>
jmp    1361 <dboxScale+0x261>
jmp    1533 <dboxScale+0x433>
cmpl   $0x0,-0x20(%rbp)
je     144f <dboxScale+0x34f>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    144a <dboxScale+0x34a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2c42(%rip),%rax
ucomisd (%rax),%xmm0
jne    13b3 <dboxScale+0x2b3>
jp     13b3 <dboxScale+0x2b3>
jmp    13da <dboxScale+0x2da>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2bf2(%rip),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
ucomisd %xmm1,%xmm0
jne    141e <dboxScale+0x31e>
jp     141e <dboxScale+0x31e>
jmp    1445 <dboxScale+0x345>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1376 <dboxScale+0x276>
jmp    152e <dboxScale+0x42e>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    1529 <dboxScale+0x429>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2b63(%rip),%rax
ucomisd (%rax),%xmm0
jne    1492 <dboxScale+0x392>
jp     1492 <dboxScale+0x392>
jmp    14b9 <dboxScale+0x3b9>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2b13(%rip),%rax
movsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
ucomisd %xmm1,%xmm0
jne    14fd <dboxScale+0x3fd>
jp     14fd <dboxScale+0x3fd>
jmp    1524 <dboxScale+0x424>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1455 <dboxScale+0x355>
jmp    152e <dboxScale+0x42e>
jmp    1533 <dboxScale+0x433>
jmp    1538 <dboxScale+0x438>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dboxScale>:
test   %rdi,%rdi
je     1193 <dboxScale+0x93>
test   %rsi,%rsi
je     11ee <dboxScale+0xee>
test   %r8d,%r8d
je     1256 <dboxScale+0x156>
test   %ecx,%ecx
jle    13bd <dboxScale+0x2bd>
mov    %ecx,%eax
mov    0x2eb4(%rip),%r8
movsd  (%r8),%xmm1
add    $0x1,%rax
movapd 0xec3(%rip),%xmm0
jmp    114e <dboxScale+0x4e>
nop
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    13bd <dboxScale+0x2bd>
lea    -0x2(%rax),%ecx
movsd  (%rsi,%rcx,8),%xmm2
ucomisd %xmm1,%xmm2
jne    115e <dboxScale+0x5e>
jnp    116d <dboxScale+0x6d>
divsd  (%rdx,%rcx,8),%xmm2
movsd  %xmm2,(%rsi,%rcx,8)
movsd  (%r8),%xmm1
movsd  (%rdi,%rcx,8),%xmm2
movapd %xmm1,%xmm3
xorpd  %xmm0,%xmm3
ucomisd %xmm3,%xmm2
jne    1182 <dboxScale+0x82>
jnp    1140 <dboxScale+0x40>
divsd  (%rdx,%rcx,8),%xmm2
movsd  %xmm2,(%rdi,%rcx,8)
movsd  (%r8),%xmm1
jmp    1140 <dboxScale+0x40>
test   %rsi,%rsi
je     13bd <dboxScale+0x2bd>
test   %r8d,%r8d
je     12d3 <dboxScale+0x1d3>
test   %ecx,%ecx
jle    13bd <dboxScale+0x2bd>
mov    %ecx,%eax
mov    0x2e2a(%rip),%rcx
movsd  (%rcx),%xmm0
add    $0x1,%rax
jmp    11ce <dboxScale+0xce>
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    13bd <dboxScale+0x2bd>
lea    -0x2(%rax),%edi
movsd  (%rsi,%rdi,8),%xmm1
ucomisd %xmm0,%xmm1
jne    11de <dboxScale+0xde>
jnp    11c0 <dboxScale+0xc0>
divsd  (%rdx,%rdi,8),%xmm1
movsd  %xmm1,(%rsi,%rdi,8)
movsd  (%rcx),%xmm0
jmp    11c0 <dboxScale+0xc0>
test   %r8d,%r8d
je     1372 <dboxScale+0x272>
test   %ecx,%ecx
jle    13bd <dboxScale+0x2bd>
mov    %ecx,%eax
mov    0x2dd8(%rip),%rcx
movsd  (%rcx),%xmm1
add    $0x1,%rax
movapd 0xde8(%rip),%xmm0
jmp    122e <dboxScale+0x12e>
nopw   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    13bd <dboxScale+0x2bd>
lea    -0x2(%rax),%esi
movsd  (%rdi,%rsi,8),%xmm2
movapd %xmm1,%xmm3
xorpd  %xmm0,%xmm3
ucomisd %xmm3,%xmm2
jne    1246 <dboxScale+0x146>
jnp    1220 <dboxScale+0x120>
divsd  (%rdx,%rsi,8),%xmm2
movsd  %xmm2,(%rdi,%rsi,8)
movsd  (%rcx),%xmm1
jmp    1220 <dboxScale+0x120>
test   %ecx,%ecx
jle    13bd <dboxScale+0x2bd>
mov    %ecx,%eax
mov    0x2d79(%rip),%r8
movsd  (%r8),%xmm1
add    $0x1,%rax
movapd 0xd88(%rip),%xmm0
jmp    128e <dboxScale+0x18e>
nopw   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    13bd <dboxScale+0x2bd>
lea    -0x2(%rax),%ecx
movsd  (%rsi,%rcx,8),%xmm2
ucomisd %xmm1,%xmm2
jne    129e <dboxScale+0x19e>
jnp    12ad <dboxScale+0x1ad>
mulsd  (%rdx,%rcx,8),%xmm2
movsd  %xmm2,(%rsi,%rcx,8)
movsd  (%r8),%xmm1
movsd  (%rdi,%rcx,8),%xmm2
movapd %xmm1,%xmm3
xorpd  %xmm0,%xmm3
ucomisd %xmm3,%xmm2
jne    12c2 <dboxScale+0x1c2>
jnp    1280 <dboxScale+0x180>
mulsd  (%rdx,%rcx,8),%xmm2
movsd  %xmm2,(%rdi,%rcx,8)
movsd  (%r8),%xmm1
jmp    1280 <dboxScale+0x180>
test   %ecx,%ecx
jle    13bd <dboxScale+0x2bd>
mov    %ecx,%eax
mov    0x2cfc(%rip),%rdi
movsd  (%rdi),%xmm0
test   $0x1,%al
je     1311 <dboxScale+0x211>
add    $0xffffffffffffffff,%rax
mov    %eax,%r8d
movsd  (%rsi,%r8,8),%xmm1
ucomisd %xmm0,%xmm1
jne    1301 <dboxScale+0x201>
jnp    1311 <dboxScale+0x211>
mulsd  (%rdx,%r8,8),%xmm1
movsd  %xmm1,(%rsi,%r8,8)
movsd  (%rdi),%xmm0
cmp    $0x1,%ecx
je     13bd <dboxScale+0x2bd>
add    $0xfffffffffffffffe,%rax
jmp    1335 <dboxScale+0x235>
lea    -0x2(%rax),%rcx
add    $0x1,%rax
cmp    $0x1,%rax
mov    %rcx,%rax
jbe    13bd <dboxScale+0x2bd>
lea    0x1(%rax),%ecx
movsd  (%rsi,%rcx,8),%xmm1
ucomisd %xmm0,%xmm1
jne    1345 <dboxScale+0x245>
jnp    1353 <dboxScale+0x253>
mulsd  (%rdx,%rcx,8),%xmm1
movsd  %xmm1,(%rsi,%rcx,8)
movsd  (%rdi),%xmm0
mov    %eax,%ecx
movsd  (%rsi,%rcx,8),%xmm1
ucomisd %xmm0,%xmm1
jne    1362 <dboxScale+0x262>
jnp    1320 <dboxScale+0x220>
mulsd  (%rdx,%rcx,8),%xmm1
movsd  %xmm1,(%rsi,%rcx,8)
movsd  (%rdi),%xmm0
jmp    1320 <dboxScale+0x220>
test   %ecx,%ecx
jle    13bd <dboxScale+0x2bd>
mov    %ecx,%eax
mov    0x2c61(%rip),%rsi
movsd  (%rsi),%xmm0
test   $0x1,%al
je     13b8 <dboxScale+0x2b8>
add    $0xffffffffffffffff,%rax
mov    %eax,%r8d
movsd  (%rdi,%r8,8),%xmm1
movapd 0xc64(%rip),%xmm2
xorpd  %xmm0,%xmm2
ucomisd %xmm2,%xmm1
jne    13a8 <dboxScale+0x2a8>
jnp    13b8 <dboxScale+0x2b8>
mulsd  (%rdx,%r8,8),%xmm1
movsd  %xmm1,(%rdi,%r8,8)
movsd  (%rsi),%xmm0
cmp    $0x1,%ecx
jne    13be <dboxScale+0x2be>
ret
add    $0xfffffffffffffffe,%rax
movapd 0xc36(%rip),%xmm1
jmp    13e1 <dboxScale+0x2e1>
nopl   0x0(%rax)
lea    -0x2(%rax),%rcx
add    $0x1,%rax
cmp    $0x1,%rax
mov    %rcx,%rax
jbe    13bd <dboxScale+0x2bd>
lea    0x1(%rax),%ecx
movsd  (%rdi,%rcx,8),%xmm2
movapd %xmm0,%xmm3
xorpd  %xmm1,%xmm3
ucomisd %xmm3,%xmm2
jne    13f9 <dboxScale+0x2f9>
jnp    1407 <dboxScale+0x307>
mulsd  (%rdx,%rcx,8),%xmm2
movsd  %xmm2,(%rdi,%rcx,8)
movsd  (%rsi),%xmm0
mov    %eax,%ecx
movsd  (%rdi,%rcx,8),%xmm2
movapd %xmm0,%xmm3
xorpd  %xmm1,%xmm3
ucomisd %xmm3,%xmm2
jne    141e <dboxScale+0x31e>
jnp    13d0 <dboxScale+0x2d0>
mulsd  (%rdx,%rcx,8),%xmm2
movsd  %xmm2,(%rdi,%rcx,8)
movsd  (%rsi),%xmm0
jmp    13d0 <dboxScale+0x2d0>

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

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