Lines Matching full:insert

265 static MachineInstr *getVRegDef(unsigned Reg, const MachineInstr *Insert,
274 LIS.getInstructionIndex(*Insert)))
308 // Test whether it's safe to move Def to just before Insert.
314 const MachineInstr *Insert,
319 assert(DefI->getParent() == Insert->getParent());
320 assert(UseI->getParent() == Insert->getParent());
359 if (NextI == Insert)
374 // If the register is dead here and at Insert, ignore it.
375 if (MO.isDead() && Insert->definesRegister(Reg, /*TRI=*/nullptr) &&
376 !Insert->readsRegister(Reg, /*TRI=*/nullptr))
407 // Scan through the intervening instructions between DefI and Insert.
408 MachineBasicBlock::const_iterator D(DefI), I(Insert);
525 MachineInstr *Insert, LiveIntervals &LIS,
531 DefDIs.sink(Insert);
574 MachineBasicBlock::instr_iterator Insert, LiveIntervals &LIS,
583 DefDIs.cloneSink(&*Insert, NewReg);
585 MachineInstr *Clone = getPrevNonDebugInst(&*Insert);
617 /// insert a tee to satisfy the rest of the uses. As an illustration, rewrite
621 /// INST ..., Reg, ... // Insert
627 /// DefReg = INST ... // Def (to become the new Insert)
629 /// INST ..., TeeReg, ... // Insert
637 MachineInstr *Insert, LiveIntervals &LIS, WebAssemblyFunctionInfo &MFI,
647 DefDIs.sink(Insert);
652 MachineInstr *Tee = BuildMI(MBB, Insert, Insert->getDebugLoc(),
681 DefDIs.cloneSink(Insert, TeeReg, /* CloneDef */ false);
698 explicit TreeWalkerState(MachineInstr *Insert) {
699 const iterator_range<mop_iterator> &Range = Insert->explicit_uses();
725 /// re-insert them starting from the beginning (because we've commuted them).
775 /// it, commute Insert's operands and prepare to revisit it.
776 void maybeCommute(MachineInstr *Insert, TreeWalkerState &TreeWalker,
782 TII->commuteInstruction(*Insert, /*NewMI=*/false, Operand0, Operand1);
785 } else if (!Declined && TreeWalker.hasRemainingOperands(Insert)) {
788 if (TII->findCommutedOpIndices(*Insert, Operand0, Operand1)) {
790 TII->commuteInstruction(*Insert, /*NewMI=*/false, Operand0, Operand1);
791 TreeWalker.resetTopOperands(Insert);
827 MachineInstr *Insert = &*MII;
830 if (Insert->isInlineAsm())
834 if (Insert->isDebugValue())
840 TreeWalkerState TreeWalker(Insert);
856 MachineInstr *DefI = getVRegDef(Reg, Insert, MRI, LIS);
881 bool CanMove = SameBlock && isSafeToMove(Def, &Use, Insert, MFI, MRI) &&
884 Insert = moveForSingleUse(Reg, Use, DefI, MBB, Insert, LIS, MFI, MRI);
892 Insert =
893 rematerializeCheapDef(Reg, Use, *DefI, MBB, Insert->getIterator(),
897 Insert = moveAndTeeForMultiUse(Reg, Use, DefI, MBB, Insert, LIS, MFI,
903 Commuting.maybeCommute(Insert, TreeWalker, TII);
911 auto *SubsequentDef = Insert->defs().begin();
913 while (SubsequentDef != Insert->defs().end() &&
930 if (Insert->getOpcode() == TargetOpcode::IMPLICIT_DEF)
931 convertImplicitDefToConstZero(Insert, MRI, TII, MF, LIS);
936 TreeWalker.pushOperands(Insert);
941 if (Insert != &*MII) {
943 MII = MachineBasicBlock::iterator(Insert).getReverse();