#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 jsqrt(double);
double __ieee754_hypot(double x, double y) {
  double a = x, b = y, t1, t2, y1, y2, w;
  int j, k, ha, hb;
  ha = *(1 + (int *)&x) & 0x7fffffff;
  hb = *(1 + (int *)&y) & 0x7fffffff;
  if (hb > ha) {
    a = y;
    b = x;
    j = ha;
    ha = hb;
    hb = j;
  } else {
    a = x;
    b = y;
  }
  *(1 + (int *)&a) = ha;
  *(1 + (int *)&b) = hb;
  if ((ha - hb) > 0x3c00000) {
    return a + b;
  }
  k = 0;
  if (ha > 0x5f300000) {
    if (ha >= 0x7ff00000) {
      w = a + b;
      if (((ha & 0xfffff) | *(int *)&a) == 0)
        w = a;
      if (((hb ^ 0x7ff00000) | *(int *)&b) == 0)
        w = b;
      return w;
    }
    ha -= 0x25800000;
    hb -= 0x25800000;
    k += 600;
    *(1 + (int *)&a) = ha;
    *(1 + (int *)&b) = hb;
  }
  if (hb < 0x20b00000) {
    if (hb <= 0x000fffff) {
      if ((hb | (*(int *)&b)) == 0)
        return a;
      t1 = 0;
      *(1 + (int *)&t1) = 0x7fd00000;
      b *= t1;
      a *= t1;
      k -= 1022;
    } else {
      ha += 0x25800000;
      hb += 0x25800000;
      k -= 600;
      *(1 + (int *)&a) = ha;
      *(1 + (int *)&b) = hb;
    }
  }
  w = a - b;
  if (w > b) {
    t1 = 0;
    *(1 + (int *)&t1) = ha;
    t2 = a - t1;
    w = jsqrt(t1 * t1 - (b * (-b) - t2 * (a + t1)));
  } else {
    a = a + a;
    y1 = 0;
    *(1 + (int *)&y1) = hb;
    y2 = b - y1;
    t1 = 0;
    *(1 + (int *)&t1) = ha + 0x00100000;
    t2 = a - t1;
    w = jsqrt(t1 * y1 - (w * (-w) - (t1 * y2 + t2 * b)));
  }
  if (k != 0) {
    t1 = 1.0;
    *(1 + (int *)&t1) += (k << 20);
    return t1 * w;
  } else
    return w;
}


x86 assembly (clang, -O0):
<__ieee754_hypot>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0xc(%rbp),%eax
and    $0x7fffffff,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x14(%rbp),%eax
and    $0x7fffffff,%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x5c(%rbp),%eax
jle    1183 <__ieee754_hypot+0x73>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x60(%rbp)
jmp    1197 <__ieee754_hypot+0x87>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x5c(%rbp),%eax
sub    -0x60(%rbp),%eax
cmp    $0x3c00000,%eax
jle    11c8 <__ieee754_hypot+0xb8>
movsd  -0x20(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14fc <__ieee754_hypot+0x3ec>
movl   $0x0,-0x58(%rbp)
cmpl   $0x5f300000,-0x5c(%rbp)
jle    1270 <__ieee754_hypot+0x160>
cmpl   $0x7ff00000,-0x5c(%rbp)
jl     1243 <__ieee754_hypot+0x133>
movsd  -0x20(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x5c(%rbp),%eax
and    $0xfffff,%eax
or     -0x20(%rbp),%eax
cmp    $0x0,%eax
jne    1216 <__ieee754_hypot+0x106>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x60(%rbp),%eax
xor    $0x7ff00000,%eax
or     -0x28(%rbp),%eax
cmp    $0x0,%eax
jne    1234 <__ieee754_hypot+0x124>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14fc <__ieee754_hypot+0x3ec>
mov    -0x5c(%rbp),%eax
sub    $0x25800000,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x60(%rbp),%eax
sub    $0x25800000,%eax
mov    %eax,-0x60(%rbp)
mov    -0x58(%rbp),%eax
add    $0x258,%eax
mov    %eax,-0x58(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x20b00000,-0x60(%rbp)
jge    1317 <__ieee754_hypot+0x207>
cmpl   $0xfffff,-0x60(%rbp)
jg     12e5 <__ieee754_hypot+0x1d5>
mov    -0x60(%rbp),%eax
or     -0x28(%rbp),%eax
cmp    $0x0,%eax
jne    12a8 <__ieee754_hypot+0x198>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14fc <__ieee754_hypot+0x3ec>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x7fd00000,-0x2c(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x58(%rbp),%eax
sub    $0x3fe,%eax
mov    %eax,-0x58(%rbp)
jmp    1312 <__ieee754_hypot+0x202>
mov    -0x5c(%rbp),%eax
add    $0x25800000,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x60(%rbp),%eax
add    $0x25800000,%eax
mov    %eax,-0x60(%rbp)
mov    -0x58(%rbp),%eax
sub    $0x258,%eax
mov    %eax,-0x58(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    1317 <__ieee754_hypot+0x207>
movsd  -0x20(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    13de <__ieee754_hypot+0x2ce>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
movsd  -0x38(%rbp),%xmm3
movsd  -0x20(%rbp),%xmm5
addsd  -0x30(%rbp),%xmm5
mulsd  %xmm5,%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <jsqrt@plt>
movsd  %xmm0,-0x50(%rbp)
jmp    14bb <__ieee754_hypot+0x3ab>
movsd  -0x20(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x100000,%eax
mov    %eax,-0x2c(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
movsd  -0x30(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm6
movsd  -0x38(%rbp),%xmm5
mulsd  -0x28(%rbp),%xmm5
mulsd  %xmm6,%xmm3
addsd  %xmm5,%xmm3
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <jsqrt@plt>
movsd  %xmm0,-0x50(%rbp)
cmpl   $0x0,-0x58(%rbp)
je     14f2 <__ieee754_hypot+0x3e2>
movsd  0xb33(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x58(%rbp),%eax
shl    $0x14,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14fc <__ieee754_hypot+0x3ec>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<__ieee754_hypot>:
movq   %xmm0,%rdx
shr    $0x20,%rdx
and    $0x7fffffff,%edx
movq   %xmm1,%rax
shr    $0x20,%rax
and    $0x7fffffff,%eax
cmp    %edx,%eax
ja     1137 <__ieee754_hypot+0x27>
movdqa %xmm1,%xmm2
jmp    113f <__ieee754_hypot+0x2f>
movdqa %xmm0,%xmm2
movdqa %xmm1,%xmm0
push   %r14
push   %rbx
push   %rax
mov    %edx,%ecx
cmova  %eax,%ecx
cmova  %edx,%eax
movq   %xmm0,%r10
mov    %rcx,%rdx
shl    $0x20,%rdx
mov    %r10d,%r9d
or     %r9,%rdx
movq   %rdx,%xmm0
movq   %xmm2,%r8
mov    %rax,%rsi
shl    $0x20,%rsi
mov    %r8d,%edi
or     %rdi,%rsi
movq   %rsi,%xmm2
mov    %ecx,%ebx
sub    %eax,%ebx
cmp    $0x3c00001,%ebx
jl     118e <__ieee754_hypot+0x7e>
addsd  %xmm2,%xmm0
jmp    1326 <__ieee754_hypot+0x216>
xor    %r14d,%r14d
cmp    $0x5f300001,%ecx
jb     11e8 <__ieee754_hypot+0xd8>
cmp    $0x7ff00000,%ecx
jb     11b9 <__ieee754_hypot+0xa9>
and    $0xfffff,%ecx
or     %ecx,%r10d
je     1308 <__ieee754_hypot+0x1f8>
movdqa %xmm2,%xmm1
jmp    1310 <__ieee754_hypot+0x200>
add    $0xda800000,%ecx
add    $0xda800000,%eax
mov    %rcx,%rdx
shl    $0x20,%rdx
or     %r9,%rdx
movq   %rdx,%xmm0
mov    %rax,%rsi
shl    $0x20,%rsi
or     %rdi,%rsi
movq   %rsi,%xmm2
mov    $0x258,%r14d
cmp    $0x20afffff,%eax
jg     124b <__ieee754_hypot+0x13b>
cmp    $0xfffff,%eax
jg     1217 <__ieee754_hypot+0x107>
or     %eax,%esi
je     1326 <__ieee754_hypot+0x216>
movsd  0xdfa(%rip),%xmm1
mulsd  %xmm1,%xmm2
mulsd  %xmm1,%xmm0
or     $0xfffffc02,%r14d
jmp    124b <__ieee754_hypot+0x13b>
add    $0x25800000,%ecx
add    $0x25800000,%eax
add    $0xfffffda8,%r14d
mov    %rcx,%rdi
shl    $0x20,%rdi
mov    %edx,%edx
or     %rdi,%rdx
movq   %rdx,%xmm0
mov    %rax,%rdx
shl    $0x20,%rdx
mov    %esi,%esi
or     %rdx,%rsi
movq   %rsi,%xmm2
movdqa %xmm0,%xmm3
subsd  %xmm2,%xmm3
ucomisd %xmm2,%xmm3
jbe    1290 <__ieee754_hypot+0x180>
shl    $0x20,%rcx
movq   %rcx,%xmm1
movapd %xmm0,%xmm3
subsd  %xmm1,%xmm3
movapd 0xd9e(%rip),%xmm4
xorpd  %xmm2,%xmm4
addsd  %xmm1,%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm4
subsd  %xmm0,%xmm4
mulsd  %xmm1,%xmm1
subsd  %xmm4,%xmm1
jmp    12e0 <__ieee754_hypot+0x1d0>
addsd  %xmm0,%xmm0
shl    $0x20,%rax
movq   %rax,%xmm4
movapd %xmm2,%xmm5
subsd  %xmm4,%xmm5
add    $0x100000,%ecx
shl    $0x20,%rcx
movq   %rcx,%xmm1
subsd  %xmm1,%xmm0
movapd 0xd50(%rip),%xmm6
xorpd  %xmm3,%xmm6
mulsd  %xmm2,%xmm0
mulsd  %xmm1,%xmm5
addsd  %xmm0,%xmm5
mulsd  %xmm3,%xmm6
subsd  %xmm5,%xmm6
mulsd  %xmm4,%xmm1
subsd  %xmm6,%xmm1
movapd %xmm1,%xmm0
call   1030 <jsqrt@plt>
test   %r14d,%r14d
je     1326 <__ieee754_hypot+0x216>
shl    $0x14,%r14d
add    $0x3ff00000,%r14d
shl    $0x20,%r14
movq   %r14,%xmm1
mulsd  %xmm1,%xmm0
jmp    1326 <__ieee754_hypot+0x216>
movq   0xcf8(%rip),%xmm1
xor    $0x7ff00000,%eax
or     %eax,%r8d
je     1322 <__ieee754_hypot+0x212>
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm2
movdqa %xmm2,%xmm0
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define double @__ieee754_hypot(double %0, double %1) {
%3 = bitcast double %0 to i64
%4 = lshr i64 %3, 32
%5 = trunc i64 %4 to i32
%6 = and i32 %5, 2147483647
%7 = bitcast double %1 to i64
%8 = lshr i64 %7, 32
%9 = trunc i64 %8 to i32
%10 = and i32 %9, 2147483647
%11 = icmp ugt i32 %10, %6
%12 = select i1 %11, double %0, double %1
%13 = select i1 %11, double %1, double %0
%14 = select i1 %11, i32 %10, i32 %6
%15 = select i1 %11, i32 %6, i32 %10
%16 = bitcast double %13 to i64
%17 = zext i32 %14 to i64
%18 = shl nuw nsw i64 %17, 32
%19 = and i64 %16, 4294967295
%20 = or i64 %19, %18
%21 = bitcast i64 %20 to double
%22 = bitcast double %12 to i64
%23 = zext i32 %15 to i64
%24 = shl nuw nsw i64 %23, 32
%25 = and i64 %22, 4294967295
%26 = or i64 %25, %24
%27 = bitcast i64 %26 to double
%28 = sub nsw i32 %14, %15
%29 = icmp sgt i32 %28, 62914560
br i1 %29, label %30, label %32
30: ; preds = %2
%31 = fadd double %21, %27
br label %142
32: ; preds = %2
%33 = icmp ugt i32 %14, 1596981248
br i1 %33, label %34, label %59
34: ; preds = %32
%35 = icmp ugt i32 %14, 2146435071
br i1 %35, label %36, label %48
36: ; preds = %34
%37 = and i32 %14, 1048575
%38 = trunc i64 %16 to i32
%39 = or i32 %37, %38
%40 = icmp eq i32 %39, 0
%41 = select i1 %40, double -0.000000e+00, double %27
%42 = fadd double %41, %21
%43 = xor i32 %15, 2146435072
%44 = trunc i64 %22 to i32
%45 = or i32 %43, %44
%46 = icmp eq i32 %45, 0
%47 = select i1 %46, double %27, double %42
br label %142
48: ; preds = %34
%49 = add nsw i32 %14, -629145600
%50 = add nsw i32 %15, -629145600
%51 = zext i32 %49 to i64
%52 = shl nuw nsw i64 %51, 32
%53 = or i64 %52, %19
%54 = bitcast i64 %53 to double
%55 = zext i32 %50 to i64
%56 = shl nuw i64 %55, 32
%57 = or i64 %56, %25
%58 = bitcast i64 %57 to double
br label %59
59: ; preds = %48, %32
%60 = phi double [ %58, %48 ], [ %27, %32 ]
%61 = phi double [ %54, %48 ], [ %21, %32 ]
%62 = phi i32 [ 600, %48 ], [ 0, %32 ]
%63 = phi i32 [ %49, %48 ], [ %14, %32 ]
%64 = phi i32 [ %50, %48 ], [ %15, %32 ]
%65 = icmp slt i32 %64, 548405248
br i1 %65, label %66, label %93
66: ; preds = %59
%67 = icmp slt i32 %64, 1048576
br i1 %67, label %68, label %77
68: ; preds = %66
%69 = bitcast double %60 to i64
%70 = trunc i64 %69 to i32
%71 = or i32 %64, %70
%72 = icmp eq i32 %71, 0
br i1 %72, label %142, label %73
73: ; preds = %68
%74 = fmul double %60, 0x7FD0000000000000
%75 = fmul double %61, 0x7FD0000000000000
%76 = or i32 %62, -1022
br label %93
77: ; preds = %66
%78 = add nuw nsw i32 %63, 629145600
%79 = add nuw nsw i32 %64, 629145600
%80 = add nsw i32 %62, -600
%81 = bitcast double %61 to i64
%82 = zext i32 %78 to i64
%83 = shl nuw nsw i64 %82, 32
%84 = and i64 %81, 4294967295
%85 = or i64 %83, %84
%86 = bitcast i64 %85 to double
%87 = bitcast double %60 to i64
%88 = zext i32 %79 to i64
%89 = shl nuw nsw i64 %88, 32
%90 = and i64 %87, 4294967295
%91 = or i64 %89, %90
%92 = bitcast i64 %91 to double
br label %93
93: ; preds = %73, %77, %59
%94 = phi double [ %74, %73 ], [ %92, %77 ], [ %60, %59 ]
%95 = phi double [ %75, %73 ], [ %86, %77 ], [ %61, %59 ]
%96 = phi i32 [ %76, %73 ], [ %80, %77 ], [ %62, %59 ]
%97 = phi i32 [ %63, %73 ], [ %78, %77 ], [ %63, %59 ]
%98 = phi i32 [ %64, %73 ], [ %79, %77 ], [ %64, %59 ]
%99 = fsub double %95, %94
%100 = fcmp ogt double %99, %94
br i1 %100, label %101, label %113
101: ; preds = %93
%102 = zext i32 %97 to i64
%103 = shl nuw nsw i64 %102, 32
%104 = bitcast i64 %103 to double
%105 = fsub double %95, %104
%106 = fneg double %94
%107 = fadd double %95, %104
%108 = fneg double %105
%109 = fmul double %107, %108
%110 = tail call double @llvm.fmuladd.f64(double %94, double %106, double %109)
%111 = fneg double %110
%112 = tail call double @llvm.fmuladd.f64(double %104, double %104, double %111)
br label %131
113: ; preds = %93
%114 = fadd double %95, %95
%115 = zext i32 %98 to i64
%116 = shl nuw i64 %115, 32
%117 = bitcast i64 %116 to double
%118 = fsub double %94, %117
%119 = add nuw nsw i32 %97, 1048576
%120 = zext i32 %119 to i64
%121 = shl nuw nsw i64 %120, 32
%122 = bitcast i64 %121 to double
%123 = fsub double %114, %122
%124 = fneg double %99
%125 = fmul double %94, %123
%126 = tail call double @llvm.fmuladd.f64(double %122, double %118, double %125)
%127 = fneg double %126
%128 = tail call double @llvm.fmuladd.f64(double %99, double %124, double %127)
%129 = fneg double %128
%130 = tail call double @llvm.fmuladd.f64(double %122, double %117, double %129)
br label %131
131: ; preds = %113, %101
%132 = phi double [ %130, %113 ], [ %112, %101 ]
%133 = tail call double @jsqrt(double %132)
%134 = icmp eq i32 %96, 0
br i1 %134, label %142, label %135
135: ; preds = %131
%136 = shl nsw i32 %96, 20
%137 = add nsw i32 %136, 1072693248
%138 = zext i32 %137 to i64
%139 = shl nuw i64 %138, 32
%140 = bitcast i64 %139 to double
%141 = fmul double %133, %140
br label %142
142: ; preds = %131, %68, %135, %36, %30
%143 = phi double [ %31, %30 ], [ %47, %36 ], [ %141, %135 ], [ %61, %68 ], [ %133, %131 ]
ret double %143
}