[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