[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:29:58 PDT 2024
================
@@ -409,7 +409,7 @@ bool RISCVCallLowering::lowerReturnVal(MachineIRBuilder &MIRBuilder,
splitToValueTypes(OrigRetInfo, SplitRetInfos, DL, CC);
RVVArgDispatcher Dispatcher{&MF, getTLI<RISCVTargetLowering>(),
- F.getReturnType()};
+ ArrayRef(F.getReturnType())};
----------------
4vtomat wrote:
Yeah we do, since `ArrayRef` is also a template class, it can't deduct the type, you can try a simple example:
```
1 template <typename T>
2 class abc {
3 public:
4 abc(T);
5 };
6
7 template <typename T>
8 void test(abc<T> a);
9
10 int main()
11 {
12 test(1);
13 }
```
the code can't compile since `void test(abc<T> a)` doesn't know that 1 can be implicitly constructed, it only know that 1's type is not equal to `abc` lol~
https://github.com/llvm/llvm-project/pull/87736
More information about the llvm-commits
mailing list