[PATCH] D92762: [clang][AArch64][SVE] Avoid going through memory for coerced VLST arguments

Joe Ellis via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 4 05:10:18 PST 2021


joechrisellis marked an inline comment as done.
joechrisellis added inline comments.


================
Comment at: clang/lib/CodeGen/CGCall.cpp:2671-2673
+      // See if this is a VLST coerced to a VLAT at the function boundary and
+      // the types match up. If so, use llvm.experimental.vector.extract to
+      // perform the conversion.
----------------
c-rhodes wrote:
> this is slightly confusing since the coercion done in TargetInfo is from fixed -> scalable so VLSTs are represented as scalable vectors in functions args/return, yet this is casting back to fixed in the function prolog using `llvm.experimental.vector.extract` like you mention in the commit message, could this comment clarify that?
I am a bit unsure what you mean in this comment, but I have tried to reword the comment to be a bit clearer about what's happening. Let me know if you still think it needs clarifying. 😄 


================
Comment at: clang/lib/CodeGen/CGCall.cpp:2674
+      // perform the conversion.
+      if (Ty->getAs<VectorType>()) {
+        auto *Coerced = Fn->getArg(FirstIRArg);
----------------
c-rhodes wrote:
> Do we want to check `VT->getVectorKind() == VectorType::SveFixedLengthDataVector` and `isa<llvm::ScalableVectorType>(Coerced->getType());`?
Do we not also want to account for predicate vectors here?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D92762/new/

https://reviews.llvm.org/D92762



More information about the cfe-commits mailing list