[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