int check_overlap(int np, double lx, double ly, double lz, double *pos) {
  int i;
  int ix, iy, iz;
  int j;
  int jx, jy, jz;
  int kx, ky, kz;
  double rr;
  double x, y, z;
  for (i = 0; i < np; ++i) {
    ix = i * 3;
    iy = ix + 1;
    iz = ix + 2;
    for (j = i + 1; j < np; ++j) {
      jx = j * 3;
      jy = jx + 1;
      jz = jx + 2;
      for (kx = -1; kx <= 1; ++kx) {
        for (ky = -1; ky <= 1; ++ky) {
          for (kz = -1; kz <= 1; ++kz) {
            x = pos[ix] - pos[jx] + (double)kx * lx;
            y = pos[iy] - pos[jy] + (double)ky * ly;
            z = pos[iz] - pos[jz] + (double)kz * lz;
            rr = x * x + y * y + z * z;
            if (rr <= 4.0) {
              return 1;
            }
          }
        }
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<check_overlap>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    12eb <check_overlap+0x1eb>
imul   $0x3,-0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    12d8 <check_overlap+0x1d8>
imul   $0x3,-0x3c(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x48(%rbp)
movl   $0xffffffff,-0x4c(%rbp)
cmpl   $0x1,-0x4c(%rbp)
jg     12c5 <check_overlap+0x1c5>
movl   $0xffffffff,-0x50(%rbp)
cmpl   $0x1,-0x50(%rbp)
jg     12b2 <check_overlap+0x1b2>
movl   $0xffffffff,-0x54(%rbp)
cmpl   $0x1,-0x54(%rbp)
jg     129f <check_overlap+0x19f>
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
cvtsi2sdl -0x4c(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
cvtsi2sdl -0x50(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x48(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
cvtsi2sdl -0x54(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xd8b(%rip),%xmm0
ucomisd -0x60(%rbp),%xmm0
jb     128c <check_overlap+0x18c>
movl   $0x1,-0x4(%rbp)
jmp    12f2 <check_overlap+0x1f2>
jmp    1291 <check_overlap+0x191>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    119d <check_overlap+0x9d>
jmp    12a4 <check_overlap+0x1a4>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    118c <check_overlap+0x8c>
jmp    12b7 <check_overlap+0x1b7>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    117b <check_overlap+0x7b>
jmp    12ca <check_overlap+0x1ca>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    114f <check_overlap+0x4f>
jmp    12dd <check_overlap+0x1dd>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1121 <check_overlap+0x21>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_overlap>:
push   %rbx
test   %edi,%edi
jle    1481 <check_overlap+0x381>
mov    %edi,%r8d
movapd %xmm2,%xmm3
unpcklpd %xmm2,%xmm3
mov    $0x1,%r11d
mov    $0x3,%r10d
xor    %r9d,%r9d
xorpd  %xmm13,%xmm13
movhpd 0xecf(%rip),%xmm13
mulpd  %xmm3,%xmm13
xorpd  %xmm3,%xmm3
movapd %xmm1,%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,-0x20(%rsp)
movapd 0xecf(%rip),%xmm15
movsd  0xeae(%rip),%xmm14
jmp    1171 <check_overlap+0x71>
nopl   0x0(%rax)
add    $0x1,%r11
add    $0x3,%r10d
cmp    %r8,%r9
je     1481 <check_overlap+0x381>
mov    %r9,%rax
add    $0x1,%r9
cmp    %r8,%r9
jae    1160 <check_overlap+0x60>
lea    (%rax,%rax,2),%eax
mov    %eax,%eax
movsd  (%rsi,%rax,8),%xmm3
movsd  %xmm3,-0x8(%rsp)
movsd  0x8(%rsi,%rax,8),%xmm3
movsd  %xmm3,-0x10(%rsp)
movsd  0x10(%rsi,%rax,8),%xmm3
movsd  %xmm3,-0x18(%rsp)
mov    %r8,%rcx
mov    %r10d,%edi
lea    0x1(%rdi),%eax
lea    0x2(%rdi),%edx
mov    %edi,%ebx
movsd  -0x8(%rsp),%xmm10
subsd  (%rsi,%rbx,8),%xmm10
movsd  -0x10(%rsp),%xmm8
subsd  (%rsi,%rax,8),%xmm8
movsd  -0x18(%rsp),%xmm7
subsd  (%rsi,%rdx,8),%xmm7
movapd %xmm8,%xmm11
subsd  %xmm1,%xmm11
mulsd  %xmm11,%xmm11
movapd %xmm7,%xmm5
unpcklpd %xmm7,%xmm5
addpd  %xmm13,%xmm5
movapd %xmm10,%xmm9
subsd  %xmm0,%xmm9
mulsd  %xmm9,%xmm9
movapd %xmm9,%xmm4
addsd  %xmm11,%xmm4
movapd %xmm4,%xmm6
unpcklpd %xmm4,%xmm6
mulpd  %xmm5,%xmm5
addpd  %xmm5,%xmm6
cmpnlepd %xmm15,%xmm6
movmskpd %xmm6,%edx
mov    $0x1,%eax
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm2,%xmm7
mulsd  %xmm7,%xmm7
addsd  %xmm7,%xmm4
ucomisd %xmm4,%xmm14
jae    1483 <check_overlap+0x383>
movsd  -0x20(%rsp),%xmm12
addsd  %xmm8,%xmm12
mulsd  %xmm12,%xmm12
movapd %xmm9,%xmm4
addsd  %xmm12,%xmm4
movapd %xmm4,%xmm6
unpcklpd %xmm4,%xmm6
addpd  %xmm5,%xmm6
cmpnlepd %xmm15,%xmm6
movmskpd %xmm6,%edx
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm7,%xmm4
ucomisd %xmm4,%xmm14
jae    1483 <check_overlap+0x383>
addsd  %xmm1,%xmm8
mulsd  %xmm8,%xmm8
addsd  %xmm8,%xmm9
movapd %xmm9,%xmm4
unpcklpd %xmm9,%xmm4
addpd  %xmm5,%xmm4
cmpnlepd %xmm15,%xmm4
movmskpd %xmm4,%edx
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm7,%xmm9
ucomisd %xmm9,%xmm14
jae    1483 <check_overlap+0x383>
movapd %xmm0,%xmm4
mulsd  0xd14(%rip),%xmm4
addsd  %xmm10,%xmm4
mulsd  %xmm4,%xmm4
movapd %xmm4,%xmm3
addsd  %xmm11,%xmm3
movapd %xmm3,%xmm6
unpcklpd %xmm3,%xmm6
addpd  %xmm5,%xmm6
cmpnlepd %xmm15,%xmm6
movmskpd %xmm6,%edx
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm7,%xmm3
ucomisd %xmm3,%xmm14
jae    1483 <check_overlap+0x383>
movapd %xmm4,%xmm6
addsd  %xmm12,%xmm6
movapd %xmm6,%xmm3
unpcklpd %xmm6,%xmm3
addpd  %xmm5,%xmm3
cmpnlepd %xmm15,%xmm3
movmskpd %xmm3,%edx
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm7,%xmm6
ucomisd %xmm6,%xmm14
jae    1483 <check_overlap+0x383>
addsd  %xmm8,%xmm4
movapd %xmm4,%xmm3
unpcklpd %xmm4,%xmm3
addpd  %xmm5,%xmm3
cmpnlepd %xmm15,%xmm3
movmskpd %xmm3,%edx
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm7,%xmm4
ucomisd %xmm4,%xmm14
jae    1483 <check_overlap+0x383>
addsd  %xmm0,%xmm10
mulsd  %xmm10,%xmm10
addsd  %xmm10,%xmm11
movapd %xmm11,%xmm3
unpcklpd %xmm11,%xmm3
addpd  %xmm5,%xmm3
cmpnlepd %xmm15,%xmm3
movmskpd %xmm3,%edx
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm7,%xmm11
ucomisd %xmm11,%xmm14
jae    1483 <check_overlap+0x383>
addsd  %xmm10,%xmm12
movapd %xmm12,%xmm3
unpcklpd %xmm12,%xmm3
addpd  %xmm5,%xmm3
cmpnlepd %xmm15,%xmm3
movmskpd %xmm3,%edx
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm7,%xmm12
ucomisd %xmm12,%xmm14
jae    1483 <check_overlap+0x383>
addsd  %xmm8,%xmm10
movapd %xmm10,%xmm3
unpcklpd %xmm10,%xmm3
addpd  %xmm3,%xmm5
cmpnlepd %xmm15,%xmm5
movmskpd %xmm5,%edx
test   $0x2,%dl
je     1483 <check_overlap+0x383>
test   $0x1,%dl
je     1483 <check_overlap+0x383>
addsd  %xmm10,%xmm7
ucomisd %xmm7,%xmm14
jae    1483 <check_overlap+0x383>
add    $0x3,%edi
add    $0xffffffffffffffff,%rcx
cmp    %rcx,%r11
jne    11ab <check_overlap+0xab>
jmp    1160 <check_overlap+0x60>
xor    %eax,%eax
pop    %rbx
ret

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

LLVM IR (-O2):
define i32 @check_overlap(i32 %0, double %1, double %2, double %3, double* nocapture %4) {
%6 = icmp sgt i32 %0, 0
br i1 %6, label %7, label %175
7: ; preds = %5
%8 = zext i32 %0 to i64
%9 = zext i32 %0 to i64
%10 = insertelement <2 x double> poison, double %3, i64 0
%11 = shufflevector <2 x double> %10, <2 x double> poison, <2 x i32> zeroinitializer
br label %15
12: ; preds = %172, %15
%13 = add nuw nsw i64 %17, 1
%14 = icmp eq i64 %20, %9
br i1 %14, label %175, label %15
15: ; preds = %7, %12
%16 = phi i64 [ 0, %7 ], [ %20, %12 ]
%17 = phi i64 [ 1, %7 ], [ %13, %12 ]
%18 = trunc i64 %16 to i32
%19 = mul nsw i32 %18, 3
%20 = add nuw nsw i64 %16, 1
%21 = icmp ult i64 %20, %8
br i1 %21, label %22, label %12
22: ; preds = %15
%23 = add nuw nsw i32 %19, 2
%24 = add nuw nsw i32 %19, 1
%25 = zext i32 %19 to i64
%26 = getelementptr inbounds double, double* %4, i64 %25
%27 = load double, double* %26
%28 = zext i32 %24 to i64
%29 = getelementptr inbounds double, double* %4, i64 %28
%30 = load double, double* %29
%31 = zext i32 %23 to i64
%32 = getelementptr inbounds double, double* %4, i64 %31
%33 = load double, double* %32
br label %34
34: ; preds = %22, %172
%35 = phi i64 [ %17, %22 ], [ %173, %172 ]
%36 = trunc i64 %35 to i32
%37 = mul nsw i32 %36, 3
%38 = add nuw nsw i32 %37, 1
%39 = add nuw nsw i32 %37, 2
%40 = zext i32 %37 to i64
%41 = getelementptr inbounds double, double* %4, i64 %40
%42 = load double, double* %41
%43 = fsub double %27, %42
%44 = zext i32 %38 to i64
%45 = getelementptr inbounds double, double* %4, i64 %44
%46 = load double, double* %45
%47 = fsub double %30, %46
%48 = zext i32 %39 to i64
%49 = getelementptr inbounds double, double* %4, i64 %48
%50 = load double, double* %49
%51 = fsub double %33, %50
%52 = tail call double @llvm.fmuladd.f64(double %2, double -1.000000e+00, double %47)
%53 = fmul double %52, %52
%54 = insertelement <2 x double> poison, double %51, i64 0
%55 = shufflevector <2 x double> %54, <2 x double> poison, <2 x i32> zeroinitializer
%56 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %11, <2 x double> <double 0.000000e+00, double -1.000000e+00>, <2 x double> %55)
%57 = fadd double %51, %3
%58 = tail call double @llvm.fmuladd.f64(double %2, double 0.000000e+00, double %47)
%59 = fmul double %58, %58
%60 = fadd double %47, %2
%61 = fmul double %60, %60
%62 = tail call double @llvm.fmuladd.f64(double %1, double -1.000000e+00, double %43)
%63 = tail call double @llvm.fmuladd.f64(double %62, double %62, double %53)
%64 = insertelement <2 x double> poison, double %63, i64 0
%65 = shufflevector <2 x double> %64, <2 x double> poison, <2 x i32> zeroinitializer
%66 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %65)
%67 = fcmp ugt <2 x double> %66, <double 4.000000e+00, double 4.000000e+00>
%68 = extractelement <2 x i1> %67, i64 0
%69 = extractelement <2 x i1> %67, i64 1
%70 = select i1 %69, i1 %68, i1 false
%71 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %63)
%72 = fcmp ugt double %71, 4.000000e+00
%73 = select i1 %70, i1 %72, i1 false
br i1 %73, label %74, label %175
74: ; preds = %34
%75 = tail call double @llvm.fmuladd.f64(double %62, double %62, double %59)
%76 = insertelement <2 x double> poison, double %75, i64 0
%77 = shufflevector <2 x double> %76, <2 x double> poison, <2 x i32> zeroinitializer
%78 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %77)
%79 = fcmp ugt <2 x double> %78, <double 4.000000e+00, double 4.000000e+00>
%80 = extractelement <2 x i1> %79, i64 0
%81 = extractelement <2 x i1> %79, i64 1
%82 = select i1 %81, i1 %80, i1 false
%83 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %75)
%84 = fcmp ugt double %83, 4.000000e+00
%85 = select i1 %82, i1 %84, i1 false
br i1 %85, label %86, label %175
86: ; preds = %74
%87 = tail call double @llvm.fmuladd.f64(double %62, double %62, double %61)
%88 = insertelement <2 x double> poison, double %87, i64 0
%89 = shufflevector <2 x double> %88, <2 x double> poison, <2 x i32> zeroinitializer
%90 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %89)
%91 = fcmp ugt <2 x double> %90, <double 4.000000e+00, double 4.000000e+00>
%92 = extractelement <2 x i1> %91, i64 0
%93 = extractelement <2 x i1> %91, i64 1
%94 = select i1 %93, i1 %92, i1 false
%95 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %87)
%96 = fcmp ugt double %95, 4.000000e+00
%97 = select i1 %94, i1 %96, i1 false
br i1 %97, label %98, label %175
98: ; preds = %86
%99 = tail call double @llvm.fmuladd.f64(double %1, double 0.000000e+00, double %43)
%100 = tail call double @llvm.fmuladd.f64(double %99, double %99, double %53)
%101 = insertelement <2 x double> poison, double %100, i64 0
%102 = shufflevector <2 x double> %101, <2 x double> poison, <2 x i32> zeroinitializer
%103 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %102)
%104 = fcmp ugt <2 x double> %103, <double 4.000000e+00, double 4.000000e+00>
%105 = extractelement <2 x i1> %104, i64 0
%106 = extractelement <2 x i1> %104, i64 1
%107 = select i1 %106, i1 %105, i1 false
%108 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %100)
%109 = fcmp ugt double %108, 4.000000e+00
%110 = select i1 %107, i1 %109, i1 false
br i1 %110, label %111, label %175
111: ; preds = %98
%112 = tail call double @llvm.fmuladd.f64(double %99, double %99, double %59)
%113 = insertelement <2 x double> poison, double %112, i64 0
%114 = shufflevector <2 x double> %113, <2 x double> poison, <2 x i32> zeroinitializer
%115 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %114)
%116 = fcmp ugt <2 x double> %115, <double 4.000000e+00, double 4.000000e+00>
%117 = extractelement <2 x i1> %116, i64 0
%118 = extractelement <2 x i1> %116, i64 1
%119 = select i1 %118, i1 %117, i1 false
%120 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %112)
%121 = fcmp ugt double %120, 4.000000e+00
%122 = select i1 %119, i1 %121, i1 false
br i1 %122, label %123, label %175
123: ; preds = %111
%124 = tail call double @llvm.fmuladd.f64(double %99, double %99, double %61)
%125 = insertelement <2 x double> poison, double %124, i64 0
%126 = shufflevector <2 x double> %125, <2 x double> poison, <2 x i32> zeroinitializer
%127 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %126)
%128 = fcmp ugt <2 x double> %127, <double 4.000000e+00, double 4.000000e+00>
%129 = extractelement <2 x i1> %128, i64 0
%130 = extractelement <2 x i1> %128, i64 1
%131 = select i1 %130, i1 %129, i1 false
%132 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %124)
%133 = fcmp ugt double %132, 4.000000e+00
%134 = select i1 %131, i1 %133, i1 false
br i1 %134, label %135, label %175
135: ; preds = %123
%136 = fadd double %43, %1
%137 = tail call double @llvm.fmuladd.f64(double %136, double %136, double %53)
%138 = insertelement <2 x double> poison, double %137, i64 0
%139 = shufflevector <2 x double> %138, <2 x double> poison, <2 x i32> zeroinitializer
%140 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %139)
%141 = fcmp ugt <2 x double> %140, <double 4.000000e+00, double 4.000000e+00>
%142 = extractelement <2 x i1> %141, i64 0
%143 = extractelement <2 x i1> %141, i64 1
%144 = select i1 %143, i1 %142, i1 false
%145 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %137)
%146 = fcmp ugt double %145, 4.000000e+00
%147 = select i1 %144, i1 %146, i1 false
br i1 %147, label %148, label %175
148: ; preds = %135
%149 = tail call double @llvm.fmuladd.f64(double %136, double %136, double %59)
%150 = insertelement <2 x double> poison, double %149, i64 0
%151 = shufflevector <2 x double> %150, <2 x double> poison, <2 x i32> zeroinitializer
%152 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %151)
%153 = fcmp ugt <2 x double> %152, <double 4.000000e+00, double 4.000000e+00>
%154 = extractelement <2 x i1> %153, i64 0
%155 = extractelement <2 x i1> %153, i64 1
%156 = select i1 %155, i1 %154, i1 false
%157 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %149)
%158 = fcmp ugt double %157, 4.000000e+00
%159 = select i1 %156, i1 %158, i1 false
br i1 %159, label %160, label %175
160: ; preds = %148
%161 = tail call double @llvm.fmuladd.f64(double %136, double %136, double %61)
%162 = insertelement <2 x double> poison, double %161, i64 0
%163 = shufflevector <2 x double> %162, <2 x double> poison, <2 x i32> zeroinitializer
%164 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %56, <2 x double> %163)
%165 = fcmp ugt <2 x double> %164, <double 4.000000e+00, double 4.000000e+00>
%166 = extractelement <2 x i1> %165, i64 0
%167 = extractelement <2 x i1> %165, i64 1
%168 = select i1 %167, i1 %166, i1 false
%169 = tail call double @llvm.fmuladd.f64(double %57, double %57, double %161)
%170 = fcmp ugt double %169, 4.000000e+00
%171 = select i1 %168, i1 %170, i1 false
br i1 %171, label %172, label %175
172: ; preds = %160
%173 = add nuw nsw i64 %35, 1
%174 = icmp eq i64 %173, %9
br i1 %174, label %12, label %34
175: ; preds = %12, %34, %74, %86, %98, %111, %123, %135, %148, %160, %5
%176 = phi i32 [ 0, %5 ], [ 1, %160 ], [ 1, %148 ], [ 1, %135 ], [ 1, %123 ], [ 1, %111 ], [ 1, %98 ], [ 1, %86 ], [ 1, %74 ], [ 1, %34 ], [ 0, %12 ]
ret i32 %176
}