aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/TargetRegisterInfo.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@sifive.com>2024-03-22 11:15:45 -0700
committerGitHub <noreply@github.com>2024-03-22 11:15:45 -0700
commitfb329f18445cb33d242cc500ca618d03674b22ad (patch)
treee7f6c6a359c4619faa2cec11bc344e6f4c1bef4f /llvm/lib/CodeGen/TargetRegisterInfo.cpp
parentcd8286a667d568c4319b09baa63ba899e3101a19 (diff)
downloadllvm-fb329f18445cb33d242cc500ca618d03674b22ad.zip
llvm-fb329f18445cb33d242cc500ca618d03674b22ad.tar.gz
llvm-fb329f18445cb33d242cc500ca618d03674b22ad.tar.bz2
[Target] Move SubRegIdxRanges from MCSubtargetInfo to TargetInfo. (#86245)
I'm planning to add HwMode support to SubRegIdxRanges for RISC-V GPR pairs. The MC layer is currently unaware of the HwMode for registers and I'd like to keep it that way. This information is not used by the MC layer so I think it is safe to move it.
Diffstat (limited to 'llvm/lib/CodeGen/TargetRegisterInfo.cpp')
-rw-r--r--llvm/lib/CodeGen/TargetRegisterInfo.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/llvm/lib/CodeGen/TargetRegisterInfo.cpp b/llvm/lib/CodeGen/TargetRegisterInfo.cpp
index c9503fc..4120c74 100644
--- a/llvm/lib/CodeGen/TargetRegisterInfo.cpp
+++ b/llvm/lib/CodeGen/TargetRegisterInfo.cpp
@@ -50,20 +50,16 @@ static cl::opt<unsigned>
"high compile time cost in global splitting."),
cl::init(5000));
-TargetRegisterInfo::TargetRegisterInfo(const TargetRegisterInfoDesc *ID,
- regclass_iterator RCB, regclass_iterator RCE,
- const char *const *SRINames,
- const LaneBitmask *SRILaneMasks,
- LaneBitmask SRICoveringLanes,
- const RegClassInfo *const RCIs,
- const MVT::SimpleValueType *const RCVTLists,
- unsigned Mode)
- : InfoDesc(ID), SubRegIndexNames(SRINames),
- SubRegIndexLaneMasks(SRILaneMasks),
- RegClassBegin(RCB), RegClassEnd(RCE),
- CoveringLanes(SRICoveringLanes),
- RCInfos(RCIs), RCVTLists(RCVTLists), HwMode(Mode) {
-}
+TargetRegisterInfo::TargetRegisterInfo(
+ const TargetRegisterInfoDesc *ID, regclass_iterator RCB,
+ regclass_iterator RCE, const char *const *SRINames,
+ const SubRegCoveredBits *SubIdxRanges, const LaneBitmask *SRILaneMasks,
+ LaneBitmask SRICoveringLanes, const RegClassInfo *const RCIs,
+ const MVT::SimpleValueType *const RCVTLists, unsigned Mode)
+ : InfoDesc(ID), SubRegIndexNames(SRINames), SubRegIdxRanges(SubIdxRanges),
+ SubRegIndexLaneMasks(SRILaneMasks), RegClassBegin(RCB), RegClassEnd(RCE),
+ CoveringLanes(SRICoveringLanes), RCInfos(RCIs), RCVTLists(RCVTLists),
+ HwMode(Mode) {}
TargetRegisterInfo::~TargetRegisterInfo() = default;
@@ -596,6 +592,18 @@ bool TargetRegisterInfo::getCoveringSubRegIndexes(
return BestIdx;
}
+unsigned TargetRegisterInfo::getSubRegIdxSize(unsigned Idx) const {
+ assert(Idx && Idx < getNumSubRegIndices() &&
+ "This is not a subregister index");
+ return SubRegIdxRanges[Idx].Size;
+}
+
+unsigned TargetRegisterInfo::getSubRegIdxOffset(unsigned Idx) const {
+ assert(Idx && Idx < getNumSubRegIndices() &&
+ "This is not a subregister index");
+ return SubRegIdxRanges[Idx].Offset;
+}
+
Register
TargetRegisterInfo::lookThruCopyLike(Register SrcReg,
const MachineRegisterInfo *MRI) const {