[llvm] [CodeGen] Correctly handle non-standard cases in RemoveLoadsIntoFakeUses (PR #111551)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 15 12:11:54 PDT 2024
================
@@ -143,13 +152,15 @@ bool RemoveLoadsIntoFakeUses::runOnMachineFunction(MachineFunction &MF) {
// that register.
if (!RegFakeUses.empty()) {
for (const MachineOperand &MO : MI.operands()) {
- if (MO.isReg() && MO.isDef()) {
- Register Reg = MO.getReg();
- assert(Reg.isPhysical() &&
- "VReg seen in function with NoVRegs set?");
- for (MCRegUnit Unit : TRI->regunits(Reg))
- RegFakeUses.erase(Unit);
- }
+ if (!MO.isReg())
+ continue;
+ Register Reg = MO.getReg();
+ // We clear RegFakeUses for this register and all subregisters,
+ // because any such FAKE_USE encountered prior is no longer relevant
+ // for later encountered loads.
+ for (MachineInstr *&FakeUse : reverse(RegFakeUses))
+ if (!TRI->regsOverlap(Reg, FakeUse->getOperand(0).getReg()))
----------------
arsenm wrote:
FakeUse->readsRegister
https://github.com/llvm/llvm-project/pull/111551
More information about the llvm-commits
mailing list