| //===- SISpillUtils.cpp - SI spill helper functions -----------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "SISpillUtils.h" |
| #include "llvm/ADT/BitVector.h" |
| #include "llvm/CodeGen/MachineFrameInfo.h" |
| #include "llvm/CodeGen/MachineFunction.h" |
| |
| using namespace llvm; |
| |
| void llvm::clearDebugInfoForSpillFIs(MachineFrameInfo &MFI, |
| MachineBasicBlock &MBB, |
| const BitVector &SpillFIs) { |
| // FIXME: The dead frame indices are replaced with a null register from the |
| // debug value instructions. We should instead update it with the correct |
| // register value. But not sure the register value alone is adequate to lower |
| // the DIExpression. It should be worked out later. |
| for (MachineInstr &MI : MBB) { |
| if (!MI.isDebugValue()) |
| continue; |
| |
| for (MachineOperand &Op : MI.debug_operands()) { |
| if (Op.isFI() && !MFI.isFixedObjectIndex(Op.getIndex()) && |
| SpillFIs[Op.getIndex()]) { |
| Op.ChangeToRegister(Register(), /*isDef=*/false); |
| } |
| } |
| } |
| } |