[PATCH] D92761: [clang][AArch64][SVE] Avoid going through memory for VLAT <-> VLST casts
Cullen Rhodes via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 15 10:36:04 PST 2020
c-rhodes accepted this revision.
c-rhodes added a comment.
This revision is now accepted and ready to land.
Left a couple of nits but mostly LGTM, cheers
================
Comment at: clang/lib/CodeGen/CGExprScalar.cpp:2025-2051
// Perform VLAT <-> VLST bitcast through memory.
if ((isa<llvm::FixedVectorType>(SrcTy) &&
isa<llvm::ScalableVectorType>(DstTy)) ||
(isa<llvm::ScalableVectorType>(SrcTy) &&
isa<llvm::FixedVectorType>(DstTy))) {
if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {
// Call expressions can't have a scalar return unless the return type
----------------
nit: it might be worth adding a comment stating we need to keep this around for casting between predicates, until we figure out a better way of doing that. The insert/extract intrinsics you've added require the element type to be identical and we represent fixed predicates with i8, whereas scalable predicates are represented as `<vscale x 16 x i1>`.
================
Comment at: llvm/include/llvm/IR/IRBuilder.h:925
}
+ CallInst *CreateExtractVector(Type *DstType, Value *SrcVec, Value *Idx,
----------------
`/// Create a call to the experimental.vector.extract intrinsic.`
================
Comment at: llvm/include/llvm/IR/IRBuilder.h:932
+ }
+
+ CallInst *CreateInsertVector(Type *DstType, Value *SrcVec, Value *SubVec,
----------------
`/// Create a call to the experimental.vector.insert intrinsic.`
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92761/new/
https://reviews.llvm.org/D92761
More information about the llvm-commits
mailing list