[llvm] [MachineOutliner] Preserve regmasks in calls to outlined functions (PR #120940)

Zhaoxuan Jiang via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 1 06:53:20 PST 2025


================
@@ -1153,6 +1160,23 @@ bool MachineOutliner::outline(
             MI->getMF()->eraseCallSiteInfo(MI);
         }
 
+        if (!RegMasks.empty()) {
+          if (RegMasks.size() == 1) {
+            CallInst->addOperand(
+                MachineOperand::CreateRegMask(*RegMasks.begin()));
+          } else {
+            uint32_t *RegMask = MF->allocateRegMask();
+            unsigned NumRegs =
+                MF->getSubtarget().getRegisterInfo()->getNumRegs();
+            unsigned Size = MachineOperand::getRegMaskSize(NumRegs);
+            memset(RegMask, UINT32_MAX, Size * sizeof(RegMask[0]));
----------------
nocchijiang wrote:

These lines are copied from `MachineFunction::allocateRegMask`. Therefore, the most straightforward approach is to extend it while maintaining its behavior unchanged for existing users with default parameter values. If you have any better ideas, please let me know.

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


More information about the llvm-commits mailing list