From 457e8954798b707c73ec76e0819760aaf65d0ffb Mon Sep 17 00:00:00 2001 From: Jay Foad Date: Mon, 17 Jun 2024 13:42:03 +0100 Subject: [CodeGen] Do not include $noreg in any regmask operands. NFCI. (#95775) Saying that a call preserves $noreg seems weird and required a workaround in MachineLICM. --- llvm/lib/CodeGen/MachineLICM.cpp | 3 +-- llvm/lib/CodeGen/RegUsageInfoCollector.cpp | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'llvm/lib/CodeGen') diff --git a/llvm/lib/CodeGen/MachineLICM.cpp b/llvm/lib/CodeGen/MachineLICM.cpp index 1c76d72..d81fe54f 100644 --- a/llvm/lib/CodeGen/MachineLICM.cpp +++ b/llvm/lib/CodeGen/MachineLICM.cpp @@ -440,8 +440,7 @@ static void applyBitsNotInRegMaskToRegUnitsMask(const TargetRegisterInfo &TRI, break; // Check if we have a valid PhysReg that is set in the mask. - // FIXME: We shouldn't have to check for PhysReg. - if (PhysReg && ((Word >> Bit) & 1)) { + if ((Word >> Bit) & 1) { for (MCRegUnitIterator RUI(PhysReg, &TRI); RUI.isValid(); ++RUI) ClobberedRUs.reset(*RUI); } diff --git a/llvm/lib/CodeGen/RegUsageInfoCollector.cpp b/llvm/lib/CodeGen/RegUsageInfoCollector.cpp index 6657cf3..ca5e0b4 100644 --- a/llvm/lib/CodeGen/RegUsageInfoCollector.cpp +++ b/llvm/lib/CodeGen/RegUsageInfoCollector.cpp @@ -142,6 +142,9 @@ bool RegUsageInfoCollector::runOnMachineFunction(MachineFunction &MF) { RegMask[Reg / 32] &= ~(1u << Reg % 32); }; + // Don't include $noreg in any regmasks. + SetRegAsDefined(MCRegister::NoRegister); + // Some targets can clobber registers "inside" a call, typically in // linker-generated code. for (const MCPhysReg Reg : TRI->getIntraCallClobberedRegs(&MF)) -- cgit v1.1