Lines Matching refs:Def
262 static bool ShouldRematerialize(const MachineInstr &Def, AliasAnalysis &AA, in ShouldRematerialize() argument
264 return Def.isAsCheapAsAMove() && TII->isTriviallyReMaterializable(Def, &AA); in ShouldRematerialize()
274 if (MachineInstr *Def = MRI.getUniqueVRegDef(Reg)) in GetVRegDef() local
275 return Def; in GetVRegDef()
288 static bool HasOneUse(unsigned Reg, MachineInstr *Def, MachineRegisterInfo &MRI, in HasOneUse() argument
297 LI.getVNInfoAt(LIS.getInstructionIndex(*Def).getRegSlot()); in HasOneUse()
317 static bool IsSafeToMove(const MachineInstr *Def, const MachineInstr *Insert, in IsSafeToMove() argument
319 assert(Def->getParent() == Insert->getParent()); in IsSafeToMove()
323 for (const MachineOperand &MO : Def->operands()) { in IsSafeToMove()
353 Query(*Def, AA, Read, Write, Effects, StackPointer); in IsSafeToMove()
362 MachineBasicBlock::const_iterator D(Def), I(Insert); in IsSafeToMove()
473 MachineInstr *Def, MachineBasicBlock &MBB, in MoveForSingleUse() argument
477 LLVM_DEBUG(dbgs() << "Move for single use: "; Def->dump()); in MoveForSingleUse()
479 WebAssemblyDebugValueManager DefDIs(Def); in MoveForSingleUse()
480 MBB.splice(Insert, &MBB, Def); in MoveForSingleUse()
482 LIS.handleMove(*Def); in MoveForSingleUse()
492 Def->getOperand(0).setReg(NewReg); in MoveForSingleUse()
500 LI.removeSegment(LIS.getInstructionIndex(*Def).getRegSlot(), in MoveForSingleUse()
508 LLVM_DEBUG(dbgs() << " - Replaced register: "; Def->dump()); in MoveForSingleUse()
511 ImposeStackOrdering(Def); in MoveForSingleUse()
512 return Def; in MoveForSingleUse()
518 unsigned Reg, MachineOperand &Op, MachineInstr &Def, MachineBasicBlock &MBB, in RematerializeCheapDef() argument
522 LLVM_DEBUG(dbgs() << "Rematerializing cheap def: "; Def.dump()); in RematerializeCheapDef()
525 WebAssemblyDebugValueManager DefDIs(&Def); in RematerializeCheapDef()
528 TII->reMaterialize(MBB, Insert, NewReg, 0, Def, *TRI); in RematerializeCheapDef()
543 IsDead = !LI.liveAt(LIS.getInstructionIndex(Def).getDeadSlot()); in RematerializeCheapDef()
550 SlotIndex Idx = LIS.getInstructionIndex(Def).getRegSlot(); in RematerializeCheapDef()
553 LIS.RemoveMachineInstrFromMaps(Def); in RematerializeCheapDef()
554 Def.eraseFromParent(); in RematerializeCheapDef()
586 unsigned Reg, MachineOperand &Op, MachineInstr *Def, MachineBasicBlock &MBB, in MoveAndTeeForMultiUse() argument
589 LLVM_DEBUG(dbgs() << "Move and tee for multi-use:"; Def->dump()); in MoveAndTeeForMultiUse()
591 WebAssemblyDebugValueManager DefDIs(Def); in MoveAndTeeForMultiUse()
594 MBB.splice(Insert, &MBB, Def); in MoveAndTeeForMultiUse()
595 LIS.handleMove(*Def); in MoveAndTeeForMultiUse()
601 MachineOperand &DefMO = Def->getOperand(0); in MoveAndTeeForMultiUse()
609 SlotIndex DefIdx = LIS.getInstructionIndex(*Def).getRegSlot(); in MoveAndTeeForMultiUse()
626 ImposeStackOrdering(Def); in MoveAndTeeForMultiUse()
632 LLVM_DEBUG(dbgs() << " - Replaced register: "; Def->dump()); in MoveAndTeeForMultiUse()
634 return Def; in MoveAndTeeForMultiUse()
809 MachineInstr *Def = GetVRegDef(Reg, Insert, MRI, LIS); in runOnMachineFunction() local
810 if (!Def) in runOnMachineFunction()
815 if (Def->getOpcode() == TargetOpcode::INLINEASM) in runOnMachineFunction()
820 if (WebAssembly::isArgument(*Def)) in runOnMachineFunction()
829 bool SameBlock = Def->getParent() == &MBB; in runOnMachineFunction()
830 bool CanMove = SameBlock && IsSafeToMove(Def, Insert, AA, MRI) && in runOnMachineFunction()
832 if (CanMove && HasOneUse(Reg, Def, MRI, MDT, LIS)) { in runOnMachineFunction()
833 Insert = MoveForSingleUse(Reg, Op, Def, MBB, Insert, LIS, MFI, MRI); in runOnMachineFunction()
834 } else if (ShouldRematerialize(*Def, AA, TII)) { in runOnMachineFunction()
836 RematerializeCheapDef(Reg, Op, *Def, MBB, Insert->getIterator(), in runOnMachineFunction()
840 Insert = MoveAndTeeForMultiUse(Reg, Op, Def, MBB, Insert, LIS, MFI, in runOnMachineFunction()