[PATCH] D78958: [SVE] Update EmitSVEPredicateCast to take a ScalableVectorType
Christopher Tetreault via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 27 12:55:50 PDT 2020
ctetreau created this revision.
Herald added subscribers: cfe-commits, psnobl, rkruppe, kristof.beyls, tschuett.
Herald added a reviewer: rengolin.
Herald added a reviewer: efriedma.
Herald added a project: clang.
Removes usage of VectorType::getNumElements identified by test located
at CodeGen/aarch64-sve-intrinsics/acle_sve_abs.c. Since the type is an
SVE predicate vector, it makes sense to specialize the code for scalable
vectors only.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D78958
Files:
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/CodeGen/CodeGenFunction.h
Index: clang/lib/CodeGen/CodeGenFunction.h
===================================================================
--- clang/lib/CodeGen/CodeGenFunction.h
+++ clang/lib/CodeGen/CodeGenFunction.h
@@ -3914,7 +3914,8 @@
llvm::ScalableVectorType *getSVEType(const SVETypeFlags &TypeFlags);
llvm::ScalableVectorType *getSVEPredType(SVETypeFlags TypeFlags);
llvm::Value *EmitSVEDupX(llvm::Value *Scalar);
- llvm::Value *EmitSVEPredicateCast(llvm::Value *Pred, llvm::VectorType *VTy);
+ llvm::Value *EmitSVEPredicateCast(llvm::Value *Pred,
+ llvm::ScalableVectorType *VTy);
llvm::Value *EmitSVEGatherLoad(SVETypeFlags TypeFlags,
llvm::SmallVectorImpl<llvm::Value *> &Ops,
unsigned IntID);
Index: clang/lib/CodeGen/CGBuiltin.cpp
===================================================================
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -7609,15 +7609,14 @@
// Reinterpret the input predicate so that it can be used to correctly isolate
// the elements of the specified datatype.
Value *CodeGenFunction::EmitSVEPredicateCast(Value *Pred,
- llvm::VectorType *VTy) {
- llvm::VectorType *RTy = llvm::VectorType::get(
- IntegerType::get(getLLVMContext(), 1), VTy->getElementCount());
+ llvm::ScalableVectorType *VTy) {
+ auto *RTy = llvm::VectorType::get(IntegerType::get(getLLVMContext(), 1), VTy);
if (Pred->getType() == RTy)
return Pred;
unsigned IntID;
llvm::Type *IntrinsicTy;
- switch (VTy->getNumElements()) {
+ switch (VTy->getMinNumElements()) {
default:
llvm_unreachable("unsupported element count!");
case 2:
@@ -7948,7 +7947,7 @@
// Predicate results must be converted to svbool_t.
if (auto PredTy = dyn_cast<llvm::VectorType>(Call->getType()))
if (PredTy->getScalarType()->isIntegerTy(1))
- Call = EmitSVEPredicateCast(Call, cast<llvm::VectorType>(Ty));
+ Call = EmitSVEPredicateCast(Call, cast<llvm::ScalableVectorType>(Ty));
return Call;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78958.260415.patch
Type: text/x-patch
Size: 2159 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200427/d07272d6/attachment.bin>
More information about the cfe-commits
mailing list