diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-09-02 21:17:18 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-12-08 17:34:50 +0000 |
commit | 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e (patch) | |
tree | 62f873df87c7c675557a179e0c4c83fe9f3087bc /contrib/llvm-project/llvm/lib/CodeGen/MachineInstrBundle.cpp | |
parent | cf037972ea8863e2bab7461d77345367d2c1e054 (diff) | |
parent | 7fa27ce4a07f19b07799a767fc29416f3b625afb (diff) |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/CodeGen/MachineInstrBundle.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/CodeGen/MachineInstrBundle.cpp | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/contrib/llvm-project/llvm/lib/CodeGen/MachineInstrBundle.cpp b/contrib/llvm-project/llvm/lib/CodeGen/MachineInstrBundle.cpp index 0c059a145ca4..b9db34f7be95 100644 --- a/contrib/llvm-project/llvm/lib/CodeGen/MachineInstrBundle.cpp +++ b/contrib/llvm-project/llvm/lib/CodeGen/MachineInstrBundle.cpp @@ -58,8 +58,7 @@ bool UnpackMachineBundles::runOnMachineFunction(MachineFunction &MF) { if (MI->isBundle()) { while (++MII != MIE && MII->isBundledWithPred()) { MII->unbundleFromPred(); - for (unsigned i = 0, e = MII->getNumOperands(); i != e; ++i) { - MachineOperand &MO = MII->getOperand(i); + for (MachineOperand &MO : MII->operands()) { if (MO.isReg() && MO.isInternalRead()) MO.setIsInternalRead(false); } @@ -149,8 +148,7 @@ void llvm::finalizeBundle(MachineBasicBlock &MBB, if (MII->isDebugInstr()) continue; - for (unsigned i = 0, e = MII->getNumOperands(); i != e; ++i) { - MachineOperand &MO = MII->getOperand(i); + for (MachineOperand &MO : MII->operands()) { if (!MO.isReg()) continue; if (MO.isDef()) { @@ -199,8 +197,7 @@ void llvm::finalizeBundle(MachineBasicBlock &MBB, } if (!MO.isDead() && Reg.isPhysical()) { - for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { - unsigned SubReg = *SubRegs; + for (MCPhysReg SubReg : TRI->subregs(Reg)) { if (LocalDefSet.insert(SubReg).second) LocalDefs.push_back(SubReg); } @@ -310,6 +307,34 @@ VirtRegInfo llvm::AnalyzeVirtRegInBundle( return RI; } +std::pair<LaneBitmask, LaneBitmask> +llvm::AnalyzeVirtRegLanesInBundle(const MachineInstr &MI, Register Reg, + const MachineRegisterInfo &MRI, + const TargetRegisterInfo &TRI) { + + LaneBitmask UseMask, DefMask; + + for (ConstMIBundleOperands O(MI); O.isValid(); ++O) { + const MachineOperand &MO = *O; + if (!MO.isReg() || MO.getReg() != Reg) + continue; + + unsigned SubReg = MO.getSubReg(); + if (SubReg == 0 && MO.isUse() && !MO.isUndef()) + UseMask |= MRI.getMaxLaneMaskForVReg(Reg); + + LaneBitmask SubRegMask = TRI.getSubRegIndexLaneMask(SubReg); + if (MO.isDef()) { + if (!MO.isUndef()) + UseMask |= ~SubRegMask; + DefMask |= SubRegMask; + } else if (!MO.isUndef()) + UseMask |= SubRegMask; + } + + return {UseMask, DefMask}; +} + PhysRegInfo llvm::AnalyzePhysRegInBundle(const MachineInstr &MI, Register Reg, const TargetRegisterInfo *TRI) { bool AllDefsDead = true; |