From 4e7b015a4a724782bf37284c3c74f2540cf8f3e1 Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Mon, 23 Sep 2013 14:54:39 +0000 Subject: Revert "LoopVectorizer: Only allow vectorization of intrinsics." Revert 191122 - with extra checks we are allowed to vectorize math library function calls. Standard library indentifiers are reserved names so functions with external linkage must not overrided them. However, functions with internal linkage can. Therefore, we can vectorize calls to math library functions with a check for external linkage and matching signature. This matches what we do during SelectionDAG building. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191206 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/LoopVectorize/intrinsic.ll | 73 ++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 20 deletions(-) (limited to 'test/Transforms') diff --git a/test/Transforms/LoopVectorize/intrinsic.ll b/test/Transforms/LoopVectorize/intrinsic.ll index 99d6646..c3d570c 100644 --- a/test/Transforms/LoopVectorize/intrinsic.ll +++ b/test/Transforms/LoopVectorize/intrinsic.ll @@ -1018,7 +1018,7 @@ for.body: ; preds = %entry, %for.body %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] %arrayidx = getelementptr inbounds float* %x, i64 %indvars.iv %0 = load float* %arrayidx, align 4 - %call = tail call float @llvm.fabs.f32(float %0) nounwind readnone + %call = tail call float @fabsf(float %0) nounwind readnone store float %call, float* %arrayidx, align 4 %indvars.iv.next = add i64 %indvars.iv, 1 %lftr.wideiv = trunc i64 %indvars.iv.next to i32 @@ -1029,31 +1029,64 @@ for.end: ; preds = %for.body ret void } +declare float @fabsf(float) nounwind readnone + declare double @llvm.pow.f64(double, double) nounwind readnone -;CHECK: @not_intrin -;CHECK: @round -;CHECK-NOT: @round -;CHECK: ret -define void @not_intrin(i32* nocapture %A) nounwind ssp uwtable { - br label %1 - -;