Lines Matching refs:UseMI
24 MachineInstr *UseMI; member
38 UseMI(MI), OpToFold(nullptr), ShrinkOpcode(ShrinkOp), UseOpNo(OpNo), in FoldCandidate()
88 MachineInstr *UseMI,
152 const MachineInstr &UseMI, in frameIndexMayFold() argument
158 if (TII->isMUBUF(UseMI)) in frameIndexMayFold()
159 return OpNo == AMDGPU::getNamedOperandIdx(UseMI.getOpcode(), in frameIndexMayFold()
161 if (!TII->isFLATScratch(UseMI)) in frameIndexMayFold()
164 int SIdx = AMDGPU::getNamedOperandIdx(UseMI.getOpcode(), in frameIndexMayFold()
169 int VIdx = AMDGPU::getNamedOperandIdx(UseMI.getOpcode(), in frameIndexMayFold()
182 MachineInstr *MI = Fold.UseMI; in updateOperand()
312 if (Candidate.UseMI == MI) in isUseMIInFoldList()
324 if (Fold.UseMI == MI && Fold.UseOpNo == OpNo) in appendFoldCandidate()
519 MachineInstr *UseMI, in tryToFoldACImm() argument
522 const MCInstrDesc &Desc = UseMI->getDesc(); in tryToFoldACImm()
535 TII->isOperandLegal(*UseMI, UseOpIdx, &OpToFold)) { in tryToFoldACImm()
536 UseMI->getOperand(UseOpIdx).ChangeToImmediate(OpToFold.getImm()); in tryToFoldACImm()
547 if (isUseMIInFoldList(FoldList, UseMI)) in tryToFoldACImm()
550 MachineRegisterInfo &MRI = UseMI->getParent()->getParent()->getRegInfo(); in tryToFoldACImm()
554 MachineOperand &UseOp = UseMI->getOperand(UseOpIdx); in tryToFoldACImm()
558 TII->isOperandLegal(*UseMI, UseOpIdx, &DefOp)) { in tryToFoldACImm()
559 UseMI->getOperand(UseOpIdx).ChangeToImmediate(DefOp.getImm()); in tryToFoldACImm()
578 !TII->isOperandLegal(*UseMI, UseOpIdx, Op)) in tryToFoldACImm()
587 appendFoldCandidate(FoldList, UseMI, UseOpIdx, Defs[0].first); in tryToFoldACImm()
593 MachineInstr *UseMI, in foldOperand() argument
597 const MachineOperand &UseOp = UseMI->getOperand(UseOpIdx); in foldOperand()
599 if (!isUseSafeToFold(TII, *UseMI, UseOp)) in foldOperand()
611 if (UseMI->isRegSequence()) { in foldOperand()
612 Register RegSeqDstReg = UseMI->getOperand(0).getReg(); in foldOperand()
613 unsigned RegSeqDstSubReg = UseMI->getOperand(UseOpIdx + 1).getImm(); in foldOperand()
618 if (tryToFoldACImm(TII, UseMI->getOperand(0), RSUseMI, in foldOperand()
632 if (tryToFoldACImm(TII, OpToFold, UseMI, UseOpIdx, FoldList)) in foldOperand()
635 if (frameIndexMayFold(TII, *UseMI, UseOpIdx, OpToFold)) { in foldOperand()
639 if (TII->isMUBUF(*UseMI)) { in foldOperand()
640 if (TII->getNamedOperand(*UseMI, AMDGPU::OpName::srsrc)->getReg() != in foldOperand()
647 *TII->getNamedOperand(*UseMI, AMDGPU::OpName::soffset); in foldOperand()
654 UseMI->getOperand(UseOpIdx).ChangeToFrameIndex(OpToFold.getIndex()); in foldOperand()
656 if (TII->isFLATScratch(*UseMI) && in foldOperand()
657 AMDGPU::getNamedOperandIdx(UseMI->getOpcode(), in foldOperand()
659 AMDGPU::getNamedOperandIdx(UseMI->getOpcode(), in foldOperand()
661 unsigned NewOpc = AMDGPU::getFlatScratchInstSSfromSV(UseMI->getOpcode()); in foldOperand()
662 UseMI->setDesc(TII->get(NewOpc)); in foldOperand()
671 if (FoldingImmLike && UseMI->isCopy()) { in foldOperand()
672 Register DestReg = UseMI->getOperand(0).getReg(); in foldOperand()
673 Register SrcReg = UseMI->getOperand(1).getReg(); in foldOperand()
695 &UseMI->getOperand(1)); in foldOperand()
698 foldOperand(*F.OpToFold, F.UseMI, F.UseOpNo, FoldList, CopiesToReplace); in foldOperand()
704 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_WRITE_B32_e64)); in foldOperand()
705 UseMI->getOperand(1).ChangeToImmediate(OpToFold.getImm()); in foldOperand()
706 CopiesToReplace.push_back(UseMI); in foldOperand()
718 UseMI->setDesc(TII->get(MovOp)); in foldOperand()
719 MachineInstr::mop_iterator ImpOpI = UseMI->implicit_operands().begin(); in foldOperand()
720 MachineInstr::mop_iterator ImpOpE = UseMI->implicit_operands().end(); in foldOperand()
724 UseMI->removeOperand(UseMI->getOperandNo(Tmp)); in foldOperand()
726 CopiesToReplace.push_back(UseMI); in foldOperand()
728 if (UseMI->isCopy() && OpToFold.isReg() && in foldOperand()
729 UseMI->getOperand(0).getReg().isVirtual() && in foldOperand()
730 !UseMI->getOperand(1).getSubReg()) { in foldOperand()
731 LLVM_DEBUG(dbgs() << "Folding " << OpToFold << "\n into " << *UseMI); in foldOperand()
732 unsigned Size = TII->getOpSize(*UseMI, 1); in foldOperand()
734 UseMI->getOperand(1).setReg(UseReg); in foldOperand()
735 UseMI->getOperand(1).setSubReg(OpToFold.getSubReg()); in foldOperand()
736 UseMI->getOperand(1).setIsKill(false); in foldOperand()
737 CopiesToReplace.push_back(UseMI); in foldOperand()
745 if (Size > 4 && TRI->isAGPR(*MRI, UseMI->getOperand(0).getReg()) && in foldOperand()
748 const DebugLoc &DL = UseMI->getDebugLoc(); in foldOperand()
749 MachineBasicBlock &MBB = *UseMI->getParent(); in foldOperand()
751 UseMI->setDesc(TII->get(AMDGPU::REG_SEQUENCE)); in foldOperand()
752 for (unsigned I = UseMI->getNumOperands() - 1; I > 0; --I) in foldOperand()
753 UseMI->removeOperand(I); in foldOperand()
755 MachineInstrBuilder B(*MBB.getParent(), UseMI); in foldOperand()
766 BuildMI(MBB, UseMI, DL, in foldOperand()
793 BuildMI(MBB, UseMI, DL, TII->get(AMDGPU::COPY), Tmp).add(*Def); in foldOperand()
804 BuildMI(MBB, UseMI, DL, TII->get(AMDGPU::COPY), Vgpr).add(*Def); in foldOperand()
808 BuildMI(MBB, UseMI, DL, in foldOperand()
815 LLVM_DEBUG(dbgs() << "Folded " << *UseMI); in foldOperand()
821 if (TRI->isAGPR(*MRI, UseMI->getOperand(0).getReg()) && in foldOperand()
822 TRI->isVGPR(*MRI, UseMI->getOperand(1).getReg())) in foldOperand()
823 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_WRITE_B32_e64)); in foldOperand()
824 else if (TRI->isVGPR(*MRI, UseMI->getOperand(0).getReg()) && in foldOperand()
825 TRI->isAGPR(*MRI, UseMI->getOperand(1).getReg())) in foldOperand()
826 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_READ_B32_e64)); in foldOperand()
828 TRI->isAGPR(*MRI, UseMI->getOperand(0).getReg()) && in foldOperand()
829 TRI->isAGPR(*MRI, UseMI->getOperand(1).getReg())) in foldOperand()
830 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_MOV_B32)); in foldOperand()
834 unsigned UseOpc = UseMI->getOpcode(); in foldOperand()
845 UseMI->getOperand(UseOpIdx).getReg(), in foldOperand()
847 *UseMI)) in foldOperand()
850 UseMI->setDesc(TII->get(AMDGPU::S_MOV_B32)); in foldOperand()
853 UseMI->getOperand(1).ChangeToImmediate(OpToFold.getImm()); in foldOperand()
855 UseMI->getOperand(1).ChangeToFrameIndex(OpToFold.getIndex()); in foldOperand()
856 UseMI->removeOperand(2); // Remove exec read (or src1 for readlane) in foldOperand()
862 UseMI->getOperand(UseOpIdx).getReg(), in foldOperand()
864 *UseMI)) in foldOperand()
871 UseMI->setDesc(TII->get(AMDGPU::COPY)); in foldOperand()
872 UseMI->getOperand(1).setReg(OpToFold.getReg()); in foldOperand()
873 UseMI->getOperand(1).setSubReg(OpToFold.getSubReg()); in foldOperand()
874 UseMI->getOperand(1).setIsKill(false); in foldOperand()
875 UseMI->removeOperand(2); // Remove exec read (or src1 for readlane) in foldOperand()
880 const MCInstrDesc &UseDesc = UseMI->getDesc(); in foldOperand()
907 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &OpToFold, TII); in foldOperand()
937 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &ImmOp, TII); in foldOperand()
943 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &OpToFold, TII); in foldOperand()
1229 for (auto &UseMI : in foldInstOperand() local
1239 if (tryConstantFoldOp(*MRI, TII, &UseMI)) { in foldInstOperand()
1240 LLVM_DEBUG(dbgs() << "Constant folded " << UseMI); in foldInstOperand()
1250 MachineInstr *UseMI = U->getParent(); in foldInstOperand() local
1251 foldOperand(OpToFold, UseMI, UseMI->getOperandNo(U), FoldList, in foldInstOperand()
1269 execMayBeModifiedBeforeUse(*MRI, Reg, *DefMI, *Fold.UseMI)) in foldInstOperand()
1283 << *Fold.UseMI); in foldInstOperand()
1286 TII->commuteInstruction(*Fold.UseMI, false); in foldInstOperand()
1541 MachineInstr *UseMI = Op->getParent(); in tryFoldRegSequence() local
1542 while (UseMI->isCopy() && !Op->getSubReg()) { in tryFoldRegSequence()
1543 Reg = UseMI->getOperand(0).getReg(); in tryFoldRegSequence()
1547 UseMI = Op->getParent(); in tryFoldRegSequence()
1553 unsigned OpIdx = Op - &UseMI->getOperand(0); in tryFoldRegSequence()
1554 const MCInstrDesc &InstDesc = UseMI->getDesc(); in tryFoldRegSequence()
1579 if (!TII->isOperandLegal(*UseMI, OpIdx, Op)) { in tryFoldRegSequence()
1585 LLVM_DEBUG(dbgs() << "Folded " << *RS << " into " << *UseMI); in tryFoldRegSequence()