Lines Matching refs:UseMI

25   MachineInstr *UseMI;  member
39 UseMI(MI), OpToFold(nullptr), ShrinkOpcode(ShrinkOp), UseOpNo(OpNo), in FoldCandidate()
78 bool frameIndexMayFold(const MachineInstr &UseMI, int OpNo,
95 bool tryToFoldACImm(const MachineOperand &OpToFold, MachineInstr *UseMI,
99 MachineInstr *UseMI,
180 bool SIFoldOperands::frameIndexMayFold(const MachineInstr &UseMI, int OpNo, in frameIndexMayFold() argument
185 const unsigned Opc = UseMI.getOpcode(); in frameIndexMayFold()
186 if (TII->isMUBUF(UseMI)) in frameIndexMayFold()
188 if (!TII->isFLATScratch(UseMI)) in frameIndexMayFold()
204 MachineInstr *MI = Fold.UseMI; in canUseImmWithOpSel()
232 MachineInstr *MI = Fold.UseMI; in tryFoldImmWithOpSel()
356 MachineInstr *MI = Fold.UseMI; in updateOperand()
449 return any_of(FoldList, [&](const auto &C) { return C.UseMI == MI; }); in isUseMIInFoldList()
458 if (Fold.UseMI == MI && Fold.UseOpNo == OpNo) in appendFoldCandidate()
688 const MachineOperand &OpToFold, MachineInstr *UseMI, unsigned UseOpIdx, in tryToFoldACImm() argument
690 const MCInstrDesc &Desc = UseMI->getDesc(); in tryToFoldACImm()
699 TII->isOperandLegal(*UseMI, UseOpIdx, &OpToFold)) { in tryToFoldACImm()
700 UseMI->getOperand(UseOpIdx).ChangeToImmediate(OpToFold.getImm()); in tryToFoldACImm()
711 if (isUseMIInFoldList(FoldList, UseMI)) in tryToFoldACImm()
716 MachineOperand &UseOp = UseMI->getOperand(UseOpIdx); in tryToFoldACImm()
720 TII->isOperandLegal(*UseMI, UseOpIdx, &DefOp)) { in tryToFoldACImm()
721 UseMI->getOperand(UseOpIdx).ChangeToImmediate(DefOp.getImm()); in tryToFoldACImm()
740 !TII->isOperandLegal(*UseMI, UseOpIdx, Op)) in tryToFoldACImm()
749 appendFoldCandidate(FoldList, UseMI, UseOpIdx, Defs[0].first); in tryToFoldACImm()
755 MachineInstr *UseMI, in foldOperand() argument
759 const MachineOperand &UseOp = UseMI->getOperand(UseOpIdx); in foldOperand()
761 if (!isUseSafeToFold(*UseMI, UseOp)) in foldOperand()
772 if (UseMI->isRegSequence()) { in foldOperand()
773 Register RegSeqDstReg = UseMI->getOperand(0).getReg(); in foldOperand()
774 unsigned RegSeqDstSubReg = UseMI->getOperand(UseOpIdx + 1).getImm(); in foldOperand()
779 if (tryToFoldACImm(UseMI->getOperand(0), RSUseMI, in foldOperand()
793 if (tryToFoldACImm(OpToFold, UseMI, UseOpIdx, FoldList)) in foldOperand()
796 if (frameIndexMayFold(*UseMI, UseOpIdx, OpToFold)) { in foldOperand()
800 if (TII->isMUBUF(*UseMI)) { in foldOperand()
801 if (TII->getNamedOperand(*UseMI, AMDGPU::OpName::srsrc)->getReg() != in foldOperand()
808 *TII->getNamedOperand(*UseMI, AMDGPU::OpName::soffset); in foldOperand()
815 UseMI->getOperand(UseOpIdx).ChangeToFrameIndex(OpToFold.getIndex()); in foldOperand()
817 const unsigned Opc = UseMI->getOpcode(); in foldOperand()
818 if (TII->isFLATScratch(*UseMI) && in foldOperand()
822 UseMI->setDesc(TII->get(NewOpc)); in foldOperand()
831 if (FoldingImmLike && UseMI->isCopy()) { in foldOperand()
832 Register DestReg = UseMI->getOperand(0).getReg(); in foldOperand()
833 Register SrcReg = UseMI->getOperand(1).getReg(); in foldOperand()
848 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_WRITE_B32_e64)); in foldOperand()
849 UseMI->getOperand(1).ChangeToImmediate(OpToFold.getImm()); in foldOperand()
850 CopiesToReplace.push_back(UseMI); in foldOperand()
862 UseMI->setDesc(TII->get(MovOp)); in foldOperand()
863 MachineInstr::mop_iterator ImpOpI = UseMI->implicit_operands().begin(); in foldOperand()
864 MachineInstr::mop_iterator ImpOpE = UseMI->implicit_operands().end(); in foldOperand()
868 UseMI->removeOperand(UseMI->getOperandNo(Tmp)); in foldOperand()
870 CopiesToReplace.push_back(UseMI); in foldOperand()
872 if (UseMI->isCopy() && OpToFold.isReg() && in foldOperand()
873 UseMI->getOperand(0).getReg().isVirtual() && in foldOperand()
874 !UseMI->getOperand(1).getSubReg()) { in foldOperand()
875 LLVM_DEBUG(dbgs() << "Folding " << OpToFold << "\n into " << *UseMI); in foldOperand()
876 unsigned Size = TII->getOpSize(*UseMI, 1); in foldOperand()
878 UseMI->getOperand(1).setReg(UseReg); in foldOperand()
879 UseMI->getOperand(1).setSubReg(OpToFold.getSubReg()); in foldOperand()
880 UseMI->getOperand(1).setIsKill(false); in foldOperand()
881 CopiesToReplace.push_back(UseMI); in foldOperand()
892 if (Size > 4 && TRI->isAGPR(*MRI, UseMI->getOperand(0).getReg()) && in foldOperand()
894 const DebugLoc &DL = UseMI->getDebugLoc(); in foldOperand()
895 MachineBasicBlock &MBB = *UseMI->getParent(); in foldOperand()
897 UseMI->setDesc(TII->get(AMDGPU::REG_SEQUENCE)); in foldOperand()
898 for (unsigned I = UseMI->getNumOperands() - 1; I > 0; --I) in foldOperand()
899 UseMI->removeOperand(I); in foldOperand()
901 MachineInstrBuilder B(*MBB.getParent(), UseMI); in foldOperand()
912 BuildMI(MBB, UseMI, DL, in foldOperand()
939 BuildMI(MBB, UseMI, DL, TII->get(AMDGPU::COPY), Tmp).add(*Def); in foldOperand()
950 BuildMI(MBB, UseMI, DL, TII->get(AMDGPU::COPY), Vgpr).add(*Def); in foldOperand()
954 BuildMI(MBB, UseMI, DL, in foldOperand()
961 LLVM_DEBUG(dbgs() << "Folded " << *UseMI); in foldOperand()
968 Register Reg0 = UseMI->getOperand(0).getReg(); in foldOperand()
969 Register Reg1 = UseMI->getOperand(1).getReg(); in foldOperand()
971 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_WRITE_B32_e64)); in foldOperand()
973 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_READ_B32_e64)); in foldOperand()
976 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_MOV_B32)); in foldOperand()
980 unsigned UseOpc = UseMI->getOpcode(); in foldOperand()
991 UseMI->getOperand(UseOpIdx).getReg(), in foldOperand()
993 *UseMI)) in foldOperand()
996 UseMI->setDesc(TII->get(AMDGPU::S_MOV_B32)); in foldOperand()
999 UseMI->getOperand(1).ChangeToImmediate(OpToFold.getImm()); in foldOperand()
1001 UseMI->getOperand(1).ChangeToFrameIndex(OpToFold.getIndex()); in foldOperand()
1002 UseMI->removeOperand(2); // Remove exec read (or src1 for readlane) in foldOperand()
1008 UseMI->getOperand(UseOpIdx).getReg(), in foldOperand()
1010 *UseMI)) in foldOperand()
1017 UseMI->setDesc(TII->get(AMDGPU::COPY)); in foldOperand()
1018 UseMI->getOperand(1).setReg(OpToFold.getReg()); in foldOperand()
1019 UseMI->getOperand(1).setSubReg(OpToFold.getSubReg()); in foldOperand()
1020 UseMI->getOperand(1).setIsKill(false); in foldOperand()
1021 UseMI->removeOperand(2); // Remove exec read (or src1 for readlane) in foldOperand()
1026 const MCInstrDesc &UseDesc = UseMI->getDesc(); in foldOperand()
1051 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &OpToFold); in foldOperand()
1080 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &ImmOp); in foldOperand()
1084 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &OpToFold); in foldOperand()
1362 for (auto &UseMI : in foldInstOperand() local
1372 if (tryConstantFoldOp(&UseMI)) { in foldInstOperand()
1373 LLVM_DEBUG(dbgs() << "Constant folded " << UseMI); in foldInstOperand()
1383 MachineInstr *UseMI = U->getParent(); in foldInstOperand() local
1384 foldOperand(OpToFold, UseMI, UseMI->getOperandNo(U), FoldList, in foldInstOperand()
1402 execMayBeModifiedBeforeUse(*MRI, Reg, *DefMI, *Fold.UseMI)) in foldInstOperand()
1416 << *Fold.UseMI); in foldInstOperand()
1419 TII->commuteInstruction(*Fold.UseMI, false); in foldInstOperand()
1759 MachineInstr *UseMI = Op->getParent(); in tryFoldRegSequence() local
1760 while (UseMI->isCopy() && !Op->getSubReg()) { in tryFoldRegSequence()
1761 Reg = UseMI->getOperand(0).getReg(); in tryFoldRegSequence()
1765 UseMI = Op->getParent(); in tryFoldRegSequence()
1771 unsigned OpIdx = Op - &UseMI->getOperand(0); in tryFoldRegSequence()
1772 const MCInstrDesc &InstDesc = UseMI->getDesc(); in tryFoldRegSequence()
1797 if (!TII->isOperandLegal(*UseMI, OpIdx, Op)) { in tryFoldRegSequence()
1803 LLVM_DEBUG(dbgs() << "Folded " << *RS << " into " << *UseMI); in tryFoldRegSequence()