#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 fabs(double);
double sqrt(double);
double enorm_(int n, double *x) {
  const double rdwarf = 3.834e-20;
  const double rgiant = 1.304e19;
  double agiant = rgiant / n;
  double d, s1 = 0.0, s2 = 0.0, s3 = 0.0;
  double xabs, x1max = 0.0, x3max = 0.0;
  double ret_val = 0.0;
  int i;
  for (i = 0; i < n; i++) {
    xabs = fabs(x[i]);
    if (xabs > rdwarf && xabs < agiant) {
      s2 += xabs * xabs;
    } else if (xabs > rdwarf) {
      if (xabs > x1max) {
        d = x1max / xabs;
        s1 = 1.0 + s1 * (d * d);
        x1max = xabs;
      } else {
        d = xabs / x1max;
        s1 += d * d;
      }
    } else {
      if (xabs > x3max) {
        d = x3max / xabs;
        s3 = 1.0 + s3 * (d * d);
        x3max = xabs;
      } else if (xabs != 0.0) {
        d = xabs / x3max;
        s3 += d * d;
      }
    }
  }
  if (s1 != 0.0) {
    ret_val = x1max * sqrt(s1 + s2 / x1max / x1max);
  } else if (s2 != 0.0) {
    if (s2 >= x3max) {
      ret_val = sqrt(s2 * (1.0 + x3max / s2 * (x3max * s3)));
    } else {
      ret_val = sqrt(x3max * (s2 / x3max + x3max * s3));
    }
  } else {
    ret_val = x3max * sqrt(s3);
  }
  return ret_val;
}


x86 assembly (clang, -O0):
<enorm_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  0xede(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xec9(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm1
movsd  0xeb7(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1353 <enorm_+0x243>
mov    -0x10(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xe77(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  0xe49(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11fe <enorm_+0xee>
movsd  -0x50(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    11fe <enorm_+0xee>
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    1340 <enorm_+0x230>
movsd  -0x50(%rbp),%xmm0
movsd  0xdfd(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1297 <enorm_+0x187>
movsd  -0x50(%rbp),%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    1267 <enorm_+0x157>
movsd  -0x58(%rbp),%xmm0
divsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdc1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1292 <enorm_+0x182>
movsd  -0x50(%rbp),%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    133b <enorm_+0x22b>
movsd  -0x50(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
jbe    12e9 <enorm_+0x1d9>
movsd  -0x60(%rbp),%xmm0
divsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd3f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1336 <enorm_+0x226>
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1306 <enorm_+0x1f6>
jp     1306 <enorm_+0x1f6>
jmp    1331 <enorm_+0x221>
movsd  -0x50(%rbp),%xmm0
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1336 <enorm_+0x226>
jmp    133b <enorm_+0x22b>
jmp    1340 <enorm_+0x230>
jmp    1345 <enorm_+0x235>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1189 <enorm_+0x79>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1370 <enorm_+0x260>
jp     1370 <enorm_+0x260>
jmp    13ad <enorm_+0x29d>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
divsd  -0x58(%rbp),%xmm1
divsd  -0x58(%rbp),%xmm1
addsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1474 <enorm_+0x364>
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13ca <enorm_+0x2ba>
jp     13ca <enorm_+0x2ba>
jmp    144a <enorm_+0x33a>
movsd  -0x40(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
jb     1416 <enorm_+0x306>
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
divsd  -0x40(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc11(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x68(%rbp)
jmp    1445 <enorm_+0x335>
movsd  -0x60(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
divsd  -0x60(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x68(%rbp)
jmp    146f <enorm_+0x35f>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
call   1030 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1474 <enorm_+0x364>
movsd  -0x68(%rbp),%xmm0
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<enorm_>:
push   %rax
xorpd  %xmm8,%xmm8
xorpd  %xmm0,%xmm0
xorpd  %xmm7,%xmm7
test   %edi,%edi
jle    1284 <enorm_+0x174>
xorps  %xmm0,%xmm0
cvtsi2sd %edi,%xmm0
movsd  0xecb(%rip),%xmm4
divsd  %xmm0,%xmm4
mov    %edi,%eax
xorpd  %xmm9,%xmm9
xor    %ecx,%ecx
movapd 0xed5(%rip),%xmm11
movsd  0xeb4(%rip),%xmm12
movsd  0xeb3(%rip),%xmm10
xorpd  %xmm7,%xmm7
xorpd  %xmm6,%xmm6
xorpd  %xmm0,%xmm0
xorpd  %xmm3,%xmm3
xorpd  %xmm1,%xmm1
jmp    1195 <enorm_+0x85>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm3
add    $0x1,%rcx
cmp    %rcx,%rax
je     122c <enorm_+0x11c>
movsd  (%rsi,%rcx,8),%xmm2
movapd %xmm2,%xmm5
andpd  %xmm11,%xmm5
ucomisd %xmm12,%xmm5
jbe    11b0 <enorm_+0xa0>
ucomisd %xmm5,%xmm4
ja     1180 <enorm_+0x70>
ucomisd %xmm12,%xmm5
jbe    11e0 <enorm_+0xd0>
ucomisd %xmm6,%xmm5
jbe    11fd <enorm_+0xed>
divsd  %xmm5,%xmm6
mulsd  %xmm6,%xmm6
mulsd  %xmm6,%xmm1
addsd  %xmm10,%xmm1
movapd %xmm5,%xmm6
jmp    1188 <enorm_+0x78>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
ucomisd %xmm7,%xmm5
jbe    120e <enorm_+0xfe>
divsd  %xmm5,%xmm7
mulsd  %xmm7,%xmm7
mulsd  %xmm7,%xmm0
addsd  %xmm10,%xmm0
movapd %xmm5,%xmm7
jmp    1188 <enorm_+0x78>
divsd  %xmm6,%xmm5
mulsd  %xmm5,%xmm5
addsd  %xmm5,%xmm1
jmp    1188 <enorm_+0x78>
ucomisd %xmm9,%xmm2
jne    121b <enorm_+0x10b>
jnp    1188 <enorm_+0x78>
divsd  %xmm7,%xmm5
mulsd  %xmm5,%xmm5
addsd  %xmm5,%xmm0
jmp    1188 <enorm_+0x78>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
jne    1238 <enorm_+0x128>
jnp    1253 <enorm_+0x143>
divsd  %xmm6,%xmm3
divsd  %xmm6,%xmm3
addsd  %xmm3,%xmm1
ucomisd %xmm2,%xmm1
jb     12aa <enorm_+0x19a>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    12bd <enorm_+0x1ad>
ucomisd %xmm2,%xmm3
jne    125b <enorm_+0x14b>
jnp    1284 <enorm_+0x174>
ucomisd %xmm7,%xmm3
jae    12c7 <enorm_+0x1b7>
divsd  %xmm7,%xmm3
mulsd  %xmm7,%xmm0
addsd  %xmm3,%xmm0
mulsd  %xmm7,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     12f2 <enorm_+0x1e2>
xorps  %xmm6,%xmm6
sqrtsd %xmm0,%xmm6
jmp    12c1 <enorm_+0x1b1>
ucomisd %xmm8,%xmm0
jb     1291 <enorm_+0x181>
sqrtsd %xmm0,%xmm0
jmp    12a0 <enorm_+0x190>
movsd  %xmm7,(%rsp)
call   1030 <sqrt@plt>
movsd  (%rsp),%xmm7
mulsd  %xmm0,%xmm7
movapd %xmm7,%xmm6
jmp    12c1 <enorm_+0x1b1>
movapd %xmm1,%xmm0
movsd  %xmm6,(%rsp)
call   1030 <sqrt@plt>
movsd  (%rsp),%xmm6
mulsd  %xmm0,%xmm6
movapd %xmm6,%xmm0
pop    %rax
ret
mulsd  %xmm7,%xmm0
divsd  %xmm3,%xmm7
mulsd  %xmm0,%xmm7
addsd  0xd35(%rip),%xmm7
mulsd  %xmm3,%xmm7
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm7
jb     12f8 <enorm_+0x1e8>
xorps  %xmm6,%xmm6
sqrtsd %xmm7,%xmm6
jmp    12c1 <enorm_+0x1b1>
pop    %rax
jmp    1030 <sqrt@plt>
movapd %xmm7,%xmm0
pop    %rax
jmp    1030 <sqrt@plt>

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

LLVM IR (-O2):
define double @enorm_(i32 %0, double* nocapture %1) {
%3 = sitofp i32 %0 to double
%4 = fdiv double 1.304000e+19, %3
%5 = icmp sgt i32 %0, 0
br i1 %5, label %6, label %75
6: ; preds = %2
%7 = zext i32 %0 to i64
br label %8
8: ; preds = %6, %44
%9 = phi i64 [ 0, %6 ], [ %50, %44 ]
%10 = phi double [ 0.000000e+00, %6 ], [ %49, %44 ]
%11 = phi double [ 0.000000e+00, %6 ], [ %48, %44 ]
%12 = phi double [ 0.000000e+00, %6 ], [ %47, %44 ]
%13 = phi double [ 0.000000e+00, %6 ], [ %46, %44 ]
%14 = phi double [ 0.000000e+00, %6 ], [ %45, %44 ]
%15 = getelementptr inbounds double, double* %1, i64 %9
%16 = load double, double* %15
%17 = tail call double @llvm.fabs.f64(double %16)
%18 = fcmp ogt double %17, 3.834000e-20
%19 = fcmp olt double %17, %4
%20 = and i1 %18, %19
br i1 %20, label %21, label %23
21: ; preds = %8
%22 = tail call double @llvm.fmuladd.f64(double %16, double %16, double %13)
br label %44
23: ; preds = %8
br i1 %18, label %24, label %33
24: ; preds = %23
%25 = fcmp ogt double %17, %11
br i1 %25, label %26, label %30
26: ; preds = %24
%27 = fdiv double %11, %17
%28 = fmul double %27, %27
%29 = tail call double @llvm.fmuladd.f64(double %14, double %28, double 1.000000e+00)
br label %44
30: ; preds = %24
%31 = fdiv double %17, %11
%32 = tail call double @llvm.fmuladd.f64(double %31, double %31, double %14)
br label %44
33: ; preds = %23
%34 = fcmp ogt double %17, %10
br i1 %34, label %35, label %39
35: ; preds = %33
%36 = fdiv double %10, %17
%37 = fmul double %36, %36
%38 = tail call double @llvm.fmuladd.f64(double %12, double %37, double 1.000000e+00)
br label %44
39: ; preds = %33
%40 = fcmp une double %16, 0.000000e+00
br i1 %40, label %41, label %44
41: ; preds = %39
%42 = fdiv double %17, %10
%43 = tail call double @llvm.fmuladd.f64(double %42, double %42, double %12)
br label %44
44: ; preds = %21, %35, %41, %39, %26, %30
%45 = phi double [ %14, %21 ], [ %29, %26 ], [ %32, %30 ], [ %14, %35 ], [ %14, %41 ], [ %14, %39 ]
%46 = phi double [ %22, %21 ], [ %13, %26 ], [ %13, %30 ], [ %13, %35 ], [ %13, %41 ], [ %13, %39 ]
%47 = phi double [ %12, %21 ], [ %12, %26 ], [ %12, %30 ], [ %38, %35 ], [ %43, %41 ], [ %12, %39 ]
%48 = phi double [ %11, %21 ], [ %17, %26 ], [ %11, %30 ], [ %11, %35 ], [ %11, %41 ], [ %11, %39 ]
%49 = phi double [ %10, %21 ], [ %10, %26 ], [ %10, %30 ], [ %17, %35 ], [ %10, %41 ], [ %10, %39 ]
%50 = add nuw nsw i64 %9, 1
%51 = icmp eq i64 %50, %7
br i1 %51, label %52, label %8
52: ; preds = %44
%53 = fcmp une double %45, 0.000000e+00
br i1 %53, label %54, label %60
54: ; preds = %52
%55 = fdiv double %46, %48
%56 = fdiv double %55, %48
%57 = fadd double %45, %56
%58 = tail call double @sqrt(double %57)
%59 = fmul double %48, %58
br label %80
60: ; preds = %52
%61 = fcmp une double %46, 0.000000e+00
br i1 %61, label %62, label %75
62: ; preds = %60
%63 = fcmp ult double %46, %49
br i1 %63, label %70, label %64
64: ; preds = %62
%65 = fdiv double %49, %46
%66 = fmul double %47, %49
%67 = tail call double @llvm.fmuladd.f64(double %65, double %66, double 1.000000e+00)
%68 = fmul double %46, %67
%69 = tail call double @sqrt(double %68)
br label %80
70: ; preds = %62
%71 = fdiv double %46, %49
%72 = tail call double @llvm.fmuladd.f64(double %49, double %47, double %71)
%73 = fmul double %49, %72
%74 = tail call double @sqrt(double %73)
br label %80
75: ; preds = %2, %60
%76 = phi double [ %47, %60 ], [ 0.000000e+00, %2 ]
%77 = phi double [ %49, %60 ], [ 0.000000e+00, %2 ]
%78 = tail call double @sqrt(double %76)
%79 = fmul double %77, %78
br label %80
80: ; preds = %75, %70, %64, %54
%81 = phi double [ %59, %54 ], [ %69, %64 ], [ %74, %70 ], [ %79, %75 ]
ret double %81
}