[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