Lines Matching defs:UseMI

26   MachineInstr *UseMI;
40 UseMI(MI), OpToFold(nullptr), ShrinkOpcode(ShrinkOp), UseOpNo(OpNo),
78 bool frameIndexMayFold(const MachineInstr &UseMI, int OpNo,
117 bool tryToFoldACImm(const MachineOperand &OpToFold, MachineInstr *UseMI,
121 MachineInstr *UseMI,
214 const MachineInstr &UseMI, int OpNo, const MachineOperand &OpToFold) const {
218 const unsigned Opc = UseMI.getOpcode();
228 return UseMI.getOperand(OpNo == 1 ? 2 : 1).isImm() &&
229 MRI->hasOneNonDBGUse(UseMI.getOperand(OpNo).getReg());
232 return UseMI.getOperand(OpNo == 2 ? 3 : 2).isImm() &&
233 MRI->hasOneNonDBGUse(UseMI.getOperand(OpNo).getReg());
238 if (TII->isMUBUF(UseMI))
240 if (!TII->isFLATScratch(UseMI))
326 MachineInstr *MI = Fold.UseMI;
356 MachineInstr *MI = Fold.UseMI;
480 MachineInstr *MI = Fold.UseMI;
573 return any_of(FoldList, [&](const auto &C) { return C.UseMI == MI; });
582 if (Fold.UseMI == MI && Fold.UseOpNo == OpNo)
812 const MachineOperand &OpToFold, MachineInstr *UseMI, unsigned UseOpIdx,
814 const MCInstrDesc &Desc = UseMI->getDesc();
823 TII->isOperandLegal(*UseMI, UseOpIdx, &OpToFold)) {
824 UseMI->getOperand(UseOpIdx).ChangeToImmediate(OpToFold.getImm());
835 if (isUseMIInFoldList(FoldList, UseMI))
840 MachineOperand &UseOp = UseMI->getOperand(UseOpIdx);
844 TII->isOperandLegal(*UseMI, UseOpIdx, &DefOp)) {
845 UseMI->getOperand(UseOpIdx).ChangeToImmediate(DefOp.getImm());
864 !TII->isOperandLegal(*UseMI, UseOpIdx, Op))
873 appendFoldCandidate(FoldList, UseMI, UseOpIdx, Defs[0].first);
878 MachineOperand &OpToFold, MachineInstr *UseMI, int UseOpIdx,
881 const MachineOperand *UseOp = &UseMI->getOperand(UseOpIdx);
883 if (!isUseSafeToFold(*UseMI, *UseOp))
894 if (UseMI->isRegSequence()) {
895 Register RegSeqDstReg = UseMI->getOperand(0).getReg();
896 unsigned RegSeqDstSubReg = UseMI->getOperand(UseOpIdx + 1).getImm();
905 if (tryToFoldACImm(UseMI->getOperand(0), RSUseMI,
918 if (tryToFoldACImm(OpToFold, UseMI, UseOpIdx, FoldList))
921 if (frameIndexMayFold(*UseMI, UseOpIdx, OpToFold)) {
925 if (TII->isMUBUF(*UseMI)) {
926 if (TII->getNamedOperand(*UseMI, AMDGPU::OpName::srsrc)->getReg() !=
933 *TII->getNamedOperand(*UseMI, AMDGPU::OpName::soffset);
940 UseMI->getOperand(UseOpIdx).ChangeToFrameIndex(OpToFold.getIndex());
942 const unsigned Opc = UseMI->getOpcode();
943 if (TII->isFLATScratch(*UseMI) &&
947 UseMI->setDesc(TII->get(NewOpc));
956 if (FoldingImmLike && UseMI->isCopy()) {
957 Register DestReg = UseMI->getOperand(0).getReg();
958 Register SrcReg = UseMI->getOperand(1).getReg();
973 UseMI->setDesc(TII->get(AMDGPU::V_ACCVGPR_WRITE_B32_e64));
974 UseMI->getOperand(1).ChangeToImmediate(OpToFold.getImm());
975 CopiesToReplace.push_back(UseMI);
987 MachineInstr::mop_iterator ImpOpI = UseMI->implicit_operands().begin();
988 MachineInstr::mop_iterator ImpOpE = UseMI->implicit_operands().end();
992 UseMI->removeOperand(UseMI->getOperandNo(Tmp));
994 UseMI->setDesc(TII->get(MovOp));
997 const auto &SrcOp = UseMI->getOperand(UseOpIdx);
999 MachineFunction *MF = UseMI->getParent()->getParent();
1000 UseMI->removeOperand(1);
1001 UseMI->addOperand(*MF, MachineOperand::CreateImm(0)); // src0_modifiers
1002 UseMI->addOperand(NewSrcOp); // src0
1003 UseMI->addOperand(*MF, MachineOperand::CreateImm(0)); // op_sel
1005 UseOp = &UseMI->getOperand(UseOpIdx);
1007 CopiesToReplace.push_back(UseMI);
1009 if (UseMI->isCopy() && OpToFold.isReg() &&
1010 UseMI->getOperand(0).getReg().isVirtual() &&
1011 !UseMI->getOperand(1).getSubReg()) {
1012 LLVM_DEBUG(dbgs() << "Folding " << OpToFold << "\n into " << *UseMI);
1013 unsigned Size = TII->getOpSize(*UseMI, 1);
1015 UseMI->getOperand(1).setReg(UseReg);
1016 UseMI->getOperand(1).setSubReg(OpToFold.getSubReg());
1017 UseMI->getOperand(1).setIsKill(false);
1018 CopiesToReplace.push_back(UseMI);
1029 if (Size > 4 && TRI->isAGPR(*MRI, UseMI->getOperand(0).getReg()) &&
1031 const DebugLoc &DL = UseMI->getDebugLoc();
1032 MachineBasicBlock &MBB = *UseMI->getParent();
1034 UseMI->setDesc(TII->get(AMDGPU::REG_SEQUENCE));
1035 for (unsigned I = UseMI->getNumOperands() - 1; I > 0; --I)
1036 UseMI->removeOperand(I);
1038 MachineInstrBuilder B(*MBB.getParent(), UseMI);
1049 BuildMI(MBB, UseMI, DL,
1076 BuildMI(MBB, UseMI, DL, TII->get(AMDGPU::COPY), Tmp).add(*Def);
1087 BuildMI(MBB, UseMI, DL, TII->get(AMDGPU::COPY), Vgpr).add(*Def);
1091 BuildMI(MBB, UseMI, DL,
1098 LLVM_DEBUG(dbgs() << "Folded " << *UseMI);
1104 unsigned UseOpc = UseMI->getOpcode();
1115 UseMI->getOperand(UseOpIdx).getReg(),
1117 *UseMI))
1120 UseMI->setDesc(TII->get(AMDGPU::S_MOV_B32));
1123 UseMI->getOperand(1).ChangeToImmediate(OpToFold.getImm());
1125 UseMI->getOperand(1).ChangeToFrameIndex(OpToFold.getIndex());
1126 UseMI->removeOperand(2); // Remove exec read (or src1 for readlane)
1132 UseMI->getOperand(UseOpIdx).getReg(),
1134 *UseMI))
1141 UseMI->setDesc(TII->get(AMDGPU::COPY));
1142 UseMI->getOperand(1).setReg(OpToFold.getReg());
1143 UseMI->getOperand(1).setSubReg(OpToFold.getSubReg());
1144 UseMI->getOperand(1).setIsKill(false);
1145 UseMI->removeOperand(2); // Remove exec read (or src1 for readlane)
1150 const MCInstrDesc &UseDesc = UseMI->getDesc();
1176 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &OpToFold);
1205 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &ImmOp);
1209 tryAddToFoldList(FoldList, UseMI, UseOpIdx, &OpToFold);
1489 for (auto &UseMI :
1499 if (tryConstantFoldOp(&UseMI)) {
1500 LLVM_DEBUG(dbgs() << "Constant folded " << UseMI);
1510 MachineInstr *UseMI = U->getParent();
1511 foldOperand(OpToFold, UseMI, UseMI->getOperandNo(U), FoldList,
1529 execMayBeModifiedBeforeUse(*MRI, Reg, *DefMI, *Fold.UseMI))
1543 << *Fold.UseMI);
1546 TII->commuteInstruction(*Fold.UseMI, false);
1924 MachineInstr *UseMI = Op->getParent();
1925 while (UseMI->isCopy() && !Op->getSubReg()) {
1926 Reg = UseMI->getOperand(0).getReg();
1930 UseMI = Op->getParent();
1936 unsigned OpIdx = Op - &UseMI->getOperand(0);
1937 const MCInstrDesc &InstDesc = UseMI->getDesc();
1961 if (!TII->isOperandLegal(*UseMI, OpIdx, Op)) {
1967 LLVM_DEBUG(dbgs() << "Folded " << *RS << " into " << *UseMI);