[clang] [llvm] [RISCV][GISel] Add support for quadruple-precision floating point ABIs (PR #195166)
Gábor Spaits via cfe-commits
cfe-commits at lists.llvm.org
Fri May 1 14:49:38 PDT 2026
================
@@ -102,12 +103,19 @@ struct RISCVOutgoingValueHandler : public CallLowering::OutgoingValueHandler {
assert(VA.getValNo() == VAHi.getValNo() &&
"Values belong to different arguments");
- assert(VA.getLocVT() == MVT::i32 && VAHi.getLocVT() == MVT::i32 &&
- VA.getValVT() == MVT::f64 && VAHi.getValVT() == MVT::f64 &&
- "unexpected custom value");
-
- Register NewRegs[] = {MRI.createGenericVirtualRegister(LLT::scalar(32)),
- MRI.createGenericVirtualRegister(LLT::scalar(32))};
+ uint32_t RegWidth = 0;
+ if (VA.getLocVT() == MVT::i32 && VAHi.getLocVT() == MVT::i32 &&
+ VA.getValVT() == MVT::f64 && VAHi.getValVT() == MVT::f64)
+ RegWidth = 32;
+ else if (VA.getLocVT() == MVT::i64 && VAHi.getLocVT() == MVT::i64 &&
+ VA.getValVT() == MVT::f128 && VAHi.getValVT() == MVT::f128)
+ RegWidth = 64;
+ else
+ llvm_unreachable("Unexpected custom value");
+
+ Register NewRegs[] = {
+ MRI.createGenericVirtualRegister(LLT::scalar(RegWidth)),
+ MRI.createGenericVirtualRegister(LLT::scalar(RegWidth))};
MIRBuilder.buildUnmerge(NewRegs, Arg.Regs[0]);
----------------
spaits wrote:
Later on the `Register`s crated here will be used when calling `assignValueToAddress` and `assignValueToReg`. So I think this array should stay `Register[]`.
https://github.com/llvm/llvm-project/pull/195166
More information about the cfe-commits
mailing list