Index: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp =================================================================== --- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -3272,8 +3272,10 @@ // execute VF scalar calls, and then gather the result into the vector return // value. unsigned ScalarCallCost = TTI.getCallInstrCost(F, ScalarRetTy, ScalarTys); - if (VF == 1) + if (VF == 1) { + NeedToScalarize = true; return ScalarCallCost; + } // Compute corresponding vector type for return value and arguments. Type *RetTy = ToVectorTy(ScalarRetTy, VF); Index: llvm/test/Transforms/LoopVectorize/scalarizeVFne.ll =================================================================== --- /dev/null +++ llvm/test/Transforms/LoopVectorize/scalarizeVFne.ll @@ -0,0 +1,28 @@ +; RUN: opt < %s -passes=loop-vectorize -S 2>&1 | FileCheck %s + +target triple = "powerpc64le-unknown-linux-gnu" +%type = type { [3 x double] } + +define void @foo(double* %A, double* %C, %type* %B) #0 { +; CHECK-NOT: Vector function shape is missing from the database +entry: + br label %for.body + +for.body: + %i = phi i64 [ %inc, %for.body ], [ 0, %entry ] + %dummyload2 = load double, double* %A, align 8 + %arrayidx.i24 = getelementptr inbounds %type, %type* %B, i64 %i, i32 0, i32 0 + %_15 = load double, double* %arrayidx.i24, align 8 + %call10 = tail call fast double @atan(double %_15) #1 + %inc = add i64 %i, 1 + %cmp = icmp ugt i64 1000, %inc + br i1 %cmp, label %for.body, label %for.end + +for.end: + ret void +} + +declare double @atan(double) local_unnamed_addr +declare <2 x double> @__atand2_massv(<2 x double>) #1 +attributes #0 = { "target-cpu"="pwr9" } +attributes #1 = { nounwind readnone "vector-function-abi-variant"="_ZGV_LLVM_N2v_atan(__atand2_massv)" }