Skip to content

Commit f48403b

Browse files
committed
Revert "Recommit [RISCV] RISCV vector calling convention (2/2) (#79096) (#87736)"
This reverts commit 91dd844.
1 parent ce6ad93 commit f48403b

File tree

7 files changed

+84
-522
lines changed

7 files changed

+84
-522
lines changed

llvm/lib/CodeGen/TargetLoweringBase.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1862,16 +1862,8 @@ void llvm::GetReturnInfo(CallingConv::ID CC, Type *ReturnType,
18621862
else if (attr.hasRetAttr(Attribute::ZExt))
18631863
Flags.setZExt();
18641864

1865-
for (unsigned i = 0; i < NumParts; ++i) {
1866-
ISD::ArgFlagsTy OutFlags = Flags;
1867-
if (NumParts > 1 && i == 0)
1868-
OutFlags.setSplit();
1869-
else if (i == NumParts - 1 && i != 0)
1870-
OutFlags.setSplitEnd();
1871-
1872-
Outs.push_back(
1873-
ISD::OutputArg(OutFlags, PartVT, VT, /*isfixed=*/true, 0, 0));
1874-
}
1865+
for (unsigned i = 0; i < NumParts; ++i)
1866+
Outs.push_back(ISD::OutputArg(Flags, PartVT, VT, /*isfixed=*/true, 0, 0));
18751867
}
18761868
}
18771869

llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,14 @@ struct RISCVOutgoingValueAssigner : public CallLowering::OutgoingValueAssigner {
3434
// Whether this is assigning args for a return.
3535
bool IsRet;
3636

37-
RVVArgDispatcher &RVVDispatcher;
37+
// true if assignArg has been called for a mask argument, false otherwise.
38+
bool AssignedFirstMaskArg = false;
3839

3940
public:
4041
RISCVOutgoingValueAssigner(
41-
RISCVTargetLowering::RISCVCCAssignFn *RISCVAssignFn_, bool IsRet,
42-
RVVArgDispatcher &RVVDispatcher)
42+
RISCVTargetLowering::RISCVCCAssignFn *RISCVAssignFn_, bool IsRet)
4343
: CallLowering::OutgoingValueAssigner(nullptr),
44-
RISCVAssignFn(RISCVAssignFn_), IsRet(IsRet),
45-
RVVDispatcher(RVVDispatcher) {}
44+
RISCVAssignFn(RISCVAssignFn_), IsRet(IsRet) {}
4645

4746
bool assignArg(unsigned ValNo, EVT OrigVT, MVT ValVT, MVT LocVT,
4847
CCValAssign::LocInfo LocInfo,
@@ -52,9 +51,16 @@ struct RISCVOutgoingValueAssigner : public CallLowering::OutgoingValueAssigner {
5251
const DataLayout &DL = MF.getDataLayout();
5352
const RISCVSubtarget &Subtarget = MF.getSubtarget<RISCVSubtarget>();
5453

54+
std::optional<unsigned> FirstMaskArgument;
55+
if (Subtarget.hasVInstructions() && !AssignedFirstMaskArg &&
56+
ValVT.isVector() && ValVT.getVectorElementType() == MVT::i1) {
57+
FirstMaskArgument = ValNo;
58+
AssignedFirstMaskArg = true;
59+
}
60+
5561
if (RISCVAssignFn(DL, Subtarget.getTargetABI(), ValNo, ValVT, LocVT,
5662
LocInfo, Flags, State, Info.IsFixed, IsRet, Info.Ty,
57-
*Subtarget.getTargetLowering(), RVVDispatcher))
63+
*Subtarget.getTargetLowering(), FirstMaskArgument))
5864
return true;
5965

6066
StackSize = State.getStackSize();
@@ -180,15 +186,14 @@ struct RISCVIncomingValueAssigner : public CallLowering::IncomingValueAssigner {
180186
// Whether this is assigning args from a return.
181187
bool IsRet;
182188

183-
RVVArgDispatcher &RVVDispatcher;
189+
// true if assignArg has been called for a mask argument, false otherwise.
190+
bool AssignedFirstMaskArg = false;
184191

185192
public:
186193
RISCVIncomingValueAssigner(
187-
RISCVTargetLowering::RISCVCCAssignFn *RISCVAssignFn_, bool IsRet,
188-
RVVArgDispatcher &RVVDispatcher)
194+
RISCVTargetLowering::RISCVCCAssignFn *RISCVAssignFn_, bool IsRet)
189195
: CallLowering::IncomingValueAssigner(nullptr),
190-
RISCVAssignFn(RISCVAssignFn_), IsRet(IsRet),
191-
RVVDispatcher(RVVDispatcher) {}
196+
RISCVAssignFn(RISCVAssignFn_), IsRet(IsRet) {}
192197

193198
bool assignArg(unsigned ValNo, EVT OrigVT, MVT ValVT, MVT LocVT,
194199
CCValAssign::LocInfo LocInfo,
@@ -201,9 +206,16 @@ struct RISCVIncomingValueAssigner : public CallLowering::IncomingValueAssigner {
201206
if (LocVT.isScalableVector())
202207
MF.getInfo<RISCVMachineFunctionInfo>()->setIsVectorCall();
203208

209+
std::optional<unsigned> FirstMaskArgument;
210+
if (Subtarget.hasVInstructions() && !AssignedFirstMaskArg &&
211+
ValVT.isVector() && ValVT.getVectorElementType() == MVT::i1) {
212+
FirstMaskArgument = ValNo;
213+
AssignedFirstMaskArg = true;
214+
}
215+
204216
if (RISCVAssignFn(DL, Subtarget.getTargetABI(), ValNo, ValVT, LocVT,
205217
LocInfo, Flags, State, /*IsFixed=*/true, IsRet, Info.Ty,
206-
*Subtarget.getTargetLowering(), RVVDispatcher))
218+
*Subtarget.getTargetLowering(), FirstMaskArgument))
207219
return true;
208220

209221
StackSize = State.getStackSize();
@@ -411,11 +423,9 @@ bool RISCVCallLowering::lowerReturnVal(MachineIRBuilder &MIRBuilder,
411423
SmallVector<ArgInfo, 4> SplitRetInfos;
412424
splitToValueTypes(OrigRetInfo, SplitRetInfos, DL, CC);
413425

414-
RVVArgDispatcher Dispatcher{&MF, getTLI<RISCVTargetLowering>(),
415-
ArrayRef(F.getReturnType())};
416426
RISCVOutgoingValueAssigner Assigner(
417427
CC == CallingConv::Fast ? RISCV::CC_RISCV_FastCC : RISCV::CC_RISCV,
418-
/*IsRet=*/true, Dispatcher);
428+
/*IsRet=*/true);
419429
RISCVOutgoingValueHandler Handler(MIRBuilder, MF.getRegInfo(), Ret);
420430
return determineAndHandleAssignments(Handler, Assigner, SplitRetInfos,
421431
MIRBuilder, CC, F.isVarArg());
@@ -524,7 +534,6 @@ bool RISCVCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,
524534
CallingConv::ID CC = F.getCallingConv();
525535

526536
SmallVector<ArgInfo, 32> SplitArgInfos;
527-
SmallVector<Type *, 4> TypeList;
528537
unsigned Index = 0;
529538
for (auto &Arg : F.args()) {
530539
// Construct the ArgInfo object from destination register and argument type.
@@ -536,16 +545,12 @@ bool RISCVCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,
536545
// correspondingly and appended to SplitArgInfos.
537546
splitToValueTypes(AInfo, SplitArgInfos, DL, CC);
538547

539-
TypeList.push_back(Arg.getType());
540-
541548
++Index;
542549
}
543550

544-
RVVArgDispatcher Dispatcher{&MF, getTLI<RISCVTargetLowering>(),
545-
ArrayRef(TypeList)};
546551
RISCVIncomingValueAssigner Assigner(
547552
CC == CallingConv::Fast ? RISCV::CC_RISCV_FastCC : RISCV::CC_RISCV,
548-
/*IsRet=*/false, Dispatcher);
553+
/*IsRet=*/false);
549554
RISCVFormalArgHandler Handler(MIRBuilder, MF.getRegInfo());
550555

551556
SmallVector<CCValAssign, 16> ArgLocs;
@@ -583,13 +588,11 @@ bool RISCVCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
583588

584589
SmallVector<ArgInfo, 32> SplitArgInfos;
585590
SmallVector<ISD::OutputArg, 8> Outs;
586-
SmallVector<Type *, 4> TypeList;
587591
for (auto &AInfo : Info.OrigArgs) {
588592
// Handle any required unmerging of split value types from a given VReg into
589593
// physical registers. ArgInfo objects are constructed correspondingly and
590594
// appended to SplitArgInfos.
591595
splitToValueTypes(AInfo, SplitArgInfos, DL, CC);
592-
TypeList.push_back(AInfo.Ty);
593596
}
594597

595598
// TODO: Support tail calls.
@@ -607,11 +610,9 @@ bool RISCVCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
607610
const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
608611
Call.addRegMask(TRI->getCallPreservedMask(MF, Info.CallConv));
609612

610-
RVVArgDispatcher ArgDispatcher{&MF, getTLI<RISCVTargetLowering>(),
611-
ArrayRef(TypeList)};
612613
RISCVOutgoingValueAssigner ArgAssigner(
613614
CC == CallingConv::Fast ? RISCV::CC_RISCV_FastCC : RISCV::CC_RISCV,
614-
/*IsRet=*/false, ArgDispatcher);
615+
/*IsRet=*/false);
615616
RISCVOutgoingValueHandler ArgHandler(MIRBuilder, MF.getRegInfo(), Call);
616617
if (!determineAndHandleAssignments(ArgHandler, ArgAssigner, SplitArgInfos,
617618
MIRBuilder, CC, Info.IsVarArg))
@@ -639,11 +640,9 @@ bool RISCVCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
639640
SmallVector<ArgInfo, 4> SplitRetInfos;
640641
splitToValueTypes(Info.OrigRet, SplitRetInfos, DL, CC);
641642

642-
RVVArgDispatcher RetDispatcher{&MF, getTLI<RISCVTargetLowering>(),
643-
ArrayRef(F.getReturnType())};
644643
RISCVIncomingValueAssigner RetAssigner(
645644
CC == CallingConv::Fast ? RISCV::CC_RISCV_FastCC : RISCV::CC_RISCV,
646-
/*IsRet=*/true, RetDispatcher);
645+
/*IsRet=*/true);
647646
RISCVCallReturnHandler RetHandler(MIRBuilder, MF.getRegInfo(), Call);
648647
if (!determineAndHandleAssignments(RetHandler, RetAssigner, SplitRetInfos,
649648
MIRBuilder, CC, Info.IsVarArg))

0 commit comments

Comments
 (0)