#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 const);
double sqrt(double);
double enorm(int n, const double *x) {
  double ret_val, d1;
  int i;
  double s1, s2, s3, xabs, x1max, x3max, agiant, floatn;
  s1 = 0.;
  s2 = 0.;
  s3 = 0.;
  x1max = 0.;
  x3max = 0.;
  floatn = (double)(n);
  agiant = (1.3407807929942596e+154 * 0.9) / floatn;
  for (i = 0; i < n; ++i) {
    xabs = fabs(x[i]);
    if (xabs <= (1.4916681462400413e-154 * 0.9) || xabs >= agiant) {
      if (xabs > (1.4916681462400413e-154 * 0.9)) {
        if (xabs > x1max) {
          d1 = x1max / xabs;
          s1 = 1. + s1 * (d1 * d1);
          x1max = xabs;
        } else {
          d1 = xabs / x1max;
          s1 += d1 * d1;
        }
      } else {
        if (xabs > x3max) {
          d1 = x3max / xabs;
          s3 = 1. + s3 * (d1 * d1);
          x3max = xabs;
        } else {
          if (xabs != 0.) {
            d1 = xabs / x3max;
            s3 += d1 * d1;
          }
        }
      }
    } else {
      s2 += xabs * xabs;
    }
  }
  if (s1 != 0.) {
    ret_val = x1max * sqrt(s1 + (s2 / x1max) / x1max);
  } else {
    if (s2 != 0.) {
      if (s2 >= x3max) {
        ret_val = sqrt(s2 * (1. + (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)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xea4(%rip),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    132a <enorm+0x21a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xe93(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe72(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
jae    11b9 <enorm+0xa9>
movsd  -0x48(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
jb     12fb <enorm+0x1eb>
movsd  -0x48(%rbp),%xmm0
movsd  0xe4a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1252 <enorm+0x142>
movsd  -0x48(%rbp),%xmm0
ucomisd -0x50(%rbp),%xmm0
jbe    1222 <enorm+0x112>
movsd  -0x50(%rbp),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdfe(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    124d <enorm+0x13d>
movsd  -0x48(%rbp),%xmm0
divsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    12f6 <enorm+0x1e6>
movsd  -0x48(%rbp),%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    12a4 <enorm+0x194>
movsd  -0x58(%rbp),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd7c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    12f1 <enorm+0x1e1>
movsd  -0x48(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12c1 <enorm+0x1b1>
jp     12c1 <enorm+0x1b1>
jmp    12ec <enorm+0x1dc>
movsd  -0x48(%rbp),%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    12f1 <enorm+0x1e1>
jmp    12f6 <enorm+0x1e6>
jmp    1317 <enorm+0x207>
movsd  -0x48(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    131c <enorm+0x20c>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    116d <enorm+0x5d>
movsd  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1347 <enorm+0x237>
jp     1347 <enorm+0x237>
jmp    1384 <enorm+0x274>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
divsd  -0x50(%rbp),%xmm1
addsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    144b <enorm+0x33b>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13a1 <enorm+0x291>
jp     13a1 <enorm+0x291>
jmp    1421 <enorm+0x311>
movsd  -0x38(%rbp),%xmm0
ucomisd -0x58(%rbp),%xmm0
jb     13ed <enorm+0x2dd>
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm2
mulsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc32(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x18(%rbp)
jmp    141c <enorm+0x30c>
movsd  -0x58(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
divsd  -0x58(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x18(%rbp)
jmp    1446 <enorm+0x336>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1030 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    144b <enorm+0x33b>
movsd  -0x18(%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 %xmm5,%xmm12
jae    11b0 <enorm+0xa0>
ucomisd %xmm4,%xmm5
jb     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 i32
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
store i32 %0, i32* %3
store double* %1, double** %4
store double 0.000000e+00, double* %8
store double 0.000000e+00, double* %9
store double 0.000000e+00, double* %10
store double 0.000000e+00, double* %12
store double 0.000000e+00, double* %13
%16 = load i32, i32* %3
%17 = sitofp i32 %16 to double
store double %17, double* %15
%18 = load double, double* %15
%19 = fdiv double 0x5FECCCCCCCCCCCCC, %18
store double %19, double* %14
store i32 0, i32* %7
br label %20
20: ; preds = %97, %2
%21 = load i32, i32* %7
%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* %7
%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* %11
%31 = load double, double* %11
%32 = fcmp ole double %31, 0x1FFCCCCCCCCCCCCD
br i1 %32, label %37, label %33
33: ; preds = %24
%34 = load double, double* %11
%35 = load double, double* %14
%36 = fcmp oge double %34, %35
br i1 %36, label %37, label %91
37: ; preds = %33, %24
%38 = load double, double* %11
%39 = fcmp ogt double %38, 0x1FFCCCCCCCCCCCCD
br i1 %39, label %40, label %63
40: ; preds = %37
%41 = load double, double* %11
%42 = load double, double* %12
%43 = fcmp ogt double %41, %42
br i1 %43, label %44, label %54
44: ; preds = %40
%45 = load double, double* %12
%46 = load double, double* %11
%47 = fdiv double %45, %46
store double %47, double* %6
%48 = load double, double* %8
%49 = load double, double* %6
%50 = load double, double* %6
%51 = fmul double %49, %50
%52 = call double @llvm.fmuladd.f64(double %48, double %51, double 1.000000e+00)
store double %52, double* %8
%53 = load double, double* %11
store double %53, double* %12
br label %62
54: ; preds = %40
%55 = load double, double* %11
%56 = load double, double* %12
%57 = fdiv double %55, %56
store double %57, double* %6
%58 = load double, double* %6
%59 = load double, double* %6
%60 = load double, double* %8
%61 = call double @llvm.fmuladd.f64(double %58, double %59, double %60)
store double %61, double* %8
br label %62
62: ; preds = %54, %44
br label %90
63: ; preds = %37
%64 = load double, double* %11
%65 = load double, double* %13
%66 = fcmp ogt double %64, %65
br i1 %66, label %67, label %77
67: ; preds = %63
%68 = load double, double* %13
%69 = load double, double* %11
%70 = fdiv double %68, %69
store double %70, double* %6
%71 = load double, double* %10
%72 = load double, double* %6
%73 = load double, double* %6
%74 = fmul double %72, %73
%75 = call double @llvm.fmuladd.f64(double %71, double %74, double 1.000000e+00)
store double %75, double* %10
%76 = load double, double* %11
store double %76, double* %13
br label %89
77: ; preds = %63
%78 = load double, double* %11
%79 = fcmp une double %78, 0.000000e+00
br i1 %79, label %80, label %88
80: ; preds = %77
%81 = load double, double* %11
%82 = load double, double* %13
%83 = fdiv double %81, %82
store double %83, double* %6
%84 = load double, double* %6
%85 = load double, double* %6
%86 = load double, double* %10
%87 = call double @llvm.fmuladd.f64(double %84, double %85, double %86)
store double %87, double* %10
br label %88
88: ; preds = %80, %77
br label %89
89: ; preds = %88, %67
br label %90
90: ; preds = %89, %62
br label %96
91: ; preds = %33
%92 = load double, double* %11
%93 = load double, double* %11
%94 = load double, double* %9
%95 = call double @llvm.fmuladd.f64(double %92, double %93, double %94)
store double %95, double* %9
br label %96
96: ; preds = %91, %90
br label %97
97: ; preds = %96
%98 = load i32, i32* %7
%99 = add nsw i32 %98, 1
store i32 %99, i32* %7
br label %20
100: ; preds = %20
%101 = load double, double* %8
%102 = fcmp une double %101, 0.000000e+00
br i1 %102, label %103, label %114
103: ; preds = %100
%104 = load double, double* %12
%105 = load double, double* %8
%106 = load double, double* %9
%107 = load double, double* %12
%108 = fdiv double %106, %107
%109 = load double, double* %12
%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* %5
br label %149
114: ; preds = %100
%115 = load double, double* %9
%116 = fcmp une double %115, 0.000000e+00
br i1 %116, label %117, label %143
117: ; preds = %114
%118 = load double, double* %9
%119 = load double, double* %13
%120 = fcmp oge double %118, %119
br i1 %120, label %121, label %132
121: ; preds = %117
%122 = load double, double* %9
%123 = load double, double* %13
%124 = load double, double* %9
%125 = fdiv double %123, %124
%126 = load double, double* %13
%127 = load double, double* %10
%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* %5
br label %142
132: ; preds = %117
%133 = load double, double* %13
%134 = load double, double* %9
%135 = load double, double* %13
%136 = fdiv double %134, %135
%137 = load double, double* %13
%138 = load double, double* %10
%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* %5
br label %142
142: ; preds = %132, %121
br label %148
143: ; preds = %114
%144 = load double, double* %13
%145 = load double, double* %10
%146 = call double @sqrt(double %145)
%147 = fmul double %144, %146
store double %147, double* %5
br label %148
148: ; preds = %143, %142
br label %149
149: ; preds = %148, %103
%150 = load double, double* %5
ret double %150
}

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