diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp | 23 | ||||
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Utils.cpp | 21 |
2 files changed, 21 insertions, 23 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp b/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp index c59b200298e..69ad59ade08 100644 --- a/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp +++ b/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp @@ -48,29 +48,6 @@ void InstructionSelect::getAnalysisUsage(AnalysisUsage &AU) const { MachineFunctionPass::getAnalysisUsage(AU); } -/// Check whether an instruction \p MI is dead: it only defines dead virtual -/// registers, and doesn't have other side effects. -static bool isTriviallyDead(const MachineInstr &MI, - const MachineRegisterInfo &MRI) { - // If we can move an instruction, we can remove it. Otherwise, it has - // a side-effect of some sort. - bool SawStore = false; - if (!MI.isSafeToMove(/*AA=*/nullptr, SawStore)) - return false; - - // Instructions without side-effects are dead iff they only define dead vregs. - for (auto &MO : MI.operands()) { - if (!MO.isReg() || !MO.isDef()) - continue; - - unsigned Reg = MO.getReg(); - // Keep Debug uses live: we don't want to have an effect on debug info. - if (TargetRegisterInfo::isPhysicalRegister(Reg) || !MRI.use_empty(Reg)) - return false; - } - return true; -} - bool InstructionSelect::runOnMachineFunction(MachineFunction &MF) { const MachineRegisterInfo &MRI = MF.getRegInfo(); diff --git a/llvm/lib/CodeGen/GlobalISel/Utils.cpp b/llvm/lib/CodeGen/GlobalISel/Utils.cpp index 282b6789eb4..2e2f519ab2b 100644 --- a/llvm/lib/CodeGen/GlobalISel/Utils.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Utils.cpp @@ -47,6 +47,27 @@ unsigned llvm::constrainOperandRegClass( return Reg; } +bool llvm::isTriviallyDead(const MachineInstr &MI, + const MachineRegisterInfo &MRI) { + // If we can move an instruction, we can remove it. Otherwise, it has + // a side-effect of some sort. + bool SawStore = false; + if (!MI.isSafeToMove(/*AA=*/nullptr, SawStore)) + return false; + + // Instructions without side-effects are dead iff they only define dead vregs. + for (auto &MO : MI.operands()) { + if (!MO.isReg() || !MO.isDef()) + continue; + + unsigned Reg = MO.getReg(); + // Keep Debug uses live: we don't want to have an effect on debug info. + if (TargetRegisterInfo::isPhysicalRegister(Reg) || !MRI.use_empty(Reg)) + return false; + } + return true; +} + void llvm::reportGISelFailure(MachineFunction &MF, const TargetPassConfig &TPC, MachineOptimizationRemarkEmitter &MORE, MachineOptimizationRemarkMissed &R) { |