Lines Matching refs:Insert
265 static MachineInstr *getVRegDef(unsigned Reg, const MachineInstr *Insert, in getVRegDef() argument
274 LIS.getInstructionIndex(*Insert))) in getVRegDef()
313 const MachineInstr *Insert, in isSafeToMove() argument
318 assert(DefI->getParent() == Insert->getParent()); in isSafeToMove()
319 assert(UseI->getParent() == Insert->getParent()); in isSafeToMove()
353 if (NextI == Insert) in isSafeToMove()
369 if (MO.isDead() && Insert->definesRegister(Reg) && in isSafeToMove()
370 !Insert->readsRegister(Reg)) in isSafeToMove()
402 MachineBasicBlock::const_iterator D(DefI), I(Insert); in isSafeToMove()
518 MachineInstr *Insert, LiveIntervals &LIS, in moveForSingleUse() argument
524 MBB.splice(Insert, &MBB, Def); in moveForSingleUse()
525 DefDIs.move(Insert); in moveForSingleUse()
563 MachineBasicBlock::instr_iterator Insert, LiveIntervals &LIS, in rematerializeCheapDef() argument
572 TII->reMaterialize(MBB, Insert, NewReg, 0, Def, *TRI); in rematerializeCheapDef()
574 MachineInstr *Clone = &*std::prev(Insert); in rematerializeCheapDef()
600 DefDIs.move(&*Insert); in rematerializeCheapDef()
603 DefDIs.clone(&*Insert, NewReg); in rematerializeCheapDef()
631 MachineInstr *Insert, LiveIntervals &LIS, WebAssemblyFunctionInfo &MFI, in moveAndTeeForMultiUse() argument
638 MBB.splice(Insert, &MBB, Def); in moveAndTeeForMultiUse()
646 MachineInstr *Tee = BuildMI(MBB, Insert, Insert->getDebugLoc(), in moveAndTeeForMultiUse()
655 DefDIs.move(Insert); in moveAndTeeForMultiUse()
674 DefDIs.clone(Insert, TeeReg); in moveAndTeeForMultiUse()
691 explicit TreeWalkerState(MachineInstr *Insert) { in TreeWalkerState() argument
692 const iterator_range<mop_iterator> &Range = Insert->explicit_uses(); in TreeWalkerState()
769 void maybeCommute(MachineInstr *Insert, TreeWalkerState &TreeWalker, in maybeCommute() argument
775 TII->commuteInstruction(*Insert, /*NewMI=*/false, Operand0, Operand1); in maybeCommute()
778 } else if (!Declined && TreeWalker.hasRemainingOperands(Insert)) { in maybeCommute()
781 if (TII->findCommutedOpIndices(*Insert, Operand0, Operand1)) { in maybeCommute()
783 TII->commuteInstruction(*Insert, /*NewMI=*/false, Operand0, Operand1); in maybeCommute()
784 TreeWalker.resetTopOperands(Insert); in maybeCommute()
820 MachineInstr *Insert = &*MII; in runOnMachineFunction() local
823 if (Insert->isInlineAsm()) in runOnMachineFunction()
827 if (Insert->isDebugValue()) in runOnMachineFunction()
833 TreeWalkerState TreeWalker(Insert); in runOnMachineFunction()
849 MachineInstr *DefI = getVRegDef(Reg, Insert, MRI, LIS); in runOnMachineFunction()
873 bool CanMove = SameBlock && isSafeToMove(Def, &Use, Insert, MFI, MRI) && in runOnMachineFunction()
876 Insert = moveForSingleUse(Reg, Use, DefI, MBB, Insert, LIS, MFI, MRI); in runOnMachineFunction()
884 Insert = in runOnMachineFunction()
885 rematerializeCheapDef(Reg, Use, *DefI, MBB, Insert->getIterator(), in runOnMachineFunction()
889 Insert = moveAndTeeForMultiUse(Reg, Use, DefI, MBB, Insert, LIS, MFI, in runOnMachineFunction()
895 Commuting.maybeCommute(Insert, TreeWalker, TII); in runOnMachineFunction()
903 auto *SubsequentDef = Insert->defs().begin(); in runOnMachineFunction()
905 while (SubsequentDef != Insert->defs().end() && in runOnMachineFunction()
922 if (Insert->getOpcode() == TargetOpcode::IMPLICIT_DEF) in runOnMachineFunction()
923 convertImplicitDefToConstZero(Insert, MRI, TII, MF, LIS); in runOnMachineFunction()
928 TreeWalker.pushOperands(Insert); in runOnMachineFunction()
933 if (Insert != &*MII) { in runOnMachineFunction()
935 MII = MachineBasicBlock::iterator(Insert).getReverse(); in runOnMachineFunction()