[llvm] [RISCV] Handle RVV return type in calling convention correctly (PR #87736)
Brandon Wu via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 8 01:08:01 PDT 2024
================
@@ -21077,7 +21079,82 @@ unsigned RISCVTargetLowering::getMinimumJumpTableEntries() const {
return Subtarget.getMinimumJumpTableEntries();
}
-void RVVArgDispatcher::constructArgInfos(ArrayRef<Type *> TypeList) {
+// Handle single arg such as return value.
+template <typename Arg>
+void RVVArgDispatcher::constructArgInfos(ArrayRef<Arg> ArgList) {
+ // This lambda determines whether an array of types are constructed by
+ // homogeneous vector types.
+ auto isHomogeneousScalableVectorType = [&](ArrayRef<Arg> ArgList) {
+ // First, extract the first element in the argument type.
+ MVT FirstArgRegType;
+ unsigned FirstArgElements = 0;
+ typename SmallVectorImpl<Arg>::const_iterator It;
+ for (It = ArgList.begin(); It != ArgList.end(); ++It) {
+ FirstArgRegType = It->VT;
+ ++FirstArgElements;
+ if (!It->Flags.isSplit() || It->Flags.isSplitEnd())
+ break;
+ }
+ ++It;
----------------
4vtomat wrote:
Sure, it's a good idea to always check it, thanks!
https://github.com/llvm/llvm-project/pull/87736
More information about the llvm-commits
mailing list