The error check prevents SIMD.
abs
eliminates the error check (yes, the compiler is smart enough), so that version is SIMD.
vector.body: ; preds = %vector.body, %vector.ph
%index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
%38 = getelementptr inbounds double, double* %33, i64 %index
%39 = bitcast double* %38 to <8 x double>*
%wide.load = load <8 x double>, <8 x double>* %39, align 8
%40 = getelementptr inbounds double, double* %38, i64 8
%41 = bitcast double* %40 to <8 x double>*
%wide.load31 = load <8 x double>, <8 x double>* %41, align 8
%42 = getelementptr inbounds double, double* %38, i64 16
%43 = bitcast double* %42 to <8 x double>*
%wide.load32 = load <8 x double>, <8 x double>* %43, align 8
%44 = getelementptr inbounds double, double* %38, i64 24
%45 = bitcast double* %44 to <8 x double>*
%wide.load33 = load <8 x double>, <8 x double>* %45, align 8
%46 = call <8 x double> @llvm.fabs.v8f64(<8 x double> %wide.load)
%47 = call <8 x double> @llvm.fabs.v8f64(<8 x double> %wide.load31)
%48 = call <8 x double> @llvm.fabs.v8f64(<8 x double> %wide.load32)
%49 = call <8 x double> @llvm.fabs.v8f64(<8 x double> %wide.load33)
%50 = call <8 x double> @llvm.sqrt.v8f64(<8 x double> %46)
%51 = call <8 x double> @llvm.sqrt.v8f64(<8 x double> %47)
%52 = call <8 x double> @llvm.sqrt.v8f64(<8 x double> %48)
%53 = call <8 x double> @llvm.sqrt.v8f64(<8 x double> %49)
%54 = getelementptr inbounds double, double* %36, i64 %index
%55 = bitcast double* %54 to <8 x double>*
store <8 x double> %50, <8 x double>* %55, align 8
%56 = getelementptr inbounds double, double* %54, i64 8
%57 = bitcast double* %56 to <8 x double>*
store <8 x double> %51, <8 x double>* %57, align 8
%58 = getelementptr inbounds double, double* %54, i64 16
%59 = bitcast double* %58 to <8 x double>*
store <8 x double> %52, <8 x double>* %59, align 8
%60 = getelementptr inbounds double, double* %54, i64 24
%61 = bitcast double* %60 to <8 x double>*
store <8 x double> %53, <8 x double>* %61, align 8
%index.next = add i64 %index, 32
%62 = icmp eq i64 %index.next, %n.vec
br i1 %62, label %middle.block, label %vector.body
This is what we get with @. y = sqrt(abs(x))
.