[llvm] [CodeGen][MRI] Introduce synthetic register classes (PR #86006)

Christudasan Devadasan via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 24 21:35:56 PDT 2024


================
@@ -650,6 +654,31 @@ void MachineRegisterInfo::setCalleeSavedRegs(ArrayRef<MCPhysReg> CSRs) {
   IsUpdatedCSRsInitialized = true;
 }
 
+void MachineRegisterInfo::initializeRegClassSyntheticInfo() {
+  const TargetRegisterInfo *TRI = getTargetRegisterInfo();
+
+  RegClassSyntheticInfo.resize(TRI->getNumRegClasses());
+  for (const TargetRegisterClass *RC : TRI->regclasses()) {
+    if (RC->isSynthetic())
+      RegClassSyntheticInfo.set(RC->getID());
+  }
+}
+
+void MachineRegisterInfo::changeSyntheticInfoForRC(
+    const TargetRegisterClass *RC, bool Value) {
+  assert(RC->isSynthetic() && "Regclasses can be enabled/disabled dynamically "
+                              "only if marked synthetic.");
+
+  if (Value)
+    RegClassSyntheticInfo.set(RC->getID());
+  else
+    RegClassSyntheticInfo.reset(RC->getID());
+}
+
+bool MachineRegisterInfo::isEnabled(const TargetRegisterClass *RC) const {
+  return !RegClassSyntheticInfo.test(RC->getID());
+}
----------------
cdevadas wrote:

This patch sets up the whole machinery for the new field Synthetic that I'm introducing.
The test llvm/unittests/CodeGen/MachineInstrTest.cpp covers it. The helper function `isEnabled`, is used in the regclass queries in MRI and TRI interfaces in this patch itself.

https://github.com/llvm/llvm-project/pull/86006


More information about the llvm-commits mailing list