[llvm] CodeGen: Add RegisterClass by HwMode (PR #158269)
Sergei Barannikov via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 15 08:20:41 PDT 2025
================
@@ -197,6 +197,38 @@ void CodeGenTarget::ReadLegalValueTypes() const {
LegalValueTypes.erase(llvm::unique(LegalValueTypes), LegalValueTypes.end());
}
+const Record *CodeGenTarget::getInitValueAsRegClass(
+ const Init *V, bool AssumeRegClassByHwModeIsDefault) const {
+ const Record *RegClassLike = getInitValueAsRegClassLike(V);
+ if (!RegClassLike || RegClassLike->isSubClassOf("RegisterClass"))
+ return RegClassLike;
+
+ // FIXME: We should figure out the hwmode and dispatch. But this interface
+ // is broken, we should be returning a register class. The expected uses
+ // will use the same RegBanks in all modes.
+ if (AssumeRegClassByHwModeIsDefault &&
+ RegClassLike->isSubClassOf("RegClassByHwMode")) {
+ const HwModeSelect &ModeSelect = getHwModes().getHwModeSelect(RegClassLike);
+ if (ModeSelect.Items.empty())
+ return nullptr;
+ return ModeSelect.Items.front().second;
+ }
+
+ return nullptr;
+}
+
+const Record *CodeGenTarget::getInitValueAsRegClassLike(const Init *V) const {
+ const DefInit *VDefInit = dyn_cast<DefInit>(V);
+ if (!VDefInit)
+ return nullptr;
+
+ const Record *RegClass = VDefInit->getDef();
+ if (RegClass->isSubClassOf("RegisterOperand"))
+ RegClass = RegClass->getValueAsDef("RegClass");
----------------
s-barannikov wrote:
```suggestion
return RegClass->getValueAsDef("RegClass");
```
https://github.com/llvm/llvm-project/pull/158269
More information about the llvm-commits
mailing list