SplitVectorResult #0: t72: v4f64 = llvm.x86.avx.cmp.pd.256 TargetConstant:i64<4434>, t64, t70, Constant:i8<1>
fatal error: error in backend: Do not know how to split the result of this operator!
clang-4.0: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 4.0.1 (tags/RELEASE_401/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Note: The vectorize function is called within the function "compute_forces".
; ModuleID = 'force_computation'
source_filename = "force_computation"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%0 = type { %1, i32, i32, double, %2, i32 }
%1 = type { [3 x double], [3 x double] }
%2 = type { i32, [0 x i8]* }
%3 = type { %2, %2, %2, %2, i32, i32, i32, i32, %2, i32 }
%4 = type { %5, %1 }
%5 = type { i32, i32, %2, %2 }
%6 = type { double, double, double }
@grid_ = local_unnamed_addr global %0 zeroinitializer
define void @cpu_compute_forces(double %cutoff_distance_32561, double %epsilon_32562, double %sigma_32563) local_unnamed_addr {
cpu_compute_forces_start:
%parallel_closure = alloca { %2, double, double, double }, align 8
%0 = load %2, %2* getelementptr inbounds (%0, %0* @grid_, i64 0, i32 4), align 16
%1 = fmul double %sigma_32563, %sigma_32563
%2 = fmul double %1, %sigma_32563
%3 = fmul double %2, %2
%4 = load i32, i32* getelementptr inbounds (%0, %0* @grid_, i64 0, i32 1), align 16
%.fca.0.extract = extractvalue %2 %0, 0
%.fca.0.gep = getelementptr inbounds { %2, double, double, double }, { %2, double, double, double }* %parallel_closure, i64 0, i32 0, i32 0
store i32 %.fca.0.extract, i32* %.fca.0.gep, align 8
%.fca.1.extract = extractvalue %2 %0, 1
%.fca.1.gep = getelementptr inbounds { %2, double, double, double }, { %2, double, double, double }* %parallel_closure, i64 0, i32 0, i32 1
store [0 x i8]* %.fca.1.extract, [0 x i8]** %.fca.1.gep, align 8
%parallel_closure.repack1 = getelementptr inbounds { %2, double, double, double }, { %2, double, double, double }* %parallel_closure, i64 0, i32 1
store double %epsilon_32562, double* %parallel_closure.repack1, align 8
%parallel_closure.repack3 = getelementptr inbounds { %2, double, double, double }, { %2, double, double, double }* %parallel_closure, i64 0, i32 2
store double %cutoff_distance_32561, double* %parallel_closure.repack3, align 8
%parallel_closure.repack5 = getelementptr inbounds { %2, double, double, double }, { %2, double, double, double }* %parallel_closure, i64 0, i32 3
store double %3, double* %parallel_closure.repack5, align 8
%5 = bitcast { %2, double, double, double }* %parallel_closure to i8*
call void @anydsl_parallel_for(i32 4, i32 0, i32 %4, i8* nonnull %5, i8* bitcast (void (i8*, i32, i32)* @lambda_32590_parallel_for to i8*))
ret void
}
; Function Attrs: nounwind
define void @lambda_32590_parallel_for(i8* nocapture readonly, i32, i32) #0 {
lambda_32590_parallel_for:
%3 = getelementptr inbounds i8, i8* %0, i64 8
%4 = bitcast i8* %3 to [0 x %3]**
%5 = load [0 x %3]*, [0 x %3]** %4, align 8
%.elt3 = getelementptr inbounds i8, i8* %0, i64 24
%6 = bitcast i8* %.elt3 to double*
%.unpack4 = load double, double* %6, align 8
%.elt5 = getelementptr inbounds i8, i8* %0, i64 32
%7 = bitcast i8* %.elt5 to double*
%.unpack6 = load double, double* %7, align 8
%8 = icmp slt i32 %1, %2
br i1 %8, label %body.lr.ph, label %exit
body.lr.ph: ; preds = %lambda_32590_parallel_for
%.elt1 = getelementptr inbounds i8, i8* %0, i64 16
%9 = bitcast i8* %.elt1 to double*
%.unpack2 = load double, double* %9, align 8
%10 = fmul double %.unpack2, 2.400000e+01
%11 = fmul double %.unpack4, %.unpack4
%tmp2.i24.i = fmul double %.unpack6, 2.000000e+00
%tmp1.i25.i = fmul double %10, %.unpack6
%.splatinsert7.i.i = insertelement <4 x double> undef, double %11, i32 0
%.splat8.i.i = shufflevector <4 x double> %.splatinsert7.i.i, <4 x double> undef, <4 x i32> zeroinitializer
%.splatinsert9.i.i = insertelement <4 x double> undef, double %tmp1.i25.i, i32 0
%.splat10.i.i = shufflevector <4 x double> %.splatinsert9.i.i, <4 x double> undef, <4 x i32> zeroinitializer
%.splatinsert11.i.i = insertelement <4 x double> undef, double %tmp2.i24.i, i32 0
%.splat12.i.i = shufflevector <4 x double> %.splatinsert11.i.i, <4 x double> undef, <4 x i32> zeroinitializer
br label %body
body: ; preds = %lambda_32590.exit, %body.lr.ph
%parallel_loop_phi23 = phi i32 [ %1, %body.lr.ph ], [ %630, %lambda_32590.exit ]
%12 = load i32, i32* getelementptr inbounds (%0, %0* @grid_, i64 0, i32 2), align 4
%13 = icmp sgt i32 %12, 0
br i1 %13, label %if_then.i.preheader, label %lambda_32590.exit
if_then.i.preheader: ; preds = %body
br label %if_then.i
if_then.i: ; preds = %if_then.i.preheader, %if_else4.i.if_then.i_crit_edge
%14 = phi i32 [ %.pre, %if_else4.i.if_then.i_crit_edge ], [ %12, %if_then.i.preheader ]
%lower.i22 = phi i32 [ %30, %if_else4.i.if_then.i_crit_edge ], [ 0, %if_then.i.preheader ]
%15 = mul nsw i32 %14, %parallel_loop_phi23
%16 = add nsw i32 %15, %lower.i22
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [0 x %3], [0 x %3]* %5, i64 0, i64 %17, i32 7
%19 = getelementptr inbounds [0 x %3], [0 x %3]* %5, i64 0, i64 %17, i32 4
%20 = getelementptr inbounds [0 x %3], [0 x %3]* %5, i64 0, i64 %17, i32 9
%21 = getelementptr inbounds [0 x %3], [0 x %3]* %5, i64 0, i64 %17, i32 8, i32 1
%22 = bitcast [0 x i8]** %21 to [0 x %4]**
%23 = load [0 x %4]*, [0 x %4]** %22, align 8
%24 = load i32, i32* %18, align 4
%25 = icmp sgt i32 %24, 0
br i1 %25, label %if_then5.i.lr.ph, label %if_else4.i
if_then5.i.lr.ph: ; preds = %if_then.i
%26 = getelementptr inbounds [0 x %3], [0 x %3]* %5, i64 0, i64 %17, i32 1, i32 1
%27 = bitcast [0 x i8]** %26 to [0 x %6]**
%28 = getelementptr inbounds [0 x %3], [0 x %3]* %5, i64 0, i64 %17, i32 3, i32 1
%29 = bitcast [0 x i8]** %28 to [0 x %6]**
%wide.trip.count44 = zext i32 %24 to i64
br label %if_then5.i
if_else4.i.loopexit: ; preds = %if_else11.i
br label %if_else4.i
if_else4.i: ; preds = %if_else4.i.loopexit, %if_then.i
%30 = add nuw nsw i32 %lower.i22, 1
%exitcond46 = icmp eq i32 %30, %12
br i1 %exitcond46, label %lambda_32590.exit.loopexit, label %if_else4.i.if_then.i_crit_edge
if_else4.i.if_then.i_crit_edge: ; preds = %if_else4.i
%.pre = load i32, i32* getelementptr inbounds (%0, %0* @grid_, i64 0, i32 2), align 4
br label %if_then.i
if_then5.i: ; preds = %if_else11.i, %if_then5.i.lr.ph
%indvars.iv42 = phi i64 [ 0, %if_then5.i.lr.ph ], [ %indvars.iv.next43, %if_else11.i ]
%indvars.iv = phi i32 [ 0, %if_then5.i.lr.ph ], [ %indvars.iv.next, %if_else11.i ]
%31 = load i32, i32* %20, align 4
%32 = trunc i64 %indvars.iv42 to i32
%begin.i = mul nsw i32 %31, %32
%33 = load i32, i32* %19, align 4
%34 = add nsw i32 %begin.i, %31
%35 = icmp slt i32 %34, %33
%. = select i1 %35, i32 %34, i32 %33
%36 = icmp slt i32 %begin.i, %.
br i1 %36, label %body.i.lr.ph, label %exit.i
body.i.lr.ph: ; preds = %if_then5.i
%.splatinsert1.i.i = insertelement <4 x i32> undef, i32 %., i32 0
%.splat2.i.i = shufflevector <4 x i32> %.splatinsert1.i.i, <4 x i32> undef, <4 x i32> zeroinitializer
%37 = mul i32 %31, %indvars.iv
br label %body.i
if_else11.i.loopexit: ; preds = %exit19.i
br label %if_else11.i
if_else11.i: ; preds = %if_else11.i.loopexit, %exit.i
%indvars.iv.next43 = add nuw nsw i64 %indvars.iv42, 1
%indvars.iv.next = add nuw nsw i32 %indvars.iv, 1
%exitcond45 = icmp eq i64 %indvars.iv.next43, %wide.trip.count44
br i1 %exitcond45, label %if_else4.i.loopexit, label %if_then5.i
if_then12.i: ; preds = %exit19.i, %if_then12.i.lr.ph
%indvars.iv40 = phi i64 [ 0, %if_then12.i.lr.ph ], [ %indvars.iv.next41, %exit19.i ]
%38 = load [0 x %3*]*, [0 x %3*]** %368, align 8
%39 = getelementptr inbounds [0 x %3*], [0 x %3*]* %38, i64 0, i64 %indvars.iv40
%40 = load %3*, %3** %39, align 8
%41 = getelementptr inbounds %3, %3* %40, i64 0, i32 4
%42 = getelementptr inbounds %3, %3* %40, i64 0, i32 9
%43 = load [0 x i32]*, [0 x i32]** %370, align 8
%44 = getelementptr inbounds [0 x i32], [0 x i32]* %43, i64 0, i64 %indvars.iv40
%45 = load i32, i32* %44, align 4
%46 = load i32, i32* %42, align 4
%begin_neighbor.i = mul nsw i32 %46, %45
%47 = load i32, i32* %41, align 4
%48 = add nsw i32 %begin_neighbor.i, %46
%49 = icmp slt i32 %48, %47
%.7 = select i1 %49, i32 %48, i32 %47
br i1 %36, label %body18.i.lr.ph, label %exit19.i
body18.i.lr.ph: ; preds = %if_then12.i
%50 = icmp slt i32 %begin_neighbor.i, %.7
%51 = getelementptr inbounds %3, %3* %40, i64 0, i32 1, i32 1
%52 = bitcast [0 x i8]** %51 to [0 x %6]**
%53 = getelementptr inbounds %3, %3* %40, i64 0, i32 3, i32 1
%54 = bitcast [0 x i8]** %53 to [0 x %6]**
%55 = sext i32 %begin_neighbor.i to i64
%56 = sext i32 %.7 to i64
br label %body18.i
body.i: ; preds = %body.i.lr.ph, %lambda_32651_vectorize.exit.i
%indvars.iv34 = phi i32 [ %37, %body.i.lr.ph ], [ %indvars.iv.next35, %lambda_32651_vectorize.exit.i ]
%57 = sext i32 %indvars.iv34 to i64
%.splatinsert3.i.i = insertelement <4 x i32> undef, i32 %indvars.iv34, i32 0
%.splat4.i.i = shufflevector <4 x i32> %.splatinsert3.i.i, <4 x i32> undef, <4 x i32> zeroinitializer
%contiguous_add5.i.i = add <4 x i32> %.splat4.i.i, <i32 0, i32 1, i32 2, i32 3>
%58 = sext <4 x i32> %contiguous_add5.i.i to <4 x i64>
%i_32653_lane1.i.i = add i32 %indvars.iv34, 1
%59 = sext i32 %i_32653_lane1.i.i to i64
%i_32653_lane2.i.i = add i32 %indvars.iv34, 2
%60 = sext i32 %i_32653_lane2.i.i to i64
%i_32653_lane3.i.i = add i32 %indvars.iv34, 3
%61 = sext i32 %i_32653_lane3.i.i to i64
br label %may_unroll_step.rv.i.i
may_unroll_step.rv.i.i: ; preds = %while_head29.divexit.rv.i.i, %body.i
%indvars.iv36 = phi i64 [ %indvars.iv.next37, %while_head29.divexit.rv.i.i ], [ %57, %body.i ]
%62 = phi <4 x i64> [ %66, %while_head29.divexit.rv.i.i ], [ <i64 -1, i64 -1, i64 -1, i64 -1>, %body.i ]
%63 = phi <4 x i32> [ %67, %while_head29.divexit.rv.i.i ], [ <i32 -1, i32 -1, i32 -1, i32 -1>, %body.i ]
%indvars.iv.next37 = add i64 %indvars.iv36, 1
%64 = trunc i64 %indvars.iv.next37 to i32
%.splatinsert.i.i = insertelement <4 x i32> undef, i32 %64, i32 0
%.splat.i.i = shufflevector <4 x i32> %.splatinsert.i.i, <4 x i32> undef, <4 x i32> zeroinitializer
%contiguous_add.i.i = add <4 x i32> %.splat.i.i, <i32 0, i32 1, i32 2, i32 3>
%65 = icmp slt <4 x i32> %contiguous_add.i.i, %.splat2.i.i
%66 = select <4 x i1> %65, <4 x i64> %62, <4 x i64> zeroinitializer
%67 = select <4 x i1> %65, <4 x i32> %63, <4 x i32> zeroinitializer
%68 = load [0 x %6]*, [0 x %6]** %27, align 8
%srov_gep.i.i = getelementptr [0 x %6], [0 x %6]* %68, <4 x i64> zeroinitializer, <4 x i64> %58, i32 0
%69 = icmp ne <4 x i32> %67, zeroinitializer
%70 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep.i.i, i32 1, <4 x i1> %69, <4 x double> undef)
%srov_gep70.i.i = getelementptr [0 x %6], [0 x %6]* %68, <4 x i64> zeroinitializer, <4 x i64> %58, i32 1
%71 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep70.i.i, i32 1, <4 x i1> %69, <4 x double> undef)
%srov_gep71.i.i = getelementptr [0 x %6], [0 x %6]* %68, <4 x i64> zeroinitializer, <4 x i64> %58, i32 2
%72 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep71.i.i, i32 1, <4 x i1> %69, <4 x double> undef)
%73 = sext <4 x i32> %contiguous_add.i.i to <4 x i64>
%srov_gep72.i.i = getelementptr [0 x %6], [0 x %6]* %68, <4 x i64> zeroinitializer, <4 x i64> %73, i32 0
%74 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep72.i.i, i32 1, <4 x i1> %69, <4 x double> undef)
%srov_gep73.i.i = getelementptr [0 x %6], [0 x %6]* %68, <4 x i64> zeroinitializer, <4 x i64> %73, i32 1
%75 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep73.i.i, i32 1, <4 x i1> %69, <4 x double> undef)
%srov_gep74.i.i = getelementptr [0 x %6], [0 x %6]* %68, <4 x i64> zeroinitializer, <4 x i64> %73, i32 2
%76 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep74.i.i, i32 1, <4 x i1> %69, <4 x double> undef)
%dz_SIMD.i.i = fsub <4 x double> %76, %72
%dx_SIMD.i.i = fsub <4 x double> %74, %70
%dy_SIMD.i.i = fsub <4 x double> %75, %71
%77 = fmul <4 x double> %dz_SIMD.i.i, %dz_SIMD.i.i
%78 = fmul <4 x double> %dx_SIMD.i.i, %dx_SIMD.i.i
%79 = fmul <4 x double> %dy_SIMD.i.i, %dy_SIMD.i.i
%80 = fadd <4 x double> %78, %79
%squared_distance_SIMD.i.i = fadd <4 x double> %80, %77
%81 = tail call <4 x double> @llvm.x86.avx.cmp.pd.256(<4 x double> %squared_distance_SIMD.i.i, <4 x double> %.splat8.i.i, i8 1)
%82 = bitcast <4 x double> %81 to <4 x i64>
%83 = and <4 x i64> %82, %66
%84 = fmul <4 x double> %squared_distance_SIMD.i.i, %squared_distance_SIMD.i.i
%85 = load [0 x %6]*, [0 x %6]** %29, align 8
%86 = fmul <4 x double> %84, %84
%.op.i.i = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %86
%87 = bitcast <4 x i64> %83 to <4 x double>
%88 = tail call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, <4 x double> %.op.i.i, <4 x double> %87)
%89 = fmul <4 x double> %.splat10.i.i, %88
%90 = fmul <4 x double> %squared_distance_SIMD.i.i, %88
%91 = fmul <4 x double> %.splat12.i.i, %90
%92 = fsub <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %91
%93 = fmul <4 x double> %89, %92
%dF_x_SIMD.i.i = fmul <4 x double> %dx_SIMD.i.i, %93
%94 = getelementptr inbounds [0 x %6], [0 x %6]* %85, <4 x i64> zeroinitializer, <4 x i64> %58, i32 0
%95 = bitcast <4 x double*> %94 to <4 x i64*>
%96 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %57
%97 = bitcast %6* %96 to i64*
%98 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %59
%99 = bitcast %6* %98 to i64*
%100 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %60
%101 = bitcast %6* %100 to i64*
%102 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %61
%103 = bitcast %6* %102 to i64*
br label %while_head.rv.i.i
while_head.rv.i.i: ; preds = %while_head.rv.i.i, %may_unroll_step.rv.i.i
%104 = phi <4 x i64> [ %133, %while_head.rv.i.i ], [ zeroinitializer, %may_unroll_step.rv.i.i ]
%105 = phi <4 x i64> [ %134, %while_head.rv.i.i ], [ %83, %may_unroll_step.rv.i.i ]
%106 = phi <4 x i64> [ %135, %while_head.rv.i.i ], [ zeroinitializer, %may_unroll_step.rv.i.i ]
%107 = and <4 x i64> %105, %104
%108 = xor <4 x i64> %104, <i64 -1, i64 -1, i64 -1, i64 -1>
%109 = and <4 x i64> %105, %108
%110 = icmp ne <4 x i64> %109, zeroinitializer
%111 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %95, i32 1, <4 x i1> %110, <4 x i64> undef)
%extract17.i.i = extractelement <4 x i64> %111, i32 3
%extract15.i.i = extractelement <4 x i64> %111, i32 2
%extract13.i.i = extractelement <4 x i64> %111, i32 1
%extract.i.i = extractelement <4 x i64> %111, i32 0
%112 = bitcast <4 x i64> %111 to <4 x double>
%113 = fadd <4 x double> %dF_x_SIMD.i.i, %112
%bc.i.i = bitcast <4 x double> %113 to <4 x i64>
%114 = extractelement <4 x i64> %bc.i.i, i32 0
%115 = cmpxchg i64* %97, i64 %extract.i.i, i64 %114 seq_cst seq_cst
%116 = extractelement <4 x i64> %bc.i.i, i32 1
%117 = cmpxchg i64* %99, i64 %extract13.i.i, i64 %116 seq_cst seq_cst
%118 = extractelement <4 x i64> %bc.i.i, i32 2
%119 = cmpxchg i64* %101, i64 %extract15.i.i, i64 %118 seq_cst seq_cst
%120 = extractelement <4 x i64> %bc.i.i, i32 3
%121 = cmpxchg i64* %103, i64 %extract17.i.i, i64 %120 seq_cst seq_cst
%122 = extractvalue { i64, i1 } %115, 1
%123 = sext i1 %122 to i64
%124 = insertelement <4 x i64> undef, i64 %123, i64 0
%125 = extractvalue { i64, i1 } %117, 1
%126 = sext i1 %125 to i64
%127 = insertelement <4 x i64> %124, i64 %126, i64 1
%128 = extractvalue { i64, i1 } %119, 1
%129 = sext i1 %128 to i64
%130 = insertelement <4 x i64> %127, i64 %129, i64 2
%131 = extractvalue { i64, i1 } %121, 1
%132 = sext i1 %131 to i64
%133 = insertelement <4 x i64> %130, i64 %132, i64 3
%134 = xor <4 x i64> %105, %107
%135 = or <4 x i64> %107, %106
%136 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %134, <4 x i64> %134)
%137 = icmp eq i32 %136, 0
br i1 %137, label %while_head.rv.i.i, label %while_head.divexit.rv.i.i
while_head.divexit.rv.i.i: ; preds = %while_head.rv.i.i
%dF_y_SIMD.i.i = fmul <4 x double> %dy_SIMD.i.i, %93
%138 = getelementptr inbounds [0 x %6], [0 x %6]* %85, <4 x i64> zeroinitializer, <4 x i64> %58, i32 1
%139 = bitcast <4 x double*> %138 to <4 x i64*>
%140 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %57, i32 1
%141 = bitcast double* %140 to i64*
%142 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %59, i32 1
%143 = bitcast double* %142 to i64*
%144 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %60, i32 1
%145 = bitcast double* %144 to i64*
%146 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %61, i32 1
%147 = bitcast double* %146 to i64*
br label %while_head5.rv.i.i
while_head5.rv.i.i: ; preds = %while_head5.rv.i.i, %while_head.divexit.rv.i.i
%148 = phi <4 x i64> [ %177, %while_head5.rv.i.i ], [ zeroinitializer, %while_head.divexit.rv.i.i ]
%149 = phi <4 x i64> [ %178, %while_head5.rv.i.i ], [ %135, %while_head.divexit.rv.i.i ]
%150 = phi <4 x i64> [ %179, %while_head5.rv.i.i ], [ zeroinitializer, %while_head.divexit.rv.i.i ]
%151 = and <4 x i64> %149, %148
%152 = xor <4 x i64> %148, <i64 -1, i64 -1, i64 -1, i64 -1>
%153 = and <4 x i64> %149, %152
%154 = icmp ne <4 x i64> %153, zeroinitializer
%155 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %139, i32 1, <4 x i1> %154, <4 x i64> undef)
%extract29.i.i = extractelement <4 x i64> %155, i32 3
%extract27.i.i = extractelement <4 x i64> %155, i32 2
%extract25.i.i = extractelement <4 x i64> %155, i32 1
%extract23.i.i = extractelement <4 x i64> %155, i32 0
%156 = bitcast <4 x i64> %155 to <4 x double>
%157 = fadd <4 x double> %dF_y_SIMD.i.i, %156
%bc96.i.i = bitcast <4 x double> %157 to <4 x i64>
%158 = extractelement <4 x i64> %bc96.i.i, i32 0
%159 = cmpxchg i64* %141, i64 %extract23.i.i, i64 %158 seq_cst seq_cst
%160 = extractelement <4 x i64> %bc96.i.i, i32 1
%161 = cmpxchg i64* %143, i64 %extract25.i.i, i64 %160 seq_cst seq_cst
%162 = extractelement <4 x i64> %bc96.i.i, i32 2
%163 = cmpxchg i64* %145, i64 %extract27.i.i, i64 %162 seq_cst seq_cst
%164 = extractelement <4 x i64> %bc96.i.i, i32 3
%165 = cmpxchg i64* %147, i64 %extract29.i.i, i64 %164 seq_cst seq_cst
%166 = extractvalue { i64, i1 } %159, 1
%167 = sext i1 %166 to i64
%168 = insertelement <4 x i64> undef, i64 %167, i64 0
%169 = extractvalue { i64, i1 } %161, 1
%170 = sext i1 %169 to i64
%171 = insertelement <4 x i64> %168, i64 %170, i64 1
%172 = extractvalue { i64, i1 } %163, 1
%173 = sext i1 %172 to i64
%174 = insertelement <4 x i64> %171, i64 %173, i64 2
%175 = extractvalue { i64, i1 } %165, 1
%176 = sext i1 %175 to i64
%177 = insertelement <4 x i64> %174, i64 %176, i64 3
%178 = xor <4 x i64> %149, %151
%179 = or <4 x i64> %151, %150
%180 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %178, <4 x i64> %178)
%181 = icmp eq i32 %180, 0
br i1 %181, label %while_head5.rv.i.i, label %while_head5.divexit.rv.i.i
while_head5.divexit.rv.i.i: ; preds = %while_head5.rv.i.i
%dF_z_SIMD.i.i = fmul <4 x double> %dz_SIMD.i.i, %93
%182 = getelementptr inbounds [0 x %6], [0 x %6]* %85, <4 x i64> zeroinitializer, <4 x i64> %58, i32 2
%183 = bitcast <4 x double*> %182 to <4 x i64*>
%184 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %57, i32 2
%185 = bitcast double* %184 to i64*
%186 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %59, i32 2
%187 = bitcast double* %186 to i64*
%188 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %60, i32 2
%189 = bitcast double* %188 to i64*
%190 = getelementptr inbounds [0 x %6], [0 x %6]* %85, i64 0, i64 %61, i32 2
%191 = bitcast double* %190 to i64*
br label %while_head11.rv.i.i
while_head11.rv.i.i: ; preds = %while_head11.rv.i.i, %while_head5.divexit.rv.i.i
%192 = phi <4 x i64> [ %221, %while_head11.rv.i.i ], [ zeroinitializer, %while_head5.divexit.rv.i.i ]
%193 = phi <4 x i64> [ %222, %while_head11.rv.i.i ], [ %179, %while_head5.divexit.rv.i.i ]
%194 = phi <4 x i64> [ %223, %while_head11.rv.i.i ], [ zeroinitializer, %while_head5.divexit.rv.i.i ]
%195 = and <4 x i64> %193, %192
%196 = xor <4 x i64> %192, <i64 -1, i64 -1, i64 -1, i64 -1>
%197 = and <4 x i64> %193, %196
%198 = icmp ne <4 x i64> %197, zeroinitializer
%199 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %183, i32 1, <4 x i1> %198, <4 x i64> undef)
%extract43.i.i = extractelement <4 x i64> %199, i32 3
%extract41.i.i = extractelement <4 x i64> %199, i32 2
%extract39.i.i = extractelement <4 x i64> %199, i32 1
%extract37.i.i = extractelement <4 x i64> %199, i32 0
%200 = bitcast <4 x i64> %199 to <4 x double>
%201 = fadd <4 x double> %dF_z_SIMD.i.i, %200
%bc100.i.i = bitcast <4 x double> %201 to <4 x i64>
%202 = extractelement <4 x i64> %bc100.i.i, i32 0
%203 = cmpxchg i64* %185, i64 %extract37.i.i, i64 %202 seq_cst seq_cst
%204 = extractelement <4 x i64> %bc100.i.i, i32 1
%205 = cmpxchg i64* %187, i64 %extract39.i.i, i64 %204 seq_cst seq_cst
%206 = extractelement <4 x i64> %bc100.i.i, i32 2
%207 = cmpxchg i64* %189, i64 %extract41.i.i, i64 %206 seq_cst seq_cst
%208 = extractelement <4 x i64> %bc100.i.i, i32 3
%209 = cmpxchg i64* %191, i64 %extract43.i.i, i64 %208 seq_cst seq_cst
%210 = extractvalue { i64, i1 } %203, 1
%211 = sext i1 %210 to i64
%212 = insertelement <4 x i64> undef, i64 %211, i64 0
%213 = extractvalue { i64, i1 } %205, 1
%214 = sext i1 %213 to i64
%215 = insertelement <4 x i64> %212, i64 %214, i64 1
%216 = extractvalue { i64, i1 } %207, 1
%217 = sext i1 %216 to i64
%218 = insertelement <4 x i64> %215, i64 %217, i64 2
%219 = extractvalue { i64, i1 } %209, 1
%220 = sext i1 %219 to i64
%221 = insertelement <4 x i64> %218, i64 %220, i64 3
%222 = xor <4 x i64> %193, %195
%223 = or <4 x i64> %195, %194
%224 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %222, <4 x i64> %222)
%225 = icmp eq i32 %224, 0
br i1 %225, label %while_head11.rv.i.i, label %while_head11.divexit.rv.i.i
while_head11.divexit.rv.i.i: ; preds = %while_head11.rv.i.i
%226 = load [0 x %6]*, [0 x %6]** %29, align 8
%227 = getelementptr inbounds [0 x %6], [0 x %6]* %226, <4 x i64> zeroinitializer, <4 x i64> %73, i32 0
%228 = bitcast <4 x double*> %227 to <4 x i64*>
%229 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %indvars.iv.next37
%230 = bitcast %6* %229 to i64*
%lower_lane1.i.i = shl i64 %indvars.iv36, 32
%sext = add i64 %lower_lane1.i.i, 8589934592
%231 = ashr exact i64 %sext, 32
%232 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %231
%233 = bitcast %6* %232 to i64*
%lower_lane2.i.i = shl i64 %indvars.iv36, 32
%sext48 = add i64 %lower_lane2.i.i, 12884901888
%234 = ashr exact i64 %sext48, 32
%235 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %234
%236 = bitcast %6* %235 to i64*
%lower_lane3.i.i = shl i64 %indvars.iv36, 32
%sext49 = add i64 %lower_lane3.i.i, 17179869184
%237 = ashr exact i64 %sext49, 32
%238 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %237
%239 = bitcast %6* %238 to i64*
br label %while_head17.rv.i.i
while_head17.rv.i.i: ; preds = %while_head17.rv.i.i, %while_head11.divexit.rv.i.i
%240 = phi <4 x i64> [ %269, %while_head17.rv.i.i ], [ zeroinitializer, %while_head11.divexit.rv.i.i ]
%241 = phi <4 x i64> [ %270, %while_head17.rv.i.i ], [ %223, %while_head11.divexit.rv.i.i ]
%242 = phi <4 x i64> [ %271, %while_head17.rv.i.i ], [ zeroinitializer, %while_head11.divexit.rv.i.i ]
%243 = and <4 x i64> %241, %240
%244 = xor <4 x i64> %240, <i64 -1, i64 -1, i64 -1, i64 -1>
%245 = and <4 x i64> %241, %244
%246 = icmp ne <4 x i64> %245, zeroinitializer
%247 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %228, i32 1, <4 x i1> %246, <4 x i64> undef)
%extract57.i.i = extractelement <4 x i64> %247, i32 3
%extract55.i.i = extractelement <4 x i64> %247, i32 2
%extract53.i.i = extractelement <4 x i64> %247, i32 1
%extract51.i.i = extractelement <4 x i64> %247, i32 0
%248 = bitcast <4 x i64> %247 to <4 x double>
%249 = fsub <4 x double> %248, %dF_x_SIMD.i.i
%bc104.i.i = bitcast <4 x double> %249 to <4 x i64>
%250 = extractelement <4 x i64> %bc104.i.i, i32 0
%251 = cmpxchg i64* %230, i64 %extract51.i.i, i64 %250 seq_cst seq_cst
%252 = extractelement <4 x i64> %bc104.i.i, i32 1
%253 = cmpxchg i64* %233, i64 %extract53.i.i, i64 %252 seq_cst seq_cst
%254 = extractelement <4 x i64> %bc104.i.i, i32 2
%255 = cmpxchg i64* %236, i64 %extract55.i.i, i64 %254 seq_cst seq_cst
%256 = extractelement <4 x i64> %bc104.i.i, i32 3
%257 = cmpxchg i64* %239, i64 %extract57.i.i, i64 %256 seq_cst seq_cst
%258 = extractvalue { i64, i1 } %251, 1
%259 = sext i1 %258 to i64
%260 = insertelement <4 x i64> undef, i64 %259, i64 0
%261 = extractvalue { i64, i1 } %253, 1
%262 = sext i1 %261 to i64
%263 = insertelement <4 x i64> %260, i64 %262, i64 1
%264 = extractvalue { i64, i1 } %255, 1
%265 = sext i1 %264 to i64
%266 = insertelement <4 x i64> %263, i64 %265, i64 2
%267 = extractvalue { i64, i1 } %257, 1
%268 = sext i1 %267 to i64
%269 = insertelement <4 x i64> %266, i64 %268, i64 3
%270 = xor <4 x i64> %241, %243
%271 = or <4 x i64> %243, %242
%272 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %270, <4 x i64> %270)
%273 = icmp eq i32 %272, 0
br i1 %273, label %while_head17.rv.i.i, label %while_head17.divexit.rv.i.i
while_head17.divexit.rv.i.i: ; preds = %while_head17.rv.i.i
%274 = getelementptr inbounds [0 x %6], [0 x %6]* %226, <4 x i64> zeroinitializer, <4 x i64> %73, i32 1
%275 = bitcast <4 x double*> %274 to <4 x i64*>
%276 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %indvars.iv.next37, i32 1
%277 = bitcast double* %276 to i64*
%278 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %231, i32 1
%279 = bitcast double* %278 to i64*
%280 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %234, i32 1
%281 = bitcast double* %280 to i64*
%282 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %237, i32 1
%283 = bitcast double* %282 to i64*
br label %while_head23.rv.i.i
while_head23.rv.i.i: ; preds = %while_head23.rv.i.i, %while_head17.divexit.rv.i.i
%284 = phi <4 x i64> [ %313, %while_head23.rv.i.i ], [ zeroinitializer, %while_head17.divexit.rv.i.i ]
%285 = phi <4 x i64> [ %314, %while_head23.rv.i.i ], [ %271, %while_head17.divexit.rv.i.i ]
%286 = phi <4 x i64> [ %315, %while_head23.rv.i.i ], [ zeroinitializer, %while_head17.divexit.rv.i.i ]
%287 = and <4 x i64> %285, %284
%288 = xor <4 x i64> %284, <i64 -1, i64 -1, i64 -1, i64 -1>
%289 = and <4 x i64> %285, %288
%290 = icmp ne <4 x i64> %289, zeroinitializer
%291 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %275, i32 1, <4 x i1> %290, <4 x i64> undef)
%extract71.i.i = extractelement <4 x i64> %291, i32 3
%extract69.i.i = extractelement <4 x i64> %291, i32 2
%extract67.i.i = extractelement <4 x i64> %291, i32 1
%extract65.i.i = extractelement <4 x i64> %291, i32 0
%292 = bitcast <4 x i64> %291 to <4 x double>
%293 = fsub <4 x double> %292, %dF_y_SIMD.i.i
%bc108.i.i = bitcast <4 x double> %293 to <4 x i64>
%294 = extractelement <4 x i64> %bc108.i.i, i32 0
%295 = cmpxchg i64* %277, i64 %extract65.i.i, i64 %294 seq_cst seq_cst
%296 = extractelement <4 x i64> %bc108.i.i, i32 1
%297 = cmpxchg i64* %279, i64 %extract67.i.i, i64 %296 seq_cst seq_cst
%298 = extractelement <4 x i64> %bc108.i.i, i32 2
%299 = cmpxchg i64* %281, i64 %extract69.i.i, i64 %298 seq_cst seq_cst
%300 = extractelement <4 x i64> %bc108.i.i, i32 3
%301 = cmpxchg i64* %283, i64 %extract71.i.i, i64 %300 seq_cst seq_cst
%302 = extractvalue { i64, i1 } %295, 1
%303 = sext i1 %302 to i64
%304 = insertelement <4 x i64> undef, i64 %303, i64 0
%305 = extractvalue { i64, i1 } %297, 1
%306 = sext i1 %305 to i64
%307 = insertelement <4 x i64> %304, i64 %306, i64 1
%308 = extractvalue { i64, i1 } %299, 1
%309 = sext i1 %308 to i64
%310 = insertelement <4 x i64> %307, i64 %309, i64 2
%311 = extractvalue { i64, i1 } %301, 1
%312 = sext i1 %311 to i64
%313 = insertelement <4 x i64> %310, i64 %312, i64 3
%314 = xor <4 x i64> %285, %287
%315 = or <4 x i64> %287, %286
%316 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %314, <4 x i64> %314)
%317 = icmp eq i32 %316, 0
br i1 %317, label %while_head23.rv.i.i, label %while_head23.divexit.rv.i.i
while_head23.divexit.rv.i.i: ; preds = %while_head23.rv.i.i
%318 = getelementptr inbounds [0 x %6], [0 x %6]* %226, <4 x i64> zeroinitializer, <4 x i64> %73, i32 2
%319 = bitcast <4 x double*> %318 to <4 x i64*>
%320 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %indvars.iv.next37, i32 2
%321 = bitcast double* %320 to i64*
%322 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %231, i32 2
%323 = bitcast double* %322 to i64*
%324 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %234, i32 2
%325 = bitcast double* %324 to i64*
%326 = getelementptr inbounds [0 x %6], [0 x %6]* %226, i64 0, i64 %237, i32 2
%327 = bitcast double* %326 to i64*
br label %while_head29.rv.i.i
while_head29.rv.i.i: ; preds = %while_head29.rv.i.i, %while_head23.divexit.rv.i.i
%328 = phi <4 x i64> [ %355, %while_head29.rv.i.i ], [ zeroinitializer, %while_head23.divexit.rv.i.i ]
%329 = phi <4 x i64> [ %331, %while_head29.rv.i.i ], [ %315, %while_head23.divexit.rv.i.i ]
%330 = xor <4 x i64> %328, <i64 -1, i64 -1, i64 -1, i64 -1>
%331 = and <4 x i64> %329, %330
%332 = icmp ne <4 x i64> %331, zeroinitializer
%333 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %319, i32 1, <4 x i1> %332, <4 x i64> undef)
%extract85.i.i = extractelement <4 x i64> %333, i32 3
%extract83.i.i = extractelement <4 x i64> %333, i32 2
%extract81.i.i = extractelement <4 x i64> %333, i32 1
%extract79.i.i = extractelement <4 x i64> %333, i32 0
%334 = bitcast <4 x i64> %333 to <4 x double>
%335 = fsub <4 x double> %334, %dF_z_SIMD.i.i
%bc112.i.i = bitcast <4 x double> %335 to <4 x i64>
%336 = extractelement <4 x i64> %bc112.i.i, i32 0
%337 = cmpxchg i64* %321, i64 %extract79.i.i, i64 %336 seq_cst seq_cst
%338 = extractelement <4 x i64> %bc112.i.i, i32 1
%339 = cmpxchg i64* %323, i64 %extract81.i.i, i64 %338 seq_cst seq_cst
%340 = extractelement <4 x i64> %bc112.i.i, i32 2
%341 = cmpxchg i64* %325, i64 %extract83.i.i, i64 %340 seq_cst seq_cst
%342 = extractelement <4 x i64> %bc112.i.i, i32 3
%343 = cmpxchg i64* %327, i64 %extract85.i.i, i64 %342 seq_cst seq_cst
%344 = extractvalue { i64, i1 } %337, 1
%345 = sext i1 %344 to i64
%346 = insertelement <4 x i64> undef, i64 %345, i64 0
%347 = extractvalue { i64, i1 } %339, 1
%348 = sext i1 %347 to i64
%349 = insertelement <4 x i64> %346, i64 %348, i64 1
%350 = extractvalue { i64, i1 } %341, 1
%351 = sext i1 %350 to i64
%352 = insertelement <4 x i64> %349, i64 %351, i64 2
%353 = extractvalue { i64, i1 } %343, 1
%354 = sext i1 %353 to i64
%355 = insertelement <4 x i64> %352, i64 %354, i64 3
%356 = tail call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %328, <4 x i64> %329)
%357 = icmp eq i32 %356, 0
br i1 %357, label %while_head29.rv.i.i, label %while_head29.divexit.rv.i.i
while_head29.divexit.rv.i.i: ; preds = %while_head29.rv.i.i
%358 = sext <4 x i1> %65 to <4 x i32>
%359 = bitcast <4 x i32> %358 to <2 x i64>
%360 = bitcast <4 x i32> %63 to <2 x i64>
%361 = tail call i32 @llvm.x86.sse41.ptestz(<2 x i64> %359, <2 x i64> %360)
%362 = icmp eq i32 %361, 0
br i1 %362, label %may_unroll_step.rv.i.i, label %lambda_32651_vectorize.exit.i
lambda_32651_vectorize.exit.i: ; preds = %while_head29.divexit.rv.i.i
%indvars.iv.next35 = add i32 %indvars.iv34, 4
%363 = icmp slt i32 %indvars.iv.next35, %.
br i1 %363, label %body.i, label %exit.i.loopexit
exit.i.loopexit: ; preds = %lambda_32651_vectorize.exit.i
br label %exit.i
exit.i: ; preds = %exit.i.loopexit, %if_then5.i
%364 = getelementptr inbounds [0 x %4], [0 x %4]* %23, i64 0, i64 %indvars.iv42, i32 0, i32 0
%365 = load i32, i32* %364, align 4
%366 = icmp sgt i32 %365, 0
br i1 %366, label %if_then12.i.lr.ph, label %if_else11.i
if_then12.i.lr.ph: ; preds = %exit.i
%367 = getelementptr inbounds [0 x %4], [0 x %4]* %23, i64 0, i64 %indvars.iv42, i32 0, i32 2, i32 1
%368 = bitcast [0 x i8]** %367 to [0 x %3*]**
%369 = getelementptr inbounds [0 x %4], [0 x %4]* %23, i64 0, i64 %indvars.iv42, i32 0, i32 3, i32 1
%370 = bitcast [0 x i8]** %369 to [0 x i32]**
%wide.trip.count = zext i32 %365 to i64
br label %if_then12.i
body18.i: ; preds = %body18.i.lr.ph, %lambda_32928_vectorize.exit.i
%parallel_loop_phi20.i19 = phi i32 [ %begin.i, %body18.i.lr.ph ], [ %628, %lambda_32928_vectorize.exit.i ]
br i1 %50, label %if_then.rv.i.i.lr.ph, label %lambda_32928_vectorize.exit.i
if_then.rv.i.i.lr.ph: ; preds = %body18.i
%.splatinsert.i21.i = insertelement <4 x i32> undef, i32 %parallel_loop_phi20.i19, i32 0
%.splat.i22.i = shufflevector <4 x i32> %.splatinsert.i21.i, <4 x i32> undef, <4 x i32> zeroinitializer
%contiguous_add.i23.i = add <4 x i32> %.splat.i22.i, <i32 0, i32 1, i32 2, i32 3>
%371 = sext <4 x i32> %contiguous_add.i23.i to <4 x i64>
%372 = sext i32 %parallel_loop_phi20.i19 to i64
%i_32930_lane1.i.i = add i32 %parallel_loop_phi20.i19, 1
%373 = sext i32 %i_32930_lane1.i.i to i64
%i_32930_lane2.i.i = add i32 %parallel_loop_phi20.i19, 2
%374 = sext i32 %i_32930_lane2.i.i to i64
%i_32930_lane3.i.i = add i32 %parallel_loop_phi20.i19, 3
%375 = sext i32 %i_32930_lane3.i.i to i64
br label %if_then.rv.i.i
if_then.rv.i.i: ; preds = %if_then.rv.i.i.lr.ph, %while_head29.divexit.rv.i65.i
%indvars.iv38 = phi i64 [ %55, %if_then.rv.i.i.lr.ph ], [ %indvars.iv.next39, %while_head29.divexit.rv.i65.i ]
%376 = load [0 x %6]*, [0 x %6]** %27, align 8
%srov_gep.i28.i = getelementptr [0 x %6], [0 x %6]* %376, <4 x i64> zeroinitializer, <4 x i64> %371, i32 0
%377 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep.i28.i, i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x double> undef)
%srov_gep66.i.i = getelementptr [0 x %6], [0 x %6]* %376, <4 x i64> zeroinitializer, <4 x i64> %371, i32 1
%378 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep66.i.i, i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x double> undef)
%srov_gep67.i.i = getelementptr [0 x %6], [0 x %6]* %376, <4 x i64> zeroinitializer, <4 x i64> %371, i32 2
%379 = tail call <4 x double> @llvm.masked.gather.v4f64(<4 x double*> %srov_gep67.i.i, i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x double> undef)
%380 = load [0 x %6]*, [0 x %6]** %52, align 8
%.elt.i.i = getelementptr inbounds [0 x %6], [0 x %6]* %380, i64 0, i64 %indvars.iv38, i32 0
%.unpack.i.i = load double, double* %.elt.i.i, align 8
%.elt98.i.i = getelementptr inbounds [0 x %6], [0 x %6]* %380, i64 0, i64 %indvars.iv38, i32 1
%.unpack99.i.i = load double, double* %.elt98.i.i, align 8
%.elt100.i.i = getelementptr inbounds [0 x %6], [0 x %6]* %380, i64 0, i64 %indvars.iv38, i32 2
%.unpack101.i.i = load double, double* %.elt100.i.i, align 8
%.splatinsert1.i29.i = insertelement <4 x double> undef, double %.unpack101.i.i, i32 0
%.splat2.i30.i = shufflevector <4 x double> %.splatinsert1.i29.i, <4 x double> undef, <4 x i32> zeroinitializer
%dz_SIMD.i31.i = fsub <4 x double> %.splat2.i30.i, %379
%.splatinsert3.i32.i = insertelement <4 x double> undef, double %.unpack.i.i, i32 0
%.splat4.i33.i = shufflevector <4 x double> %.splatinsert3.i32.i, <4 x double> undef, <4 x i32> zeroinitializer
%dx_SIMD.i34.i = fsub <4 x double> %.splat4.i33.i, %377
%.splatinsert5.i.i = insertelement <4 x double> undef, double %.unpack99.i.i, i32 0
%.splat6.i.i = shufflevector <4 x double> %.splatinsert5.i.i, <4 x double> undef, <4 x i32> zeroinitializer
%dy_SIMD.i35.i = fsub <4 x double> %.splat6.i.i, %378
%381 = fmul <4 x double> %dz_SIMD.i31.i, %dz_SIMD.i31.i
%382 = fmul <4 x double> %dx_SIMD.i34.i, %dx_SIMD.i34.i
%383 = fmul <4 x double> %dy_SIMD.i35.i, %dy_SIMD.i35.i
%384 = fadd <4 x double> %382, %383
%squared_distance_SIMD.i36.i = fadd <4 x double> %384, %381
%385 = tail call <4 x double> @llvm.x86.avx.cmp.pd.256(<4 x double> %squared_distance_SIMD.i36.i, <4 x double> %.splat8.i.i, i8 1)
%386 = bitcast <4 x double> %385 to <4 x i64>
%387 = load [0 x %6]*, [0 x %6]** %29, align 8
%388 = fmul <4 x double> %squared_distance_SIMD.i36.i, %squared_distance_SIMD.i36.i
%389 = fmul <4 x double> %388, %388
%.op.i37.i = fdiv <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %389
%390 = tail call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, <4 x double> %.op.i37.i, <4 x double> %385)
%391 = fmul <4 x double> %.splat10.i.i, %390
%392 = fmul <4 x double> %390, %squared_distance_SIMD.i36.i
%393 = fmul <4 x double> %.splat12.i.i, %392
%394 = fsub <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>, %393
%395 = fmul <4 x double> %391, %394
%dF_x_SIMD.i38.i = fmul <4 x double> %dx_SIMD.i34.i, %395
%396 = getelementptr inbounds [0 x %6], [0 x %6]* %387, <4 x i64> zeroinitializer, <4 x i64> %371, i32 0
%397 = bitcast <4 x double*> %396 to <4 x i64*>
%398 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %372
%399 = bitcast %6* %398 to i64*
%400 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %373
%401 = bitcast %6* %400 to i64*
%402 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %374
%403 = bitcast %6* %402 to i64*
%404 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %375
%405 = bitcast %6* %404 to i64*
br label %while_head.rv.i39.i
while_head.rv.i39.i: ; preds = %while_head.rv.i39.i, %if_then.rv.i.i
%406 = phi <4 x i64> [ %435, %while_head.rv.i39.i ], [ zeroinitializer, %if_then.rv.i.i ]
%407 = phi <4 x i64> [ %436, %while_head.rv.i39.i ], [ %386, %if_then.rv.i.i ]
%408 = phi <4 x i64> [ %437, %while_head.rv.i39.i ], [ zeroinitializer, %if_then.rv.i.i ]
%409 = and <4 x i64> %407, %406
%410 = xor <4 x i64> %406, <i64 -1, i64 -1, i64 -1, i64 -1>
%411 = and <4 x i64> %407, %410
%412 = icmp ne <4 x i64> %411, zeroinitializer
%413 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %397, i32 1, <4 x i1> %412, <4 x i64> undef)
%extract18.i.i = extractelement <4 x i64> %413, i32 3
%extract16.i.i = extractelement <4 x i64> %413, i32 2
%extract14.i.i = extractelement <4 x i64> %413, i32 1
%extract.i40.i = extractelement <4 x i64> %413, i32 0
%414 = bitcast <4 x i64> %413 to <4 x double>
%415 = fadd <4 x double> %dF_x_SIMD.i38.i, %414
%bc.i41.i = bitcast <4 x double> %415 to <4 x i64>
%416 = extractelement <4 x i64> %bc.i41.i, i32 0
%417 = cmpxchg i64* %399, i64 %extract.i40.i, i64 %416 seq_cst seq_cst
%418 = extractelement <4 x i64> %bc.i41.i, i32 1
%419 = cmpxchg i64* %401, i64 %extract14.i.i, i64 %418 seq_cst seq_cst
%420 = extractelement <4 x i64> %bc.i41.i, i32 2
%421 = cmpxchg i64* %403, i64 %extract16.i.i, i64 %420 seq_cst seq_cst
%422 = extractelement <4 x i64> %bc.i41.i, i32 3
%423 = cmpxchg i64* %405, i64 %extract18.i.i, i64 %422 seq_cst seq_cst
%424 = extractvalue { i64, i1 } %417, 1
%425 = sext i1 %424 to i64
%426 = insertelement <4 x i64> undef, i64 %425, i64 0
%427 = extractvalue { i64, i1 } %419, 1
%428 = sext i1 %427 to i64
%429 = insertelement <4 x i64> %426, i64 %428, i64 1
%430 = extractvalue { i64, i1 } %421, 1
%431 = sext i1 %430 to i64
%432 = insertelement <4 x i64> %429, i64 %431, i64 2
%433 = extractvalue { i64, i1 } %423, 1
%434 = sext i1 %433 to i64
%435 = insertelement <4 x i64> %432, i64 %434, i64 3
%436 = xor <4 x i64> %407, %409
%437 = or <4 x i64> %409, %408
%438 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %436, <4 x i64> %436)
%439 = icmp eq i32 %438, 0
br i1 %439, label %while_head.rv.i39.i, label %while_head.divexit.rv.i45.i
while_head.divexit.rv.i45.i: ; preds = %while_head.rv.i39.i
%dF_y_SIMD.i46.i = fmul <4 x double> %dy_SIMD.i35.i, %395
%440 = getelementptr inbounds [0 x %6], [0 x %6]* %387, <4 x i64> zeroinitializer, <4 x i64> %371, i32 1
%441 = bitcast <4 x double*> %440 to <4 x i64*>
%442 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %372, i32 1
%443 = bitcast double* %442 to i64*
%444 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %373, i32 1
%445 = bitcast double* %444 to i64*
%446 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %374, i32 1
%447 = bitcast double* %446 to i64*
%448 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %375, i32 1
%449 = bitcast double* %448 to i64*
br label %while_head5.rv.i47.i
while_head5.rv.i47.i: ; preds = %while_head5.rv.i47.i, %while_head.divexit.rv.i45.i
%450 = phi <4 x i64> [ %479, %while_head5.rv.i47.i ], [ zeroinitializer, %while_head.divexit.rv.i45.i ]
%451 = phi <4 x i64> [ %480, %while_head5.rv.i47.i ], [ %437, %while_head.divexit.rv.i45.i ]
%452 = phi <4 x i64> [ %481, %while_head5.rv.i47.i ], [ zeroinitializer, %while_head.divexit.rv.i45.i ]
%453 = and <4 x i64> %451, %450
%454 = xor <4 x i64> %450, <i64 -1, i64 -1, i64 -1, i64 -1>
%455 = and <4 x i64> %451, %454
%456 = icmp ne <4 x i64> %455, zeroinitializer
%457 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %441, i32 1, <4 x i1> %456, <4 x i64> undef)
%extract30.i.i = extractelement <4 x i64> %457, i32 3
%extract28.i.i = extractelement <4 x i64> %457, i32 2
%extract26.i.i = extractelement <4 x i64> %457, i32 1
%extract24.i.i = extractelement <4 x i64> %457, i32 0
%458 = bitcast <4 x i64> %457 to <4 x double>
%459 = fadd <4 x double> %dF_y_SIMD.i46.i, %458
%bc105.i48.i = bitcast <4 x double> %459 to <4 x i64>
%460 = extractelement <4 x i64> %bc105.i48.i, i32 0
%461 = cmpxchg i64* %443, i64 %extract24.i.i, i64 %460 seq_cst seq_cst
%462 = extractelement <4 x i64> %bc105.i48.i, i32 1
%463 = cmpxchg i64* %445, i64 %extract26.i.i, i64 %462 seq_cst seq_cst
%464 = extractelement <4 x i64> %bc105.i48.i, i32 2
%465 = cmpxchg i64* %447, i64 %extract28.i.i, i64 %464 seq_cst seq_cst
%466 = extractelement <4 x i64> %bc105.i48.i, i32 3
%467 = cmpxchg i64* %449, i64 %extract30.i.i, i64 %466 seq_cst seq_cst
%468 = extractvalue { i64, i1 } %461, 1
%469 = sext i1 %468 to i64
%470 = insertelement <4 x i64> undef, i64 %469, i64 0
%471 = extractvalue { i64, i1 } %463, 1
%472 = sext i1 %471 to i64
%473 = insertelement <4 x i64> %470, i64 %472, i64 1
%474 = extractvalue { i64, i1 } %465, 1
%475 = sext i1 %474 to i64
%476 = insertelement <4 x i64> %473, i64 %475, i64 2
%477 = extractvalue { i64, i1 } %467, 1
%478 = sext i1 %477 to i64
%479 = insertelement <4 x i64> %476, i64 %478, i64 3
%480 = xor <4 x i64> %451, %453
%481 = or <4 x i64> %453, %452
%482 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %480, <4 x i64> %480)
%483 = icmp eq i32 %482, 0
br i1 %483, label %while_head5.rv.i47.i, label %while_head5.divexit.rv.i52.i
while_head5.divexit.rv.i52.i: ; preds = %while_head5.rv.i47.i
%dF_z_SIMD.i53.i = fmul <4 x double> %dz_SIMD.i31.i, %395
%484 = getelementptr inbounds [0 x %6], [0 x %6]* %387, <4 x i64> zeroinitializer, <4 x i64> %371, i32 2
%485 = bitcast <4 x double*> %484 to <4 x i64*>
%486 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %372, i32 2
%487 = bitcast double* %486 to i64*
%488 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %373, i32 2
%489 = bitcast double* %488 to i64*
%490 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %374, i32 2
%491 = bitcast double* %490 to i64*
%492 = getelementptr inbounds [0 x %6], [0 x %6]* %387, i64 0, i64 %375, i32 2
%493 = bitcast double* %492 to i64*
br label %while_head11.rv.i54.i
while_head11.rv.i54.i: ; preds = %while_head11.rv.i54.i, %while_head5.divexit.rv.i52.i
%494 = phi <4 x i64> [ %523, %while_head11.rv.i54.i ], [ zeroinitializer, %while_head5.divexit.rv.i52.i ]
%495 = phi <4 x i64> [ %524, %while_head11.rv.i54.i ], [ %481, %while_head5.divexit.rv.i52.i ]
%496 = phi <4 x i64> [ %525, %while_head11.rv.i54.i ], [ zeroinitializer, %while_head5.divexit.rv.i52.i ]
%497 = and <4 x i64> %495, %494
%498 = xor <4 x i64> %494, <i64 -1, i64 -1, i64 -1, i64 -1>
%499 = and <4 x i64> %495, %498
%500 = icmp ne <4 x i64> %499, zeroinitializer
%501 = tail call <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*> %485, i32 1, <4 x i1> %500, <4 x i64> undef)
%extract44.i.i = extractelement <4 x i64> %501, i32 3
%extract42.i.i = extractelement <4 x i64> %501, i32 2
%extract40.i.i = extractelement <4 x i64> %501, i32 1
%extract38.i.i = extractelement <4 x i64> %501, i32 0
%502 = bitcast <4 x i64> %501 to <4 x double>
%503 = fadd <4 x double> %dF_z_SIMD.i53.i, %502
%bc109.i55.i = bitcast <4 x double> %503 to <4 x i64>
%504 = extractelement <4 x i64> %bc109.i55.i, i32 0
%505 = cmpxchg i64* %487, i64 %extract38.i.i, i64 %504 seq_cst seq_cst
%506 = extractelement <4 x i64> %bc109.i55.i, i32 1
%507 = cmpxchg i64* %489, i64 %extract40.i.i, i64 %506 seq_cst seq_cst
%508 = extractelement <4 x i64> %bc109.i55.i, i32 2
%509 = cmpxchg i64* %491, i64 %extract42.i.i, i64 %508 seq_cst seq_cst
%510 = extractelement <4 x i64> %bc109.i55.i, i32 3
%511 = cmpxchg i64* %493, i64 %extract44.i.i, i64 %510 seq_cst seq_cst
%512 = extractvalue { i64, i1 } %505, 1
%513 = sext i1 %512 to i64
%514 = insertelement <4 x i64> undef, i64 %513, i64 0
%515 = extractvalue { i64, i1 } %507, 1
%516 = sext i1 %515 to i64
%517 = insertelement <4 x i64> %514, i64 %516, i64 1
%518 = extractvalue { i64, i1 } %509, 1
%519 = sext i1 %518 to i64
%520 = insertelement <4 x i64> %517, i64 %519, i64 2
%521 = extractvalue { i64, i1 } %511, 1
%522 = sext i1 %521 to i64
%523 = insertelement <4 x i64> %520, i64 %522, i64 3
%524 = xor <4 x i64> %495, %497
%525 = or <4 x i64> %497, %496
%526 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %524, <4 x i64> %524)
%527 = icmp eq i32 %526, 0
br i1 %527, label %while_head11.rv.i54.i, label %while_head11.divexit.rv.i59.i
while_head11.divexit.rv.i59.i: ; preds = %while_head11.rv.i54.i
%528 = load [0 x %6]*, [0 x %6]** %54, align 8
%529 = getelementptr inbounds [0 x %6], [0 x %6]* %528, i64 0, i64 %indvars.iv38
%530 = bitcast %6* %529 to i64*
br label %while_head17.rv.i60.i
while_head17.rv.i60.i: ; preds = %cont_block.i.i, %while_head11.divexit.rv.i59.i
%531 = phi <4 x i64> [ %573, %cont_block.i.i ], [ zeroinitializer, %while_head11.divexit.rv.i59.i ]
%532 = phi <4 x i64> [ %574, %cont_block.i.i ], [ %525, %while_head11.divexit.rv.i59.i ]
%533 = phi <4 x i64> [ %575, %cont_block.i.i ], [ zeroinitializer, %while_head11.divexit.rv.i59.i ]
%534 = and <4 x i64> %532, %531
%535 = tail call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %531, <4 x i64> %532)
%536 = icmp eq i32 %535, 0
br i1 %536, label %mem_block.i.i, label %cont_block.i.i
while_head17.divexit.rv.i61.i: ; preds = %cont_block.i.i
%537 = getelementptr inbounds [0 x %6], [0 x %6]* %528, i64 0, i64 %indvars.iv38, i32 1
%538 = bitcast double* %537 to i64*
br label %while_head23.rv.i62.i
while_head23.rv.i62.i: ; preds = %cont_block67.i.i, %while_head17.divexit.rv.i61.i
%539 = phi <4 x i64> [ %599, %cont_block67.i.i ], [ zeroinitializer, %while_head17.divexit.rv.i61.i ]
%540 = phi <4 x i64> [ %600, %cont_block67.i.i ], [ %575, %while_head17.divexit.rv.i61.i ]
%541 = phi <4 x i64> [ %601, %cont_block67.i.i ], [ zeroinitializer, %while_head17.divexit.rv.i61.i ]
%542 = and <4 x i64> %540, %539
%543 = tail call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %539, <4 x i64> %540)
%544 = icmp eq i32 %543, 0
br i1 %544, label %mem_block66.i.i, label %cont_block67.i.i
while_head23.divexit.rv.i63.i: ; preds = %cont_block67.i.i
%545 = getelementptr inbounds [0 x %6], [0 x %6]* %528, i64 0, i64 %indvars.iv38, i32 2
%546 = bitcast double* %545 to i64*
br label %while_head29.rv.i64.i
while_head29.rv.i64.i: ; preds = %cont_block84.i.i, %while_head23.divexit.rv.i63.i
%547 = phi <4 x i64> [ %625, %cont_block84.i.i ], [ zeroinitializer, %while_head23.divexit.rv.i63.i ]
%548 = phi <4 x i64> [ %627, %cont_block84.i.i ], [ %601, %while_head23.divexit.rv.i63.i ]
%549 = tail call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %547, <4 x i64> %548)
%550 = icmp eq i32 %549, 0
br i1 %550, label %mem_block83.i.i, label %cont_block84.i.i
while_head29.divexit.rv.i65.i: ; preds = %cont_block84.i.i
%indvars.iv.next39 = add nsw i64 %indvars.iv38, 1
%551 = icmp slt i64 %indvars.iv.next39, %56
br i1 %551, label %if_then.rv.i.i, label %lambda_32928_vectorize.exit.i.loopexit
mem_block.i.i: ; preds = %while_head17.rv.i60.i
%scal_mask_mem.i.i = load i64, i64* %530, align 1
br label %cont_block.i.i
cont_block.i.i: ; preds = %mem_block.i.i, %while_head17.rv.i60.i
%scal_mask_mem_phi.i.i = phi i64 [ %scal_mask_mem.i.i, %mem_block.i.i ], [ undef, %while_head17.rv.i60.i ]
%.splatinsert53.i.i = insertelement <4 x i64> undef, i64 %scal_mask_mem_phi.i.i, i32 0
%.splat54.i.i = shufflevector <4 x i64> %.splatinsert53.i.i, <4 x i64> undef, <4 x i32> zeroinitializer
%552 = bitcast <4 x i64> %.splat54.i.i to <4 x double>
%553 = fsub <4 x double> %552, %dF_x_SIMD.i38.i
%bc113.i66.i = bitcast <4 x double> %553 to <4 x i64>
%554 = extractelement <4 x i64> %bc113.i66.i, i32 0
%555 = cmpxchg i64* %530, i64 %scal_mask_mem_phi.i.i, i64 %554 seq_cst seq_cst
%556 = extractelement <4 x i64> %bc113.i66.i, i32 1
%557 = cmpxchg i64* %530, i64 %scal_mask_mem_phi.i.i, i64 %556 seq_cst seq_cst
%558 = extractelement <4 x i64> %bc113.i66.i, i32 2
%559 = cmpxchg i64* %530, i64 %scal_mask_mem_phi.i.i, i64 %558 seq_cst seq_cst
%560 = extractelement <4 x i64> %bc113.i66.i, i32 3
%561 = cmpxchg i64* %530, i64 %scal_mask_mem_phi.i.i, i64 %560 seq_cst seq_cst
%562 = extractvalue { i64, i1 } %555, 1
%563 = sext i1 %562 to i64
%564 = insertelement <4 x i64> undef, i64 %563, i64 0
%565 = extractvalue { i64, i1 } %557, 1
%566 = sext i1 %565 to i64
%567 = insertelement <4 x i64> %564, i64 %566, i64 1
%568 = extractvalue { i64, i1 } %559, 1
%569 = sext i1 %568 to i64
%570 = insertelement <4 x i64> %567, i64 %569, i64 2
%571 = extractvalue { i64, i1 } %561, 1
%572 = sext i1 %571 to i64
%573 = insertelement <4 x i64> %570, i64 %572, i64 3
%574 = xor <4 x i64> %532, %534
%575 = or <4 x i64> %534, %533
%576 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %574, <4 x i64> %574)
%577 = icmp eq i32 %576, 0
br i1 %577, label %while_head17.rv.i60.i, label %while_head17.divexit.rv.i61.i
mem_block66.i.i: ; preds = %while_head23.rv.i62.i
%scal_mask_mem68.i.i = load i64, i64* %538, align 1
br label %cont_block67.i.i
cont_block67.i.i: ; preds = %mem_block66.i.i, %while_head23.rv.i62.i
%scal_mask_mem_phi69.i.i = phi i64 [ %scal_mask_mem68.i.i, %mem_block66.i.i ], [ undef, %while_head23.rv.i62.i ]
%.splatinsert70.i.i = insertelement <4 x i64> undef, i64 %scal_mask_mem_phi69.i.i, i32 0
%.splat71.i.i = shufflevector <4 x i64> %.splatinsert70.i.i, <4 x i64> undef, <4 x i32> zeroinitializer
%578 = bitcast <4 x i64> %.splat71.i.i to <4 x double>
%579 = fsub <4 x double> %578, %dF_y_SIMD.i46.i
%bc117.i.i = bitcast <4 x double> %579 to <4 x i64>
%580 = extractelement <4 x i64> %bc117.i.i, i32 0
%581 = cmpxchg i64* %538, i64 %scal_mask_mem_phi69.i.i, i64 %580 seq_cst seq_cst
%582 = extractelement <4 x i64> %bc117.i.i, i32 1
%583 = cmpxchg i64* %538, i64 %scal_mask_mem_phi69.i.i, i64 %582 seq_cst seq_cst
%584 = extractelement <4 x i64> %bc117.i.i, i32 2
%585 = cmpxchg i64* %538, i64 %scal_mask_mem_phi69.i.i, i64 %584 seq_cst seq_cst
%586 = extractelement <4 x i64> %bc117.i.i, i32 3
%587 = cmpxchg i64* %538, i64 %scal_mask_mem_phi69.i.i, i64 %586 seq_cst seq_cst
%588 = extractvalue { i64, i1 } %581, 1
%589 = sext i1 %588 to i64
%590 = insertelement <4 x i64> undef, i64 %589, i64 0
%591 = extractvalue { i64, i1 } %583, 1
%592 = sext i1 %591 to i64
%593 = insertelement <4 x i64> %590, i64 %592, i64 1
%594 = extractvalue { i64, i1 } %585, 1
%595 = sext i1 %594 to i64
%596 = insertelement <4 x i64> %593, i64 %595, i64 2
%597 = extractvalue { i64, i1 } %587, 1
%598 = sext i1 %597 to i64
%599 = insertelement <4 x i64> %596, i64 %598, i64 3
%600 = xor <4 x i64> %540, %542
%601 = or <4 x i64> %542, %541
%602 = tail call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %600, <4 x i64> %600)
%603 = icmp eq i32 %602, 0
br i1 %603, label %while_head23.rv.i62.i, label %while_head23.divexit.rv.i63.i
mem_block83.i.i: ; preds = %while_head29.rv.i64.i
%scal_mask_mem85.i.i = load i64, i64* %546, align 1
br label %cont_block84.i.i
cont_block84.i.i: ; preds = %mem_block83.i.i, %while_head29.rv.i64.i
%scal_mask_mem_phi86.i.i = phi i64 [ %scal_mask_mem85.i.i, %mem_block83.i.i ], [ undef, %while_head29.rv.i64.i ]
%.splatinsert87.i.i = insertelement <4 x i64> undef, i64 %scal_mask_mem_phi86.i.i, i32 0
%.splat88.i.i = shufflevector <4 x i64> %.splatinsert87.i.i, <4 x i64> undef, <4 x i32> zeroinitializer
%604 = bitcast <4 x i64> %.splat88.i.i to <4 x double>
%605 = fsub <4 x double> %604, %dF_z_SIMD.i53.i
%bc121.i.i = bitcast <4 x double> %605 to <4 x i64>
%606 = extractelement <4 x i64> %bc121.i.i, i32 0
%607 = cmpxchg i64* %546, i64 %scal_mask_mem_phi86.i.i, i64 %606 seq_cst seq_cst
%608 = extractelement <4 x i64> %bc121.i.i, i32 1
%609 = cmpxchg i64* %546, i64 %scal_mask_mem_phi86.i.i, i64 %608 seq_cst seq_cst
%610 = extractelement <4 x i64> %bc121.i.i, i32 2
%611 = cmpxchg i64* %546, i64 %scal_mask_mem_phi86.i.i, i64 %610 seq_cst seq_cst
%612 = extractelement <4 x i64> %bc121.i.i, i32 3
%613 = cmpxchg i64* %546, i64 %scal_mask_mem_phi86.i.i, i64 %612 seq_cst seq_cst
%614 = extractvalue { i64, i1 } %607, 1
%615 = sext i1 %614 to i64
%616 = insertelement <4 x i64> undef, i64 %615, i64 0
%617 = extractvalue { i64, i1 } %609, 1
%618 = sext i1 %617 to i64
%619 = insertelement <4 x i64> %616, i64 %618, i64 1
%620 = extractvalue { i64, i1 } %611, 1
%621 = sext i1 %620 to i64
%622 = insertelement <4 x i64> %619, i64 %621, i64 2
%623 = extractvalue { i64, i1 } %613, 1
%624 = sext i1 %623 to i64
%625 = insertelement <4 x i64> %622, i64 %624, i64 3
%626 = xor <4 x i64> %547, <i64 -1, i64 -1, i64 -1, i64 -1>
%627 = and <4 x i64> %548, %626
br i1 %550, label %while_head29.rv.i64.i, label %while_head29.divexit.rv.i65.i
lambda_32928_vectorize.exit.i.loopexit: ; preds = %while_head29.divexit.rv.i65.i
br label %lambda_32928_vectorize.exit.i
lambda_32928_vectorize.exit.i: ; preds = %lambda_32928_vectorize.exit.i.loopexit, %body18.i
%628 = add i32 %parallel_loop_phi20.i19, 4
%629 = icmp slt i32 %628, %.
br i1 %629, label %body18.i, label %exit19.i.loopexit
exit19.i.loopexit: ; preds = %lambda_32928_vectorize.exit.i
br label %exit19.i
exit19.i: ; preds = %exit19.i.loopexit, %if_then12.i
%indvars.iv.next41 = add nuw nsw i64 %indvars.iv40, 1
%exitcond = icmp eq i64 %indvars.iv.next41, %wide.trip.count
br i1 %exitcond, label %if_else11.i.loopexit, label %if_then12.i
lambda_32590.exit.loopexit: ; preds = %if_else4.i
br label %lambda_32590.exit
lambda_32590.exit: ; preds = %lambda_32590.exit.loopexit, %body
%630 = add nsw i32 %parallel_loop_phi23, 1
%exitcond47 = icmp eq i32 %630, %2
br i1 %exitcond47, label %exit.loopexit, label %body
exit.loopexit: ; preds = %lambda_32590.exit
br label %exit
exit: ; preds = %exit.loopexit, %lambda_32590_parallel_for
ret void
}
declare void @anydsl_parallel_for(i32, i32, i32, i8*, i8*) local_unnamed_addr
; Function Attrs: nounwind readonly
declare <4 x double> @llvm.masked.gather.v4f64(<4 x double*>, i32, <4 x i1>, <4 x double>) #1
; Function Attrs: nounwind readonly
declare <4 x i64> @llvm.masked.gather.v4i64(<4 x i64*>, i32, <4 x i1>, <4 x i64>) #1
; Function Attrs: nounwind readnone
declare <4 x double> @llvm.x86.avx.cmp.pd.256(<4 x double>, <4 x double>, i8) #2
; Function Attrs: nounwind readnone
declare i32 @llvm.x86.sse41.ptestz(<2 x i64>, <2 x i64>) #2
; Function Attrs: nounwind readnone
declare <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double>, <4 x double>, <4 x double>) #2
; Function Attrs: nounwind readnone
declare i32 @llvm.x86.avx.ptestz.256(<4 x i64>, <4 x i64>) #2
; Function Attrs: nounwind readnone
declare i32 @llvm.x86.avx.ptestc.256(<4 x i64>, <4 x i64>) #2
attributes #0 = { nounwind }
attributes #1 = { nounwind readonly }
attributes #2 = { nounwind readnone }